Перевод изображения в изображение

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

Архитектура Pix2Pix

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

Как создать свой собственный переводчик изображений

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

Весь процесс создания собственного переводчика изображений будет разделен на три этапа:

  1. Сбор набора данных
  2. Предварительная обработка набора данных
  3. Обучение модели

Сбор набора данных

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

Предварительная обработка набора данных

Модель Pix2Pix, которую авторы удобно предоставили, принимает обучающие входные данные в форме Photo|Sketch, как показано на изображении ниже.

Поскольку набор данных CUHK содержит изображения и эскизы в отдельных папках, мы объединим их для создания желаемых обучающих данных. Для этого мы будем использовать библиотеку PIL в python.

#Sample preprocessing of images for the CUHK Dataset. 
import sys
from PIL import Image
for i in range(100,102):
 if (i<10):
 s=’0'+str(i)
 else:
 s=str(i)
 images = [Image.open(x) for x in [‘./photos1/m-’+s+’-01.jpg’, ‘./sketches1/m-’+s+’-01-sz1.jpg’]]
 widths, heights = zip(*(i.size for i in images))
total_width = sum(widths)
 max_height = max(heights)
new_im = Image.new(‘RGB’, (total_width, max_height))
x_offset = 0
 for im in images:
 new_im.paste(im, (x_offset,0))
 x_offset += im.size[0]
new_im.save(‘mfmm’+s+’.jpg’)

Приведенный выше код предварительно обрабатывает изображения, необходимые для обучения модели Pix2Pix, для каждой пары изображения и эскиза в наборе данных он объединяет их и создает из них новое изображение.

Обучение модели

На GitHub есть оригинальная реализация модели, которая работает на PyTorch. Обучить модель на собственном наборе данных очень просто, воспользовавшись реализацией в Colab. После открытия блокнота в Colab создайте папку datasets/sketch/train и загрузите в нее предварительно обработанные данные. Наконец, в обучающей части кода укажите папку, а не фасады, и все будет хорошо.

!python train.py — dataroot ./datasets/sketches — name sketches_pix2pix — model pix2pix — direction BtoA

Теперь, когда вы успешно реализовали модель, вы можете использовать ее для преобразования собственных эскизов в реалистичные изображения! Молодец!

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

использованная литература

  1. Преобразование изображения в изображение с помощью условных состязательных сетей - Isola et. др.
  2. Набор данных CUHK