เดือนที่แล้ว NVIDIA ตีพิมพ์บทความ และเปิดซอร์ส StyleGAN ซึ่งสามารถสร้างรูปภาพหน้าคนขึ้นมาได้อย่างเหมือนจริงมากครับ
โดยทีมนี้ใช้ unsupervised learning เรียนรู้คุณลักษณะต่างๆ จากข้อมูล แล้วแต่เพิ่มสองอย่างเข้าไปใน generator network หลังจาก convolution layer แต่ละชั้น
- ใส่ noise เข้าไป ทำให้รูปที่เกิดขึ้นมีความหลากหลาย
- transfer style จากภาพที่ต้องการ ด้วย adaptive instance normalization (AdaIN) layer
รวมกันก็เลยได้เป็น style-based generator
ภาพตัวอย่างในบทความดูเหมือนจริงมากๆ – วันนี้เราจะมาลองกันดูครับ
เตรียม environment บน Azure
README ของ StyleGAN บอกว่าต้องใช้ NVIDIA GPU ที่มีแรม 11 GB ขึ้นไป ก็ต้องเป็น 1080Ti/2080Ti หรือสูงกว่า ดังนั้นเรามาใช้ Cloud GPU กันดีกว่า เพราะไม่มีตังค์ซื้อครับ
ความต้องการอื่นๆ ได้แก่
- Both Linux and Windows are supported, but we strongly recommend Linux for performance and compatibility reasons.
- 64-bit Python 3.6 installation.
- numpy 1.14.3 or newer.
- TensorFlow 1.10.0 or newer with GPU support.
- NVIDIA driver 391.35 or newer, CUDA toolkit 9.0 or newer, cuDNN 7.3.1 or newer.
จากทั้งหมดนี้ วิธีที่ผมคิดว่าสะดวกมากคือใช้ Data Science Virtual Machine (DSVM) เพราะมี python และ library พื้นฐานที่เกี่ยวข้องให้เราเรียบร้อยแล้ว
ขั้นแรกก็ต้องมี Azure account ก่อนนะครับ ซึ่งวันนี้เราจะใช้ GPU ด้วย เลยต้องใช้ account แบบ Pay-As-You-Go เพราะแบบ free trial จะไม่ให้ใช้ GPU ☹
จาก Azure portal ก็กด +Create Resource แล้วเลือก Data Science Virtual Machine for Linux (Ubuntu) และกด Create
โดยเราจะเลือก Instance Type NC6 ซึ่งเป็นตัวที่ถูกสุดที่มี GPU ครับ (เป็น NVIDIA Tesla K80 – RAM 24GB) ราคาตอนนี้ชั่วโมงละ 0.9 USD
ใช้เวลาซัก 2 นาทีก็สร้างเสร็จ
เวลาจะใช้งาน ก็กดที่ชื่อ VM (ผมตั้งเป็น dsvm-ubuntu-gpu) ซึ่งจะพบว่าสถานะเป็น Running อยู่แล้ว เมื่อเรากด Connect ก็จะเห็น IP address ซึ่ง DSVM ลง Jupyter Hub และ Jupyter Lab ไว้แล้ว เราสามารถใช้งานได้เลยโดยไปที่
1
|
https://<IP ADDRESS>:8000/
|
แต่ตอนนี้เราจะยังไม่ไปที่ Jupyter ครับ เพราะ environment เรายังไม่เสร็จ พอลองเช็ค version ของ package ต่างๆ ที่ StyleGAN ต้องการ กับที่ DSVM ลงมาให้ พบว่าเกือบทุกอย่างมีเวอร์ชั่นใหม่ตามต้องการ ยกเว้น cuDNN=7.1.2 ซึ่งเราต้องการ 7.3.1 ขึ้นไป ดังนั้นเราจะสร้าง virtual environment ใหม่และ clone StyleGAN repo ลงมาที่ VM ของเรา
โดยให้ SSH เข้าไปที่ VM ด้วย IP address และ user/password ที่เราตั้งไว้ และใช้คำสั่งตามนี้ทีละบรรทัด
1
2
3
4
5
6
7
|
conda create --name stylegan python=3.6 tensorflow-gpu pillow requests
conda activate stylegan
cd notebooks
git clone https://github.com/NVlabs/stylegan.git
|
เท่านี้ก็เรียบร้อย ลองรันดูได้โดยสั่ง
1
2
3
|
cd stylegan
python pretrained_example.py
|
ก็จะได้ไฟล์ชื่อ example.png ใน folder results เป็นรูปนายคนนี้ ซึ่งไม่ใช่ภาพคนจริงๆ แต่สร้างมาจาก generative network
ทีนี้พอเรารันโค้ดตัวอย่างได้แล้ว เรามาเล่นต่อบน jupyter ดีกว่าจะได้แก้ไปรันไปง่ายๆ
ก่อนที่จะไปเปิด Jupyter เราต้องลงทะเบียน virtual environment ใหม่ซะก่อน จะได้เลือกใช้เป็น kernel ได้ โดยใช้คำสั่ง (ต้องสั่งใน virtual environment)
1
2
3
|
conda install ipykernel
python -m ipykernel install --user --name stylegan --display-name "Python (StyleGAN)"
|
เรามาเริ่มด้วยการลองสร้างหน้าคน โดยปรับ parameter ต่างๆ เองได้ เช่นในตัวอย่างด้านล่างนี้ สามารถลองเปลี่ยน
- seed ของ RandomState() – เปลี่ยนตัวเลขอะไรก็ได้ ก็จะได้ภาพ “คน” ใหม่
- truncation_psi – ปรับความเข้มของขั้น style transfer
- randomize_noise – ปิดหรือเปิด
ในเปเปอร์มีตัวอย่างที่น่าสนใจอีกหลายอย่างครับ และผลลัพธ์ทั้งหมดเราสามารถลองรันได้จริงด้วยคำสั่ง
1
|
python generate_figures.py
|
อันที่ผมว่าน่าสนใจมากคือตัวอย่าง style mixing ที่ทำเป็น matrix
ที่เหลือก็ลองเล่นกันดูนะครับ