Kísérletek különböző veszteségkonfigurációkkal a stílusátvitelhez

Sahil Singla

2017. augusztus 28. · 11 perc olvasás

Miközben részt vettem Jeremy Howard kiváló élvonalbeli mély tanulásában a kódolók számára, eléggé érdekelt a stílusátadás. Meg akartam vizsgálni, hogy a veszteségkonfiguráció megváltoztatása hogyan változtatja meg a létrehozott képet. És szerettem volna látni, hogy a különböző veszteségű hálózatok hogyan hozhatnak létre különböző képeket. Az általam használt különféle veszteség hálózatok a vgg-16 és a vgg-19. Ez egy blogbejegyzés a megállapításaimról.

singla

Azok, akik nem ismerik a stílusátadást, elolvashatják ezt a bevezető blogbejegyzést a működéséről.

Az összes kísérletet a következő tartalmi és stílusú képek felhasználásával hajtották végre:

A kísérletekben használt összes képzett veszteség hálózatot letöltöttük a tenzorflow slim-model tárból. Hacsak nincs megadva, a kezdeti kép a tartalmi kép volt, és az előkészített hálózat vgg-16 volt. Futtassa, hogy mely rétegeket értem a conv1_2, conv2_2 stb. Alatt

ebben a repóban. Az összes következő kísérletet ebben a repóban megadott kód felhasználásával hajtottuk végre.

1. kísérlet: edzés stílusvesztés segítségével, egy rétegből

Ennek az 5 rétegnek a kimeneteit használtam a stílusveszteség kiszámításához: conv1_2, conv2_2, conv3_3, conv4_1, conv5_1. Kezdő kísérletként nulla értékre állítottam a tartalom és a tv súlyát, a képet inicializáltam „zajra”. És létrehozta a stílusképeket ezen rétegek mindegyikének felhasználásával (egyszerre egy réteget használva a stílusveszteség kiszámításához). A létrehozott stílusképeknek meg kell felelniük a festmény paszticháinak.

A következők voltak a kimenetek:

A korábbi rétegek kimeneteiben (conv1_2 és conv2_2) kiemelkedőek azok a minták a stílusképben, amelyek kisebb befogadó mezőt igényelnek (például a kávé színű háttér). A későbbi rétegekben (conv3_3 és conv4_1) a nagyobb minták hangsúlyosabbak. A conv5_1 kimenete inkább szemétnek tűnik. Azt hiszem, ennek az az oka, hogy nagyon kevés aktiválás aktív ennél a rétegnél. Tehát nem sokat járul hozzá a veszteséghez. És ugyanez látható az alábbi kezdeti veszteségekben.

A stilizált képek előállításához a conv3_3 értéket használtam a tartalomveszteség kiszámításához.

Amikor mind az 5 réteg súlyát 1-gyel egyenlőnek tartottam, a következők voltak a rétegenkénti tartalmi és stílusvesztési értékek, a kép „tartalomra” inicializálva:

Amikor mind az 5 réteg súlyát egyenlően tartottam, a következők voltak a rétegenként elosztott tartalom és stílusveszteség értékek, a kép „zajra” inicializálva:

Mint nyilvánvaló, a későbbi rétegek hozzájárulása a stílusvesztéshez mindkét esetben nagyon kicsi. És a stílusátadással kapcsolatos legtöbb publikált műben a súly minden réteggel megegyezik, aminek nincs értelme.

Ezután azt akartam megtudni, hogy milyen stilizált képek jönnek létre, ha csak ezen rétegek egyikével edzek.

Amint a fenti generált képekből kitűnik, az ecsetvonás mérete növekszik, amikor a conv1_2-ról a conv5_1-re lépünk. Van néhány furcsa minta a conv5_1 kimenetén. Valószínűleg azért, mert a conv5_1 nem tartalmaz sok információt (ennek a képnek a generálásához 1e6-mal kellett méreteznem ennek a rétegnek a veszteségét). Tehát ez csak zaj. A kedvenc kimenetem ezekből az 5-ből? kimenet a conv3_3-ból.

2. kísérlet: edzés egy-egy rétegből származó tartalomveszteség felhasználásával

A tartalomveszteség kiszámításához 3 réteg kimenetét használtam: conv2_2, conv3_3, conv4_1 egyenként.

Először megpróbáltam megtalálni azokat a képeket, amelyek a stílus súlyának és a tv súlyának 0-ra állításával készültek, és kiszámoltam a tartalmi rétegek mindegyikéből származó veszteséget, vagyis csak tartalomveszteséget.

Amint látható, amikor a conv2_2-ról a conv4_1-re haladunk, a magas szintű információk, például a Windows stb. Továbbra is rögzítésre kerülnek, de az alacsony szintű információk, például a szélek, sarkok stb.

