== CycleGAN ==
Нейронная сеть, в отличии от Pix2Pix позволяет реализовать решение задачи обучения на независимых множествах. Обычно применяются для задач изменения стиля фотографий.[[File:CycleGAN Arxitecture.jpeg|400px390px|right|thumb|Рис. 13. Алгоритм CycleGAN <ref name="Алгоритм CycleGAN">[https://habr.com/ru/post/479218/ Алгоритм CycleGAN]</ref>]]Нейронная сеть, в отличии от описанной выше Pix2Pix позволяет реализовать решение задачи обучения на независимых множествах. Обычно применяются для задач изменения стиля фотографий.
=== Архитектура ===
'''CycleGAN'''<ref name=" Cycle-Consistent Adversarial Networks">[https://arxiv.org/abs/1703.10593 Cycle-Consistent Adversarial Networks]</ref> реализует архитектуру циклически-согласованных с циклом состязательных сетей (англ. {{---}} ''Cycle-Consistent Adversarial Networks''), суть которой состоит в решении проблемы отсутствия парного набора данных. '''В Архитектуре''' присутствуют 2 генератора и 2 дискриминатора которые выполняют различные задачи:*Генератор <math>G_{X to Y}</math> учится преобразовывать исходное изображение <math>X</math> в выходное изображение <math>Y</math> *Генератор <math>G_{Y to X}</math> учится преобразовывать выходное изображение <math>Y</math> в исходное изображение <math>X</math>*Дискриминатор <math>Dx</math> учится различать изображение <math>X</math> и сгенерированное изображение <math>X ( G_{Y to X}(Y) )</math>.*Дискриминатор <math>Dy</math> учится различать изображение <math>Y</math> и сгенерированное изображение <math>Y ( G_{X to Y}(X) )</math>.
'''Сеть''' предоставляет подход перевода В Архитектуре присутствуют 2 генератора и 2 дискриминатора которые выполняют различные задачи:*Генератор <math>G_{A}</math> учится преобразовывать исходное изображение из исходного домена <math>X</math> в целевой домен выходное изображение <math>Y</math> *Генератор <math>G_{B}</math> учится преобразовывать выходное изображение <math>Y</math> при отсутствии парных примеров. Цель задачи в изучении отображения исходное изображение <math>X</math>*Дискриминатор <math>D_{A}</math> учится различать изображение <math>G: X → Y </math>, так, чтобы распределение изображений и сгенерированное изображение <math>X ( G_{X to YB}(XY) )</math> было неотличимо от распределения *Дискриминатор <math>D_{B}</math> учится различать изображение <math>Y</math> и сгенерированное изображение <math>Y ( G_{Y to XA}(YX) )</math> с учетом состязательной потериСтруктура генератора состоит из кодировщика(англ. {{---}} ''Encoder''),создающего функцию особенностей из исходного изображения, трансформатора(aнглангл. Сonsistency loss{{---}} ''Transformer'')изменяющего функцию особенностей для создания сгенерированного изображения, и декодера(англ. {{---}} ''Decoder''),возвращающего функцию особенностей обратно в формат изображения. Структура дискриминатора состоит из декодера, извлекающего особенности из входного изображения, и классификатора, определяющего сгенерировано ли изображение.Так же что бы избежать режима коллапса[[File:Generator.jpeg|390px|right|thumb|Рис. 14. Архитектура Генератора <ref name="Mode Collapsehow CycleGAN works"></ref>]][[httpsFile://arxivDiscriminator.jpeg|390px|right|thumb|Рис.org/abs/170515.07761 Mode Collapse]Архитектура Дискриминатора </refname="how CycleGAN works">(англ. ''Mode collapse''), следует проверить отображение <math>G : Y → X </mathref>]]Реализация элементов дискриминатора и генератора аналогичны тем, который пытается сопоставить <math>Y</math> и <math>X</math>которые используются в Pix2Pix.
Другими словами для выполнения успешного преобразования должно выполниться следующее условие '''Сеть''' предоставляет подход перевода изображения из исходного домена <math>X</math> в целевой домен <math>Y</math> при отсутствии парных примеров. Цель задачи в изучении отображения <math>G{A}: X → Y </math>, так, чтобы распределение изображений <math>G_{Y to XA}(X)</math> было неотличимо от распределения <math>G_{X to B}(Y)</math> с учетом состязательной потери (aнгл. {{---}}''Сonsistency loss'').Также чтобы избежать коллапса мод<ref name="Mode Collapse">[http://neerc.ifmo.ru/wiki/index.php?title=Generative_Adversarial_Nets_(XGAN)) \sim x + Loss_#.D0.A3.D0.BB.D1.83.D1.87.D1.88.D0.B5.D0.BD.D0.B8.D0.B5_.D0.BE.D0.B1.D1.83.D1.87.D0.B5.D0.BD.D0.B8.D1.8F_GAN Mode Collapse]</ref>(англ. {{full---}}. ''Mode collapse''), следует проверить отображение <math>G : Y → X </math>, который пытается сопоставить <math>Y</math> и <math>X</math> .
Структура дискриминатора и генератора аналогичны тем, которые используются в Pix2PixДругими словами для выполнения успешного преобразования должно выполниться следующее условие <math>G_{B}(G_{A}(X)) \sim X + Loss_{full}.</math>
==== Функция потери ====
'''Функция потери'''<ref name="Cyclic_loss">[https://towardsdatascience.com/a-gentle-introduction-to-cycle-consistent-adversarial-networks-6731c8424a87 Cyclic_loss]</ref> должна быть выполнена таким образом , что бы
все отображения должны быть противоположными друг другу и взаимно однозначными.
Она состоит из потери согласованности цикла (англ. {{---}} ''Cycle Consistency Loss'') и состязательной потери(англ. {{---}} ''adversarial Adversarial loss'').
<tex>Loss_{adv}(G,DyD_{B},X) = \frac{1}{m}(\sum_{i=1}^m(1 -D_{yB}(G_{xiXi})))*2</tex>
<tex>Loss_{adv}(F,DxD_{A},Y) = \frac{1}{m}(\sum_{i=1}^m(1 -D_{xA}(F_{yiYi}))*2</tex>
<tex>Loss_{cyc}(G,F,X,Y) = \frac{1}{m}\sum_{i=1}^m(F(G(xiXi) - xiXi) + (G(F(yiYi)) - yiYi))</tex>
<tex>Loss_{full} = Loss_{adv} + \lambda * Loss_{cyc}</tex>,
где <tex>\lambda</tex> {{- --}} гиперпараметр для уравнения потери согласованности цикла
[[File:Doge starrynight.jpg|700px|center|thumb|Рис. 1416. Пример работы CycleGAN <ref name="how CycleGAN works">[https://towardsdatascience.com/cyclegan-how-machine-learning-learns-unpaired-image-to-image-translation-3fa8d9a6aa1d Пример работы CycleGAN]</ref>]][[File:Comics.png|700px|center|thumb|Рис. 1517. Пример работы CycleGAN <ref name="Алгоритм CycleGAN"></ref>]]
== См. также ==