สรุปการบรรยายเรื่อง Image-to-Image Translation and Applications (LINE DEVELOPER DAY 2020)

Krirk Arunoprayote
6 min readDec 2, 2020

จากงาน LINE DEVELOPER DAY 2020 conference ที่เพิ่งผ่านพ้นไป ผมเองก็ได้เข้าฟังบรรยายในหลาย session และเห็นว่า session นี้ ผู้บรรยายได้สรุปเนื้อหาไว้เป็นหมวดหมู่ และอธิบายอย่างเข้าใจง่าย น่าจะมีประโยชน์สำหรับคนที่กำลังเริ่มต้น จึงนำมาแบ่งปันความรู้กันครับ

Image-to-Image Translation คืออะไร?

ก็คือ การแปลงภาพจากกลุ่มความสนใจ (domain) อย่างหนึ่ง ให้เป็นภาพใหม่ๆ ซึ่งอยู่ในอีกกลุ่มความสนใจหนึ่ง ตัวอย่างเช่น การแปลงภาพจาก แมว ไปเป็นหมา หรือการแปลงภาพจาก ผู้ชาย ไปเป็นผู้หญิง เป็นต้น

ตัวอย่าง applications การทำ Image-to-Image Translation

ซึ่งที่ผ่านมาก็มีผู้วิจัยและพัฒนา Image translation model ออกมามากมาย เรามาลองดูกันไปทีละตัวด้วยกันครับ

pix2pix

เป็นโมเดลตัวแรกที่ออกมา โดยมีพื้นฐานมาจาก GAN (Generative adversarial network) ซึ่งจะมีการ learn 2 modules ไปพร้อมๆ กัน โดย module แรก คือ discriminator (D) จะพยายามจำแนกภาพว่าภาพนี้เป็นของจริงหรือของปลอม และอีก module หนึ่ง คือ generator (G) จะพยายามสังเคราะห์ภาพออกมาให้มีการกระจายตัวของข้อมูลใกล้เคียงกับภาพจริงให้ได้มากที่สุด พูดง่ายๆ ก็คือ พยายามหลอก discriminator ให้ได้

อาจมองง่ายๆ ว่า discriminator เป็นตำรวจจับแบงก์ปลอม ส่วน generator เป็นโจรที่พยายามจะผลิตแบงก์ปลอมให้สมจริงที่สุดมาหลอกตำรวจ จนตำรวจเชื่อว่าเป็นของจริง เราก็จะได้ generator ที่เก่ง ได้ภาพออกมาสมจริงมากๆ นั่นเอง

pix2pix model

จากภาพก็เห็นว่า D พยายามจะจำแนกว่า Ground truth y กับ Input X คู่นี้ น่าจะเป็นภาพจริงหรือไม่ ส่วน G ก็พยายามสังเคราะห์ภาพจาก Input X ให้ได้ออกมาเป็น Output G(x) แล้วนำไปให้ D จำแนกดูว่าน่าจะเป็นภาพจริงหรือไม่ ถ้า G learn ได้ดี ก็จะหลอก D สำเร็จ

ตัวอย่างข้างล่าง เป็นการป้อน Input X เป็น edge หรือเส้นขอบของวัตถุชนิดต่างๆ ซึ่ง เมื่อ Generator ได้ learn จนเก่งแล้ว มันก็จะสามารถสังเคราะห์ภาพวัตถุต่างๆ ออกมาได้สมจริงมากๆ ราวกับภาพถ่าย

pix2pix application

pix2pixHD

ก็เป็นตัวที่พัฒนาต่อจาก pix2pix โดยมีการใช้ residual blocks มาต่อข้างหน้าและข้างหลังตัว Generator ก็เป็นการช่วยให้ network เก็บข้อมูล(รายละเอียด)ของภาพมาได้มากขึ้นกว่าเดิมโดยไม่มีปัญหา exploding/vanishing gradients ทำให้ภาพ output ที่ออกมามีความคมชัดมากขึ้น

pix2pixHD architecture

