Самый глубокий из учеников - Анируддх Бхарадвадж, Чарли Хванг, Рачит Катария, Чарльз Ли

Мотивация

Apple, Google, McDonald’s - у всех есть вневременные значки, которые передают миссию компании и задают тон для внешних коммуникаций. С ростом цифровых медиа и быстрым распространением мобильных телефонов спрос на высококачественный цифровой контент, важнейшим компонентом которого является брендинг, растет в геометрической прогрессии. Фактически, «77 процентов руководителей маркетинга B2B считают, что брендинг имеет решающее значение для роста» [1]. На это есть серьезная причина; дизайнеры могут предоставить ценный, ориентированный на человека взгляд на продукт. Наиболее заметным представлением этих представлений сегодня является значок.

Наша основная мотивация - преодолеть барьер создания качественных иконок для авторов, которые хотят выпускать ценные продукты по всему миру.

Заявление о проблеме

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

Высокая интуиция

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

Набор данных

Никаких обучающих наборов значков не существовало, поэтому мы решили создать собственный надежный набор данных, используя существующие значки из онлайн-магазинов приложений. Используя стандартный инструмент для извлечения данных из API, мы собрали набор данных из примерно 11 000 значков из Apple App Store [2]. Изначально мы хотели очистить более 100 000 значков, однако из-за ограничений этих инструментов для очистки и ограничения скорости API Apple, мы не смогли этого сделать.

Изначально все значки были извлечены в формате JPEG с разрешением 100x100x3, которое затем мы уменьшили до 32x32x3, чтобы сократить время обучения. Мы также классифицировали изображения по их основному типу жанра (например, книги, социальные сети, путешествия) и типу коллекции (например, самые бесплатные, самые платные, самые прибыльные). Помимо самих значков, мы также собирали метаданные для каждого значка, хранящиеся в виде файлов JSON. Для более поздних экспериментов, в которых не использовался основной тип жанра, полученный из Apple App Store, мы создали отдельный упорядоченный набор данных, чтобы сократить время, необходимое для настройки эксперимента.

Примерное представление наших значков и метаданных можно увидеть ниже:

Метод

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

Чтобы выполнить это согласование, мы рассмотрели множество существующих реализаций GAN и остановились на подходе, в котором мы обусловили функции потерь генератора и дискриминатора на быстро закодированной метке каждого значка, что привело к следующей функции потерь:

