รวมงาน AI ระดับ “มหัศจรรย์”  

Page 2 / 2
  RSS
The Neural Engineer
(@neural-engineer)
EfficientNet
0-shot “Style-transfer” สำหรับ StyleGAN !! (Notebook ลองเล่นท้ายบทความ)
ThaiKeras and Kaggle - 27 มีค 2022
 
รูปที่1
 
.
 
วันนี้อยากชวนเพื่อนๆ มาเล่น StyleGAN-NADA ซึ่งเป็น "0-shot out-of-domain style-transfer" สำหรับ pretrained StyleGAN โดย StyleGAN นั้นเป็นสุดยอด generative model ที่สามารถสร้างสรรค์รูปที่สวยงามระดับภาพ่ถ่ายได้เป็นโมเดลแรกๆ
 
"0-shot out-of-domain style-transfer" คืออะไร ?
 
พูดภาษาบ้านๆ ก็คือ สมมติเรามี pretrained StyleGAN ที่เป็นโมเดลที่ถูกสอนให้วาดรูปต่างๆ ได้อย่างสวยงาม
(เช่น pretrained weights ที่วาดรูป ดารา หรือน้องหมา หรือน้องแมวอย่างใดอย่างนึงได้) เราจะสามารถปรับ style ของรูปที่วาดให้เป็น รูปสไตล์ปิกาสโซ หรือสไตล์การ์ตูนญี่ปุ่น หรือสไตล์การ์ตูนดิสนีย์ ดังแสดงในรูปที่2 ได้
“โดยที่ไม่ต้องให้ตัวอย่างแม้แต่ตัวอย่างเดียว” (ที่มาของคำว่า 0-shot)
 
รูปที่2
 
.
 
และการทำ style-transfer ไปเป็นภาพวาดหรือการ์ตูนต่างๆ ดังกล่าวนั้น
นั้นแตกต่างจากความสามารถที่ฝังใน pretrained weights ของ StyleGAN เดิมอย่างสิ้นเชิง จึงเป็นที่มาของความสามารถด้าน “out-of-domain” ครับ
 
(ขยายความ : ซึ่งแตกต่างจาก in-domain Style transfer เช่น การเปลี่ยนสไตล์ภาพถ่ายให้มีสีผิว
ทรงผม หันหน้าไปทางทิศที่กำหนด ซึ่งเป็นการเปลี่ยนสไตล์เหมือนกัน แต่ยังอยู่ในขอบเขตความสามารถของ
StyleGAN เดิม การเปลี่ยนสไตล์แบบนี้จึงเรียกว่า in-domain ครับ)
 
.
 
StyleGAN-NADA ทำ 0-shot out-of-domain transfer ได้อย่างไร?
 
ไอเดียคร่าวๆ อธิบายได้ตามรูปที่ 1 และรูปที่ 3 ครับ
 
รูปที่ 3.
 
.
 
Input ที่ NADA ต้องการนั้นคือ text 2 ข้อความเท่านั้น โดย text แรกคือ source text ที่อธิบายสไตล์เดิม
ที่ติดมากับ pretrained weights เช่น อาจใช้คำว่า ‘’photo” ก็ได้เพราะ StyleGAN จะวาดภาพออกมาในสไตล์ภาพถ่าย
 
Text ที่สองก็คือ destination text หรือ text ที่อธิบาย style ที่เราอยากเปลี่ยน เช่น “pixar” , “disney”, “mona lisa”
หรือ “sketch” เป็นต้น
 
แล้ว NADA เปลี่ยนสไตล์แบบ 0-shot จาก 2 texts นี้ได้อย่างไร ??
 
คำตอบก็คือใช้พลังของโมเดลมหัศจรรย์อย่าง OpenAI’s CLIP ซึ่งเป็นโมเดลที่สามารถเปลี่ยน text หรือ image ใดๆ ให้อยู่ในรูป vectors ได้ครับ
จากนั้นเราจะคำนวณ ‘’ทิศทาง” ที่จะเปลี่ยนสไตล์จากทิศทางของ texts ทั้งสองข้อความนั้นตามรูปที่่ 3 ครับ
 
จากรูปที่ 1 และ 3 เราจะเห็นว่าเมื่อได้ทิศทางที่ต้องการใน CLIP vector space แล้ว เราก็เพียงแค่ต้องให้ generated images นั้นเปลี่ยนไปในทิศทางเดียวกันใน CLIP vector space ด้วยนั่นเอง
 
เนื่องจาก CLIP นั้นเป็นโมเดลที่ถูกสอนมาให้รับ input ได้ทั้ง images และ texts ดังนั้น images ก็จะถูก CLIP เปลี่ยนเป็นเวกเตอร์แบบเดียวกับ text
 
ดังนั้น StyleGAN-NADA จะมี StyleGAN ทั้งหมด 2 โมเดลฝังอยู่ด้วยกัน แต่ตัวแรกจะถูก freeze weights ไว้ เพื่อให้สอดคล้องกับ source text ส่วนตัวที่สองจะเป็น StyleGAN ที่เราต้องการจะเปลี่ยนสไตล์ก็จะถูกปรับ เรียนรู้ weights จาก backpropagation
 
โดยเมื่อเราได้ image1 ที่วาดจาก Frozen StyleGAN และ image2 ที่ได้จาก Trainable StyleGAN เราก็จะนำ image CLIP vectors ของทั้งสองมาลบกันเพื่อให้ได้เวกเตอร์ทิศทาง (direction vector) ที่เราจะต้องเอามาเทียบกับเวกเตอร์ทิศทางที่ได้จาก Text vectors
 
การสอน StyleGAN-NADA จึงกำหนดจากทิศทางของ text direction vector และทิศของ image direction vector นั้นควรจะหันไปด้านเดียวกัน
ตามรูปที่ 1 และ 3 ครับ ซึ่งสามารถใช้ cosine loss เพื่อการนี้ได้ครับผม
.
 
เพื่อนๆ สามารถลองเล่น StyleGAN-NADA ได้ง่ายๆ ที่ notebook นี้ครับ
(ทีม ThaiKeras refactor โค้ดเดิมให้เป็น Pytorch Lightning ซึ่ง structure คล้ายกับ Keras subclassing มาก ทำให้โค้ดจัดเรียงเป็นระเบียบ อ่านง่ายขึ้นครับ)
 
 
 
ThaiKeras Lighting NADA Github:
 
.
-----
จริงๆ แล้ว StyleGAN ยังสามารถประยุกต์ทำอะไรได้อีกเยอะมากๆ เช่น Image-editing, Super Resolution,
เปลี่ยนภาพเก่าเป็นภาพใหม่ (time-machine) ซึ่งสามารถดู survey ปี 2022 ได้อย่างละเอียดจากทีม Tel Aviv ของอิสราเอล
ที่เป็นทีมที่ทำงานด้าน StyleGAN เยอะมากๆ ที่สุดทีมนึงของโลกครับ
 
This post was modified 2 months ago by The Neural Engineer
ตอบกลับอ้างอิง
Posted : 27/03/2022 4:30 pm
Page 2 / 2
Share:

Please Login or Register