Задача трансляции изображений — различия между версиями

Материал из Викиконспекты
Перейти к: навигация, поиск
(Pix2PixHD)
(Pix2PixHD)
Строка 127: Строка 127:
 
{|align="center"
 
{|align="center"
 
  |-valign="top"
 
  |-valign="top"
  |[[File:City_pix2pixhd.gif|500px|left|thumb|]]
+
  |[[File:City_pix2pixhd.gif|500px|left|thumb|Пример работы Pix2PixHD {{---}} label-to-streetview]]
  |[[File:Face_pix2pixhd.gif|500px|left|thumb|]]
+
  |[[File:Face_pix2pixhd.gif|500px|left|thumb|Пример работы Pix2PixHD {{---}} label-to-face]]
 
  |}
 
  |}
  

Версия 00:48, 10 января 2021

Эта статья находится в разработке!


Определение:
Задача трансляции изображения (англ. Image-to-image translation) — это задача из области компьютерного зрения, цель которой состоит в том, чтобы научиться строить соответствия между входным и выходным изображениями, используя тренировочные данные.

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

Пример работы трансляции изображения: превращение лошади в зебру, и наоборот. (CycleGan)[1]

Описание задачи

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

Виды тренировочных данных для задачи трансляции изображений.

Обучение на парах изображений

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

Примерами приложения являются следующие трансляции изображений:

  • черно-белое изображение — цветное
  • сегментация изображения (англ. segmentation map) — реальная картинка
  • линии-края (англ. edges) — фотография
  • генерация разных поз и одежды на человеке
  • описывающий изображение текст — фотография
Примеры применения задачи трансляции изображения с парными тренировочными данными. (Pix2Pix)[2]

Обучение на независимых множествах

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

Пример:

  • тренировочные данные — два множества: {реальные фотографии}, {картины К.Моне}
  • приложение — взяли любую фотографию, например, поле с цветами; получили поле с цветами в стиле К.Моне.
Примеры применения задачи трансляции изображения с непарными тренировочными данными. (CycleGan)[1]

Pix2Pix

Pix2Pix[2] — это попытка решения задачи трансляции изображений с помощью глубоких сверточных нейронных сетей.

Архитектура

Пример процесса обучения генератора и дискриминатора для Pix2Pix.

Pix2Pix реализует архитектуру условных порождающих состязательных сетей (англ. CGAN), где для генератора взята U-Net[3]-основанная архитектура, а для дискриминатора используется сверточный классификатор PatchGAN[4], который штрафует структуру только в масштабе участков изображения.

Генератор CGAN'a работает следующим образом: на вход подается one-hot вектор класса x и вектор шума z, в результате прохода через условный генератор выдается сгенерированное изображение этого класса, [math]G: \{x,z\} \to y[/math].
Генератор Pix2Pix работает похожим образом, но вместо вектора класса подается изображение, а вектор шума и вовсе убирается, потому что он не вносит значительной случайности для результата работы генератора.

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

Дискриминатор

Архитектура PatchGAN дискриминатора.

Для дискриминатора данной сети используется сверточный дискриминатор PatchGAN.

PatchGAN дискриминатор[4] — это тип дискриминатора для генеративных состязательных сетей, который штрафует структуру на уровне локальных фрагментов (патчей).
Дискриминатор PatchGAN пытается определить, является ли каждый фрагмент размера [math]N\times N[/math] изображения настоящим или поддельным. Этот дискриминатор сверточно запускается по изображению, усредняя все ответы, чтобы посчитать окончательный результат [math]D[/math].
Проще говоря, для каждого фрагмента определяется матрица классификаций, где все значения находятся в промежутке [math][0,1][/math], где [math]0[/math] — подделка. Проходясь сверткой, в итоге получаем конечную матрицу классификаций. Таким образом, для поддельного изображения от генератора PatchGan должен попытаться вывести матрицу нулей.
Интересно также, что [math]N[/math] может быть намного меньше полного размера изображения и при этом давать результаты высокого качества. Это выгодно, потому что меньший PatchGAN имеет меньше параметров, работает быстрее и может применяться к изображениям произвольно большого размера.
Такой дискриминатор эффективно моделирует изображение как Марковское случайное поле[5], предполагая независимость между пикселями, разделенных диаметром более одного фрагмента.

Генератор

Архитектура Pix2Pix генератора.