Мы также экспериментировали с внесением шума в метки с горячим кодированием посредством дополнительного умножения матриц между матрицей меток с горячим кодированием, с формой (размер пакета, количество меток) и матрица шума с формой (# меток, скрытый размер), взятой из 𝑁 (𝜇, 𝜎²)

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

В нашем подходе, основанном на ResNet, мы пропустили наши значки 32x32x3 через предварительно обученную модель ResNet-18, которая перекроила наши значки в 392 различных ярлыка ImageNet. Затем мы быстро закодировали эти метки и передали их в качестве векторов условий в нашу GAN, интуитивно полагая, что ResNet, сеть распознавания SotA, может более тесно сгруппировать значки, чем по их основным жанрам.

С другой стороны, в нашем подходе, основанном на BERT, мы взяли описания каждого значка и пропустили их через библиотеку извлечения ключевых слов под названием RAKE (быстрое автоматическое извлечение ключевых слов), чтобы извлечь самые популярные ключевые слова из каждого описания. Затем мы преобразовали каждое ключевое слово в вектор внедрения формы (1,1024), передав их через BERT, и усреднили все векторы внедрения для каждого значка, чтобы получить окончательный вектор условий, переданный в нашу GAN.

Эксперименты

DC-GAN

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

Однако, как видно из приведенной выше выборки выходных данных, взятых из DC-GAN после 80 периодов обучения (~ 14 часов), потери генератора сначала низкие, но затем резко возрастают и остаются между 2 и 5, в то время как потери дискриминатора начинаются выше потерь генератора, но быстро падает до значений от 0 до 1. Это указывало на то, что дискриминатор быстро научился различать истинное значение земли и выходной сигнал генератора, что привело к тому, что генератор со временем перестал улучшать реализм своих выходных сигналов. Это привело к появлению значков, которые не были ни красочными, ни опознаваемыми.

PGGAN

Затем мы решили попробовать использовать PGGAN, также известные как Progressive Growing of GAN.

PGGAN имеют дискриминатор и генератор, разрешение которых постепенно увеличивается от низкого до высокого. По мере продвижения PGGAN к модели добавляется больше слоев, что увеличивает уровень детализации сгенерированных изображений. Мы специально использовали реализацию из этого репозитория Github [3] с использованием Google Colab.

Мы решили попробовать PGGAN, поскольку они обеспечивают большую стабильность и скорость по сравнению с архитектурой Vanilla GAN. PGGAN также очень хорошо работают при генерации изображений CIFAR-10, поэтому мы решили, что они будут успешными при генерации значков, поскольку изображения CIFAR-10 и наши очищенные значки имеют одинаковое качество и детализацию. Единственный аспект, который нас интересовал, заключался в том, что иконки значительно более абстрактны, чем естественные изображения, найденные в наборе данных CIFAR-10.

Результаты после ~ 7 часов обучения на одном графическом процессоре Tesla K80 приведены ниже:

Мы были удивлены уровнем качества и детализации PGGAN, несмотря на относительно небольшое количество ресурсов, вложенных в обучение модели.

Безусловный стильGAN

Архитектура StyleGAN является расширением PGGAN. Генератор больше не использует точку из скрытого пространства; скорее, он использует картографическую сеть и слои шума. Картографическая сеть позволяет модели извлекать различные аспекты изображения (например, передний план, фон) и дает модели контроль над присутствующими стилями более высокого уровня. Дополнительные слои шума, представленные для каждой карты объектов, добавляют более детальное понимание каждого стиля значков на пиксель.

Мы попытались использовать этот подход, поскольку в прошлом он доказал свою эффективность при смешивании черт лица для создания реалистичных изображений человеческих лиц [4]. Поскольку значки приложений, как правило, имеют разные управляемые стили (например, текст, цвет, форму) и уровень детализации, StyleGAN оказался наиболее подходящим GAN для наших целей. Мы специально использовали официальную реализацию StyleGAN в Tensorflow от NVLabs [5].

Наш первый эксперимент StyleGAN был направлен на то, чтобы определить, может ли он генерировать высококачественные синтетические значки из всего нашего набора данных без каких-либо условий. Учитывая далеко не идеальные результаты недавнего использования DCGAN и StyleGAN по сравнению с PGGAN, это дало бы нам уверенность в том, что StyleGAN может служить лучшей базовой моделью для дальнейшего развития.

Мы натренировали наш StyleGAN на 250 тиков, где каждый тик соответствует одному запуску из 10 000 изображений на наших входных значках 32x32x3. После 34 часов обучения на графическом процессоре Tesla V100 мы получили следующие результаты:

Эти результаты с качественной точки зрения казались очень сопоставимыми с реальными значками набора данных. На множестве красочных фонов отчетливо видны сердечки, видеокамеры и надписи.

Жанрово-обусловленный стильGAN

Учитывая многообещающие результаты нашего базового StyleGAN, мы продвинулись вперед со вторым экспериментом, чтобы настроить StyleGAN с одним горячим кодированием жанров приложений. Этот вариант использования казался более актуальным и полезным с точки зрения вывода значков для дизайнера, уже имеющего в виду жанр приложения.

Мы натренировали наш недавно подготовленный StyleGAN для 250 тактов на наших входах значков 32x32x3, разделенных на 25 отдельных жанров. После 28 часов обучения на GPU Tesla V100 мы получили следующие результаты:

(Жанры в порядке сверху вниз: Развлечения, Финансы, Справочная информация, Образование, Фото и видео, Бизнес, Здоровье и фитнес, Новости, Производительность, Еда и напитки)

Эти результаты вызывают две основные проблемы: качество и распространение. Что касается качества, похоже, что иконки значительно страдают от узнаваемости стиля по сравнению с нашим базовым уровнем. Скорее всего, это связано с ограниченным количеством иконок на каждый жанр, на котором StyleGAN может тренироваться. Распространение - еще одна проблема, которую мы изначально не исследовали. Глядя на настоящие значки наборов данных по жанрам, очень трудно найти отличительный набор стилевых характеристик между строками. Другими словами, жанровое распределение визуально очень похоже. Только Игры выделялись, учитывая, что приложения в этом жанре обычно имеют более сложные, сложные фигуры и границы.

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

ResNet-Conditioned StyleGAN

Поняв, что распределение по жанрам не является уникальным, мы рассмотрели альтернативные способы группировки значков на основе сходства. Группировать значки вручную на основе качественного сходства было нереалистично из-за размера нашего набора данных. Поэтому мы решили использовать ResNet для передачи обучения и предварительной классификации нашего набора данных по классам, указанным в базе данных ImageNet [6]. В частности, мы использовали предварительно обученную модель ResNet-18 из библиотеки CNTK [9]. Мы выбрали ResNet в качестве нашей архитектуры, потому что она по-прежнему остается одной из лучших с точки зрения точности и имеет наиболее общедоступные предварительно обученные модели.

Хотя обучение предварительно обученной модели ResNet-18 в области значков дало бы наилучшие результаты, мы решили использовать модель как есть. Обучение модели потребовало бы создания меток для значков и их ручного присвоения части нашего набора данных. Это было бы не лучшее использование нашего времени, тем более, что мы не знали, даст ли ResNet разумные результаты.

ResNet фактически сумел сгруппировать похожие на вид значки вместе в 392 метки базы данных ImageNet. Поскольку мы получили разумную кластеризацию, мы преобразовали классы в один горячий вектор и использовали их в той же модели Conditional StyleGAN из условного обозначения жанра. После 34 часов обучения на одном графическом процессоре Tesla V100 мы получили следующие результаты:

Мы обнаружили, что распределение по классам было намного более четким! Как вы можете видеть на приведенных выше иллюстрациях, строки с одинаковым цветом фона или формой переднего плана в реальном выражении преобразованы в один и тот же соответствующий цвет фона или форму переднего плана в подделках (например, четвертая строка с белым фоном и 7-я строка с круглой передние планы).

Однако некоторые строки, похоже, не соответствовали их достоверному распределению, и мы хотели понять, почему. Для этого мы построили графики t-SNE для наших данных значков, сокращенных с помощью PCA. Графики t-SNE уменьшают размерность высокомерных наборов данных для идентификации кластеризации. Ниже приведены наши графики t-SNE при использовании 80 лучших меток ResNet и 20 лучших меток ResNet соответственно:

Мы заметили, что при использовании 80 меток данные вообще не могут быть кластеризованы. Однако, используя всего 20 меток, мы видим, что левая (пурпурная) и правая (зеленая) области обычно разделяются.

Это говорит нам о том, что мы могли бы достичь лучших результатов, уменьшив количество блоков меток в ResNet с 392.

BERT-Conditioned StyleGAN

Учитывая разумно распределенные выходные данные нашего StyleGAN, обусловленного ResNet, мы решили продолжить наш новый, четвертый эксперимент - попытку обусловить StyleGAN векторами встраивания текста, созданными с помощью предварительно обученной языковой модели. Одно наблюдение, которое мы сделали в ходе наших экспериментов, заключалось в том, что разные ключевые слова обычно соответствуют разным визуальным эффектам значков, и что ключевые слова значков из одной категории обычно не пересекаются с ключевыми словами из другой категории. Например, ключевые слова из описаний мобильных игровых приложений - «многопользовательский», «королевская битва», «перестрелка» - редко пересекаются с ключевыми словами из описаний приложений для обмена сообщениями - «чат», «сообщение», «в реальном времени». Таким образом, наша интуиция заключалась в том, что можно было бы обусловить нашу GAN векторным представлением ключевых слов в надежде, что она сможет генерировать значки, визуальные характеристики которых являются репрезентативными для их ключевых слов. Мы специально выбрали встраивание текста вместо других векторных представлений, потому что они захватывают семантическую информацию и контекст, что, как мы думали, улучшит качество наших результатов.

Для этого мы решили проанализировать первые 100 слов из каждого описания приложения, чтобы удалить нежелательный текст описания, такой как политики конфиденциальности, извлечь 4 наиболее важных ключевых слова с помощью RAKE [7] и передать каждое ключевое слово через предварительную обученная языковая модель BERT [8]. Модель BERT дала нам вектор встраивания слов с формой (1, 1024) для каждого ключевого слова. Затем в наших экспериментах мы либо a) суммировали, либо b) усредняли все возвращенные векторы встраивания текста в окончательный вектор встраивания, представляющий все ключевые слова для данного значка, что наша GAN была обусловлена. Этот вариант использования казался наиболее актуальным и полезным с точки зрения вывода значков, поскольку дизайнеры могли просто предоставить набор релевантных ключевых слов для создания типичного значка приложения.

