Animace obličeje pro avatary v reálném čase
Výraz obličeje je kritickým krokem v cestě Robloxu směrem k integraci metaverze do každodenního života lidí prostřednictvím přirozených a uvěřitelných interakcí avatarů. Animace tváří virtuálních 3D postav v reálném čase je však obrovskou technickou výzvou. Navzdory mnoha průlomům ve výzkumu existuje jen málo komerčních příkladů aplikací animace obličeje v reálném čase. Obzvláště náročné je to v Robloxu, kde podporujeme závratnou řadu uživatelských zařízení, podmínky v reálném světě a divoce kreativní případy použití od našich vývojářů.
V tomto článku popíšeme rámec hlubokého učení pro regresi příkazů animace obličeje z videa, který řeší tyto výzvy a otevírá nám řadu budoucích příležitostí. Rámec popsaný v tomto blogovém příspěvku byl také prezentován jako a povídání à SIGGRAPH 2021.
animace obličeje
Existují různé možnosti ovládání a animace 3D face-rigu. Ten, který používáme, se nazývá Facial Action Coding System resp FAC, který definuje sadu ovládacích prvků (na základě umístění obličejových svalů) pro deformaci 3D sítě obličeje. Přestože je FACS starý přes 40 let, je stále de facto standardem, protože příkazy FACS jsou intuitivní a snadno přenositelné mezi platformami. Příklad cvičení FACS soupravy lze vidět níže.
metoda
Myšlenka je taková, že naše metoda založená na hlubokém učení bere vstupní video a vydává sadu FACS pro každý snímek. K tomu používáme dvoustupňovou architekturu: detekci obličeje a regresi FACS.
Detekce obličeje
Pro dosažení nejlepšího výkonu implementujeme rychlou variantu poměrně známého algoritmu detekce obličeje MTCNN. Původní algoritmus MTCNN je poměrně přesný a rychlý, ale není dostatečně rychlý, aby podporoval detekci obličejů v reálném čase na mnoha zařízeních používaných našimi uživateli. Abychom tento problém vyřešili, upravili jsme algoritmus pro náš konkrétní případ použití, kdy jakmile je detekována tvář, naše implementace MTCNN provede pouze poslední krok O-Net v po sobě jdoucích snímcích, což má za následek průměrné zrychlení 10x. Také používáme obličejové orientační body (umístění koutků očí, nosu a úst) předpovězené MTCNN k zarovnání ohraničujícího rámečku obličeje před dalším krokem regrese. Toto zarovnání umožňuje těsné oříznutí vstupních obrázků, což snižuje výpočet regresní sítě FACS.
FACS regrese
Naše regresní architektura FACS využívá multitaskingové nastavení, které společně trénuje orientační body a váhy FACS pomocí sdílené páteře (nazývané kodér) jako extraktoru funkcí.
Toto nastavení nám umožňuje rozšířit váhy FACS získané ze syntetických animačních sekvencí skutečnými obrázky, které zachycují složitost výrazu obličeje. Regresní podsíť FACS, která je trénována spolu s použitím regresoru orientačního bodu kauzální konvoluce; tyto konvoluce pracují s prvky v průběhu času na rozdíl od konvolucí, které pracují pouze s prostorovými prvky, které lze nalézt v kodéru. To umožňuje modelu naučit se časové aspekty obličejových animací a je méně náchylné na nekonzistence, jako je jitter.
výcvik
Nejprve trénujeme model pro regresi pouze pro orientační body pomocí skutečných i syntetických obrázků. Po několika krocích začneme přidávat syntetické sekvence, abychom se naučili váhy podpole časové regrese FACS. Syntetické animační sekvence byly vytvořeny naším interdisciplinárním týmem umělců a inženýrů. Náš umělec sestavil standardizované zařízení používané pro všechny různé identity (obličejové sítě), které bylo vyškoleno a vykresleno automaticky pomocí animačních souborů obsahujících závaží FACS. Tyto animační soubory byly generovány pomocí klasických algoritmů počítačového vidění běžících na videozáznamech z obličejové gymnastiky a doplněné ručně animovanými záběry pro extrémní výrazy obličeje, které v kalistenických videích chyběly.
Ztráty
Abychom trénovali naši síť hlubokého učení, lineárně kombinujeme několik různých pojmů ztráty, abychom regresovali mezníky a váhy FACS:
- Ztráty pozic. U benchmarků RMSE regresních pozic (Llmks ), a pro váhy FACS MSE (Lvysokých škol ).
- Dočasné ztráty. U vah FACS snižujeme jitter pomocí časových ztrát na syntetických animačních sekvencích. Ztráta rychlosti (Lv ) inspirovaný [Cudeiro a kol. 2019] je MSE mezi cílovou a předpokládanou rychlostí. Podporuje celkovou plynulost dynamických projevů. Navíc, regularizační člen na zrychlení (Lselon ) je přidán pro snížení jitteru závaží FACS (jeho hmotnost je udržována na nízké úrovni, aby byla zachována odezva).
- Ztráta konzistence. Používáme skutečné obrázky bez anotací při nekontrolované ztrátě koherence (Lc ), podobný [Honari a kol. 2018]. To podporuje, aby byly předpovědi orientačních bodů při různých transformacích obrazu ekvivariantní, což zlepšuje konzistenci umístění orientačních bodů mezi snímky, aniž by bylo nutné používat popisky orientačních bodů pro podmnožinu obrazů při učení.
Výkon
Abychom zlepšili výkon kodéru bez snížení přesnosti nebo zvýšení jitteru, selektivně jsme použili nevycpané konvoluce ke zmenšení velikosti mapy prvků. To nám dalo větší kontrolu nad velikostí map prvků, než by tomu bylo u tempa konvolucí. Abychom zachovali reziduum, ořízneme mapu prvků, než ji přidáme do výstupu nevycpané konvoluce. Navíc jsme nastavili hloubku mapy funkcí na násobek 8, pro efektivní využití paměti s vektorovými instrukčními sadami, jako je AVX a Neon FP16, a výsledkem je 1,5x zvýšení výkonu.
Náš finální model má 1,1 milionu parametrů a ke spuštění vyžaduje 28,1 milionu multiplikačních akumulací. Pro srovnání, vanilka Mobilní síť V2 (na kterém je založena naše architektura) vyžaduje ke spuštění 300 milionů multiplikačních akumulací. Používáme NCNN rámec pro odvození modelu na zařízení a doba provádění s jedním vláknem (včetně detekce obličeje) pro jeden snímek videa jsou uvedeny v tabulce níže. Vezměte prosím na vědomí, že doba běhu 16 ms by podporovala zpracování 60 snímků za sekundu (FPS).
A po
Náš syntetický datový kanál nám umožnil iterativně zlepšit expresivitu a robustnost trénovaného modelu. Přidali jsme syntetické sekvence, abychom zlepšili schopnost reagovat na vynechané výrazy, a také vyvážený trénink různých identit obličeje. Díky načasování a ztrátové formulaci naší architektury, pečlivě optimalizované páteři a bezchybné základní pravdě ze syntetických dat dosahujeme vysoce kvalitní animace s minimálními výpočty. Časové filtrování prováděné v dílčím poli FACS vážení umožňuje snížit počet a velikost vrstev v páteři bez zvýšení jitteru. Ztráta konzistence bez dozoru nám umožňuje trénovat s velkou sadou reálných dat, čímž se zlepšuje zobecnění a robustnost našeho modelu. Pokračujeme v práci na vylepšování a vylepšování našich modelů, abychom dosáhli ještě výraznějších a robustnějších výsledků bez chvění.
Pokud chcete pracovat na podobných výzvách na špičce sledování obličejů v reálném čase a strojového učení, podívejte se prosím na některé z našich otevřené pozice s naším týmem.