Představujeme Mur.AI

Přenos neuronového stylu v reálném čase pro video

autorů Jeffrey Rainy a Archy de Berker

Mur.AI je nastavení pro stylizované video v reálném čase. Zpracování vyžaduje obraz referenčního stylu, jako je malba, a tok videa. Video tok je poté zpracován tak, aby měl styl referenčního obrazu. Stylizace se provádí v reálném čase a vytváří stylizovaný tok videa.

V předchozím příspěvku jsme popsali techniku ​​stabilizace přenosu stylu tak, aby dobře fungovala pro videa. Tyto techniky jsme následně nasadili, abychom vytvořili systém, který jsme předvedli na různých konferencích, včetně C2, Art Basel a NIPS. Některé z výsledných selfies si můžete prohlédnout na Twitteru.

V tomto příspěvku uvádíme několik vysvětlení, jak systém funguje. Poskytneme základ pro přenos stylů a konvoluci a podrobně popíšeme některé technické výzvy, které jsme překonali při nasazení našeho algoritmu do skutečného světa.

Co je to převod stylu?

Přenos stylu je použití uměleckého stylu jednoho obrázku na jiný obrázek:

Zde je zdrojový obrázek dvou vývojářů (Phil Mathieu a Jean Raby) a styl pochází od Notre Dame de Grace od A'Shop, nástěnná malba v Montrealu.

Tato technika byla poprvé představena v článku Neurální algoritmus uměleckého stylu Leon A. Gatys, Alexander S. Ecker a Matthias Bethge. Od té doby jsme viděli přenos stylů aplikovaný všude a řadu vylepšení původního algoritmu. Zejména v naší implementaci stavíme na práci Perceptuální ztráty pro přenos stylů v reálném čase a Super-Resolution Justinem Johnsonem, Alexandrem Alahi a Fei-Fei Li, což poskytuje rychlejší řešení pro přenos stylů, které je snadněji aplikovatelné na video.

Jak to funguje?

Každý snímek stylizovaného videa prochází konvenční neuronovou sítí (CNN) a poté se zobrazí na obrazovce. Pro krásný úvod do konvolučních sítí viz příspěvek Chris Olah a vizuální průvodce konvolucí viz repozitář GitHub Vincenta Dumoulina.

Stručně řečeno, CNN provádí na snímku více konvolučních operací, aby získal další. Každá konvoluce je operace na pixelech ve čtvercové oblasti vašeho obrázku. V CNN se stejná operace opakuje po celém snímku, aby se vypočítal každý pixel. Níže uvedený diagram ukazuje zpracování provedené jedinou konvolucí:

Při zavádění používáme jednu CNN, kterou nazýváme stylizační CNN, k vytvoření našeho stylizovaného obrazu. Když mluvíme o „učení stylu“, mluvíme o nalezení parametrů stylizační sítě tak, aby vytvořila správný styl.

K nalezení těchto parametrů použijeme druhou síť: klasifikaci CNN. Používáme to jako extraktor funkcí, abychom poskytli reprezentaci stylu a obsahu našich vstupních obrázků.

Klasifikační síť

Klasifikace CNN pořizuje snímek a pokouší se identifikovat, co obraz obsahuje. Například, pokud jste měli nějaké fotky koček a psů, můžete vycvičit klasifikaci CNN, abyste zjistili, které z nich jsou. V klasifikátoru CNN, který používáme, je úkolem klasifikovat malé obrázky do jedné z 1000 kategorií, což je nesmírně populární úkol s názvem ImageNet.

Síť klasifikátoru provádí v obraze několik křivek, aby vytvořila funkce užitečné pro klasifikaci. Jak obraz prochází sítí, zmenšuje se a zmenšuje (pixely), ale také roste, pokud jde o komponenty na pixel. Ze vstupu RGB (3 komponenty) v plném rozlišení iterativně zmenší obraz na jeden pixel, ale u mnoha komponent: pravděpodobnost, že obraz představuje každou z mnoha kategorií.

Typické schéma pro konvoluční neuronovou síť pro klasifikaci.

Ačkoli je síť původně proškolena pro klasifikaci, nebudeme ji používat k tomu. Atraktivním rysem CNN je, že přirozeně rekapitulují hierarchie, které existují v přírodních obrazech. Dříve v síti zachycujeme drobné funkce, jako jsou hrany. Později v síti zachycujeme funkce ve větším měřítku, například celé objekty. Tento jev si můžete prohlédnout ve svém prohlížeči zde.

Představte si, že si do pyžamu přidáte do sítě obrázek sebe sama. Po prvních vrstvách by informace, které síťové procesy mapují, na lokální prvky („tenké svislé modré pruhy“), zatímco poslední vrstvy sítě by zachytily rysy, které popisují obraz jako celek („někdo stojící“). Tak rané vrstvy zachycují styl obrazu, zatímco funkce naučené pozdními vrstvami zachycují obsah.

Některé příklady druhu funkcí, které preferují různé vrstvy v CNN (pohybujeme se hlouběji v síti, když se pohybujeme zleva doprava). Od Olaha a kol., „Vizualizace funkcí“, Distill, 2017.

Tento projekt se pro klasifikaci opírá o předem vyškolenou síť VGG16 z Oxfordské univerzity. To poskytuje jednu ze dvou CNN, které budeme potřebovat k provedení převodu stylu.

Stylizační síť

Naše stylizační síť dělá práci na vytváření stylizovaných obrázků. Naučíme se parametry, které nám to umožní pomocí sítě klasifikátorů jako výcvikového nástroje.

