Цель Генеративных состязательных сетей (GAN) - создать убедительные новые образцы после изучения особенностей и шаблонов входного набора данных с использованием обучения без учителя.

Модель GAN обычно более сложна, чем обычная сеть глубокого обучения для компьютерного зрения. «Состязательная» часть определения означает, что существуют две нейронные сети, работающие вместе: одна действует как генератор, а другая как дискриминатор. Первый генерирует тонны поддельных образцов, в то время как последний получает данные, случайно выбранные из реальных или сгенерированных образцов, и должен классифицировать, является ли то, что видят, реальным или фальшивым.

Обе модели обучаются вместе, чтобы достичь цели в состязательной игре. Когда дискриминатор отклоняет выборки, генератор пытается улучшить. С другой стороны, если его обманывают множеством правдоподобных подделок, дискриминатор должен улучшить свои возможности. В конце концов, когда дискриминатор больше не может различать настоящие и поддельные образцы, достигается равновесие, и обучение можно прекратить. После завершения обучения генератор готов произвести столько фальшивых данных, сколько нам нужно.

Большинство случаев использования GAN относятся к визуальной области: передача стиля (CycleGAN), синтез текста в изображение, сверхвысокое разрешение и многие другие. В последнее время сетям GAN уделяется много внимания: эффективность, разрешение и качество изображений, созданных с помощью генеративных методов, со временем улучшились.

Nvidia, в частности, дважды за последние три года вызвала ажиотаж своим семейством сетей GAN, основанных на стилях. StyleGAN продемонстрировал новый подход к традиционным GAN с серьезной модификацией генератора и продвинутыми методиками обучения. StyleGAN2, последнее поколение, может создавать фотореалистичные высококачественные лица, сохраняя при этом контроль над стилем.

Исследовательская группа Nvidia порадовала публику почти идеальным синтезом лиц (из FFHQ), кошек, машин, лошадей, церквей, спален (из LSUN). Результаты потрясающие!

Давай поиграем с LEGO!

Хорошо известной проблемой GAN является их потребность в большом количестве высококачественных изображений, даже с учетом последних последних усовершенствований. Например, наборы данных, используемые Nvidia, имеют порядок 100 тыс. Изображений (с увеличением данных).

В этой статье я исследую обучение StyleGAN2 на обычной рабочей станции и увижу результаты на небольшом пользовательском наборе данных.

Для этой задачи я решил создать минифигурки LEGO!

Поиски набора данных

К сожалению, общедоступного набора данных для LEGO Minifigures нет.

BrickLink перечисляет, возможно, все (›12k) минифигурок за 40 лет. Однако им требуется предварительное письменное разрешение для очистки страниц инвентаря. Я написал, спрашивая, но, к сожалению, мне не ответили.

Поэтому мне пришлось прибегнуть к сканированию других источников, где «Положения и условия» более мрачны: eBay, Instagram, Flickr, форумы энтузиастов. Это было далеко не идеально, но за несколько дней мне удалось собрать ~ 500 изображений.

Разнообразие источников оставило мне очень разнообразный набор данных с точки зрения разрешений изображений, соотношений сторон и условий освещения. Некоторые минифигурки были получены из чистых графических рендеров, другие - из старых размытых фотографий. У некоторых был фотографический белый фон, у других - фирменные цветные опорные пластины LEGO. Некоторые из них используют царапины и отметины.

Мой набор данных был достаточно скудным, чтобы я не мог придирчиво подходить к темам LEGO, чтобы включить их, но я с самого начала отказался от необычных тем, таких как Duplo, Technic или Juniors.

Изображения в основном имеют портретную ориентацию, но сети требуются квадратные изображения. Тренировка всего тела минифигурки была бы непрактичной из-за присутствующих там подушечек и шума. Задача была изменена, чтобы ограничить генерацию только лицами минифигурок. За пару дней ручной маркировки я смог пометить, обрезать и изменить размер лица всех минифигурок с разрешением 128х128 пикселей.

Настраивать

Каким бы скучным оно ни было, сбор данных - это первый важный шаг. После этого вам все равно нужно настроить среду обучения. Клонируйте репозиторий, установите все зависимости: CUDA 10.x, CUDNN 7.x, NVCC, Tensorflow 1.15.0 и несколько других библиотек. Кстати, вот мой экспортный файл conda, если он вам нужен.

Остался последний этап, связанный с набором данных. Изображения не используются как есть, а упаковываются как файлы TFRecords с разным разрешением и

Обучение

Моя тренировочная установка состоит из одной видеокарты Nvidia GeForce RTX 2070 SUPER. Это высокопроизводительный графический процессор последнего поколения (Turing), но он далек от мощности, необходимой для такого рода глубокого обучения.

StyleGAN2 основан на архитектуре StyleGAN, добавляя различные приемы и улучшения для улучшения результатов. Существует несколько сетевых конфигураций: от базовой линии StyleGAN (конфигурация a) до собственно StyleGAN2, все навороты (конфигурация f) с увеличивающимися промежуточными уровнями улучшений.

Разрешение кадрирования 128x128 довольно низкое для сети, которая может обрабатывать изображения 1024x1024. Однако сосредоточение внимания на изображениях с низким разрешением позволило мне избежать самой дорогой конфигурации и вернуться к немного более быстрой и легкой config-e.

