แอนิเมชั่นใบหน้าแบบเรียลไทม์สำหรับอวตาร

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

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

แอนิเมชั่นใบหน้า

มีตัวเลือกมากมายในการควบคุมและสร้างภาพเคลื่อนไหวให้กับอุปกรณ์ใบหน้า 3 มิติ ที่เราใช้เรียกว่า Facial Action Coding System หรือ มาซึ่งซึ่งกำหนดชุดการควบคุม (ตามการจัดวางกล้ามเนื้อใบหน้า) เพื่อทำให้โครงหน้า 3 มิติบิดเบี้ยว แม้จะมีอายุมากกว่า 40 ปี FACS ยังคงเป็นมาตรฐานโดยพฤตินัย เนื่องจากการควบคุม FACS นั้นใช้งานง่ายและสามารถถ่ายโอนระหว่างแท่นขุดเจาะต่างๆ ได้อย่างง่ายดาย ตัวอย่างของแท่นขุดเจาะ FACS ที่กำลังดำเนินการอยู่สามารถดูได้ที่ด้านล่าง

วิธี

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

การตรวจจับใบหน้า

เพื่อให้ได้ประสิทธิภาพที่ดีที่สุด เราใช้ตัวแปรที่รวดเร็วของอัลกอริธึมการตรวจจับใบหน้า MTCNN ที่เป็นที่รู้จักค่อนข้างดี อัลกอริธึม MTCNN ดั้งเดิมค่อนข้างแม่นยำและรวดเร็ว แต่ไม่เร็วพอที่จะรองรับการตรวจจับใบหน้าแบบเรียลไทม์บนอุปกรณ์จำนวนมากที่ผู้ใช้ของเราใช้ ดังนั้น เพื่อแก้ปัญหานี้ เราได้ปรับแต่งอัลกอริทึมสำหรับกรณีการใช้งานเฉพาะของเรา ซึ่งเมื่อตรวจพบใบหน้าแล้ว การใช้งาน MTCNN ของเราจะรันเฉพาะสเตจ O-Net สุดท้ายในเฟรมที่ต่อเนื่องกัน ส่งผลให้ความเร็วเพิ่มขึ้นเฉลี่ย 10 เท่า เรายังใช้จุดสังเกตบนใบหน้า (ตำแหน่งของตา จมูก และมุมปาก) ที่ MTCNN คาดการณ์ไว้สำหรับการจัดแนวกล่องใส่กรอบหน้าก่อนขั้นตอนการถดถอยที่ตามมา การจัดแนวนี้ช่วยให้สามารถครอบตัดรูปภาพอินพุตได้แน่น ช่วยลดการคำนวณของเครือข่ายการถดถอย FACS

FACS การถดถอย 

สถาปัตยกรรมการถดถอย FACS ของเราใช้การตั้งค่ามัลติทาสก์ซึ่งร่วมฝึกอบรมสถานที่สำคัญและตุ้มน้ำหนัก FACS โดยใช้แกนหลักที่ใช้ร่วมกัน (เรียกว่าตัวเข้ารหัส) เป็นตัวแยกคุณลักษณะ

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

การฝึกอบรม

เริ่มแรกเราฝึกแบบจำลองสำหรับการถดถอยจุดสังเกตเท่านั้นโดยใช้ทั้งภาพจริงและภาพสังเคราะห์ หลังจากจำนวนขั้นตอนที่กำหนด เราเริ่มเพิ่มลำดับสังเคราะห์เพื่อเรียนรู้น้ำหนักสำหรับเครือข่ายย่อยการถดถอย FACS ชั่วคราว ลำดับแอนิเมชั่นสังเคราะห์ถูกสร้างขึ้นโดยทีมสหวิทยาการของศิลปินและวิศวกร แท่นขุดเจาะมาตรฐานที่ใช้สำหรับข้อมูลประจำตัวที่แตกต่างกันทั้งหมด (face meshes) ถูกตั้งค่าโดยศิลปินของเรา ซึ่งได้ออกกำลังกายและแสดงผลโดยอัตโนมัติโดยใช้ไฟล์แอนิเมชั่นที่มีตุ้มน้ำหนัก FACS ไฟล์แอนิเมชั่นเหล่านี้สร้างขึ้นโดยใช้อัลกอริธึมคอมพิวเตอร์วิชันซิสเต็มแบบคลาสสิกที่ทำงานบนซีเควนซ์วิดีโอการเพาะกายสำหรับใบหน้า และเสริมด้วยลำดับภาพเคลื่อนไหวด้วยมือเพื่อการแสดงออกทางสีหน้าที่รุนแรงซึ่งหายไปจากวิดีโอการเพาะกาย 

