<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
		<id>http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=79.111.225.239&amp;*</id>
		<title>Викиконспекты - Вклад участника [ru]</title>
		<link rel="self" type="application/atom+xml" href="http://neerc.ifmo.ru/wiki/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=79.111.225.239&amp;*"/>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/79.111.225.239"/>
		<updated>2026-04-28T06:51:16Z</updated>
		<subtitle>Вклад участника</subtitle>
		<generator>MediaWiki 1.30.0</generator>

	<entry>
		<id>http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D1%8F%D1%86%D0%B8%D0%B8_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=77995</id>
		<title>Задача трансляции изображений</title>
		<link rel="alternate" type="text/html" href="http://neerc.ifmo.ru/wiki/index.php?title=%D0%97%D0%B0%D0%B4%D0%B0%D1%87%D0%B0_%D1%82%D1%80%D0%B0%D0%BD%D1%81%D0%BB%D1%8F%D1%86%D0%B8%D0%B8_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9&amp;diff=77995"/>
				<updated>2021-01-12T17:50:58Z</updated>
		
		<summary type="html">&lt;p&gt;79.111.225.239: /* Примеры */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{В разработке}}&lt;br /&gt;
&lt;br /&gt;
{{Определение&lt;br /&gt;
|definition =&lt;br /&gt;
'''Задача трансляции изображения (англ. Image-to-image translation)''' — это задача из области [[ Компьютерное зрение| компьютерного зрения]], цель которой состоит в том, чтобы научиться строить соответствия между входным и выходным изображениями, используя тренировочные данные.&lt;br /&gt;
}}&lt;br /&gt;
Другими словами, задача состоит в том, чтобы научиться преобразовывать изображение из одной области в другую, получая в итоге изображение со стилем (характеристиками) последней.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Horse2Zebra.png|thumb|right|Рис. 1. Пример трансляции изображения: превращение лошади в зебру.&amp;lt;ref name=&amp;quot;cycle&amp;quot;&amp;gt;[https://github.com/junyanz/CycleGAN CycleGAN {{---}} GitHub]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Описание задачи ==&lt;br /&gt;
&lt;br /&gt;
Задача разделяется на два типа в зависимости от тренировочных данных. &amp;lt;br&amp;gt;&lt;br /&gt;
В одном случае, у нас есть четкое представление результата, который должен получиться, а в другом случае, его нет, но есть множество, определяющее стиль желаемого результата (Рис. 2).&lt;br /&gt;
&lt;br /&gt;
[[File:Paired_vs_unpaired_training_data.png|400px|right|thumb|Рис. 2. Виды тренировочных данных для трансляции изображений.]]&lt;br /&gt;
 &lt;br /&gt;
=== Обучение на парах изображений ===&lt;br /&gt;
&lt;br /&gt;
'''Алгоритм трансляции изображений, обученный на парах изображений''' — это алгоритм трансляции одного изображения в другое, где тренировочные данные состоят из множества, в котором каждому входному изображению соответствует выходное изображение, содержащее первое с другим стилем.&lt;br /&gt;
&lt;br /&gt;
Примерами приложения этого алгоритма являются следующие трансляции изображений:&lt;br /&gt;
* черно-белое изображение {{---}} цветное;&lt;br /&gt;
* сегментация изображения (англ. segmentation map) {{---}} реальная картинка;&lt;br /&gt;
* линии-края (англ. edges) {{---}} фотография;&lt;br /&gt;
* генерация разных поз и одежды на человеке;&lt;br /&gt;
* описывающий изображение текст {{---}} фотография.&lt;br /&gt;
Некоторые примеры изображены на Рис. 3.&lt;br /&gt;
[[File:Examples_paired_translation.jpg|700px|center|thumb|Рис. 3. Примеры применения алгоритма трансляции изображений, обученном на парных тренировочных данных. (Pix2Pix)&amp;lt;ref name=&amp;quot;pix&amp;quot;&amp;gt;[https://github.com/phillipi/pix2pix Pix2Pix {{---}} GitHub]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
=== Обучение на независимых множествах ===&lt;br /&gt;
&lt;br /&gt;
'''Алгоритм трансляции изображений, обученный на двух независимых множествах''' — это такой алгоритм трансляции изображений, тренировочные данные которого состоят из двух независимых групп, описывающих свой стиль, цель которого научиться отображать одну группу в другую так, чтобы содержание изображений (общее) сохранялось, а стиль (уникальные элементы изображений) переносился.&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
* тренировочные данные {{---}} два множества: &amp;lt;code&amp;gt;{реальные фотографии}, {картины К. Моне}&amp;lt;/code&amp;gt;;&lt;br /&gt;
* приложение {{---}} взяли любую фотографию, например, поле с цветами; получили поле с цветами в стиле К. Моне.&lt;br /&gt;
&lt;br /&gt;
[[File:Examples_unpaired_translation.jpeg|700px|center|thumb|Рис. 4. Примеры применения алгоритма трансляции изображений, обученном на двух независимых множествах. (CycleGan)&amp;lt;ref name=&amp;quot;cycle&amp;quot;&amp;gt;[https://github.com/junyanz/CycleGAN CycleGAN {{---}} GitHub]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
== Pix2Pix ==&lt;br /&gt;
&lt;br /&gt;
Pix2Pix&amp;lt;ref name=&amp;quot;pix&amp;quot;&amp;gt;[https://github.com/phillipi/pix2pix Pix2Pix {{---}} GitHub]&amp;lt;/ref&amp;gt; {{---}} это подход для трансляции изображений с помощью глубоких [[:Сверточные нейронные сети|сверточных нейронных сетей]].&lt;br /&gt;
&lt;br /&gt;
=== Архитектура ===&lt;br /&gt;
&lt;br /&gt;
[[File:Training_CGAN_pix2pix.png|400px|right|thumb|Рис. 5. Пример процесса обучения генератора и дискриминатора для Pix2Pix.]]&lt;br /&gt;
&lt;br /&gt;
Pix2Pix реализует архитектуру [[Generative Adversarial Nets (GAN)#CGAN_.28Conditional_Generative_Adversarial_Nets.29| условных порождающих состязательных сетей ]](англ. CGAN), где для генератора взята архитектура, основанная на U-Net&amp;lt;ref name=&amp;quot;unet&amp;quot;&amp;gt;[https://sci-hub.do/10.1007/978-3-319-24574-4_28 U-Net: Convolutional Networks for Biomedical Image Segmentation]&amp;lt;/ref&amp;gt;, а для дискриминатора используется сверточный классификатор PatchGAN&amp;lt;ref name=&amp;quot;patch&amp;quot;&amp;gt;[https://sci-hub.do/10.1007/978-3-319-46487-9_43 Precomputed Real-Time Texture Synthesis with Markovian Generative Adversarial Networks]&amp;lt;/ref&amp;gt;, который штрафует алгоритм на уровне участков изображения.&lt;br /&gt;
&lt;br /&gt;
Генератор CGAN'a работает следующим образом: на вход подается one-hot вектор класса x и вектор шума z, в результате прохода через условный генератор выдается сгенерированное изображение этого класса. Таким образом, генератор можно представить, как следующую функцию: &amp;lt;tex&amp;gt;G: \{x,z\} \to y&amp;lt;/tex&amp;gt;. &amp;lt;br&amp;gt;&lt;br /&gt;
Генератор Pix2Pix работает cхожим образом, но вместо вектора класса подается изображение, а вектор шума и вовсе убирается, потому что он не вносит достаточно стохастичности в результат работы генератора.&lt;br /&gt;
&lt;br /&gt;
Генератор обучается создавать максимально правдоподобные выходные изображения, дискриминатор же учится как можно лучше отличать фальшивые изображения от реальных.&lt;br /&gt;
==== Генератор ====&lt;br /&gt;
&lt;br /&gt;
[[File:UNet_generator_pix2pix.png|400px|right|thumb|Рис. 6. Архитектура Pix2Pix генератора.]]&lt;br /&gt;
&lt;br /&gt;
Для генератора Pix2Pix используется U-net-генератор.&amp;lt;br&amp;gt;&lt;br /&gt;
'''U-net-генератор'''&amp;lt;ref name=&amp;quot;unet&amp;quot;&amp;gt;[https://sci-hub.do/10.1007/978-3-319-24574-4_28 U-Net: Convolutional Networks for Biomedical Image Segmentation]&amp;lt;/ref&amp;gt; {{---}} это модель encoder-decoder с добавлением пропускаемых соединений (англ. ''skip-connections'') между зеркальными слоями в стеках кодировщика и декодера.&lt;br /&gt;
&lt;br /&gt;
Алгоритм работы генератора:&lt;br /&gt;
* на вход подается изображение;&lt;br /&gt;
* далее последовательно применяются свертка, [[Batch-normalization | батч-нормализация]] (англ. Batch Norm layer), функция активации LeakyReLU и пулинг, что, тем самым, уменьшает количество признаков;&lt;br /&gt;
* при этом, следуя архитектуре U-net, добавляются пропускаемые соединения между каждым слоем &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; и слоем &amp;lt;tex&amp;gt;n - i&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;n&amp;lt;/tex&amp;gt; {{---}} общее количество слоев; каждое пропускаемое соединение просто объединяет все каналы на уровне &amp;lt;tex&amp;gt;i&amp;lt;/tex&amp;gt; с другими на слое &amp;lt;tex&amp;gt;n - i&amp;lt;/tex&amp;gt;; таким образом, информация, которая могла быть сильно сжата (потеряна), может доходить до некоторых более поздних слоев;&lt;br /&gt;
* после того, как получен слой минимального размера, начинается работа декодера, который делает то же, что и кодировщик, с отличием в слое, обратном пулингу, который увеличивает количество признаков;&lt;br /&gt;
* также в декодере добавляется dropout, чтобы достигнуть стохастичности на выходе генератора.&lt;br /&gt;
&lt;br /&gt;
Генератор должен не только обмануть дискриминатор, но и приблизиться к истине, поэтому его '''функция ошибки''' выглядит следующим образом: &amp;lt;br&amp;gt;&lt;br /&gt;
&amp;lt;tex&amp;gt;L(G) = BCE\,Loss + \lambda*\sum_{i=1}^{n}|generated\_output - real\_output|&amp;lt;/tex&amp;gt;&lt;br /&gt;
&lt;br /&gt;
==== Дискриминатор ==== &lt;br /&gt;
&lt;br /&gt;
[[File:The-PatchGAN-structure-in-the-discriminator-architecture.png|400px|right|thumb|Рис. 7. Архитектура PatchGAN дискриминатора.]]&lt;br /&gt;
&lt;br /&gt;
Для дискриминатора данной сети используется сверточный дискриминатор PatchGAN.&lt;br /&gt;
&lt;br /&gt;
'''PatchGAN дискриминатор'''&amp;lt;ref name=&amp;quot;patch&amp;quot;&amp;gt;[https://sci-hub.do/10.1007/978-3-319-46487-9_43 Precomputed Real-Time Texture Synthesis with Markovian Generative Adversarial Networks]&amp;lt;/ref&amp;gt; {{---}} это тип дискриминатора для генеративных состязательных сетей, который штрафует алгоритм на уровне локальных фрагментов (патчей).&amp;lt;br&amp;gt;&lt;br /&gt;
Дискриминатор PatchGAN пытается определить, является ли каждый фрагмент размера &amp;lt;tex&amp;gt;N\times N&amp;lt;/tex&amp;gt; изображения настоящим или поддельным. Этот дискриминатор сверточно запускается по изображению, усредняя все ответы, чтобы посчитать окончательный результат &amp;lt;tex&amp;gt;D&amp;lt;/tex&amp;gt;.&amp;lt;br&amp;gt;&lt;br /&gt;
Проще говоря, для каждого фрагмента определяется матрица классификаций, где все значения находятся в промежутке &amp;lt;tex&amp;gt;[0,1]&amp;lt;/tex&amp;gt;, где &amp;lt;tex&amp;gt;0&amp;lt;/tex&amp;gt; {{---}} подделка. Проходясь сверткой, в итоге получаем конечную матрицу классификаций. Таким образом, для поддельного изображения от генератора PatchGan должен попытаться вывести матрицу нулей. &amp;lt;br&amp;gt;&lt;br /&gt;
Интересно, что &amp;lt;tex&amp;gt;N&amp;lt;/tex&amp;gt; может быть намного меньше полного размера изображения и при этом давать результаты высокого качества. Это выгодно, потому что меньший PatchGAN имеет меньше параметров, работает быстрее и может применяться к изображениям большого размера.&amp;lt;br&amp;gt;&lt;br /&gt;
Такой дискриминатор эффективно моделирует изображение как Марковское случайное поле&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Markov_random_field Markov random field {{---}} Wikipedia]&amp;lt;/ref&amp;gt;, предполагая независимость между пикселями, разделенных диаметром более одного фрагмента.&lt;br /&gt;
&lt;br /&gt;
==== Полное описание архитектуры ====&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы описать полный порядок работы Pix2Pix, обратимся к примеру:&lt;br /&gt;
&lt;br /&gt;
Пусть у вас есть набор пар, состоящий из реальных фотографий и их сегментаций. Задача состоит в том, чтобы  научиться генерировать из сегментированных изображений реальные. &lt;br /&gt;
* помещается сегментированное изображение в генератор U-Net, и он генерирует некоторый выход; &lt;br /&gt;
* дальше сгенерированное изображение соединяется с исходным входным сегментированным изображением, и это все идет в PatchGan дискриминатор, который выводит матрицу классификации, состоящую из значений между 0 и 1, которая показывает, насколько реальны или поддельны разные части этого изображения;&lt;br /&gt;
* затем для вычисления ошибки дискриминатора проводится 2 сравнения:&lt;br /&gt;
** сравнение матрицы классификации от {объединения сгенерированного изображения с исходным входным сегментированным изображением} с матрицей из всех 0;&lt;br /&gt;
** матрицы классификация от {объединения реального изображения с исходным входным сегментированным изображением } с матрицей из всех 1;&lt;br /&gt;
* затем для вычисления ошибки генератора проводится сравнение матрицы классификации от {объединения сгенерированного изображения с исходным входным изображением} с матрицей из всех 1, которое считается с помощью BCE Loss, которое впоследствии суммируется с попиксельным сравнением реального изображения со сгенерированным, домноженным на &amp;lt;tex&amp;gt;\lambda&amp;lt;/tex&amp;gt;;&lt;br /&gt;
&lt;br /&gt;
[[File:Pix2pix-UNet-128-GAN-network-architecture.png|700px|center|thumb|Рис. 8. Архитектура Pix2Pix.]]&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
&lt;br /&gt;
[[File:Pix2pix_examples.png|800px|right|thumb|Рис. 9. Примеры Pix2Pix.]]&lt;br /&gt;
&lt;br /&gt;
Для тестирования решения были проведены следующие эксперименты:&lt;br /&gt;
* сегментированные изображения &amp;lt;tex&amp;gt;\leftrightarrow&amp;lt;/tex&amp;gt; фотографии;&lt;br /&gt;
* нарисованная карта &amp;lt;tex&amp;gt;\leftrightarrow&amp;lt;/tex&amp;gt; фотоснимок;&lt;br /&gt;
* черно-белые фотографии &amp;lt;tex&amp;gt;\to&amp;lt;/tex&amp;gt; цветные фотографии;&lt;br /&gt;
* линии-края &amp;lt;tex&amp;gt;\to&amp;lt;/tex&amp;gt; фотографии;&lt;br /&gt;
* эскизы-рисунки &amp;lt;tex&amp;gt;\to&amp;lt;/tex&amp;gt; фотографии;&lt;br /&gt;
* день &amp;lt;tex&amp;gt;\to&amp;lt;/tex&amp;gt; ночь;&lt;br /&gt;
и так далее.&lt;br /&gt;
&lt;br /&gt;
== Pix2PixHD ==&lt;br /&gt;
&lt;br /&gt;
[[File:Generator_pix2pixhd.png|400px|right|thumb|Рис. 10. Генератор Pix2PixHD. &amp;lt;ref name=&amp;quot;towardsdatascience&amp;quot;&amp;gt;[https://towardsdatascience.com/pix2pix-869c17900998]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
&lt;br /&gt;
Pix2PixHD&amp;lt;ref name=&amp;quot;Pix2PixHD&amp;quot;&amp;gt;[https://github.com/NVIDIA/pix2pixHD Pix2PixHD {{---}} GitHub]&amp;lt;/ref&amp;gt;{{---}} нейронная сеть, основанная на архитектуре Pix2Pix, которая является новым удачным подходом для решения задачи получения изображений высокого разрешения из сегментированных изображений.&lt;br /&gt;
&lt;br /&gt;
Основа Pix2Pix была улучшена за счет изменений в генераторе, дискриминаторе и функции ошибки.&lt;br /&gt;
&lt;br /&gt;
'''Генератор''' был разбит на две подсети &amp;lt;tex&amp;gt;G_1&amp;lt;/tex&amp;gt; и &amp;lt;tex&amp;gt;G_2&amp;lt;/tex&amp;gt; так, что первая приняла роль глобальной сети генератора, а вторая стала локальным усилителем сети. Таким образом, генератор стал задаваться набором &amp;lt;tex&amp;gt;G = \{G1, G2\}&amp;lt;/tex&amp;gt;. Глобальная сеть генератора работает с изображениями с разрешением &amp;lt;tex&amp;gt;1024 × 512&amp;lt;/tex&amp;gt;, в то время как локальный усилитель сети принимает на вход изображения с разрешением &amp;lt;tex&amp;gt;4 × &amp;lt;/tex&amp;gt;размер вывода предыдущей сети. Для получения изображений большего разрешения могут быть добавлены дополнительные локальные усилители сети.&lt;br /&gt;
&lt;br /&gt;
Вместо одного '''дискриминатора''' появилось 3 таких же дискриминатора.&lt;br /&gt;
&lt;br /&gt;
'''Функция ошибки''' была улучшена за счет добавления ошибки в масштабах признаков.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{|align=&amp;quot;center&amp;quot;&lt;br /&gt;
 |-valign=&amp;quot;top&amp;quot;&lt;br /&gt;
 |[[File:City_pix2pixhd.gif|500px|left|thumb|Рис. 11. Пример работы Pix2PixHD {{---}} label-to-streetview.&amp;lt;ref name=&amp;quot;Pix2PixHD&amp;quot;&amp;gt;[https://github.com/NVIDIA/pix2pixHD Pix2PixHD {{---}} GitHub]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
 |[[File:Face_pix2pixhd.gif|500px|left|thumb|Рис. 12. Пример работы Pix2PixHD {{---}} label-to-face. &amp;lt;ref name=&amp;quot;Pix2PixHD&amp;quot;&amp;gt;[https://github.com/NVIDIA/pix2pixHD Pix2PixHD {{---}} GitHub]&amp;lt;/ref&amp;gt;]]&lt;br /&gt;
 |}&lt;br /&gt;
&lt;br /&gt;
== См. также ==&lt;br /&gt;
* [[Компьютерное зрение]]&lt;br /&gt;
* [[Generative Adversarial Nets (GAN)]]&lt;br /&gt;
* [[Сверточные нейронные сети]]&lt;br /&gt;
* [[Сегментация изображений]]&lt;br /&gt;
&lt;br /&gt;
== Примечания ==&lt;br /&gt;
&amp;lt;references /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Источники информации ==&lt;br /&gt;
&lt;br /&gt;
* [https://arxiv.org/abs/1611.07004 Image-to-Image Translation with Conditional Adversarial Networks]&lt;br /&gt;
* [https://arxiv.org/abs/1711.11585 High-Resolution Image Synthesis and Semantic Manipulation with Conditional GANs]&lt;br /&gt;
* [https://arxiv.org/abs/1805.03189 Learning image-to-image translation using paired and unpaired training samples]&lt;br /&gt;
* [https://arxiv.org/abs/1703.10593v6 Unpaired Image-to-Image Translation using Cycle-Consistent Adversarial Networks]&lt;br /&gt;
* [https://www.coursera.org/learn/apply-generative-adversarial-networks-gans/home/welcome Apply Generative Adversarial Networks (GANs) {{---}} Coursera]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Машинное обучение | ]]&lt;br /&gt;
[[Категория:Компьютерное зрение | ]]&lt;br /&gt;
[[Категория:Сверточные нейронные сети | ]]&lt;br /&gt;
[[Категория:Глубокое обучение | ]]&lt;br /&gt;
[[Категория:{{BASEPAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>79.111.225.239</name></author>	</entry>

	</feed>