BestPaperAward in CVPR2021 GIRAFFE: Representing Scenes As Compositional Generative Neural Feature Fields ไทย
Problems of 2D-based GAN for controllable image synthesis
หลังจากหัวข้อ transformer กระหน่ำวงการมาได้ปีกว่า CVPR2021 Best Paper ครั้งนี้ได้เปลี่ยนบรรยากาศกันบ้าง สลับกลับไปสู่หัวข้อแนว Generative Adversarial Network (GAN) อีกครั้ง
เปเปอร์ GIRAFFE นี้พูดถึงข้อจำกัดของ 2D-based GAN ในปัจจุบัน ว่าถึงมันจะสามารถสร้างภาพ 2D ได้สมจริงแบบ photo-realistic แค่ไหน แต่มันก็มักจะมีปัญหา entangled representations ทำให้ไม่สามารถคอนโทรลภาพที่สร้างขึ้นมาได้เป๊ะอย่างใจ
สมมติว่าในภาพ 2D ภาพหนึ่งมีลูกบอลอยู่ 2 ลูก ลูกนึงสีเหลือง อีกลูกสีน้ำเงิน
… คำถามคือถ้าเราอยากขยับเฉพาะลูกบอลสีน้ำเงินให้เปลี่ยนตำแหน่งไปมาในภาพ ตัว 2D-based GAN จะสามารถทำให้เราได้ไหม? มันจะสร้างภาพ 2D ภาพใหม่ ที่ทั้งฉากและบอลสีเหลืองยังคงเดิม มีแต่บอลสีน้ำเงินที่ขยับตามเราสั่งได้หรือเปล่า?
… คำตอบคือทำได้นะ แต่อาจไม่ค่อย smooth เช่น เราสั่งให้เฉพาะบอลสีน้ำเงินขยับไปวนรอบบอลสีเหลือง แต่บางทีบอลสีเหลืองก็อาจมีขยับตาม(ทั้งที่ไม่ได้สั่ง) บางทีฉากที่ควรจะนิ่งเหมือนเดิมก็เปลี่ยน หรือบางทีขยับไปขยับมาจากบอลกลม ๆ สีน้ำเงินกลายร่างเองกลายเป็นกล่องสี่เหลี่ยมซะงั้นก็มี
… เหล่านี้คือปัญหา entangled representations ที่ค่า attributes ต่าง ๆ ของ objects และ background มันพันกันอีรุงตุงนังอยู่ข้างใน 2D-based GAN เป็นเหตุให้พอเราขยับ attribute นึง ก็พลอยไปดึง attribute อื่นที่พันกันอยู่ให้โดนเปลี่ยนไปด้วยทั้งที่เราไม่ต้องการ
GIRAFFE: learn disentangled representations from data without explicit supervision
Disentangled representations: being able to control an attribute of interest, e.g. object shape, size, or pose, without changing other attributes.
เป้าหมายของ GIRAFFE ก็คล้ายกับ 2D-based GAN หลายตัวที่ไม่ได้ต้องการแค่ความสามารถ photo-realistic 2D image generation เพียงอย่างเดียว แต่ต้องการความสามารถในการควบคุมภาพที่สร้างให้ออกมาได้อย่างใจเราต้องการด้วย
ไอเดียของ GIRAFFE คือ “incorporate compositional 3D scene representation to the generator” หรือก็คือ เพิ่มข้อมูล 3D representations ของ object แต่ละตัวในฉากและของ background เอง ไปเป็นอินพุตให้กับส่วน generator ของ GAN … ในขณะที่ส่วนของ discriminator นั้นจะเหมือน ๆ เดิมกับ Original GAN คือมีหน้าที่แค่แยกแยะว่าภาพไหน real หรือ fake
ภาพแรกใต้โพสต์ (fig. 1) คือคอนเซปต์เฉพาะส่วนของ generator ในงานนี้ โดยขออธิบายแยกเป็น 3 ส่วนหลัก
1 ส่วนแรกตั้งแต่ซ้ายสุดของภาพจนถึงเครื่องหมายบวก คือ Scenes as compositional generative neural feature fields
…… (1.1) random ค่า shape และ appearance ของแต่ละ object (เช่น รถ 2 คัน) รวมถึงของตัว background ขึ้นมา ตรงนี้แสดงด้วย curve สีฟ้าในภาพ … สิ่งที่ได้จากขั้นนี้ถ้าเอามาวาดให้เห็นเป็นภาพ 3D ก็เสมือนกับว่าเราได้ทำการ random รถ 2 คันที่มีรูปร่างหน้าตาแบบ 3D แตกต่างกันขึ้นมา และก็เตรียมที่จะเอามันไปวางประกอบกันใน 3D background ซึ่งก็ถูก random ขึ้นมาด้วยเช่นกัน
…… (1.2) จากนั้นทำการ random ค่า 3D pose (curve สีส้ม) เพิ่มขึ้นมาอีกและเอาไปผนวกกับค่า shape and appearance ในข้อ 1.1 … หรือก็คือ ขั้นตอนนี้เป็นการจัดองค์ประกอบว่าจะให้ object แต่ละอันมี 3D pose แบบไหนในฉาก (อยู่ซ้ายหรือขวา อยู่ใกล้หรือไกล หันหน้าหมุนไปทางไหน ขนาดเล็กหรือใหญ่ ฯลฯ)
…… (1.3) เมื่อรวมผลเข้าด้วยกัน (เครื่องหมายบวกในภาพ) ก็จะเสมือนว่าเราได้ 3D scene ที่สมบูรณ์ขึ้นมา ภายในมีรถ 2 คันที่ทั้งรูปร่างหน้าตาและพิกัด 3D แตกต่างกัน … Note ว่าการรวมผลลัพธ์ในที่นี้ไม่ใช่แค่เอา vector มาทำ element-wise addition ธรรมดานะ เค้ามีสมการเฉพาะของเค้าในการทำ scene composition
2 เมื่อได้ implicit 3D scene representation (3D background ที่ประกอบร่างกับ 3D objects เรียบร้อย) มาจาก 1 แล้ว ถัดมาคือการสร้าง 2D feature image ขนาด 16x16 (ที่เห็นเป็นตารางหลากสีในภาพแรกใต้โพสต์) … โดยจะมีการ random ค่า camera pose ขึ้นมา (curve สีส้มใกล้ ๆ รูปกล้อง) หรือก็คือ random ตำแหน่งกล้องนั่นเองว่าจะให้กล้องมองเข้าไปใน 3D scene จากทิศไหน มุมอะไร ระยะห่างเท่าไหร่ … ตรงส่วนนี้จะเกี่ยวข้องกับสมการยุ่บยั่บอีกหน่อย แต่สรุปว่าผลลัพธ์ที่ได้คือ 2D feature map ขนาดคงที่ 16x16 ซึ่งเป็นผลของการมองเข้าไปใน 3D scene ที่ว่าผ่านมุมมองของ randomly-posed camera นั้น ๆ
…
3 ส่วนสุดท้ายคือ 2D neural rendering ที่จะเอา 16x16 2D feature image จาก 2 ไปผ่าน 2D CNN แบบที่เราคุ้นเคยกันดี เพื่อ transform และ upsample ให้กลายเป็นภาพ photo-realistic output ซึ่งเป็นภาพสี RGB ขนาดใหญ่ขึ้น (เช่น 64x64 หรือ 256x256) อันเป็นผลลัพธ์สุดท้ายของ generator นั่นเอง … ในเปเปอร์บอกว่าการแยกส่วน 2D neural rendering นี้ออกมามีประโยชน์คือ >> increased rendering speed and improved image quality
ณ ตอนเทรนโมเดล curve สีส้มและฟ้าในภาพแรกใต้โพสต์รูปด้านบนจะเป็นค่า random ขึ้นมาแยกกันทั้งหมด ส่วนในตอน test/inference ค่า curve เหล่านี้เราจะกำหนดค่าเองทำให้สามารถควบคุม shape and appearance ของแต่ละ object และ background รวมถึงควบคุม pose ของ objects ของ background และของ camera แยกจากกันได้โดยอิสระ หลีกเลี่ยงปรากฏการณ์ attribute พันกันอีรุงตุงนังอยู่ข้างในได้ เพราะมันมีคอนโทรลแยกกันคนละตัวชัดเจน
Results
ตัวอย่างของผลลัพธ์บางส่วนแสดงในภาพที่ 2 ใต้โพสต์ เช่น
… สามารถเลือกเปลี่ยนเฉพาะ object หนึ่งตัวที่สนใจได้ (ขยับ หมุน ฯลฯ) โดยไม่กระทบ object อื่นและไม่กระทบ background
… สามารถเลือกฟรีซ object ให้อยู่นิ่ง แต่เปลี่ยนเฉพาะฉากไปมา
… เพื่อความเข้าใจที่ชัดเจน แนะนำให้คลิกไปดูผลลัพธ์ในเว็บที่เป็นภาพวิดีโอ จะเห็นชัดกว่าว่าเทียบกับ 2D-based GAN แล้ว ผลที่ได้จากตัว GIRAFFE มันดู smooth กว่ายังไง
ใครสนใจรายละเอียดคลิกอ่านต่อได้ในลิงก์ข้างล่างนี้ เตือนก่อนว่าเปเปอร์นี้มีสมการและศัพท์ด้าน 3D graphic/vision ยุ่บยั่บดีมาก ใครไม่ใช่สายนี้น่าจะอ่านแล้วมึนตึ้บพอควร
อ้างอิงข้อมูลและรูปภาพจากลิงก์ต่อไปนี้ เรียบเรียงและเสริมข้อมูลโดยผู้เขียนโพสต์
… arXiv 29APR2021 (12pages): https://arxiv.org/abs/2011.12100
… Github (PyTorch): https://m-niemeyer.github.io/project.../giraffe/index.html