Autoriai: Jun Gao, NVIDIA, University of Toronto, Vector Institute (jung@nvidia.com) Tianchang Shen, NVIDIA, University of Toronto, Vector Institute (frshen@nvidia.com) Zian Wang, NVIDIA, University of Toronto, Vector Institute (zianw@nvidia.com) Wenzheng Chen, NVIDIA, University of Toronto, Vector Institute (wenzchen@nvidia.com) Kangxue Yin, NVIDIA (kangxuey@nvidia.com) Daiqing Li, NVIDIA (daiqingl@nvidia.com) Or Litany, NVIDIA (olitany@nvidia.com) Zan Gojcic, NVIDIA (zgojcic@nvidia.com) Sanja Fidler, NVIDIA, University of Toronto, Vector Institute (sfidler@nvidia.com) Santrauka Kadangi kelios pramonės šakos pereina prie masinių 3D virtualių pasaulių modeliavimo, tampa akivaizdus poreikis sukurti turinio kūrimo įrankius, kurie galėtų plėstis pagal 3D turinio kiekį, kokybę ir įvairovę. Mūsų darbe siekiame apmokyti našius 3D generavimo modelius, kurie sintetinasi tekstūruotus tinklus, galinčius būti tiesiogiai naudojamus 3D atvaizdavimo sistemose, taip užtikrinant jų tinkamumą vėlesnėms programoms. Ankstesni darbai apie 3D generatyvų modeliavimą arba neturi geometrinių detalių, arba yra riboti dėl tinklo topologijos, kurią gali gaminti, paprastai nepalaiko tekstūrų, arba sintezės procese naudoja neuroninius atvaizduoklius, todėl jų naudojimas įprastose 3D programose nėra trivialus. Šiame darbe pristatome GET3D, **G**eneratyvų modelį, kuris tiesiogiai generuoja **E**kspresyvius **T**ekstūruotus **3D** tinklus su sudėtinga topologija, turtingomis geometrinėmis detalėmis ir aukštos raiškos tekstūromis. Naujausius pasiekimus diferencijuojamojo paviršiaus modeliavimo, diferencijuojamojo atvaizdavimo ir 2D generatyviųjų priešiškinimo tinklų srityse naudojame, kad apmokytume savo modelį iš 2D vaizdų kolekcijų. GET3D gali generuoti aukštos kokybės 3D tekstūruotus tinklus, pradedant automobiliais, kėdėmis, gyvūnais, motociklais ir žmonių personažais, baigiant pastatais, pasiekdamas žymų pagerėjimą, palyginti su ankstesniais metodais. Mūsų projekto puslapis: https://nv-tlabs.github.io/GET3D 1 Įvadas Įvairus, aukštos kokybės 3D turinys tampa vis svarbesnis įvairioms pramonės šakoms, įskaitant žaidimus, robotiką, architektūrą ir socialines platformas. Tačiau rankinis 3D objektų kūrimas yra labai daug laiko reikalaujantis ir reikalauja specifinių techninių žinių bei meninių modeliavimo įgūdžių. Vienas iš pagrindinių iššūkių yra mastas – nors 3D modelius galima rasti 3D prekyvietėse, tokiose kaip Turbosquid [ ] ar Sketchfab [ ], daugelio 3D modelių sukūrimas, pavyzdžiui, žaidimo ar filmo užpildymui personažų minia, kurių kiekvienas atrodo skirtingai, vis tiek reikalauja žymios menininkų laiko. 4 3 Norint palengvinti turinio kūrimo procesą ir padaryti jį prieinamą įvairiems (pradedantiesiems) vartotojams, generatyvūs 3D tinklai, galintys kurti aukštos kokybės ir įvairius 3D objektus, pastaruoju metu tapo aktyvia tyrimų sritimi [ , , , , , , , , , , ]. Tačiau, kad būtų praktiškai naudingi dabartinėms realaus pasaulio programoms, 3D generatyvūs modeliai turėtų atitikti šiuos reikalavimus: **(a)** gebėti generuoti formas su detalia geometrija ir laisva topologija, **(b)** rezultatas turėtų būti tekstūruotas tinklas, kuris yra pagrindinis atvaizdavimas, naudojamas standartinių grafikos programų, tokių kaip Blender [ ] ir Maya [ ], ir **(c)** turėtume galėti naudoti 2D vaizdus priežiūrai, nes jie yra plačiau prieinami nei tikri 3D formos. 5 14 43 46 53 68 75 60 59 69 23 15 1 Ankstesni darbai apie 3D generatyvų modeliavimą daugiausia dėmesio skyrė aukščiau išvardintų reikalavimų dalims, tačiau iki šiol joks metodas neatitinka visų jų (1 lentelė). Pavyzdžiui, metodai, generuojantys 3D taškų debesis [ , 68, 75], paprastai negeneruoja tekstūrų ir turi būti konvertuojami į tinklą po apdorojimo. 5 Vokselius generuojantys metodai dažnai neturi geometrinių detalių ir negeneruoja tekstūros [ , , , ]. Neuroniniais laukais paremti generatyvūs modeliai [ , ] daugiausia dėmesio skiria geometrijos išgavimui, bet nepaiso tekstūros. Dauguma jų taip pat reikalauja tikros 3D priežiūros. Galiausiai, metodai, tiesiogiai generuojantys tekstūruotus 3D tinklus [ , ], paprastai reikalauja iš anksto nustatytų formos šablonų ir negali generuoti formų su sudėtinga topologija ir kintamu genus. 66 20 27 40 43 14 54 53 Pastaruoju metu spartūs pasiekimai neuroniniame tūrio atvaizdavime [ ] ir 2D generatyviniuose priešiškinimo tinkluose (GANs) [ , , , , ] paskatino 3D supratimą vaizdų sintezėje [ , , , , , ]. Tačiau šis darbas siekia sintetinti daugiakrypčius nuoseklius vaizdus, naudojant neuroninį atvaizdavimą sintezės procese, ir negarantuoja, kad bus sukurtos prasmingos 3D formos. Nors tinklas gali būti gautas iš pagrindinio neuroninio lauko atvaizdavimo, naudojant marsiruojančio kubo algoritmą [ ], atitinkamos tekstūros išgavimas nėra trivialus. 45 34 35 33 29 52 7 57 8 49 51 25 39 Šiame darbe pristatome naują metodą, skirtą visų praktiškai naudingų 3D generatyvių modelių reikalavimų įgyvendinimui. Konkrečiai, siūlome GET3D, **G**eneratyvų 3D formų modelį, kuris tiesiogiai generuoja **E**kspresyvius **T**ekstūruotus **3D** tinklus su aukštomis geometrinėmis ir tekstūros detalėmis bei laisva tinklo topologija. Mūsų metodo esmė yra generavimo procesas, kuris naudoja diferencijuojamą *ekspresyvios* paviršiaus išgavimo metodą [ ] ir diferencijuojamą atvaizdavimo techniką [ , ]. Pirmoji leidžia mums tiesiogiai optimizuoti ir generuoti tekstūruotus 3D tinklus su laisva topologija, o antroji – apmokyti mūsų modelį naudojant 2D vaizdus, taip išnaudojant galingus ir brandžius diskriminatorius, sukurtus 2D vaizdų sintezei. Kadangi mūsų modelis tiesiogiai generuoja tinklus ir naudoja labai efektyvų (diferencijuojamą) grafikos atvaizduoklį, galime lengvai padidinti mūsų modelį, kad jis būtų apmokytas su vaizdo 60 47 37 rezoliucija iki 1024 × 1024, leidžiančia mums mokytis aukštos kokybės geometrinių ir tekstūrinių detalių. Demonstruojame pažangiausią ne sąlyginio 3D formų generavimo našumą keliose kategorijose su sudėtinga geometrija iš ShapeNet [ ], Turbosquid [ ] ir Renderpeople [ ], tokiose kaip kėdės, motociklai, automobiliai, žmonių personažai ir pastatai. Turėdamas ekspresyvų tinklą kaip rezultato atvaizdavimą, GET3D yra labai lankstus ir gali būti lengvai pritaikytas kitoms užduotims, įskaitant: **(a)** mokymasis generuoti suskaidytus medžiagos ir iš perspektyvos priklausančius apšvietimo efektus naudojant pažangų diferencijuojamą atvaizdavimą [ ], be priežiūros, **(b)** tekstų valdoma 3D formų generavimas naudojant CLIP [ ] įterpimą. 9 4 2 12 56 2 Susiję darbai Apžvelgiame naujausius pasiekimus 3D generatyviuose modeliuose geometrijai ir išvaizdai, taip pat 3D supratimą generuojančioje vaizdų sintezėje. Pastaraisiais metais 2D generatyvūs modeliai pasiekė fotorealistinę kokybę aukštos raiškos vaizdų sintezėje [ , , , , , , ]. Šie pasiekimai taip pat paskatino tyrimus 3D turinio generavimo srityje. Ankstyvieji metodai siekė tiesiogiai išplėsti 2D CNN generatorius į 3D vokselių tinklus [ , , , , ], tačiau didelė atminties talpa ir 3D konvoliucinių tinklų skaičiavimo sudėtingumas trukdo generavimo procesui aukštoje rezoliucijoje. Kaip alternatyva, kiti darbai tyrinėjo taškų debesis [ , , , ], implikuotinius [ , ] arba oktree [ ] atvaizdavimus. Tačiau šie darbai daugiausia dėmesio skiria geometrijos generavimui ir nepaiso išvaizdos. Jų rezultatų atvaizdavimo formos taip pat turi būti apdorojamos po generavimo, kad jos būtų suderinamos su standartinėmis grafikos sistemomis. 3D generatyvūs modeliai 34 35 33 52 29 19 16 66 20 27 40 62 5 68 75 46 43 14 30 Labiau panašūs į mūsų darbą, Textured3DGAN [ , ] ir DIBR [ ] generuoja tekstūruotus 3D tinklus, tačiau jie formuluoja generavimą kaip šablono tinklo deformaciją, kuri neleidžia jiems generuoti sudėtingos topologijos ar formų su kintamu genus, ką gali mūsų metodas. PolyGen [ ] ir SurfGen [ ] gali generuoti tinklus su laisva topologija, bet negeneruoja tekstūrų. 54 53 11 48 41 Įkvėpti neuroninio tūrio atvaizdavimo [ ] ir implikuotinių atvaizdavimų [ , ] sėkmės, pastarojo meto darbai pradėjo spręsti 3D supratimą generuojančios vaizdų sintezės problemą [ , , , , , , , , , ]. Tačiau neuroniniai tūrio atvaizdavimo tinklai paprastai yra lėti užklausti, todėl ilgai apmokomi [ , ] ir generuoja ribotos raiškos vaizdus. GIRAFFE [ ] ir StyleNerf [ ] pagerina apmokymo ir atvaizdavimo efektyvumą, atlikdami neuroninį atvaizdavimą žemesne rezoliucija ir vėliau padidindami rezultatus 2D CNN. Tačiau našumo pagerėjimas pasiekiamas sumažinus daugiakrypčio nuoseklumo lygį. Naudojant dvigubą diskriminatorių, EG3D [ ] gali iš dalies sumažinti šią problemą. Vis dėlto, tekstūruoto paviršiaus išgavimas iš metodų, pagrįstų neuroniniu atvaizdavimu, yra ne trivialus uždavinys. Priešingai, GET3D tiesiogiai generuoja tekstūruotus 3D tinklus, kurie gali būti lengvai naudojami standartinėse grafikos sistemose. 3D supratimą generuojanti vaizdų sintezė 45 43 14 7 57 49 26 25 76 8 51 58 67 7 57 49 25 8 3 Metodas Dabar pristatome mūsų GET3D sistemą tekstūruotų 3D formų sintezei. Mūsų generavimo procesas suskirstytas į dvi dalis: geometrijos šaka, kuri diferencijuojamai generuoja paviršiaus tinklą su laisva topologija, ir tekstūros šaka, kuri generuoja tekstūros lauką, kuris gali būti užklaustas paviršiaus taškuose, kad būtų gautos spalvos. Pastarasis gali būti išplėstas kitoms paviršiaus savybėms, tokioms kaip medžiagos (4.3.1 skyrius). Mokymo metu naudojamas efektyvus diferencijuojamas rastrizatorius, kad generuotų tekstūruotą tinklą į 2D aukštos raiškos vaizdus. Visas procesas yra diferencijuojamas, leidžiantis priešiškinimui apmokyti iš vaizdų (su kaukėmis, nurodančiomis domintį objektą) pernešant gradientus iš 2D diskriminatoriaus į abi generatoriaus šakas. Mūsų modelis yra iliustruotas 2 pav. Toliau pirmiausia pristatome mūsų 3D generatorių 3.1 skyriuje, prieš pereidami prie diferencijuojamo atvaizdavimo ir nuostolių funkcijų 3.2 skyriuje. 3.1 3D tekstūruotų tinklų generavimo modelis Siekiame išmokti 3D generatorių *M, E* = *G*(**z**) , kuris susietų pavyzdį iš Gauso pasiskirstymo **z** ∈ N (0*,* **I**) į tinklą *M* su tekstūra *E*. Kadangi ta pati geometrija gali turėti skirtingas tekstūras, o ta pati tekstūra gali būti pritaikyta skirtingoms geometrijoms, mes imame du atsitiktinius įvesties vektorius **z**1 ∈ R512 ir **z**2 ∈ R512. Sekdami StyleGAN [ , , ], mes naudojame netiesinius transformavimo tinklus *f*geo ir *f*tex, kad susietume **z**1 ir **z**2 į tarpinius paslėptus vektorius **w**1 = *f*geo(**z**1) ir **w**2 = *f*tex(**z**2), kurie toliau naudojami generuoti *stilius*, kontroliuojančius atitinkamai 3D formų ir tekstūrų generavimą. Geometrijos generatorių formaliai aprašome 3.1.1 skyriuje, o tekstūros generatorių – 3.1.2 skyriuje. 34 35 33 3.1.1 Geometrijos generatorius Mūsų geometrijos generatorius sukurtas integruoti DMTet [ ], neseniai pasiūlytą diferencijuojamą paviršiaus atvaizdavimą. DMTet atvaizduoja geometriją kaip pasvirusio tetraedrinio tinklo [ , ] apibrėžtą pasvirusį atstumo lauką (SDF), iš kurio paviršius gali būti diferencijuojamai atkuriamas per marsiruojančius tetraedrus [ ]. Deformuojant tinklą, perkeliant jo viršūnes, geriau išnaudojama jo rezoliucija. Naudodami DMTet paviršiaus išgavimui, galime generuoti ekspresyvius tinklus su laisva topologija ir genus. Toliau pateikiame trumpą DMTet santrauką ir skaitytojus nukreipiame į originalų straipsnį, kad gautumėte daugiau detalių. 60 22 24 17 Tegul ( ) žymi visą 3D erdvę, kurioje objektas yra, kur yra viršūnės tetraedriniame tinkle *T*. Kiekvienas tetraedras *Tk* ∈ *T* yra apibrėžtas naudojant keturias viršūnes {**v** **v** **v** **v** }, kur *k* ∈ {1*, . . . , K*}, kur *K* yra bendras tetraedrų skaičius, o **v** ∈ *VT ,* **v** ∈ R3. Be savo 3D koordinačių, kiekviena viršūnė **v** turi SDF reikšmę *si* ∈ R ir deformaciją ∆**v** ∈ R3 nuo jos pradinės kanoninės koordinatės. Šis atvaizdavimas leidžia diferencijuojamai atkurti ekspresyvų tinklą per marsiruojančius tetraedrus [ ], kur SDF reikšmės nenutrūkstamoje erdvėje yra apskaičiuojamos pagal jų reikšmės *si* baricentrinius interpoliacijas ant deformuotų viršūnių **v**′ = **v** + ∆**v** . VT , T VT ak , bk , ck , dk ik ik i i 60 i i Susiejame **w**1 ∈ R512 su SDF reikšmėmis ir deformacijomis kiekvienoje viršūnėje **v** per seriją sąlyginių 3D konvoliucinių ir pilnai sujungtų sluoksnių. Konkrečiai, pirmiausia naudojame 3D konvoliucinius sluoksnius, kad sukurtume funkcijų tūrį, sąlygotą **w**1. Tada užklausiame funkciją kiekvienoje viršūnėje **v** ∈ *VT* naudodami trilinijinę interpoliaciją ir perduodame ją į MLPs, kurie generuoja SDF reikšmę *si* ir deformaciją ∆**v** Tinklo architektūra i i i*. Kai reikia modeliuoti aukštoje rezoliucijoje (pvz., motociklas su plonomis detalėmis ratuose), toliau naudojame tūrio padalijimą pagal [ ]. 60 Gavę *si* ir ∆**v** Diferencijuojamas tinklo išgavimas i* visoms viršūnėms, naudojame diferencijuojamą marsiruojančių tetraedrų algoritmą, kad išgautume ekspresyvų tinklą. Marsiruojantys tetraedrai nustato paviršiaus topologiją kiekviename tetraedre pagal *si* ženklus. Konkrečiai, tinklo briauna išgaunama, kai sign(*si*) /= sign(*sj*), kur *i, j* žymi viršūnių indeksus tetraedro briaunoje, o tos briaunos viršūnės **m** yra nustatomos linijinės interpoliacijos kaip mi,j = v 0 i sj−v 0 j si sj−si . Atkreipkite dėmesį, kad aukščiau pateikta lygtis įvertinama tik tada, kai si 6= sj , todėl ji yra diferencijuojama, o gradientas iš mi,j gali būti atgaline tvarka perduodamas į SDF reikšmes si ir deformacijas ∆vi . Naudojant šį atvaizdavimą, laisvos topologijos formos gali būti lengvai generuojamos prognozuojant skirtingus si ženklus. i,j 3.1.2 Tekstūros generatorius Tiesiogiai generuoti tekstūros žemėlapį, atitinkantį rezultatų tinklą, nėra trivialu, nes generuojama forma gali turėti laisvą genus ir topologiją. Todėl tekstūrą parametrizuojame kaip tekstūros lauką [ ]. 50 Konkrečiai, tekstūros lauką modeliuojame funkcija *ft*, kuri susieja 3D paviršiaus taško **p** ∈ R3 vietą, sąlygotą **w**2, su RGB spalva **c** ∈ R3 toje vietoje. Kadangi tekstūros laukas priklauso nuo geometrijos, papildomai sąlygojame šį susiejimą su geometrijos paslėptu kodu **w**1, taip kad **c** = *ft*(**p***,* **w**1 ⊕ **w**2), kur ⊕ žymi sujungimą. Tekstūros lauką atvaizduojame naudodami tri-plokštuminį atvaizdavimą, kuris yra efektyvus ir išraiškingas 3D objektų rekonstrukcijoje [ ] ir 3D supratimą turinčių vaizdų generavime [ ]. Konkrečiai, sekdami [ , ], naudojame sąlyginį 2D konvoliucinį neuroninį tinklą, kad susietume paslėptą kodą **w**1 ⊕ **w**2 su trimis ašims lygiagrečiomis ortogonalinėmis funkcijų plokštumomis, kurių dydis yra *N* × *N* × (*C* × 3), kur *N* = 256 žymi erdvinę rezoliuciją, o *C* = 32 kanalų skaičių. Tinklo architektūra 55 8 8 35 Atsižvelgiant į funkcijų plokštumas, funkcijų vektorius f t ∈ R 32 paviršiaus taško p gali būti gautas kaip f t = P e ρ(πe(p)), kur πe(p) yra taško p projekcija į funkcijų plokštumą e, o ρ(·) žymi bilininę funkcijų interpoliaciją. Papildomas pilnai sujungtas sluoksnis tada naudojamas, kad susietų agreguotą funkcijų vektorių f t su RGB spalva c. Atkreipkite dėmesį, kad, skirtingai nuo kitų darbų apie 3D supratimą turinčią vaizdų sintezę, kurie taip pat naudoja neuroninio lauko atvaizdavimą, mums tereikia užklausyti tekstūros lauką paviršiaus taškų vietose (priešingai nei tankūs bandiniai palei spindulį). Tai žymiai sumažina skaičiavimo sudėtingumą aukštos raiškos vaizdų atvaizdavimui ir garantuoja, kad pagal konstrukciją bus generuojami daugiakrypčiai nuoseklūs vaizdai. 3.2 Diferencijuojamas atvaizdavimas ir mokymas Norėdami prižiūrėti mūsų modelį mokymo metu, semiamės įkvėpimo iš Nvdiffrec [ ], kuris atlieka daugiakrypčio 3D objekto atstatymą naudojant diferencijuojamą atvaizduoklį. Konkrečiai, mes atvaizduojame išgautą 3D tinklą ir tekstūros lauką į 2D vaizdus naudodami diferencijuojamą atvaizduoklį [ ], ir prižiūrime savo tinklą su 2D diskriminatoriumi, kuris bando atskirti vaizdą nuo tikro objekto ar generuoto objekto. 47 37 Manome, kad duomenų rinkinyje esančių vaizdų įsigijimui naudota kamerų pasiskirstymas C yra žinomas. Norėdami atvaizduoti generuojamas formas, atsitiktinai pasirenkame kamerą *c* iš C ir naudojame labai optimizuotą diferencijuojamą rastrizatorių Nvdiffrast [ ], kad atvaizduotume 3D tinklą į 2D siluetą, taip pat vaizdą, kuriame kiekvienas pikselis turi atitinkamo 3D Diferencijuojamas atvaizdavimas 37 taško tinkle paviršių. Šie koordinatai toliau naudojami tekstūros laukui užklausti, kad būtų gautos RGB reikšmės. Kadangi veikiame tiesiogiai ant išgauto tinklo, galime efektyviai atvaizduoti aukštos raiškos vaizdus, leidžiančius apmokyti mūsų modelį su vaizdo rezoliucija iki 1024×1024. Apmokome savo modelį naudodami priešiškinimo tikslą. Naudojame StyleGAN [ ] diskriminatoriaus architektūrą ir tą patį ne-saturacinį GAN tikslą su R1 reguliarizacija [ ]. Empiriškai nustatėme, kad naudojant du atskirus diskriminatorius, vieną RGB vaizdams ir kitą siluetams, gaunami geresni rezultatai nei vienas diskriminatorius, veikiantis abiem atvejais. Tegul *Dx* žymi diskriminatorių, kur *x* gali būti RGB vaizdas arba silu Diskriminatorius ir tikslas 34 42