Я отключил вычисление метрик, чтобы ускорить обучение, и полагался на визуальный контроль во время процесса. Это дало прибавку к ускорению ~ 10%, но я потерял формальный способ отслеживать тренировку.

Активация зеркального увеличения эффективно удвоила размер набора данных без каких-либо усилий, достигнув количества изображений 1k. Настройки по умолчанию для всего остального.

Я решил, что сомнительно, тренироваться без трансферного обучения из-за удаленности функций этого набора данных от тех, на которых Nvidia обучила свои сети. В конце концов, человеческие лица, лошади или кошки сильно отличаются от голов LEGO.

Начать обучение было так просто:

Вначале во вновь созданной папке результатов вы должны видеть только реальные образцы и fakes_init.png.. Если вы не использовали переносное обучение, как я, ваши поддельные образцы должны выглядеть так. Эти цветные пятна - просто шум: сеть еще не обучена.

По мере обучения вам следует отслеживать папку results на предмет частичных результатов обучения. Каждые несколько итераций фреймворк создает 1024 образца, чтобы вы могли оценить, как проходит обучение.

Переход от цветных пятен к искаженным, но узнаваемым LEGO занял всего около 3 часов.

Я был впечатлен и не мог дождаться появления следующей пробной партии. Изображения 40h и 1600K, я остановил обучение и провел визуальную оценку.

Обычные минифигурки LEGO, например городские, уже смотрелись довольно круто, пусть и немного «желеобразно».

Фирменные глаза и улыбка LEGO были в основном нормальными, в то время как сложные выражения лица или черты лица оставались неряшливыми.

Результаты были намного хуже по менее распространенным или странным темам, таким как Nexo Knights, Ninjago, Legends of Chima, Star Wars.

Вот таймлапс 16 образцов после 40 часов обучения.

А вот и последняя пробная партия.

Хотя финальные подделки были довольно крутыми, я догадался, что могу улучшить качество, удалив самые экзотические минифигурки или те, у которых закрыто лицо. Если вы думаете, что головы LEGO - это всего лишь довольно скучные маленькие желтые штуки, о, боже, вас ждет сюрприз ...

В результате «чистки» у меня осталось около 400 пригодных для использования изображений до увеличения данных. Решил добавить еще изображений. После еще одного раунда сбора данных и подготовки данных счетчик показал, что 700 голов LEGO доступны до увеличения.

Я начал второй раунд обучения, на этот раз возобновив последний сетевой снимок первого обучения. Я тренировался для еще 5000К изображений (~ 110ч) со скоростью около 1200К изображений в день.

Окончательная оценка

Судить по окончательным фальшивым образцам труднее.

Около половины созданных изображений выглядят настоящими. Большинство образцов стабильно улучшались, даже если очень медленно. Они выглядят правдоподобно при правильном взгляде, аксессуарах, тенях и освещении.

Функции, добавленные во втором раунде обучения (например, шлемы с забралом, бороды, короны, треуголки и т. Д.), Появлялись, даже если они были только в одном или двух реальных образцах.

В некоторых случаях было трудно увидеть реальные улучшения. Лица продолжали подпрыгивать, но не стабилизировались в связной форме. В отношении конкретных руководителей у меня сложилось впечатление, что сеть все еще была предвзятой и вынуждена «забыть» о цифрах, увиденных на первом тренинге. Это ясно видно в нескольких кляксах Ниндзяго / Звездных войн, которые все еще присутствуют.

Окончательный интервал 110 часов для 16 образцов (извините, пришлось уменьшить разрешение, чтобы оставаться в пределах среднего размера загрузки).

И наконец… финальные сгенерированные фейки! (Здесь полное разрешение 4к)

Выводы

Учитывая набор данных в моем распоряжении, я скептически относился к успеху задачи. Вместо этого можно было обучить StyleGAN2 с нуля с помощью одного графического процессора менее чем за неделю. По моей оценке, «достаточно хороших» подделок около 50%. Меня вполне устраивает эта цифра, но можно ли улучшить?

разрешение

Глядя на статью StyleGAN2, становится довольно ясно, что вначале сеть фокусируется на изображениях с низким разрешением, но по мере обучения фокус смещается на более высокие разрешения.

Использование изображений с более высоким разрешением (256x256 или 512x512), вероятно, может повысить качество подделок.

Тренировочное время

Помогли бы тренировки дольше? Для моей сетевой конфигурации (config e) вклад изображений 128x128 уже уменьшается при приближении к отметке 5000K изображений, а после этого становится довольно низким. Без изображений с более высоким разрешением длительное обучение, вероятно, не поможет.

Размер набора данных

Коллапс режима (то есть случаи, когда генератор упорно генерирует одни и те же примеры снова и снова) присутствует, но не в такой степени, как я думал. Несомненно, увеличение количества элементов набора данных могло бы помочь в сокращении этих случаев.

Трансферное обучение

Я понятия не имею, может ли это улучшить качество или время обучения, и насколько это возможно. Но я бы хотел повторить весь эксперимент с нуля, точно настроив сеть из предварительно обученного состояния. Было бы весело наблюдать, как StyleGAN пытается объединить настоящие лица и головы LEGO.

Свяжитесь со мной через Твиттер.