paint-brush
Veido duomenų papildymas – 1 dalis. Geometrinė transformacijapateikė@ainur
262 skaitymai

Veido duomenų papildymas – 1 dalis. Geometrinė transformacija

pateikė Ainur Gainetdinov3m2024/10/27
Read on Terminal Reader

Per ilgai; Skaityti

Per pastaruosius du dešimtmečius giliųjų neuroninių tinklų veikimas padarė didelį žingsnį į priekį. Kiekvienais metais kuriamos naujos architektūros, kurios lenkia naujausius rezultatus. Tačiau tik architektūros tobulinimas neveiks be kokybiško duomenų rinkinio. Duomenų rinkinys turi didelę įtaką galutiniam našumui. Įvairių, tikslių duomenų rinkinių rinkimas ir žymėjimas gali būti sudėtingas ir brangus, o esami duomenų rinkiniai paprastai neapima visos tikrojo duomenų paskirstymo įvairovės, todėl naudojami duomenų papildymo būdai.
featured image - Veido duomenų papildymas – 1 dalis. Geometrinė transformacija
Ainur Gainetdinov HackerNoon profile picture

Per pastaruosius du dešimtmečius giliųjų neuroninių tinklų veikimas padarė didelį žingsnį į priekį. Kiekvienais metais kuriamos naujos architektūros, kurios lenkia naujausius rezultatus. Tačiau tik architektūros tobulinimas neveiks be kokybiško duomenų rinkinio. Duomenų rinkinys turi didelę įtaką galutiniam našumui. Įvairių, tikslių duomenų rinkinių rinkimas ir žymėjimas gali būti sudėtingas ir brangus, o esami duomenų rinkiniai paprastai neapima visos tikrojo duomenų paskirstymo įvairovės, todėl naudojami duomenų papildymo būdai.


Šiame straipsnyje parodysiu, kaip jūsų žmonių veidų duomenų rinkinį galima praturtinti 3D geometrijos transformacija, siekiant pagerinti modelio veikimą. Toliau pateikiamas atvirojo kodo diegimas[1].


Duomenų papildymas yra metodas, kuris padidina duomenų kiekį, taikant įvairius pavyzdžių pakeitimus. Bendrąjį vaizdo padidinimą galima suskirstyti į dvi kategorijas: geometrines transformacijas ir spalvų transformacijas. Geometrines transformacijas sudaro mastelio keitimas, apkarpymas, apvertimas, pasukimas, vertimas ir kt. Tuo tarpu spalvų transformacijas sudaro spalvų virpėjimas, triukšmo pridėjimas, pilkos spalvos skalavimas, ryškumo / kontrasto reguliavimas ir kt.


Pagalvokime, kaip galėtume pagerinti įvaizdį, jei žinome, kad yra žmogaus veidas. Kaip atskirti vieną žmogų nuo kito? Yra veido bruožai, kurie sudaro tapatybę, pavyzdžiui, odos spalva, veido forma, kirpimas, raukšlės, akių spalva ir kt. Vienas iš labiausiai išsiskiriančių yra veido forma.


Taigi, jei pakeisime įvesties veido atvaizdo formą, tai bus šiek tiek kitoks žmogus treniruotam modeliui. Taigi, naudokime šią savybę duomenų rinkiniui papildyti.


Veido geometriją pakeisime naudodami 3D Morphable Model (3DMM), ypač FLAME[2] modelį. 3DMM yra trimatis tinklelis, turintis parametrus, leidžiančius manipuliuoti jo forma, poza ir išraiška. 3DMM yra sukurtas iš trimačių akių, kurias užregistravo tikri žmonės.


Taigi jis gali parodyti realių veido formų pasiskirstymą. Po gaubtu jis susideda iš vidutinės formos ir pagrindinių komponentų rinkinio, nurodančių formos ir išraiškos kitimo kryptis. Alfa ir beta yra modelio parametrai.


Prieš keisdami veido formą, turime rasti 3DMM parametrus, atitinkančius mūsų įvestą nuotrauką. Tai galima padaryti keliais būdais, pvz., orientyrų optimizavimas, fotometrinis optimizavimas arba regresijos modeliai, skirti numatyti parametrus vienu žingsniu. Naudojau 2D orientyrų optimizavimą, nes jį paprasta įgyvendinti ir per protingą laiką gaunami tikslūs rezultatai.


Veido orientyrai buvo aptikti įvesties vaizde naudojant Dlib veido aptikimo modelį. Adomo optimizavimo algoritmas buvo naudojamas su MSE praradimu orientyrams, kad 3DMM tilptų į veido vaizdą. Kad susilietų, prireikė apie 150 iteracijų.


Dabar esame pasiruošę keisti veido geometriją. Visų pirma, mes jau turime trimatį tinklelį, suderintą su mūsų veido įvaizdžiu. Pakeitus 3DMM formos parametrus, vaizdo erdvės tinklelio viršūnės pasislenka. Žinodami, kad poslinkiai, galime juo perkelti vaizdo pikselius.


Norėdami gauti tankų poslinkių žemėlapį, naudojau OpenGL biblioteką, kurioje vietoj viršūnių spalvos atvaizdavau 3DMM tinklelį su poslinkiais x ir y kryptimis. Belieka apsvarstyti vieną dalyką, kaip elgtis su pikseliais, kurie nebuvo veido tinklelio srityje.


Tam tikslui panaudojau ekstrapoliaciją, kuri sklandžiai sujungia pasikeitusį veidą su statiniu fonu. Kol turime tankius x ir y krypčių poslinkių žemėlapius, galime juos pritaikyti bet kokio tipo etiketėms, pvz., veido orientyrams, segmentavimo kaukėms ar suporuotiems vaizdams. Žemiau esančiame paveikslėlyje galite pamatyti veido didinimo su geometrine transformacija pavyzdžius. Jei norite sužinoti daugiau informacijos, kviečiu jus į šaltinio kodą[1].



Dabar galite tai išbandyti savo duomenų rinkiniuose. Šis padidinimo metodas padės patobulinti modelį, kad jis būtų stabilus įvesties variantams. Šiame straipsnyje mes sužinojome apie 3D geometrinę transformaciją, tačiau be jo yra tekstūros modifikacijų, kurios yra tolesni veidų duomenų rinkinių patobulinimai, kurie bus pateikti kitame straipsnyje.


Nuorodos

[1] „GitHub“ kodas. https://github.com/ainur699/face_data_augmentation

[2] FLAME modelis. https://flame.is.tue.mpg.de/index.html