image

Привет, Хаброжители! Пока такая ситуация за окном мы решили поделиться занимательным отрывком из нашей книги «Генеративное глубокое обучение. Творческий потенциал нейронных сетей» Дэвида Фостера.

Яблоки и апельсины


Бабуля Смит и Флорида — совладелицы овощного магазина. Чтобы добиться максимальной эффективности, каждая заботится о своих полках в магазине. Например, бабуля Смит гордится своим выбором яблок, а Флорида часами раскладывает апельсины, добиваясь их идеального расположения. Обе настолько уверены в себе, что согласились на сделку: прибыль от продажи яблок пойдет на долю бабули Смит, прибыль от продажи апельсинов — на долю Флориды.

К сожалению, ни бабуля Смит, ни Флорида не намерены состязаться честно. Когда Флорида не видит, бабуля Смит пробирается к витрине с апельсинами и начинает красить их в красный цвет, чтобы они выглядели как яблоки! Флорида действует точно так же: она пытается сделать яблоки бабули Смит более похожими на апельсины, используя спрей подходящего цвета, когда та поворачивается спиной. Из-за этого покупатели часто выбирают не те фрукты, какие намеревались купить. Те, кто собирался купить апельсины, иногда по ошибке выбирают яблоки, покрашенные Флоридой, а те, кто хотел купить яблоки, по ошибке выбирают апельсины, замаскированные бабулей Смит. В конце концов прибыль за каждый фрукт суммируется и делится соответственно договоренностям — бабуля Смит теряет деньги всякий раз, когда одно из ее яблок продается как апельсин, а Флорида — когда один из ее апельсинов продается как яблоко.

После закрытия магазина обе приступают к наведению порядка на полках с фруктами. Но вместо того чтобы пытаться отмыть краску, нанесенную соперницей, обе просто красят подделки, стараясь привести их в первоначальный вид. Для них важно сделать эту работу правильно: если фрукты не будут выглядеть как нужно, то они не смогут продать их на следующий день и снова потеряют прибыль. Чтобы убедиться в правильности своих действий, они иногда проверяют свои методы на своих собственных фруктах. Флорида опрыскивает свои апельсины и проверяет, выглядят ли они точно так же, как и первоначально. Бабуля Смит проверяет свои «умения» на яблоках. Если они обнаружат очевидные несоответствия, то им придется тратить с трудом заработанную прибыль на изучение более совершенных методов (рис. 5.2).

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

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

image

image

CycleGAN


Предыдущая история — это аллегория, описывающая развитие одного из ключевых направлений в генеративном моделировании, известного как передача стиля: циклически согласованную генеративно-состязательную сеть, или CycleGAN. Статья, описывающая эту сеть, является значительным шагом вперед в области передачи стиля и показывает, как обучить модель, способную копировать стиль из набора эталонных изображений в другое изображение без использования обучающего набора парных примеров.

Существовавшие до этого модели передачи стиля, такие как pix2pix, требовали, чтобы каждое изображение в обучающем наборе существовало и в исходной, и в целевой форме. Для некоторых задач переноса стиля (например, для преобразования черно-белых фотографий в цветные, карт — в спутниковые снимки) можно создать такой набор данных, но для других это просто невозможно. Например, у нас нет оригинальных фотографий пруда, с которого Моне написал свою серию «Водяные лилии», и картины кисти Пикассо с изображением Эмпайр-стейтбилдинг. По аналогии, потребовались бы огромные усилия и для того, чтобы получить фотографии лошадей и зебр, стоящих в одинаковых позах. Статья с описанием CycleGAN вышла всего через несколько месяцев после статьи, описывающей метод pix2pix, и показывает, как обучить модель решать те же задачи, но в отсутствие пар исходных и целевых изображений. На рис. 5.4 показана разница между парными и непарными наборами данных pix2pix и CycleGAN соответственно. Если метод pix2pix позволяет моделировать изменения только в одном направлении (от исходного стиля к целевому), то CycleGAN обучает модель в обоих направлениях одновременно, благодаря чему модель учится преобразовывать исходные изображения в целевые и обратно. Это свойство обусловлено архитектурой модели, поэтому возможность преобразования в обратном направлении вы получаете автоматически.

image

Посмотрим, как сконструировать модель CycleGAN с помощью Keras. Для начала возьмем за основу предыдущий пример с яблоками и апельсинами, пройдемся по всем частям CycleGAN и поэкспериментируем с ее архитектурой. Затем применим тот же подход, чтобы создать модель, которая сможет применить стиль определенного художника к фотографии по вашему выбору.

Ваша первая сеть CycleGAN


Большая часть следующего кода была заимствована из репозитория Keras-GAN (http://bit.ly/2Za68J2), поддерживаемого Эриком Линдером-Нореном (Erik Linder-Noren). Этот замечательный ресурс содержит множество примеров генеративно-состязательных сетей из разных книг, реализованных с помощью Keras.

Для начала вам нужно загрузить данные, которые будут использоваться для обучения. В папке, куда вы клонировали репозиторий с примерами для книги, выполните команду:

bash ./scripts/download_cyclegan_data.sh apple2orange

В загруженном наборе изображений яблок и апельсинов, которые мы будем использовать далее, данные разбиты на четыре папки: trainA и testA содержат изображения яблок, а trainB и testB — изображения апельсинов. То есть A представляет пространство изображений яблок, а B — пространство изображений апельсинов. Наша цель — обучить модель на наборах данных в папках train преобразовывать изображения из набора A в набор B, и наоборот. Изображения в папках test мы используем для проверки качества модели.

» Более подробно с книгой можно ознакомиться на сайте издательства
» Оглавление
» Отрывок