<?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=23.227.140.181&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=23.227.140.181&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/23.227.140.181"/>
		<updated>2026-04-09T13:17:22Z</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=77168</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=77168"/>
				<updated>2021-01-09T20:05:27Z</updated>
		
		<summary type="html">&lt;p&gt;23.227.140.181: &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.gif|600px|thumb|right|Пример работы трансляции изображения: превращение лошади в зебру, и наоборот. (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;
== Описание задачи ==&lt;br /&gt;
&lt;br /&gt;
Задача разделяется на два вида в зависимости от тренировочных данных. &amp;lt;br&amp;gt;&lt;br /&gt;
Различие заключается в том, что в одном случае, у нас есть четкое представление результата, который должен получиться, в то время как в другом случае, у нас есть только множество, определяющее стиль желаемого результата, но четкого результата нет.&lt;br /&gt;
&lt;br /&gt;
[[File:Paired_vs_unpaired_training_data.png|400px|right|thumb|Виды тренировочных данных для задачи трансляции изображений.]]&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;
&lt;br /&gt;
[[File:Examples_paired_translation.jpg|700px|center|thumb|Примеры применения задачи трансляции изображения с парными тренировочными данными. (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|Примеры применения задачи трансляции изображения с непарными тренировочными данными. (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|Пример процесса обучения генератора и дискриминатора для Pix2Pix.]]&lt;br /&gt;
&lt;br /&gt;
Pix2Pix реализует архитектуру условных порождающих состязательных сетей (англ. 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 работает похожим образом, но вместо вектора класса подается изображение, а вектор шума и вовсе убирается, потому что он не вносит значительной случайности для результата работы генератора.&lt;br /&gt;
&lt;br /&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|Архитектура 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;
[[File:UNet_generator_pix2pix.png|400px|right|thumb|Архитектура Pix2Pix генератора.]]&lt;br /&gt;
&lt;br /&gt;
Для генератора Pix2Pix используется UNet-генератор.&amp;lt;br&amp;gt;&lt;br /&gt;
'''UNet-генератор'''&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 с добавлением пропускаемых соединений между зеркальными слоями в стеках кодировщика и декодера.&lt;br /&gt;
&lt;br /&gt;
Как работает генератор:&lt;br /&gt;
* на вход подается изображение &amp;lt;tex&amp;gt;x&amp;lt;/tex&amp;gt;&lt;br /&gt;
* далее последовательно применяются свертка, батч-нормализация (англ. Batch Norm layer)&amp;lt;ref&amp;gt;[https://en.wikipedia.org/wiki/Batch_normalization Batch normalization {{---}} Wikipedia]&amp;lt;/ref&amp;gt;, функция активации LeackyReLU и пулинг, что, тем самым, уменьшает количество признаков&lt;br /&gt;
* при этом, следуя архитектуре UNet, добавляются пропускаемые соединения между каждым слоем &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;
Для того, чтобы описать полный пайплайн работы 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|Архитектура Pix2Pix.]]&lt;br /&gt;
&lt;br /&gt;
=== Примеры ===&lt;br /&gt;
&lt;br /&gt;
[[File:Pix2pix_examples.png|800px|right|thumb|Примеры 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;
== См. также ==&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;
[[Категория:{{BASEPAGENAME}}]]&lt;/div&gt;</summary>
		<author><name>23.227.140.181</name></author>	</entry>

	</feed>