Мы обучили каждый из наших StyleGAN, созданных с помощью BERT, для 210 тактов на наших значках 32x32x3, каждый значок в паре с вектором встраивания текста (1, 1024). После 28 часов обучения каждого из них на графическом процессоре Tesla V100 наши результаты выглядят следующим образом:

К сожалению, наши модели, обусловленные BERT, не смогли уловить условное распределение значков по ключевым словам, в результате чего в основном были получены результаты, похожие на капли, которые не имели структуры или семантического значения. Мы предполагаем, что это связано с тем, что ключевые слова часто жестко привязаны к отдельному приложению, а также потому, что ключевые слова значительно различаются по значкам. Это снижает обучаемость, поскольку наша сеть GAN редко видит похожие векторы встраивания текста и, следовательно, не имеет достаточно информации для изучения условного распределения значков по некоторым из менее часто используемых ключевых слов. Например, наш GAN видел список ключевых слов «карибу», «припасы», «охота» и «сезон» только один раз, что затрудняет условное создание значка во время генерации.

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

Возможности для улучшения

Прежде всего, мы могли бы сгенерировать значки размером 64x64x3 вместо значков 32x32x3, потому что это дает больше шансов уловить низкоуровневые заметные особенности стиля. К сожалению, нам удалось сгенерировать только иконки размером 32x32x3 из-за ограниченных вычислительных ресурсов и времени.

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

