Cascadeur: karakter pózpredikció 6 pont alapján

Ebben az esszében a Banzai Games alapítója, Evgeniy Dyabin és társai, Grishanin és Maxim Tarasov vázolják, hogyan találták ki az egyszerű, mégis effektív pózpredikciós eszközt a Nekki új karakteranimációs szoftveréhez, a Cascadeur-höz.

Szeretnénk megosztani a Cascadeur-ös karakteranimációs deep learninggel kapcsolatos első sikereinket.

Mikor a Shadow Fight 3-on dolgoztunk, rengeteg harci animációt felhalmoztunk – körülbelül 1100 mozgásunk volt, átlagosan 4 másodperces hosszal. Már akkor tudtuk, hogy ez egy nap jó data set lesz valamiféle neurális hálózat készítéséhez.

Ahogy különféle projekteken dolgoztunk, megfigyeltük, hogy az animátorok a karakterpózokat egyszerű pálcikaemberek rajzaival ábrázolják a legelső vázlataikon. Úgy gondoltuk, hogy mivel egy tapasztalt animátor egyszerű vázlatok alapján is képes megfelelő pózokat alkotni, egy neurális hálózat is képes lehet rá.

Ezért döntöttünk úgy, hogy mindössze 6 pont alapján (csuklók, bokák, csípő és a nyak töve) megpróbáljuk elérni, hogy egy neurális hálózat kitalálja, hogy helyezkedik el a maradék 37 pont.

Az eredményt összehasonlítottuk az eredeti póz pontjainak pozícióival. A loss funkcióban least-squares methódussal kezeltük a gép által jósolt, és a forráspóz közti távolságokat.

A tanító datasethez az összes Shadow Fight 3-as animáció a rendelkezésünkre állt. Minden frame-ből pózt csináltunk, így körülbelül 115 000 pózt kaptunk. De az így nyert pózok elég hasonlóak voltak – a karakter majdnem mindig az X tengely irányába nézett, és legtöbbször a bal lába volt elöl a mozgás kezdetekor.

Ezt a problémát úgy orvosoltuk, hogy letükröztünk pózokat, illetve véletlenszerűen elforgattuk őket a térben. Ezzel a datasetünk 2 millió pózra nőtt. Ezeknek a kilencven százalékát a hálózat tanítására, a maradék ötöt pedig paraméterek beállítására és tesztelésre használtuk.

A neurális hálózat architektúrája meglehetősen egyszerű – egy teljesen összekapcsolt, ötlayeres rendszerről van szó, amihez a Self-Normalizing Neural Network alapján készült az aktivációs funkció és az inicializációs metódus. Az utolsó layeren nem használtunk aktivációt.

Minden node-hoz három koordináta társul, így 6x3 element van input layerként, és 37x3 element output layerként. A rejtett layerek optimális architektúrája után kutatva állapodtunk meg az öt layeres architektúrán. A rejtett layerekhez 300, 400, 300, 200 neuron társul, de a kevesebb rejtett layereket alkalmazó hálózatok is jó eredményt adtak.

A hálózati paraméterek L2 szabályozása is hasznos volt. Segítségével a predikciók simábban és folytatólagosabbak lettek. Egy ilyen neurális hálózat a pózokat átlagosan 3,5 centiméteres hibaaránnyal képes megjósolni. Ez egy elég magas átlag, de a feladat természetét tekintve jó arány. Mivel egy szett input értékhez számtalan lehetséges output érték társulhat, a rendszer megtanulta megtalálni a legnagyobb valószínűségű, átlagolt predikciókat.

Mikor az input pontok számát 16-ra növeltük, a hibaarány a felére csökkent, aminek köszönhetően nagyon pontossá váltak a predikciók.

Emellett viszont a neurális hálózat nem tudott teljesen helyes pózt visszaadni úgy, hogy az összes csont és hajlat hossza megmaradt volna. Emiatt belekezdtünk egy olyan optimalizációs folyamatba, amivel a fizikai modell testrészeit és hajlatait a megfelelő helyre igazítottuk.

Az eredmény a videóinkon látható. Ezek az eredmények elég specifikusak, mivel a tanító dataset fegyvereket használó fighter játékhoz készült harci animációkból áll. A karakterek legtöbbször harci beállásban állnak, és a lábai és a feje is így igazodik. A kéz kinyújtásakor például a csukló behajlítva marad, mintha kard lenne a kézben.

Ebből kiindulva néhány másik hálózatot is betanítottunk nagyobb mennyiségű ponttal, amik meghatározzák a kezek, lábak és a fej állását, illetve a térdek és könyökök pozícióját is. 16-pontos és 28-pontos rendszereket is kipróbáltunk. Ebből kiderült, hogy ezeknek a hálózatoknak az eredményei kombinálhatóak, tehát a felhasználó tetszőleges mennyiségű pont felhasználásával állíthatja be a kívánt pózt. Ha például a felhasználó elmozdította a bal könyököt, de a jobbhoz nem ért hozzá, a jobb könyök pozíciója egy hatpontos mintával számolódik ki, a bal könyök viszont 16 ponttal számol.

Reméljük, hogy az általunk készített eszköz ígéretes karakterek pózolásához. Még fejlesztünk rajta, rengeteg kiaknázatlan lehetőség rejlik benne. Sok ötletünk van arra, hogy hogyan javítsuk, és hogyan alkalmazzuk egyre többféle célra.

Az eszköz első verziója már elérhető a Cascadeur-ben. A szoftver zárt bétában próbálható ki a cascadeur.com-on való regisztráció után.

A Nekki kíváncsian várja a visszajelzéseket a kommentekben. Ti használnátok ehhez hasonló eszközt a munkátok során?

MEGOSZTÁS:
Meshmag