Изменения

Перейти к: навигация, поиск

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

9865 байт добавлено, 17:59, 23 января 2021
пишу про CycleGAN
В одном случае, у нас есть четкое представление результата, который должен получиться, а в другом случае, его нет, но есть множество, определяющее стиль желаемого результата (Рис. 2).
[[File:Paired_vs_unpaired_training_data.png|400px|right|thumb|Рис. 2. Виды тренировочных данных для трансляции изображений.<ref name="towardsdatascience2">[https://towardsdatascience.com/cyclegan-how-machine-learning-learns-unpaired-image-to-image-translation-3fa8d9a6aa1d CycleGAN {{---}} Towardsdatascience]</ref>]]
=== Обучение на парах изображений ===
=== Архитектура ===
[[File:Training_CGAN_pix2pix.png|400px|right|thumb|Рис. 5. Пример процесса обучения генератора и дискриминатора для Pix2Pix.<ref name="towardsdatascience">[https://towardsdatascience.com/pix2pix-869c17900998 Pix2Pix {{---}} Towardsdatascience]</ref>]]
Pix2Pix реализует архитектуру [[Generative Adversarial Nets (GAN)#CGAN_.28Conditional_Generative_Adversarial_Nets.29| условных порождающих состязательных сетей ]](англ. CGAN), где для генератора взята архитектура, основанная на U-Net<ref name="unet">[https://sci-hub.do/10.1007/978-3-319-24574-4_28 U-Net: Convolutional Networks for Biomedical Image Segmentation]</ref>, а для дискриминатора используется сверточный классификатор PatchGAN<ref name="patch">[https://sci-hub.do/10.1007/978-3-319-46487-9_43 Precomputed Real-Time Texture Synthesis with Markovian Generative Adversarial Networks]</ref>, который штрафует алгоритм на уровне участков изображения.
==== Генератор ====
[[File:UNet_generator_pix2pixU-Net-Generator-Model.png|400px|right|thumb|Рис. 6. Архитектура Pix2Pix генератора.<ref name="machinelearningmastery">[https://machinelearningmastery.com/how-to-implement-pix2pix-gan-models-from-scratch-with-keras/ Pix2Pix GAN Models {{---}} Machine Learning Mastery]</ref>]]
Для генератора Pix2Pix используется U-net-генератор.<br>
Генератор должен не только обмануть дискриминатор, но и приблизиться к истине, поэтому его '''функция ошибки''' выглядит следующим образом: <br>
<tex>L(G) = BCE\,Loss </tex><ref>[https://towardsdatascience.com/understanding-binary-cross-entropy-log-loss-a-visual-explanation-a3ac6025181a BCE Loss {{---}} towardsdatascience]</ref> <tex>+ \,\lambda*\sum_{i=1}^{n}|generated\_output - real\_output|</tex>, где <tex>|generated\_output - real\_output|</tex> {{---}} попиксельная разница.
==== Дискриминатор ====
[[File:The-PatchGAN-structure-in-the-discriminator-architecture.png|400px|right|thumb|Рис. 7. Архитектура PatchGAN дискриминатора.<ref name="researchgate">[https://www.researchgate.net/figure/The-PatchGAN-structure-in-the-discriminator-architecture_fig5_339832261 The PatchGAN structure {{---}} ResearchGate]</ref>]]
Для дискриминатора данной сети используется сверточный дискриминатор PatchGAN.
* затем для вычисления ошибки дискриминатора проводится 2 сравнения:
** сравнение матрицы классификации от {объединения сгенерированного изображения с исходным входным сегментированным изображением} с матрицей из всех 0;
** матрицы классификация от {объединения реального изображения с исходным входным сегментированным изображением } с матрицей из всех 1;
* затем для вычисления ошибки генератора проводится сравнение матрицы классификации от {объединения сгенерированного изображения с исходным входным изображением} с матрицей из всех 1, которое считается с помощью BCE Loss, которое впоследствии суммируется с попиксельным сравнением реального изображения со сгенерированным, домноженным на <tex>\lambda</tex>;
[[File:Pix2pix-UNet-128-GAN-network-architecture.png|700px|center|thumb|Рис. 8. Архитектура Pix2Pix.<ref name="researchgate2">[https://www.researchgate.net/figure/Pix2pix-UNet-128-GAN-network-architecture_fig2_324962509 Pix2pix UNet_128 GAN network architecture {{---}} ResearchGate]</ref>]]
=== Примеры ===
 
[[File:Pix2pix_examples.png|800px|center|thumb|Рис. 9. Примеры Pix2Pix.]]
Для тестирования решения были проведены следующие эксперименты:
* день <tex>\to</tex> ночь;
и так далее.
 
[[File:Pix2pix_examples.png|800px|center|thumb|Рис. 9. Примеры Pix2Pix. <ref>[https://sh-tsang.medium.com/review-pix2pix-image-to-image-translation-with-conditional-adversarial-networks-gan-ac85d8ecead2 Sik-Ho Tsang]</ref>]]
== Pix2PixHD ==
[[File:Generator_pix2pixhd.png|400px|right|thumb|Рис. 10. Генератор Pix2PixHD. <ref name="towardsdatascience">[https://towardsdatascience.com/pix2pix-869c17900998 towardsdatasciencePix2Pix {{---}} Towardsdatascience]</ref>]]
Pix2PixHD<ref name="Pix2PixHD">[https://github.com/NVIDIA/pix2pixHD Pix2PixHD {{---}} GitHub]</ref>{{---}} нейронная сеть, основанная на архитектуре Pix2Pix, которая является новым удачным подходом для решения задачи получения изображений высокого разрешения из сегментированных изображений.
Основа Pix2Pix была улучшена за счет изменений в генераторе, дискриминаторе и функции ошибки.
'''Генератор''' был разбит на две подсети <tex>G_1</tex> и <tex>G_2</tex> так, что первая приняла роль глобальной сети генератора, а вторая стала локальным усилителем сети. Таким образом, генератор стал задаваться набором <tex>G = \{G1, G2\}</tex>. Глобальная сеть генератора работает с изображениями с разрешением <tex>1024 × 512</tex>, в то время как локальный усилитель сети принимает на вход изображения с разрешением <tex>в 4 × </tex>размер раза больше размера вывода предыдущей сети. Для получения изображений большего разрешения могут быть добавлены дополнительные локальные усилители сети. Чтобы различать реальные и синтезированные изображения с высоким разрешением, дискриминатор должен иметь большое поле восприятия. Для этого потребуется либо более глубокая сеть, либо более крупные сверточные ядра, оба из которых увеличат емкость сети и потенциально могут вызвать переобучение. Кроме того, оба варианта требуют большего объема памяти для обучения, что уже является дефицитным ресурсом для создания изображений с высоким разрешением. Для решения проблемы предлагаем используется '''3 дискриминатора''', которые имеют идентичную структуру сети, но работают с разными масштабами изображения<ref name="Pix2PixHDPaper">[https://arxiv.org/pdf/1711.11585.pdf High-Resolution Image Synthesis and Semantic Manipulation with Conditional GANs]</ref>.  '''Функция ошибки''' была улучшена за счет добавления ошибки (feature matching loss) в разных масштабах изображения для каждого дискриминатора <tex>\sum_{k=1}^{3} L_{FM}(G, D_k)</tex>, для вычисления которой будем использовать выдаваемые значения дискриминатора на разных слоях изображения: <tex>L_{FM}(G, D_k) = \mathbb{E}_{(s,x)}\sum_{i=1}^{T}\frac{1}{N_i}[||D_k^{(i)}(s,x) - D_k^{(i)}(s, G(s))||]</tex>, где <tex>T</tex> {{---}} количество слоев, <tex>N_i</tex> {{---}} количество элементов в каждом слое, <tex>s</tex> {{---}} исходное сегментированное изображение, <tex>x</tex> {{---}} соответствующее реальное изображение, <tex>G(s)</tex> {{---}} сгенерированное изображение. На рисунках 11 и 12 приведены примеры генерации изображения по входным сегментированным изображениям с применением различных стилей. [[File:City_pix2pixhd.gif|600px|center|thumb|Рис. 11. Пример работы Pix2PixHD {{---}} label-to-streetview.<ref name="Pix2PixHD">[https://github.com/NVIDIA/pix2pixHD Pix2PixHD {{---}} GitHub]</ref>]] [[File:Face_pix2pixhd.gif|600px|center|thumb|Рис. 12. Пример работы Pix2PixHD {{---}} label-to-face. <ref name="Pix2PixHD">[https://github.com/NVIDIA/pix2pixHD Pix2PixHD {{---}} GitHub]</ref>]] == CycleGAN ==[[File:CycleGAN Arxitecture.jpeg|390px|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_{A}</math> учится преобразовывать исходное изображение <math>X</math> в выходное изображение <math>Y</math> *Генератор <math>G_{B}</math> учится преобразовывать выходное изображение <math>Y</math> в исходное изображение <math>X</math>*Дискриминатор <math>D_{A}</math> учится различать изображение <math>X</math> и сгенерированное изображение <math>X ( G_{B}(Y) )</math>*Дискриминатор <math>D_{B}</math> учится различать изображение <math>Y</math> и сгенерированное изображение <math>Y ( G_{A}(X) )</math>Структура генератора состоит из кодировщика (англ. {{---}} ''Encoder''), создающего функцию особенностей из исходного изображения, трансформатора (англ. {{---}} ''Transformation''), изменяющего функцию особенностей для создания сгенерированного изображения, и декодера (англ. {{---}} ''Decoder''), возвращающего функцию особенностей обратно в формат изображения. Структура дискриминатора состоит из декодера, извлекающего особенности из входного изображения, и классификатора, определяющего сгенерировано ли изображение.[[File:Generator.jpeg|390px|right|thumb|Рис. 14. Архитектура Генератора <ref name="how CycleGAN works"></ref>]][[File:Discriminator.jpeg|390px|right|thumb|Рис. 15. Архитектура Дискриминатора <ref name="how CycleGAN works"></ref>]]Реализация элементов дискриминатора и генератора аналогичны тем, которые используются в Pix2Pix. '''Сеть''' предоставляет подход перевода изображения из исходного домена <math>X</math> в целевой домен <math>Y</math> при отсутствии парных примеров. Цель задачи в изучении отображения <math>G{A}: X → Y </math>, так, чтобы распределение изображений <math>G_{A}(X)</math> было неотличимо от распределения <math>G_{B}(Y)</math> с учетом состязательной потери (aнгл. {{---}} ''Сonsistency loss'').Также чтобы избежать коллапса мод<ref name="Mode Collapse">[http://neerc.ifmo.ru/wiki/index.php?title=Generative_Adversarial_Nets_(GAN)#.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 Улучшение обучения GAN]</ref>(англ. {{---}} ''Mode collapse''), следует проверить отображение <math>G : Y → X </math>, который пытается сопоставить <math>Y</math> и <math>X</math>.  Другими словами для выполнения успешного преобразования должно выполниться следующее условие <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 loss''). <tex>Loss_{adv}(G,D_{B},X) = \frac{1}{m}(\sum_{i=1}^m(1 -D_{B}(G_{Xi})))*2</tex> <tex>Loss_{adv}(F,D_{A},Y) = \frac{1}{m}(\sum_{i=1}^m(1 -D_{A}(F_{Yi}))*2</tex> <tex>Loss_{cyc}(G,F,X,Y) = \frac{1}{m}\sum_{i=1}^m(F(G(Xi) - Xi) + (G(F(Yi)) - Yi))</tex>
Вместо одного '''дискриминатора''' появилось 3 таких же дискриминатора.<tex>Loss_{full} = Loss_{adv} + \lambda * Loss_{cyc}</tex>,
'''Функция ошибки''' была улучшена за счет добавления ошибки в масштабах признаков.где <tex>\lambda</tex> {{---}} гиперпараметр для уравнения потери согласованности цикла
{|align="center" |-valign="top" |[[File:City_pix2pixhdDoge starrynight.gifjpg|500px700px|leftcenter|thumb|Рис. 1116. Пример работы Pix2PixHD {{---}} label-to-streetview.CycleGAN <ref name="Pix2PixHDhow CycleGAN works">[https://githubtowardsdatascience.com/NVIDIA/pix2pixHD Pix2PixHD {{cyclegan-how-machine-learning-learns-unpaired-image-to-image-translation-}} GitHub3fa8d9a6aa1d Пример работы CycleGAN]</ref>]] |[[File:Face_pix2pixhdComics.gifpng|500px700px|leftcenter|thumb|Рис. 1217. Пример работы Pix2PixHD {{---}} label-to-face. CycleGAN <ref name="Pix2PixHDАлгоритм CycleGAN">[https://github.com/NVIDIA/pix2pixHD Pix2PixHD {{---}} GitHub]</ref>]] |}
== См. также ==
13
правок

Навигация