ตัวอย่างนี้ network จะรับ input เป็น high-resolution Label map (ที่เห็นเป็นสีต่างๆ) แล้วสังเคราะห์ภาพออกมาได้อย่างคมชัดสมจริง และก็สามารถเลือก style ของ แต่ละ label map ได้ด้วย เช่น เปลี่ยนรถเป็นสีต่างๆ หรือสามารถเปลี่ยนพื้นผิวถนนได้

pix2pix HD application

SPADE

output ของโมเดลนี้ มีความคล้ายคลึงกับตัวอย่างข้างบนคือ สามารถเปลี่ยน style ของแต่ละ image map ได้ ทำให้สามารถสังเคราะห์ output ออกมาได้หลากหลายรูปแบบ ดังตัวอย่าง

SPADE examples

แต่ SPADE มี architecture ที่ต่างออกไป ก่อนอื่นมาดูตัว module SPADE กัน โดยในโมดูลนี้ จะมีการใช้ convolution operation สกัด γ (gamma) และ β (beta) ออกมาจาก image map ให้มีขนาดเท่ากับ intermediate convolution feature เพื่อนำไปคูณและบวกกัน element-wised ตามสมการ

จากนั้นนำ module SPADE มาต่อกับ ReLU และ 3x3 Conv สองครั้ง ก็จะได้เป็น SPADE Residual block แล้วนำมาต่อกันเป็นโครงสร้างของ network ดังภาพ

สิ่งที่ต่างจาก pix2pixHD ก็คือ ตัว SPADE ไม่ได้เอา image map ไปวางไว้หน้า Generator แต่ image map นั้นจะถูกนำไปใส่ใน SPADE ResBlk เพื่อทำหน้าที่เป็น generator แล้ว translate output ออกมา

SPADE appication

ตัวอย่างข้างบน : user สามารถวาด image map แล้ว SPADE จะสังเคราะห์ภาพออกมา ตามสีที่เราใช้ (ตามStyle ที่เลือก)

Unpaired image-to-image Translation

ตัว model ข้างต้น เช่น pix2pix จะต้องมีชุดข้อมูลภาพเป็นคู่ๆ ก่อนที่โมเดลจะเรียนรู้และสามารถสังเคราะห์ภาพใหม่ออกมาได้ แต่ปัญหาคือ ถ้าเราต้องการสังเคราะห์ภาพที่หาคู่ได้ยาก เช่น ถ้าเราอยากสังเคราะห์ภาพหมาออกมาจาก input ภาพแมว เราก็ต้องหารูปหมามาคู่กับแมวแต่ละตัวให้ได้ ซึ่งก็เป็นงานยากมากหรืออาจเป็นไปไม่ได้เลยก็ได้

ปัญหาของ unpaired data

ก็เลยมีการคิดค้น Unpaired image-to-image Translation model ขึ้นมาหลายตัวด้วยกัน ตัวที่จะพูดถึงคือ CycleGAN

CycleGAN

CycleGAN ใช้ภาพม้า เป็น Input x ป้อนเข้า Generator AB เพื่อสังเคราะห์ภาพม้าลายขึ้นมา และก็นำภาพม้าลายที่สังเคราะห์ขึ้นนี้ป้อนเข้า Generator BA เพื่อพยายามสังเคราะห์กลับมาเป็นภาพม้าให้คล้ายกับภาพม้าดั้งเดิมให้ได้ด้วย ทั้งนี้ เพื่อควบคุมให้ภาพม้าลายที่สังเคราะห์ขึ้นมาได้นั้น ยังคงท่าทางของม้าตัวเดิมไว้ แต่เปลี่ยนแค่ผิวหนังของม้าให้เป็นม้าลายเท่านั้น และฉากหลังก็ยังคงเดิมได้ด้วย ดังจะเห็นได้จากภาพตัวอย่าง

CycleGAN example

เราสามารถเปลี่ยนภาพจากกลางวันเป็นกลางคืน หรือจากหิมะตกเป็นฤดูร้อนก็ได้

CycleGAN example

หรือเปลี่ยน style ไปมาระหว่างภาพถ่ายกับภาพวาดก็ได้

CycleGAN example