Если бы мы запустили t-SNE по нашему набору данных на ранних этапах, мы бы поняли, что достоверные распределения не очень визуально различимы, и могли бы потратить больше времени на разработку различных стратегий для кластеризации данных.

Результаты

Наряду с количественным анализом t-SNE мы хотели более качественное понимание наших результатов. Первая оценка, которую мы попробовали, выглядит следующим образом: (см. Рисунок A ниже) два значка в левой части генерируются на основе двух уникальных меток ResNet, и только одна из них является результатом распределения меток в правой части. Задача пользователя - выбрать правильный значок с учетом соответствующего распределения. Точность измерялась тем, сколько значков и меток они правильно сопоставили по общему количеству выполненных тестовых примеров.

Мы достигли примерно 72–78% точности у 4 оценщиков и более 1000 тестов, что говорит нам о том, что оценщики смогли отличить визуальные отличия от созданных нами значков.

(Изображение A)

Из-за абстрактного характера наших сгенерированных изображений мы также попытались использовать альтернативный способ оценки наших результатов. Вместо выбора одного значка, соответствующего данному ярлыку, мы дали оценщикам два ярлыка и попросили их сопоставить их с соответствующими дистрибутивами. В этом случае ответом будет либо «обмен», либо «без обмена» (см. Рисунки B и C ниже).

Мы достигли 82,3% с помощью 8 оценщиков и более 1200 тестовых примеров. Мы считаем, что результаты значимы и подчеркиваем, что есть заметные визуальные различия при сравнении нескольких условных распределений значков друг с другом.

(Изображение B, поменять местами)

(Изображение C, без замены)

Дальнейшие действия

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

Продолжить изучение ResNet-Conditioned StyleGAN

Мы заметили, что одна проблема с классификацией ResNet заключалась в том, что многие метки имели только один или два значка, что создавало разреженность в нашем парном наборе данных. Таким образом, для этих этикеток результат обучения имел гораздо меньше деталей и качества. Мы планируем убрать больше значков из других магазинов приложений, таких как магазин Android Play, чтобы, надеюсь, предотвратить это распространение значков с длинным хвостом.

Еще одно потенциально значительное улучшение - это изменение домена ResNet с ImageNet на наш домен значков. Мы знаем, что у нас нет идеальной модели для группировки этих значков, потому что ResNet сравнивает их с естественными изображениями животных и объектов, тогда как значки очень абстрактны. Потратив время на то, чтобы придумать метки, характерные для нашей области значков (например, круговой передний план, белый фон, буквы и т. Д.) И пометив небольшой набор значков, мы сможем обучить нашу модель ResNet, чтобы она была значительно более точной и надеюсь, приведет к лучшему кондиционированию.

Мы также хотели бы уменьшить количество меток, по которым ResNet может классифицировать наши значки. Как показано на приведенном выше графике t-SNE, уменьшение количества меток может привести к еще большей кластеризации. Однако важно отметить, что при настройке количества меток мы должны соблюдать баланс между дисперсией между метками и дисперсией внутри метки. В частности, увеличивая количество меток в каждом новом «сжатом» сегменте, мы будем увеличивать дисперсию внутри каждого сегмента, но также уменьшать дисперсию между сегментами. Экспериментируя с различным количеством меток, мы надеемся улучшить нашу классификацию ResNet.

Изучите другие средства группировки и кондиционирования значков

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

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

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

Изучите другие базовые архитектуры

Вместо того, чтобы переключать наши условия, мы также можем переключить нашу базовую архитектуру. В этом проекте мы много экспериментировали со StyleGAN. Однако существует множество других вариантов базовой архитектуры GAN, которые могут привести к большему успеху. А именно, мы хотим попробовать AttentionGAN и BigGAN.

AttentionGAN выделяет определенные особенности входного изображения, на которых нужно сосредоточиться во время тренировки. Эта архитектура может помочь при отключении определенных элементов значков (например, переднего плана, фона, цвета, границ и т. Д.).

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

Заключение

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

Ссылки

[1] http://www.nvisionsystems.com/5-interesting-facts-about-branding-your-business/

[2] https://github.com/facundoolano/app-store-scraper

[3] https://github.com/tkarras/progressive_growing_of_gans

[4] https://github.com/NVlabs/stylegan/blob/master/stylegan-teaser.png

[5] https://github.com/NVlabs/stylegan

[6] http://www.image-net.org/

[7] https://pypi.org/project/rake-nltk/

[8] https://github.com/google-research/bert

[9] https://github.com/microsoft/CNTK/tree/master/Examples/Image/Classification/ResNet