ความทรงจำดี ๆ แม้จะเป็นสิ่งล้ำค่าที่เราอยากจะกรอซ้ำกลับไปดูใหม่ให้ชื่นใจบ่อย ๆ แต่ในความเป็นจริงแล้วเหตุการณ์ที่น่าจดจำแต่ละอย่างล้วนเกิดขึ้นได้เพียงแค่ครั้งเดียว การเก็บภาพถ่ายของแต่ละเหตุการณ์ไว้จึงเป็นวิธีที่จะพาเราย้อนเวลากลับไปหาความทรงจำนั้นอีกครั้ง
และเมื่อเดือนธันวาคมปีที่ผ่านมา Google Photos ได้เปิดตัวเทคโนโลยีใหม่ล่าสุด ช่วยคืนชีวิตให้เหตุการณ์ในภาพถ่ายของเราอีกครั้งด้วยฟีเจอร์ Cinematic photos ที่จะช่วยทำให้พื้นหลังของภาพเคลื่อนไหวได้ด้วยการใส่เอฟเฟ็กต์สามมิติ เปิดโอกาสให้เราได้ดื่มดำกับช่วงเวลาดี ๆ ผ่านภาพถ่ายเหล่านั้นในแบบที่สมจริงกว่าเดิม
ถึงแม้ว่าภาพถ่ายของเราจะมีลักษณะเป็นสองมิติ แต่ Google Photos ก็จะเลือกภาพที่มีคุณสมบัติสามารถปรับพื้นหลังให้เป็นสามมิติได้และปรับให้เราเองโดยอัตโนมัติ เราไม่ต้องทำอะไรเลยแค่เพียงอัปเดตแอปพลิชันให้เป็นเวอร์ชันล่าสุดรอไว้ก็พอ
หลายคนคงสงสัยว่า Google Photos ใช้เทคโนโลยีอะไรในการเปลี่ยนภาพสองมิติให้เคลื่อนไหวแบบสามมิติได้ วันนี้ Sertis เอาข้อมูลเทคโนโลยีเบื้องหลังฟีเจอร์ Cinematic photos สุดล้ำมาฝากทุกคนแล้ว ไปศึกษากันได้เลย เผื่อจะได้ไอเดียดี ๆ ไปพัฒนาเทคโนโลยีใหม่ ๆ ที่ว้าวกว่าเดิม
1. เริ่มเปลี่ยน 2D ให้เป็น 3D ด้วย Depth estimation
โดยปกติแล้ว เราสามารถถ่ายภาพสามมิติได้จากการถ่ายภาพด้วยเทคโนโลยี Multi-view stereo แต่ฟีเจอร์ Cinematic ของ Google Photos นี้เป็นการเปลี่ยนภาพที่ถ่ายมาแล้วจากกล้องธรรมดาให้กลายเป็นภาพสามมิติ จึงต้องใช้ Depth map หรือภาพที่บอกข้อมูลความลึกของภาพ ซึ่งจะช่วยในการเพิ่มความเป็นสามมิติให้ภาพถ่ายของเรา
ทีมพัฒนาได้ใช้ Convolutional neural network ที่ทำงานร่วมกับโครงสร้างแบบ Encoder-decoder architecture เพื่อจำลองและคาดคะเน Depth map จากภาพของผู้ใช้งาน ทำให้แม้จะเป็นภาพ RBG ธรรมดาภาพเดียวก็สามารถใช้ประมวลผลเป็นสามมิติได้
Neural network จะคาดคะเนความลึกและสร้าง Depth map โดยเลียนแบบการมองของมนุษย์โดยใช้ตาข้างเดียว (Monocular cue) ซึ่งแม้จะเห็นภาพเป็นสองมิติ แต่ยังคาดคะเนความลึกของภาพด้วยการดูขนาดของวัตถุในภาพ แนวเส้น และการสังเกตความเบลอของภาพ
ทีมพัฒนาได้ออกแบบชุดข้อมูลในการเทรนโมเดลขึ้นมาใหม่ โดยใช้ข้อมูลรูปภาพที่มี Ground-truth depth จาก Multi-view stereo ถึงแม้การรวมชุดข้อมูลหลายชุดเข้าด้วยกันนั้นช่วยให้โมเดลได้เรียนรู้จากภาพพื้นหลังหลายแบบที่มาจากกล้องหลาย ๆ รุ่น ซึ่งช่วยให้โมเดลคาดคะเนความลึกของภาพได้ดีขึ้น แต่ปัญหาที่เกิดคื เราไม่สามารถระบุค่า Scaling factor และ Shif จึงอาจมีค่าที่แตกต่างกันโดยทีเราไม่รู้
อย่างไรก็ตามการสร้างภาพ Cinematic นั้นต้องการค่าความลึกแบบคร่าว ๆ เท่านั้น ไม่จำเป็นต้องตรงเป๊ะ ทำให้ทีมสามารถรวมชุดข้อมูลเข้าด้วยกันโดยการใช้ฟังก์ชันแบบ Scale-and-shift-invariant loss ก่อนในขณะที่เทรนโมเดล แล้วจึงค่อยทำการปรับบรรทัดฐานข้อมูล หรือ Normalise ในขั้นตอนที่โมเดลทำการคาดคะเนข้อมูล
ปัจจัยสำคัญในการทำภาพ Cinematic นั้นคือ การแยกตัวคนออกจากพื้นหลังซึ่งเป็นส่วนที่จะเคลื่อนไหว Depth map บริเวณกรอบรูปร่างของคนจึงต้องแม่นยำมาก หากผิดพลาดอาจทำให้วัตถุในภาพที่ประมวลผลออกมาในตอนท้ายเกิดความผิดพลาด หรือที่เรียกว่า Artifact ได้
ทีมพัฒนาจึงใช้ Median filtering กรองข้อมูล เพื่อเพิ่มความแม่นยำ และใช้ Segmentation mask คาดคะเนสัดส่วนตัวคนในภาพแต่ละภาพด้วยการใช้โมเดลแบ่งสัดส่วนจาก DeepLap ถ้า Depth map คาดคะเนส่วนของตัวคนผิด การแบ่งสัดส่วนนี้จะช่วยดันพิกเซลส่วนที่คำนวณพลาดไปออกมาจากพื้นหลัง ทำให้รูปคนถูกแยกออกจากพื้นหลังได้อย่างสมบูรณ์
2. สร้าง Mesh จาก Depth image
ขั้นตอนแรกในการสร้างภาพจำลองสามมิตินั้นคือการสร้าง Mesh (วัตถุสามมิติ) ด้วยการขึ้นรูปภาพ RGB หรือภาพถ่ายของเราบนพื้นผิวของภาพ Depth map แต่กระบวนการนี้จะทำให้จุดแต่ละจุดบน Mesh นั้นมีความลึกที่แตกต่างกันมาก ซึ่งความแตกต่างนี้อาจเห็นไม่ชัดเท่าไหร่นักหากมองจากมุมตรง แต่เมื่อเราขยับภาพให้เคลื่อนไหวในแบบของการเคลื่อนกล้องเสมือนจริง อาจจะเห็นความลึกที่ไม่สม่ำเสมอ
ทำให้เวลาแปลงไฟล์ออกมาในขั้นสุดท้ายแล้วจะให้ความรู้สึกเหมือนว่าองค์ประกอบในภาพถูกดึงยืดออกไป ดังนั้นความท้าทายหลักในการสร้างภาพจำลองแบบเคลื่อนไหวได้ก็คือการหามุมกล้องที่เห็นความ Parallax (ภาพพื้นหลังกับวัตถุในภาพมีตำแหน่งเหลื่อมกัน) ในขณะที่องค์ประกอบในภาพถูกยืดน้อยที่สุด
3. วางกรอบภาพโดยเน้นส่วนสำคัญ (Salient region)
ขั้นตอนต่อมาคือการวางกรอบภาพ โดยทั่วไปแล้วภาพพื้นหลังในภาพสามมิติที่จำลองขึ้นจะไม่พอดีกับกรอบสี่เหลี่ยมผืนผ้าแนวตั้งที่กำหนดไว้ โดยอาจมีความกว้างหรือความยาวมากกว่า ทำให้ทีมนักพัฒนาต้องหาวิธีปรับกรอบของภาพที่ได้ให้มีอัตราส่วนที่เหมาะสม ในขณะที่ยังคงรักษาส่วนสำคัญของภาพไว้ได้ ทีมนักพัฒนาได้เลือกใช้ Deep neural network ที่คาดการณ์ค่า Saliency หรือค่าความเด่นของภาพในแต่ละพิกเซลของภาพเต็มทั้งภาพ
เมื่อจัดเฟรมกล้องเสมือนจริงในแบบสามมิติ โมเดลจะระบุบริเวณที่เป็นส่วนสำคัญของภาพ หรือ Salient region ให้ได้มากที่สุด และในขณะเดียวกันก็จะตรวจเช็คว่า Mesh ที่ประมวลผลออกมานั้นแสดงผลครบในทุกเฟรมของวิดิโอ แต่ก็ทำให้มีบางครั้งที่ตัวโมเดลต้องลดขอบเขตของการมองเห็นของกล้อง (Field of view) ลงเช่นกัน
4. เลือกมุมกล้องที่ตอบโจทย์เพื่อลด Artifact
ในการสร้างภาพสามมิติขึ้นมาใหม่จะค่อนข้างทำได้อย่างมีอิสระมาก สร้างให้ขยับไปในทิศทางใดก็ได้ ทางทีมพัฒนาได้แรงบันดาลใจในเรื่องรูปแบบของ Cinematic มาจากภาพเคลื่อนไหวที่ได้จากอุปกรณ์ Video camera rig ซึ่งเป็นเหมือนกล้องวิดีโอที่ยึดโยงอุปกรณ์หลายตัวเข้าหากัน ทำให้ภาพเคลื่อนไหวที่ได้มีความนิ่ง และเลือกจุดหมุนที่เหมาะสมที่สุดเพื่อให้การขยับภาพพื้นหลังทำได้เสมือนจริง และช่วยดึงดูดสายตาคนให้โฟกัสที่คนหรือวัตถุในภาพ
ความท้าทายหลักของขั้นตอนนี้คือการเลือกมุมกล้องที่เหมาะสมกับแต่ละภาพ ภาพของผู้ใช้มีความหลากหลาย และมีสเปกตรัมที่กว้าง ทำให้การจำลองภาพสามมิติก็จะแตกต่างกัน และไม่สามารถใช้วิถีกล้องแบบเดียวสำหรับทุกภาพได้ นอกจากนี้ยังมีปัจจัยเรื่อง Artifact ในรูปภาพที่เกิดจากขั้นตอนการสร้าง Mesh ซึ่งการเลือกมุมกล้องที่ตอบโจทย์จะช่วยแก้ปัญหาเรื่อง Artifact ได้
ทีมพัฒนาจึงใช้วิธีกำหนดฟังก์ชันแบบ Loss function ที่จะเป็นตัวคาดการณ์ว่าในขั้นสุดท้ายนั้น วัตถุในภาพจะถูกยืดหรือที่เรียกว่าเกิด Artifact ไปมากแค่ไหน ซึ่งวิธีนี้ช่วยให้เราปรับใช้พารามิเตอร์ที่เหมาะสมกับแต่ละรูปได้ โดยฟังก์ชันจะทำงานโดยโฟกัสไปที่พื้นที่ที่มีจำนวนพิกเซลของ Artifact อยู่หนาแน่นแทนที่จะใช้วิธีนับจำนวนพิกเซลทั้งหมดที่เป็น Artifact ตามแบบดั้งเดิม ทำให้นักพัฒนาจะสังเกตเห็น Artifact ได้ง่ายขึ้น
ทีมพัฒนาได้ใช้การ Segmentation mask แบบ Padding ในการแบ่งสัดส่วนรูปร่างคนในภาพออกจากกันเป็น 3 ส่วน ได้แก่ส่วนหัว ส่วนลำตัว และพื้นหลัง ซึ่ง Loss fuction ในสามส่วนนี้จะถูก Normalise ก่อนที่จะนำไปคำนวณ Final loss ให้ออกมาเป็นผลรวมน้ำหนักของ Loss ที่ผ่านการ Normalise แล้ว
ตามหลักการแล้ววิดีโอที่ได้ควรจะไม่มี Artifact แล้ว แต่ในทางปฏิบัติจริงนั้นเป็นไปได้ยาก การให้น้ำหนักในแต่ละส่วนแตกต่างกันจึงจะช่วยให้เอไอมีวิธีคิดที่เอนเอียงไปสู่การเลือกวิถีกล้องที่ไปเน้นตรวจจับ Artifact ที่พื้นหลัง แทนที่จะเน้นส่วนที่เป็นตัวคน ทำให้ภาพที่ออกมานั้นไม่ไปเน้นที่ความผิดพลาดในจุดตัวคนซึ่งเป็นจุดโฟกัสของภาพ
ด้วยความช่วยเหลือจากอัลกอริธึมของแมชชีนเลิร์นนิงที่ใช้ในการประเมินภาพต่าง ๆ ทำให้ทีมพัฒนาสามารถสร้างฟีเจอร์ Cinematic Photo ที่ประมวลผลภาพของผู้ใช้ที่มีความหลากหลายและแตกต่างกันมากในเรื่ององค์ประกอบภาพได้สำเร็จ เปิดโอกาสให้เราได้กรอซ้ำความทรงจำดี ๆ ของเราผ่านฟีเจอร์นี้อีกครั้ง
ใครไปลองเล่นกันแล้วเอามาอวดกันบ้างนะครับ
บทความโดย: ทีม Sertis
Originally published at https://www.sertiscorp.com/