อย่างไรก็ตาม โมเดลที่กล่าวมาก็มีข้อจำกัด เพราะเราจะได้ output แค่เพียงตัวเดียว แต่ในบางสถานการณ์ที่ต้องการ output หลายๆ แบบล่ะ เราจะทำอย่างไร?

ก็เลยมีการพัฒนา Multi-modal image-to-image translation model ขึ้น

Multi-modal image-to-image translation

Multi-modal image-to-image translation model

ดูที่ภาพซ้าย จะเห็นว่า Multimodal mapping เป็นการแก้ปัญหาที่กล่าวไว้ คือ จาก input ภาพเสือดาวภาพเดียว สามารถสังเคราะห์เป็นภาพแมวได้หลายแบบ

ภาพขวา เป็นการอธิบายโครงสร้างของ model โดยนอกจากจะมี input เป็น ภาพเสือดาวแล้ว ยังใส่ latent vector z เข้าไปเป็น input ด้วย โดย latent vector z นี้อาจมองว่าเป็น random noise ที่ sampling มาจาก gaussian distribution ซึ่งตัว z นี้เองที่ทำให้ถึงแม้ว่าจะมี input แค่ภาพเดียว แต่ก็สามารถ สังเคราะห์ output ออกมาได้หลายๆ แบบ เพราะมีการใส่ latent vector หลายๆ แบบเข้าไปด้วยนั่นเอง

นอกจากนี้ model ยังมีการใช้ Encoder (E) เพื่อให้แน่ใจว่าตัวโมเดลจะไม่ ignore input vector z ด้วย

Multi-modal image-to-image translation examples

ภาพตัวอย่างเป็นการแปลงภาพจาก siberian husky ให้เป็นภาพแมวหลายๆ แบบ

Multi-modal image-to-image translation examples

เห็นได้ว่า จาก input เดียว เช่น เส้น edge ของกระเป๋าแบบเดียว ก็สามารถสังเคราะห์ภาพกระเป๋าได้หลายแบบเลย

เราอาจเพิ่ม domain (กลุ่ม) ของ output ให้มีหลายๆ domain ได้ด้วย โดยการใช้ Multi-domain image-to-image translation model

Multi-domain image-to-image translation model

ในโมเดลที่กล่าวข้างต้น ก็สามารถนำมาทำ multi-domain image-to-image translation model ได้ ดังเห็นได้จากภาพ a) Cross-domain models

แต่การทำ network แบบนี้ จะมีปัญหา learning inefficiency เพราะถ้าอยากเพิ่ม domain output ก็ต้องเพิ่ม generator หลายตัว

ทีมของผู้บรรยายจึงได้เสนอโครงสร้างตามภาพ b) StarGAN ซึ่งเป็นการใช้ Generator ตัวเดียว แต่สามารถ learn ได้หลาย domain

ดูโครงสร้าง network จากภาพขวา จะเห็นว่า StarGAN ไม่เพียงรับภาพเข้ามาเป็น Input แต่ยังรับข้อมูลของ domain (Target label) เข้าไปด้วย ถ้าจำนวน domain เพิ่ม ก็เพียงแค่เพิ่ม dimension ของ label เท่านั้นเอง ทำให้เราใช้ Generator ตัวเดียว learn ได้หลายๆ domain เลย

จากตัวอย่าง จะเห็นได้ว่า จาก input เพียง 1 ภาพ StarGAN สามารถสังเคราะห์ภาพใหม่ออกมาได้ในหลาย domain ไม่ว่าจะเป็นสีผม เพศ อายุ สีผิว หรือการแสดงสีหน้า ที่ต่างจาก domain เดิมได้

โมเดลที่กล่าวมาข้างต้น ยกเว้น StarGAN จะมีปัญหา scalability เพราะถ้าต้องการผลลัพธ์หลายๆ domain จะต้องมีการ train โมเดลหลายๆ ตัว และตัว StarGAN เองก็ยังมีปัญหา diversity คือ สามารถสังเคราะห์ output ออกมาได้แค่อย่างเดียวสำหรับในแต่ละ domain เช่น ถ้าเลือก domain สีหน้าดีใจ ก็สามารถทำ output สีหน้าดีใจออกได้เพียงรูปเดียวเท่านั้น