Ezután létrehoztam a stilizált képeket (tartalom, stílus és tv-veszteség felhasználásával). Stílusvesztéshez a conv3_3 réteget használtam. Meg akartam nézni, hogyan változik a kép kimenete az előző kísérlet conv3_3 rétegéből, ha megváltoztatom a tartalmi rétegeket.

A következő képek készülnek:

Ismét, mint nyilvánvaló. Ahogy a conv2_2-ról a conv4_1-re haladunk, az épület szélei tompabbá, a színek halványabbá válnak. Sokkal kevesebb az eredeti tartalom.

3. kísérlet: Vonat a különböző rétegek stílusveszteségeinek felhasználásával a veszteséghálózat két max-pooling rétege között

Ezután azt akartam tudni, hogy a stílusveszteség kiszámításához két réteg (max. Pooling réteg) közötti különböző rétegek használata módosítja-e a létrehozott stilizált képet. Erre a célra a következő „conv3_1”, „conv3_2” és „conv3_3” rétegeket használtam.

A fentiek kimenetek, ha csak a stílusvesztést alkalmazó edzésre kerül sor. A conv3_3 kimenete teljesen eltér a conv3_1 és a conv3_2 kimenetétől.

Ezután megpróbáltam létrehozni a stilizált képet, felhasználva ezeket a rétegeket a stílusveszteség kiszámításához. A tartalom elvesztésére használt réteg conv2_2 volt.

A következő képeket generálták:

A conv3_1 és a conv3_3 között a fenti képen látható képalkotások (conv3_3 kimenet) fekete aláhúzásokkal lényegesen magasabbak. És érdekes módon, mivel a conv3_3 pasztái különböztek a conv3_1 és a conv3_2 pasztéitól. Így a létrehozott kép is.

4. kísérlet: Edzés különböző méretű stíluskép használatával

A conv2_2 réteg kimeneteit használtam a tartalomveszteség kiszámításához: conv2_2. A stílusvesztéshez a conv2_2 súlyt használtam 1. Az eredeti méretû (928x514) stíluskép helyett a képet úgy méreteztem át, hogy a rövidebb oldal megegyezzen egy adott mérettel, és a nagyobb méretet központosan levágtam egy négyzet kinyerésére. A kipróbált méretem 128, 256, 384 és 512 volt.

A következő képeket generálták:

Az alacsonyabb méretű stílusképekkel készített képek nem néznek ki jól, és nem is mutatják a stíluskép ecsetvonásait.

Ismét nyilvánvaló, hogy a stílus képének növekedésével a létrehozott kép sokkal jobban megragadja a festő ecsetvonásait.

5. kísérlet: Vonat készítése különböző vgg hálózatok (vgg16 és vgg19) használatával

Ezután generáltam a képeket a vgg16 és a vgg19 fájlokból. A tartalomveszteséget a conv2_2, a stílusvesztést a conv3_1 segítségével számoltuk ki.

Először csak a pasztákat generáltam (a tartalom és a tv súlya nulla). A következő paszták jöttek létre:

A keletkezett pástétomok alig különböztek egymástól. Tehát arra számítottam, hogy a stilizált kép alig különbözik egymástól, de teljesen tévedtem. Ezek voltak a létrehozott képek:

A vgg-19 használatával létrehozott kép sokkal jobban néz ki, sokkal jobban megragadja a tartalmat. Engem ez érdekelt, és úgy döntöttem, hogy a kép tartalmának elvesztését, stílusának elvesztését és teljes elvesztését ábrázolom, amint betanul.

Ennél is fontosabb, hogy a vgg-19 kezdő stílusvesztesége sokkal alacsonyabb volt, mint a vgg-16 esetében. Gondolom, a létrehozott képek eltérőnek bizonyulnak, mert a hálózat különböző „implicit” súlyokat ad a tartalom és a stílus veszteségeinek. Az „implicit” súlyok alatt azt értem, hogy a hálózat súlyokat ad a tartalom és a stílus veszteségeinek önmagában, nem az általam megadott tartalmi stílus és tv súlyok miatt.

Vegye figyelembe, hogy itt a vgg16 és a vgg19 különböző funkciókat jelöl. Így ez az összehasonlítás nem jelenti azt, hogy a „vgg-19” abszolút értelemben alacsonyabb lenne, mint a „vgg-16”. Ez csak azt jelzi, hogy a kép optimalizálása közben a vgg-16 stílusvesztése sokkal nagyobb jelentőséget kap.

Megjegyzés: - A következő kísérletekhez a (6,7,8) tartalomveszteséget a conv2_2, a conv3_1 stílusveszteségének felhasználásával számoltuk ki.

6. kísérlet: Vonat készítése különböző inicializálással („zaj”/„tartalom”)