top of page
  • Writer's pictureSertis

เรียนรู้แนวคิดการเปลี่ยนภาพ 2D เป็น Cinematic ของ Google Photos


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

และเมื่อเดือนธันวาคมปีที่ผ่านมา Google Photos ได้เปิดตัวเทคโนโลยีใหม่ล่าสุด ช่วยคืนชีวิตให้เหตุการณ์ในภาพถ่ายของเราอีกครั้งด้วยฟีเจอร์ Cinematic photos ที่จะช่วยทำให้พื้นหลังของภาพเคลื่อนไหวได้ด้วยการใส่เอฟเฟ็กต์สามมิติ เปิดโอกาสให้เราได้ดื่มดำกับช่วงเวลาดี ๆ ผ่านภาพถ่ายเหล่านั้นในแบบที่สมจริงกว่าเดิม

ถึงแม้ว่าภาพถ่ายของเราจะมีลักษณะเป็นสองมิติ แต่ Google Photos ก็จะเลือกภาพที่มีคุณสมบัติสามารถปรับพื้นหลังให้เป็นสามมิติได้และปรับให้เราเองโดยอัตโนมัติ เราไม่ต้องทำอะไรเลยแค่เพียงอัปเดตแอปพลิชันให้เป็นเวอร์ชันล่าสุดรอไว้ก็พอ

หลายคนคงสงสัยว่า Google Photos ใช้เทคโนโลยีอะไรในการเปลี่ยนภาพสองมิติให้เคลื่อนไหวแบบสามมิติได้ วันนี้ Sertis เอาข้อมูลเทคโนโลยีเบื้องหลังฟีเจอร์ Cinematic photos สุดล้ำมาฝากทุกคนแล้ว ไปศึกษากันได้เลย เผื่อจะได้ไอเดียดี ๆ ไปพัฒนาเทคโนโลยีใหม่ ๆ ที่ว้าวกว่าเดิม



  1. เริ่มเปลี่ยน 2D ให้เป็น 3D ด้วย Depth estimation