Abychom to mohli udělat, vezmeme pro trénink velké množství obrázků a opakujeme následující kroky:

  1. Klasifikátor CNN napájíme obrázkem stylu, zdrojovým obrázkem a stylizovaným obrázkem z aktuální stylizace CNN
  2. Vybíráme reprezentace stylu a obsahu ze sítě klasifikátorů
  3. Upravujeme stylizaci CNN tak, aby stylizovaný obrázek měl styl, který se více podobá obrazu stylu, a obsah, který se podobá zdrojovému obrázku.

V pseudoppythonovém kódu:

A obrazně:

Zachycení stylu spočívá v zachování funkcí malého měřítka obrazu Styl a zachování prvků ve velkém měřítku zdrojového obrázku. Stručně řečeno, hledáme stylizaci CNN, která udržuje styl „modré a hnědé vířící barvy“ a zároveň udržuje „dva programátory, sloupec a spoustu stolů“ zdroje.

Abychom to zachytili, vypočítáme rozdíl mezi stylem a stylizovaným počátkem v síti a zdrojem a stylizovaným později v síti. Naše ztrátová funkce - věc, kterou se snažíme minimalizovat změnou parametrů naší stylizační sítě - je součet těchto dvou termínů. Ve skutečnosti, jak je podrobně uvedeno v našem předchozím příspěvku, jsme zahrnuli zvláštní termín ztráty stability, který pomohl vytvořit stabilní přenos stylu z jednoho snímku na druhý. Kód pro naši aktualizovanou implementaci najdete zde.

Naše implementace nyní vytrénuje nový styl z obrázku 512 x 512 pixelů za ~ 6 hodin a využívá 4 GPU.

Nasazení našeho systému

Naše demo bylo nasazeno na obrazovce po celém světě a bylo dokonce promítnuto do budov zde v Montrealu (jako součást projektu Up375).

Při nasazení dema na real-time jsme čelili několika výzvám. Hlavními problémy byly propustnost a latence: jak bychom mohli vzít video, spustit jej pomocí našeho modelu a poté jej znovu vykreslit v reálném čase?

Dokončený systém běží na minipočítači Zotac EN1070 s GPU NVIDIA GeForce 1070 a je snadno přenosný

H264 dekódování na GPU

Kamera, kterou používáme (Logitech C920), vydává předkomprimované video H264. Naivní přístup by spočíval v dekódování tohoto videa pomocí FFmpeg na GPU, přivedení RGB pixelů zpět na CPU a jejich opětovném nahrání jako vstupu pro CNN.

Ukázalo se však, že převod CPU-GPU přidal významnou latenci tím, že při kopírování nutil synchronizační body mezi CPU a GPU. Řešením bylo dekódovat video H264 přímo pomocí palubního motoru NVDEC (hardwarově akcelerovaný dekodér, který je součástí Zotac EN1070). To umožnilo předávání dekódovaných rámců přímo jako vstupy do našeho CNN, což umožňuje GPU a CPU umožnit plně asynchronní běh.

OpenGL vykreslování z GPU

Po dekódování našeho videa a spuštění naší sítě na GPU jsme se potýkali s podobným problémem při předávání výsledné matice zpět do procesoru pro konvenční vykreslování. Řešení bylo opět výpočtem na GPU. Pomocí rozhraní CUDA / OpenGL Interop API můžeme výstupy vykreslit přímo z GPU a vyhnout se dalším úzkým místům I / O.

Integrace na Twitteru

Demo kabina integruje funkce publikování stylizovaných obrázků na Twitteru. Zdroj lze zobrazit na adrese @ElementAIArt.

Použité styly

Vycvičili jsme stylizační sítě pro řadu našich oblíbených nástěnných maleb v okolí Montrealu.

Pro každý styl jsme ořízli sekci, která měla ty správné vlastnosti, které jsme si přáli, aby se síť naučila. Níže najdete celou práci a oříznuté sekce, které jsme použili pro trénink. Na začátku tohoto příspěvku můžete vidět některé z těchto vzorků v akci ve videu.

Notre Dame de Grâce, autorem A'Shop. 6310 rue Sherbrooke Ouest. Stříkací barva na cihlu, 2011.Sans titre, autor: Bicicleta Sem Freio. 3527 bulvár St-Laurent. Stříkací barva na cihlu, 2015Bez názvu, El Curiot. 265 rue Sherbrooke Ouest. Akryl na cihly, 2015Quai des Arts, EN MASSE. 4890 bulvár St-Laurent. Stříkací barva na cihlu, 2011Galaktický obří, Chris Dyer. 3483 rue Coloniale. Stříkací barva na cihlu, 2013Bez názvu, David 'Meggs' Hook. 3527 bulvár St-Laurent. 2016Podzimní listí série # 1 od Matt W. Moore. 4660 bulvár St-Laurent. 2014Mémoire du coeur Julian Palma. 4505 rue Notre-Dame Ouest. Stříkací barva na cihlu, 2016Bez názvu, SBuONe. 4243 bulvár St-Laurent. 2016Sans titre, od Zilon. 53 rue Marie-Anne. Nastříkejte barvu na různé médium

Poděkování

Tuto práci provedli Jeffrey Rainy, Eric Robert, Jean Raby a Philippe Mathieu, s podporou týmu Element AI. Děkuji Xavier Snelgrove za komentáře k příspěvku.

Spoléhal se na otevřenou zdrojovou kódovou základnu Rychlejšího přenosu neurálních stylů společností Yusuketomoto, což je implementace percepčních ztrát pro přenos stylů v reálném čase a super-rozlišení Justinem Johnsonem, Alexandrem Alahi a Li Fei-Fei.