ก็เลยนำไปสู่การพัฒนา StarGANv2 ซึ่งเป็น Multi-domain & multi-modal image-to-image translation model

Multi-domain & multi-modal image-to-image translation : StarGANv2

StarGANv2 ช่วยแก้ปัญหาที่กล่าวมาได้ทั้งหมด หากลองดูตัวอย่างข้างล่าง ก็เห็นได้ว่า StarGANv2 สามารถสังเคราะห์ output ในแต่ละ domain ออกมาได้หลายแบบแล้ว เช่น รูปแถวแรก จาก input รูปภาพผู้หญิง ก็สามารถสังเคราะห์เป็นภาพผู้หญิงออกมาได้หลายแบบ และสังเคราะห์เป็นภาพผู้ชายออกมาได้หลายแบบเช่นกัน

ลองมาดูโครงสร้างของ StarGANv2 กัน

ตัว StarGANv2 มีการใช้ mapping network เพื่อสกัด style codes ในแต่ละ domain ออกมาจาก latent code จากนั้น generator ก็จะ learn เพื่อสร้าง output โดยการ reflect style code ลงบน input image

เมื่อ generator สร้าง output ออกมาแล้ว ก็จะส่งไปให้ encoder learn เพื่อ reconstruct style code ออกมาด้วย แล้วสุดท้ายตัว discriminator ในแต่ละ branch ก็รับผิดชอบในการจำแนก ภาพในแต่ละ domain ว่าเป็นของจริงหรือของปลอม

จากตัวอย่างจะเห็นว่า StarGANv2 สามารถ translate จาก ภาพ input ให้เป็นภาพใหม่ โดย reflect style จาก reference เข้าไปที่ input

ตัวอย่างการนำ StarGANv2 ไปใช้กับ B612 ซึ่งได้รับผลตอบรับในจีนอย่างดี

โมเดลตัวสุดท้ายที่จะแนะนำคือ COCO-FUNIT

COCO-FUNIT

โมเดลนี้จะต่างจากตัว baseline FUNIT ตรงที่ COCO-FUNIT จะรับ input ทั้ง content และ style image เข้าไปที่ style encoder (COCO)

จากภาพตัวอย่างจะเห็นว่า COCO-FUNIT สามารถสร้าง output ที่ยังคง รูปร่างหรือ pose จาก content images ไว้ แต่เปลี่ยนลักษณะสีขนให้เหมือน style images ได้สำเร็จ ต่างจาก FUNIT ที่มีการผสมกันระหว่าง style กับ content ในจุดที่วงกลมสีแดงเอาไว้

ยังสามารถนำ COCO-FUNIT ไปทำ Video translation ได้ด้วย ดังตัวอย่างจะเห็นภาพเต็มตัวของสัตว์ที่คงท่าทางไว้ตาม content video แต่เปลี่ยนลักษณะขนไปตาม style images ได้

ทำกับสัตว์ประเภทอื่น อย่างนก ก็ได้เช่นกัน

Application อื่นๆ

ก็ยังมี application อื่นๆ เช่น vid2vid ที่สามารถนำ pose information ที่สกัดมาจาก dancing video มารวมกับภาพของบุคคลอื่น มาสังเคราะห์เป็นวิดีโอการเต้นของบุคคลนั้นได้ แม้ว่าจริงๆ แล้ว คนๆ นั้นจะเต้นไม่เป็นเลยก็ตาม

และยังมี Deep Face Drawing ที่สามารถ translate ภาพสเกตซ์ไปภาพใบหน้าคนที่สมจริงได้ แม้เราจะวาดรูปไม่เก่ง ก็ยังสามารถสร้างภาพใบหน้าที่สมจริงออกมาได้

ก็เป็นจุดเริ่มต้นที่ดีสำหรับผู้สนใจศึกษา GANs ครับ ถ้าอยากเข้าใจแบบลึกซึ้งก็ตามอ่าน papers และลอง implement ตาม ก็จะได้ผลดีที่สุดครับ

Krirk Arunoprayote
Data scientist @ Botnoi

--

--

Krirk Arunoprayote

AI enthusiast, currently working as Data Scientist at Botnoi Consulting Co., Ltd.