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

Материал из Викиконспекты
Перейти к: навигация, поиск
м
м (Примеры)
Строка 101: Строка 101:
  
 
Для тестирования решения были проведены следующие эксперименты:
 
Для тестирования решения были проведены следующие эксперименты:
* сегментированные изображения <tex>\leftrightarrow</tex> в фотографии
+
* сегментированные изображения <tex>\leftrightarrow</tex> фотографии
* нарисованная карта <tex>\leftrightarrow</tex> в фотоснимок
+
* нарисованная карта <tex>\leftrightarrow</tex> фотоснимок
* черно-белые <tex>\to</tex> в цветные фотографии
+
* черно-белые фотографии <tex>\to</tex> цветные фотографии
* линии-края <tex>\to</tex> в фотографии
+
* линии-края <tex>\to</tex> фотографии
* эскизы-рисунки <tex>\to</tex> в фотографии
+
* эскизы-рисунки <tex>\to</tex> фотографии
* день <tex>\to</tex> в ночь
+
* день <tex>\to</tex> ночь
и еще много-много других интересных экспериментов..
+
и т.д.
  
 
== Pix2PixHD ==
 
== Pix2PixHD ==

Версия 01: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 работает похожим образом, но вместо вектора класса подается изображение, а вектор шума и вовсе убирается, потому что он не вносит значительной случайности для результата работы генератора.

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

Генератор

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

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

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

  • на вход подается изображение [math]x[/math]
  • далее последовательно применяются свертка, батч-нормализация (англ. Batch Norm layer), функция активации 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]

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

Архитектура 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, обратимся к примеру:

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

  • Вы помещаете сегментированное изображение в генератор 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[6]— нейронная сеть, основанная на архитектуре 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.

См. также

Примечания

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