Сахил Сингла

28 август 2017 г. · 11 минути четене

Тъй като участвах в отличното дълбоко обучение за кодери на Джеръми Хауърд, бях доста заинтригуван от трансфера на стил. Исках да проуча как промяната на конфигурацията на загубите променя генерираното изображение. И исках да видя как използването на различни мрежи за загуби може да генерира различни изображения. Различните мрежи за загуби, които използвах, са vgg-16 и vgg-19. Това е публикация в блога за моите открития.

конфигурации

Тези, които не са запознати с трансфера на стилове, могат да прочетат тази уводна публикация в блога за това как работи.

Всички експерименти са направени, като се използват следните изображения със съдържание и стил:

Всички обучени мрежи за загуби, използвани в тези експерименти, бяха изтеглени от хранилището на tensorflow slim-models. Освен ако не е посочено, първоначалното изображение е изображението на съдържанието, а използваната предварително обучена мрежа е vgg-16. За да разберете кои слоеве имам предвид под conv1_2, conv2_2 и т.н., стартирайте

в това репо. Всички следващи експерименти бяха проведени с помощта на кода, даден в това репо.

Експеримент 1: Тренирайте, използвайки загуба на стил от един слой наведнъж

Използвах изходите на тези 5 слоя за изчисляване на загубата на стил: conv1_2, conv2_2, conv3_3, conv4_1, conv5_1. Като начален експеримент зададох теглото на съдържанието и теглото на телевизията на нула, инициализирах изображението на „шум“. И генерира изображения на стила, използвайки всеки от тези слоеве (използвайки един слой за изчисляване на загуба на стил в даден момент). Генерираните стилови изображения трябва да съответстват на пастиците на картината.

Следват изходите:

В изходите от по-ранни слоеве (conv1_2 и conv2_2), образците в изображението на стила, които изискват по-малко възприемчиво поле (като фон с цвят на кафе), са видни. В по-късните слоеве (conv3_3 и conv4_1) по-големите модели са по-забележими. Изходът на conv5_1 изглежда по-скоро като боклук. Мисля, че това е така, защото много малко активирания са активни на този слой. Така че не допринася много за загубата. И същото е показано в първоначалните загуби по-долу.

За генериране на стилизирани изображения използвах conv3_3 за изчисляване на загубата на съдържание.

Когато поддържах теглата на всичките 5 слоя равни на 1, следното бяха стойностите на съдържанието и загубата на стил по слой с изображение, инициализирано на „съдържание“:

Когато поддържах тежестите на всичките 5 слоя равни, по-долу бяха съдържанието на слоевете и стойностите на загуба на стил с изображение, инициализирано на „шум“:

Както е очевидно, приносът на по-късните слоеве към загубата на стил е много малък и в двата случая. И в повечето публикувани работи за прехвърляне на стил, теглото е дадено равно на всички слоеве, което няма смисъл.

След това исках да видя какъв вид стилизирани изображения ще се генерират, ако тренирам, използвайки само един от тези слоеве.

Както е видно от по-горе генерираните изображения, размерът на мазката се увеличава при преминаване от conv1_2 към conv5_1. Има някои странни модели в изхода от conv5_1. Може би защото conv5_1 не съдържа много информация (трябваше да мащабирам загубата на този слой с 1e6, за да генерирам това изображение). Това е просто шум. Любимият ми изход от тези 5? изход от conv3_3.

Експеримент 2: Тренирайте, като използвате загуба на съдържание от един слой наведнъж

Използвах изходите на 3 слоя за изчисляване на загуба на съдържание: conv2_2, conv3_3, conv4_1 един по един.

Първо се опитах да намеря изображенията, генерирани чрез задаване на тегло на стила и телесно тегло на 0 и изчисляване на загубата от всеки от тези слоеве на съдържание, т.е. използвайки само загуба на съдържание.

Както е видимо, докато преминаваме от conv2_2 към conv4_1, информацията от високо ниво като прозорци и т.н. все още се улавя, но информацията от ниско ниво като ръбове, ъгли и т.н. все повече се размива.