Для генератора Pix2Pix используется UNet-генератор.
UNet-генератор[3] — это модель encoder-decoder с добавлением пропускаемых соединений между зеркальными слоями в стеках кодировщика и декодера.

Как работает генератор:

  • на вход подается изображение [math]x[/math]
  • далее последовательно применяются свертка, батч-нормализация (англ. Batch Norm layer)[6], функция активации LeakyReLU и пулинг, что, тем самым, уменьшает количество признаков
  • при этом, следуя архитектуре UNet, добавляются пропускаемые соединения между каждым слоем [math]i[/math] и слоем [math]n - i[/math], где [math]n[/math] — общее количество слоев; каждое пропускаемое соединение просто объединяет все каналы на уровне [math]i[/math] с другими на слое [math]n - i[/math]; таким образом, информация, которая могла быть сжата слишком много (потеряна), может все еще проникать и все еще добраться до некоторых из более поздних слоев
  • после того, как достигнут слой минимального размера, начинается работа декодера, который в сущности делает то же, что и кодировщик, только содержит слой, обратный пулингу, который увеличивает количество признаков
  • также в декодере добавляется dropout, чтобы достигнуть стохастичности на выходе генератора

Генератор должен не только обмануть дискриминатора, но и быть рядом с земной истиной, поэтому его функция ошибки выглядит следующим образом:
[math]L(G) = BCE\,Loss + \lambda*\sum_{i=1}^{n}|generated\_output - real\_output|[/math]

Полное описание архитектуры

Для того, чтобы описать полный пайплайн работы Pix2Pix, обратимся к примеру:

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

  • Вы помещаете сегментированное изображение в генератор U-Net, и он генерирует некоторый выход.
  • Дальше сгенерированное изображение (фотография) соединяется с исходным входным изображением (сегментированное), и это все идет в PatchGan дискриминатор, который выводит матрицу классификации, состоящую из значений между 0 и 1, которая показывает, насколько реальны или поддельны разные части этого изображения.
  • Затем для вычисления ошибки дискриминатора проводится 2 сравнения:
    • сравнение матрицы классификации от {объединения сгенерированного изображения (фотография) с исходным входным изображением (сегментированное)} с матрицей из всех 0
    • матрицы классификация от {объединения реального изображения (фотография) с исходным входным изображением (сегментированнное)} с матрицей из всех 1
  • Затем для вычисления ошибки генератора проводится сравнение матрицы классификации от {объединения сгенерированного изображения с исходным входным изображением} с матрицей из всех 1, которое считается с помощью BCE Loss, которое впоследствии суммируется с попиксельным сравнением реального изображения со сгенерированным, домноженным на [math]\lambda[/math]
Архитектура Pix2Pix.

Примеры

Примеры Pix2Pix.

Для тестирования решения были проведены следующие эксперименты:

  • сегментированные изображения [math]\leftrightarrow[/math] в фотографии
  • нарисованная карта [math]\leftrightarrow[/math] в фотоснимок
  • черно-белые [math]\to[/math] в цветные фотографии
  • линии-края [math]\to[/math] в фотографии
  • эскизы-рисунки [math]\to[/math] в фотографии
  • день [math]\to[/math] в ночь

и еще много-много других интересных экспериментов..

Pix2PixHD

Генератор Pix2PixHD.

Pix2PixHD[7]— нейронная сеть, основанная на архитектуре Pix2Pix, которая является новым удачным подходом для решения задачи получения изображений высокого разрешения из сегментированных изображений.

Основа Pix2Pix была улучшена за счет изменений в генераторе, дискриминаторе и функции ошибки.

Генератор был разбит на две подсети [math]G_1[/math] и [math]G_2[/math] так, что первая приняла роль глобальной сети генератора, а вторая стала локальным усилителем сети. Таким образом, генератор стал задаваться набором [math]G = \{G1, G2\}[/math]. Глобальная сеть генератора работает с изображениями с расширением [math]1024 × 512[/math], в то время как локальный усилитель сети принимает на вход изображения с расширением [math]4 × [/math]размер вывода предыдущей сети. Для получения изображений большего расширения могут быть добавлены дополнительные локальные усилители сети.

Вместо одного дискриминатора появилось 3 таких же, одинаковых по структуре, дискриминатора.

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


Пример работы Pix2PixHD — label-to-streetview
Пример работы Pix2PixHD — label-to-face

См. также

Примечания

Источники информации