การสูญเสีย

ในการฝึกเครือข่ายการเรียนรู้เชิงลึก เราได้รวมคำศัพท์การสูญเสียที่แตกต่างกันหลายคำเป็นเส้นตรงเพื่อถดถอยจุดสังเกตและตุ้มน้ำหนัก FACS: 

  • การสูญเสียตำแหน่ง สำหรับจุดสังเกต RMSE ของตำแหน่งถดถอย (Lอืม ) และสำหรับตุ้มน้ำหนัก FACS MSE (Lข้อเท็จจริง ). 
  • การสูญเสียชั่วคราว สำหรับตุ้มน้ำหนัก FACS เราลดความกระวนกระวายใจโดยใช้การสูญเสียชั่วขณะเหนือลำดับแอนิเมชั่นสังเคราะห์ การสูญเสียความเร็ว (Lv ) ได้รับแรงบันดาลใจจาก [คูเดโร และคณะ 2019] คือ MSE ระหว่างเป้าหมายกับความเร็วที่คาดการณ์ไว้ ส่งเสริมความราบรื่นโดยรวมของการแสดงออกแบบไดนามิก นอกจากนี้ เงื่อนไขการทำให้เป็นมาตรฐานในการเร่งความเร็ว (Lแม็ก ) ถูกเพิ่มเพื่อลดการกระวนกระวายใจของน้ำหนัก FACS (น้ำหนักของมันให้ต่ำเพื่อรักษาการตอบสนอง) 
  • การสูญเสียความสม่ำเสมอ เราใช้ภาพจริงโดยไม่มีคำอธิบายประกอบในการสูญเสียความสอดคล้องที่ไม่มีผู้ดูแล (Lc ), คล้ายกับ [Honari และคณะ 2018]. สิ่งนี้สนับสนุนการคาดคะเนจุดสังเกตให้มีความเท่าเทียมกันภายใต้การแปลงภาพที่แตกต่างกัน ปรับปรุงความสอดคล้องของตำแหน่งจุดสังเกตระหว่างเฟรมโดยไม่ต้องใช้ป้ายกำกับจุดสังเกตสำหรับชุดย่อยของรูปภาพการฝึก

ประสิทธิภาพ

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

โมเดลสุดท้ายของเรามี 1.1 ล้านพารามิเตอร์ และต้องใช้ 28.1 ล้านคูณสะสมเพื่อดำเนินการ วานิลลา โมบายเน็ต V2 (ซึ่งสถาปัตยกรรมของเรายึดตาม) ต้องการ 300 ล้านคูณสะสมเพื่อดำเนินการ เราใช้ คสช เฟรมเวิร์กสำหรับการอนุมานโมเดลบนอุปกรณ์และเวลาดำเนินการแบบเธรดเดียว (รวมถึงการตรวจหาใบหน้า) สำหรับเฟรมของวิดีโอแสดงอยู่ในตารางด้านล่าง โปรดทราบว่าเวลาดำเนินการ 16ms จะรองรับการประมวลผล 60 เฟรมต่อวินาที (FPS) 

อะไรต่อไป

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

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

โพสต์ แอนิเมชั่นใบหน้าแบบเรียลไทม์สำหรับอวตาร ปรากฏตัวครั้งแรกเมื่อ บล็อก Roblox.

ประทับเวลา:

เพิ่มเติมจาก บล็อก Roblox