След това генерирах стилизирани изображения (използвайки съдържание, стил и загуба на телевизия). За загуба на стил използвах слоя conv3_3. Исках да проверя как ще се промени изходът на изображението от слой conv3_3 в предишния експеримент, ако променя съдържателните слоеве.

По-долу са генерирани изображения:

Отново, както е очевидно. Докато преминаваме от conv2_2 към conv4_1, ръбовете на сградата стават по-тъпи, цветовете са по-избледнели. Заснема се много по-малко от оригиналното съдържание.

Експеримент 3: Тренирайте, използвайки загуби на стил от различни слоеве между два слоя за максимално обединяване в мрежата за загуби

След това исках да видя дали използването на различни слоеве между два максимални обединяващи слоя за изчисляване на загубата на стил променя генерираното стилизирано изображение. За тази цел използвах следните слоеве ‘conv3_1’, ‘conv3_2’ и ‘conv3_3’.

Горепосочените резултати са, когато тренирате, използвайки само загубата на стил. Резултатът от conv3_3 е доста различен от този на conv3_1 и conv3_2.

След това се опитах да създам стилизирано изображение, като използвах тези слоеве за изчисляване на загубата на стил. Слоят, използван за загуба на съдържание, е conv2_2.

Следват генерираните изображения:

Между conv3_1 и conv3_3 артефактите, показани на горното изображение (изход conv3_3) с черни подчертавания, са значително по-високи. И интересно, тъй като пастиците на conv3_3 се различаваха от тези на conv3_1 и conv3_2. Същото е и с генерираното изображение.

Експеримент 4: Тренирайте, използвайки различни размери стилно изображение

Използвах изходите на слоя conv2_2 за изчисляване на загубата на съдържание: conv2_2. За загуба на стил използвах conv2_2 с тегло 1. Вместо да използвам изображението на стила с оригинални размери (928x514), преоразмерих изображението така, че по-късата страна да е равна на определен размер и изрязах централното по-голямо, за да извлека квадрат. Размерите, които опитах, бяха 128, 256, 384 и 512.

Следват генерираните изображения:

Изображенията, генерирани с помощта на стилови изображения с по-ниски размери, не изглеждат добре и дори не показват мазки на изображението на стила.

Отново става ясно, че с увеличаване на размера на стиловото изображение генерираното изображение улавя ударите на четката на художника много по-добре.

Експеримент 5: Тренирайте с помощта на различни vgg мрежи (vgg16 и vgg19)

След това генерирах изображенията от vgg16 и vgg19. Загубата на съдържание е изчислена с помощта на conv2_2, Загуба на стил с помощта на conv3_1.

Първо генерирах само пастиците (поддържайте нула съдържание и тегло на телевизора). Бяха генерирани следните пастици:

Генерираните пастици едва ли бяха по-различни. Така че очаквах стилизираните изображения да не са почти различни, но бях напълно погрешен. Това бяха генерираните изображения:

Изображението, генерирано с помощта на vgg-19, изглежда много по-добре, улавя съдържанието много по-добре. Бях заинтригуван от това и реших да начертая content_loss, style_loss и total_loss на изображението, докато се обучава.

По-важното е, че началната стойност на загуба на стил за vgg-19 беше много по-ниска от тази за vgg-16. Предполагам, че генерираните изображения се оказват различни, тъй като мрежата дава различни „имплицитни“ тегла на загубите на съдържание и стил. Под „имплицитни“ тежести имам предвид тежестите, които мрежата дава на загубите на съдържание и стил сама по себе си, а не поради посочения от мен стил на съдържание и телевизия.

Имайте предвид, че тук vgg16 и vgg19 означават различни функции. По този начин това сравнение не означава точно загуба на съдържание за „vgg-19“ да е по-ниска от тази на „vgg-16“ в абсолютно изражение. Това просто означава, че докато се оптимизира изображението, загубата на стил за vgg-16 придобива много по-голямо значение.

Забележка: - За следващите експерименти (6,7,8) загубата на съдържание е изчислена с помощта на conv2_2, загуба на стил от conv3_1.

Експеримент 6: Тренирайте, използвайки различна инициализация („шум“/„съдържание“)