В статье автор представляет свою автоматизированную систему генерации текстур.
Ключевые слова: свёрточная нейронная сеть, генерация текстур, генеративно-состязательная сеть.
В последние годы люди уделяют много внимания нейросетям, основными задачами которых являются синтез, порождение, генерация изображений. В качестве примера можно рассматривать сеть DALL-E, которая впервые была показана в 2021 году и сразу приобрела популярность. Задача генерации заключается в следующем: компьютер должен просмотреть большое количество изображений, содержащих некоторые объекты, например: лица, собак или машин, в общем тот или иной объект, и, выучив, что такое собака, лицо или машина, он должен учиться создавать новые изображения. Важно, что эти новые изображения должны быть, во-первых, реалистичными для человека, то есть при сравнении двух изображений (реального и сгенерированного) человек не должен видеть разницы. А во-вторых, новые, сгенерированные объекты должны существенным образом отличаться от тех объектов, которые нейросеть видела в ходе обучения. Создание текстур при помощи нейросети позволит людям создавать уникальные объекты в 3D моделировании, добавить уникальности своей работе при создании фильмов/мультфильмов и т. д.
Для решения этой проблемы была создана свёрточная нейронная сеть. Такие нейросети обычно анализируют не все данные сразу, а проходятся по ним фильтром с заданным размером: если у вас есть изображение 200×200, то сеть считает квадрат размера 20x20, сдвинется на 1 пиксель и считает новый квадрат. Затем входные данные передаются через свёрточные слои, в которых не все узлы соединены между собой. Эти слои могут сжиматься с глубиной, причем часто используются степени двойки: 32, 16, 8, 4, 2, 1.
Для улучшения результата при генерации изображения используется генеративно-состязательная сеть (GAN).
GAN состоит из двух сетей:
– Генератор, с помощью которого мы получаем поддельные изображения по входному вектору шума;
– Дискриминатор, различающий реальный набор текстур и сгенерированный генератором.
Основным критерием для сгенерированных текстур является невозможность отличить искусственно созданный объект от реального, созданного иным путём (не сгенерированным нейросетью). Для того, чтобы получать максимально реалистичное изображение, необходимо не только генерировать текстуры, но и делать выборку наиболее реалистичных из полученных в ходе генерации. Для этого в системах генерации изображений часто используется дискриминатор. Сети, в которых используются сразу генератор и дискриминатор называются генеративно-состязательными сетями. Шаги, которые проходит GAN:
– Установка начального рандомного значения для генератора.
– Генерация изображения
– Подача искусственного изображения вместе с реальными на вход дискриминатора.
– Дискриминатор принимает изображения и возвращает вероятность, с которой то или иное изображение является реальным (числа от 0 до 1).
По итогу генератор находится в цикле с дискриминатором, получающим на вход реальные и поддельные изображения.
Дискриминатор представляет собой стандартную свёрточную сеть, алгоритм нормализации по батчу и функцию активации LeakyReLU. В то время как генератор представляет собой обратную свёрточную сеть, нормализатор по батчу и функцию активации ReLU. На вход генератора поступает рандомное значение (в оригинеле seed), после чего он преобразует вектор случайного шума в изображение.
И та и другая сеть оптимизируют функцию потерь стараясь свести ошибку к минимуму. Как результат мы получаем модель которая сама генерирует изображение, и сама же отсеивает его в том случае, если реалистичность последнего не достаточно высока.
В начале ознакомления с математической частью системы рассмотрим формулу конволюции, эта формула должна отражать движение ядра по входному изображению или по карте признаков :
,
Здесь подстрочные индексы — это индексы элементов в матрицах, а — величина шага свёртки. Надстрочные индексы — это индексы слоёв сети.
— выход какой-то предыдущей функции, либо входное изображение сети;
— это после прохождения функции активации
— ядро свёртки
— bias или смещение
— результат операции конволюци. То есть операции проходят отдельно для каждого элемента матрицы , размерность которой .
Но при применении данной формулы ядро при свертке «переворачивается». Чтобы элементы ядра при свёртке сохраняли свои позиции мы будем использовать формулу кросс-корреляции вместо конволюции:
Для того, чтобы сделать сеть нелинейной мы будем применять формулу функции активации:
, где — это количество классов.
Далее нам понадобится описать математически слой полносвязной сети:
,
Завершающий этап сети — функция, оценивающая качество работы всей модели. Она находится после всех слоёв сети и выглядит следующим образом:
В данной работе представлена автоматизированная система генерации текстур. В её основе лежит генеративно-состязательная сеть. Система была разработана на языке программирования Python. Использовались библиотеки torch, torchvision, numpy, matplotlib, PyQt5. На рисунке 1 вы можете ознакомиться с алгоритмом работы системы.
Рис. 1. Алгоритм работы системы
Для примера работы данной сети при обучении использовался набор данных в виде текстур дерева (529 изображений). При демонстрации работы сети было проведено два сравнительных прогона системы с различными параметрами коэффициента обучения. В первом случае 0.0005, во втором 0.0002. Размер батча 128, количество эпох обучения 1500 в обоих прогонах.
Рис. 2. Пример изображений из набора данных
Рис. 3. График потерь при обучении в первом случае
Рис. 4. Пример сгенерированных изображений после обучения в первом случае
Рис. 5. График потерь при обучении во втором случае
Рис. 6. Пример сгенерированных изображений после обучения во втором случае
В дальнейшем планируется расширить список возможных текстур для генерации (камень, песок, кирпич) и провести ряд опытов с выявлением оптимального набора параметров для получения наилучшего изображения сгенерированных текстур. На данный момент наиболее подходящими параметрами при обучении показали себя 1500 эпох обучения при коэффициенте обучения 0,0005.
Литература:
- Habr, Сверточная нейронная сеть, часть 1: структура, топология, функции активации и обучающее множество [Электронный ресурс]. — URL: https://habr.com/ru/company/econtenta/blog/303458/. (дата обращения: 25.11.2019).
- PGGAN Creates Realistic Faces [Электронный ресурс]. — URL: https://towardsdatascience.com/progressive-gans-new-training-trend-for-2018-c18cb0190239