ถ้าหากเราทำภาพแบบ Cinematic ผ่านกล้องสมาร์ทโฟนโดยเป็นการเริ่มถ่ายใหม่ ไม่ใช่การนำภาพที่มีอยู่แล้วมาปรับ เราสามารถใช้เทคโนโลยีที่เรียกว่า Multi-view stereo ซึ่งเป็นการใช้ภาพหลาย ๆ ภาพ จากหลาย ๆ มุมมาสร้างเป็นภาพแบบ Cinematic ได้ แต่สำหรับฟีเจอร์ Cinematic ของ Google Photos นี้เป็นการเปลี่ยนภาพที่ถ่ายมาแล้วจากกล้องธรรมดาให้กลายเป็นภาพสามมิติ จึงต้องใช้สิ่งที่เรียกว่า Depth map หรือภาพที่บอกข้อมูลความลึกของภาพ ซึ่งจะช่วยในการเพิ่มคุณสมบัติแบบสามมิติให้ภาพถ่ายของเรา และทำให้สามารถสร้างภาพที่พื้นหลังขยับได้ในแบบของ Cinematic photos ทีมนักพัฒนาได้อาศัยความช่วยเหลือจากโครงข่ายประสาทเทียมแบบ Convolutional neural network ซึ่งทำงานร่วมกับโครงสร้างแบบเข้ารหัสและถอดรหัส (Encoder-decoder architecture) เพื่อจำลองและคาดคะเน Depth map จากภาพที่อยู่ในอัลบั้มรูปของผู้ใช้งาน ซึ่งภาพที่ถ่ายเก็บไว้นั้นแม้จะเป็นภาพ RBG ธรรมดาภาพเดียวก็สามารถใช้ประมวลผลได้ โดยการจะสร้างภาพที่เป็นสองมิติภาพเดียวให้ออกมาในรูปแบบสามมิติ ต้องอาศัยการประเมินความลึกของภาพผ่านการมองแบบใช้ตาข้างเดียว (Monocular cue) กล่าวคือ เอไอจะเรียนรู้การมองในแบบเดียวกับสายตามนุษย์ ซึ่งโดยปกติแล้วการที่มนุษย์จะเห็นภาพเป็นสามมิติได้นั้นต้องอาศัยการมองด้วยสองตา (Binocular cue) ถ้าหากมองด้วยตาเดียวจะเห็นภาพเป็นสองมิติเท่านั้น แต่การมองด้วยตาเดียวก็ยังคงสามารถคาดคะเนความลึกของภาพด้วยการดูขนาดของวัตถุในภาพ การดูแนวเส้น และการสังเกตความเบลอของภาพ ซึ่งโครงข่ายประสาทเทียมก็สามารถใช้การมองแบบตาข้างเดียวนี้ในการคาดคะเนความลึกของภาพสองมิติได้ ในส่วนของการสอนโมเดล Convolutional neural network ให้จำลอง Depth map นั้น แม้จะมีชุดข้อมูล (Dataset) แบบ Monocular depth estimation ที่มีอยู่แล้ว แต่เนื่องจากชุดข้อมูลนั้นได้รับการออกแบบมาเพื่อใช้กับเทคโนโลยีเช่น AR หุ่นยนต์ และรถยนต์ขับเคลื่อนอัตโนมัติโดยเฉพาะ ซึ่งจะทำงานได้ดีมากกับภาพแบ็คกราวน์เช่น ถนน ห้อง แต่สำหรับภาพถ่ายทั่วไปที่มีภาพของคน สัตว์ สิ่งของนั้นมีองค์ประกอบของภาพและเฟรมภาพแตกต่างกันก็อาจใช้งานชุดข้อมูลที่มีอยู่แล้วได้ไม่ดีเท่า ด้วยเหตุนี้ทาง Google จึงออกแบบชุดข้อมูล Monocular depth estimation ขึ้นมาใหม่โดยเฉพาะ โดยใช้ข้อมูลภาพถ่ายจากอุปกรณ์ Custom 5-camera rig และชุดข้อมูลจากภาพถ่ายแบบ Portrait จากกล้อง Pixel 4 ที่มีข้อมูล Ground-truth depth จาก Multi-view stereo ข้อมูลเหล่านี้เป็นข้อมูลที่สำคัญมากในการเทรนโมเดล โดยการรวมชุดข้อมูลหลายชุดเข้าด้วยกันนั้นเปิดโอกาสให้โมเดลได้เรียนรู้จากภาพพื้นหลังหลายแบบที่มาจากกล้องหลาย ๆ รุ่น ซึ่งช่วยให้โมเดลคาดคะเนความลึกของภาพได้ดีขึ้น ความท้าทายอีกอย่างที่เกิดขึ้นคือ การใช้ข้อมูล Ground-truth depth จากชุดข้อมูลหลาย ๆ ชุดนั้นมีปัญหาเรื่องค่า Scaling factor และ Shift ที่ไม่สามารถระบุได้ ทำให้อาจมีค่าที่แตกต่างกันโดยทีเราไม่รู้ แต่เนื่องจากการจำลองภาพแบบ Cinematic นั้นต้องการค่าความลึกของวัตถุในรูปแบบคร่าว ๆ เท่านั้น ไม่ได้ต้องการค่าที่ตรงเป๊ะ ทำให้ทีมสามารถรวมชุดข้อมูลเข่้าด้วยกันด้วยการใช้ฟังก์ชันแบบ Scale-and-shift-invariant loss ก่อนในขณะที่เทรนโมเดลแล้วจึงค่อยทำการปรับบรรทัดฐานข้อมูล หรือ Normalise ในขั้นตอนที่โมเดลทำการคาดคะเนข้อมูล การทำภาพแบบ Cinematic นั้น ปัจจัยสำคัญคือการแยกตัวคนออกจากพื้นหลังซึ่งเป็นส่วนที่จะเคลื่อนไหว ทำให้ต้องคำนึงถึงความแม่นยำของ Depth map บริเวณกรอบส่วนที่เป็นรูปร่างของคนเป็นอย่างมาก หาก Depth map ในส่วนนี้ผิดพลาดอาจทำให้รูปวัตถุในภาพที่ประมวลผลออกมาในตอนท้ายเกิดความคลาดเคลื่อน หรือที่เรียกว่า Artifact ได้ ทีมพัฒนาจึงใช้การกรองข้อมูลภาพแบบ Median filtering เพื่อเพิ่มความแม่นยำบริเวณกรอบรูปตัวคน รวมถึงใช้คาดคะเนสัดส่วนตัวคนในภาพแต่ละภาพแบบ Segmentation mask ด้วยการใช้โมเดลแบ่งสัดส่วนจาก DeepLap ซึ่งจะใช้ชุดข้อมูล Open Images ในการเทรนโมเดล หาก Depth map คาดคะเนส่วนของตัวบุคคลผิด การแบ่งสัดส่วนนี้จะช่วยดันพิกเซลส่วนที่ 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 ที่ประมวลผลภาพของผู้ใช้ที่มีความหลากหลายและแตกต่างกันมากในเรื่ององค์ประกอบภาพได้สำเร็จ เปิดโอกาสให้เราได้กรอซ้ำความทรงจำดี ๆ ของเราผ่านฟีเจอร์นี้อีกครั้ง

bottom of page