Изменения

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

Вписывание части изображения

135 байт убрано, 19:24, 4 сентября 2022
м
rollbackEdits.php mass rollback
[[Файл:inpainting_sample.jpg|thumb|400px|Рисунок 1. Пример восстановления изображения. (a) {{В разработке---}}оригинальное изображение, (b) {{---}} изображение со стертыми частями, (с) {{---}} изображение, полученное в результате восстановления.<ref name="SC-FEGAN"/>]]
[[Файл:inpainting_sample'''Восстановление изображения '''(англ.jpg|thumb|400px|(ainpainting) {{---}} оригинальное изображение, (b) это процесс замены поврежденных частей изображения на реалистичные фрагменты. '''Вписывание части изображения''' {{---}} изображение со стертыми частямиэто подзадача восстановления, (с) {{---}} изображение, полученное в результате подрисовки]]которая опирается на имеющуюся неиспорченную часть изображении для замены поврежденной.
'''Подрисовка Алгоритмы вписывания части изображения применяются для редактирования изображений '''или для их восстановления, если их часть была утрачена или повреждена. С помощью современных моделей можно вырезать ненужные объекты или изменить их внешний вид (англ. inpaintingнапример, поменять цвет глаз у человека) {{---}} процесс замены дефектных частей изображения на реалистичные фрагменты. '''Вписывание части изображения''' - это подзадача подрисовки. Процесс подрисовки обычно опирается на имеющиеся неиспорченные пиксели в изображении для замены поврежденных.
Методы данной области применяются для редактирования изображений или для их восстановления, если их часть была утрачена или подвержена некоторым дефектам. С помощью современных моделей можно вырезать ненужные объекты или изменить их свойство (например, поменять цвет глаз у человека).
== Виды восстановления изображения ==
== Виды подрисовки ==[[Файл:denoising_sample.jpg|thumb|550px|Рисунок 2. Пример устранения текста, наложенного на изображение. В данном случае текстом покрыто 18.77% площади.<ref>[https://www.researchgate.net/publication/220903053_Fast_Digital_Image_Inpainting Fast Digital Image Inpainting, Manuel M. Oliveira, Brian Bowen, Richard McKenna, Yu-Sung Chang]</ref>]]
[[ФайлВосстановление изображения разделяется на две задачи:denoising_sample* '''Управляемое восстановление изображения''' (англ.jpg|thumb|550px|Пример устранения наложенного текста non-blind inpainting). В этой задаче вместе с изображением подается информация о том, какие пиксели нужно заменить.* '''Слепое восстановление изображения''' (англ. blind inpainting). В решениях данной проблемы модель сама определяет, где на изобрежениеизображении поврежденные пиксели. Модели слепого восстановления чаще всего занимаются устранением шумов (англ. denoising). В данном случае текстом покрыто 18качестве шума, например, может быть наложенный текст (см Рис.77% площади2).]]
Подрисовка обычно разделяется на две задачи:* '''Управляемая подрисовка'''(англ. non-blind inpainting). В этой задаче вместе с изображением подается информация о том, какие пиксели нужно заменить.* '''Слепая подрисовка'''(англ. blind inpainting). В решениях данной проблемы модель сама определяет, где на изображении дефектные пиксели. Модели слепой подрисовки чаще всего занимаются устранением шумов (англ. denoising). В качестве шума, например, может быть наложенный текст. Пример работы модели удаления наложенного текста приведен на картинке справа. В этом конспекте преимущественно речь пойдет про управляемую подрисовкууправляемое восстановление.
== Традиционные методы ==
Есть два основных простых метода восстановления данных:
# Быстрый пошаговый метод (англ. Fast marching method)<ref>[https://www.researchgate.net/publication/238183352_An_Image_Inpainting_Technique_Based_on_the_Fast_Marching_Method An Image Inpainting Technique Based onthe Fast Marching Method, Alexandru Telea]</ref>. Этот метод двигается от границ области, которую нужно закраситьзаполнить, к ее центру, постепенно закрашивая восстанавливая пиксели. Каждый новый пиксель вычисляется как взвешенная сумма известных соседних пикселей.# Метод Навье-Стокса (англ. Navier-Stokes method)<ref>[https://www.math.ucla.edu/~bertozzi/papers/cvpr01.pdf Navier-Stokes, Fluid Dynamics, and Image and Video Inpainting, M. Bertalmio, A. L. Bertozzi, G. Sapiro]</ref>. Метод основывается на том, что грани границы объектов в на изображении должны быть непрерывными. Цвета Значения пикселей вычисляются из известных областей около гранейвокруг испорченной части. Метод основывается на дифференциальных уравнениях в частных производных.
== Глубокое обучение ==
[[Файл:inpainting_network.jpg|thumb|550px|Рисунок 3. Пример GAN для inpainting.<ref>[http://iizuka.cs.tsukuba.ac.jp/projects/completion/data/completion_sig2017.pdf Globally and Locally Consistent Image Completion, Satoshi Lizuka, Edgar Simo-Serra, Hiroshi Ishikawa]</ref>]]
В отличие от приведенных выше простых методов, глубокое обучение позволяет в процессе подрисовки восстановления изображения учитывать его семантику изображения. В этом случае заполнение алгоритм заполнения отсутствующих областей основывается на контекстетом, определяемом объектами какие объекты расположены на изображении.
Современные методы машинного обучения для решения данной задачи часто базируются Для того, чтобы понимать, какую часть изображения нужно заполнить, на глубоких нейронных сетях для классификации изображений, [[Автокодировщик|автокодировщиках (autoencoder)]] и [[Generative_Adversarial_Nets_(GAN)|генеративно-состязательных сетях (GAN)]]вход сети кроме самого изображения подается слой маски с информацией об испорченных пикселях.
Для тогоВ сетях обычно используется архитектура [[Автокодировщик|автокодировщиков (англ. autoencoder)]] {{---}} сначала идут слои кодирующие, чтобы понимать, какую часть изображения нужно заполнить, на вход сети кроме самого а потом декодирующие изображение. Функция потерь заставляет модель изучать другие свойства изображения подается слой маски с информацией о пикселях, где данные отсутствуюта не просто копировать его из входных данных в выходные. Именно это позволяет научить модель заполнять недостающие пиксели.
Сети обычно имеют модель автокодировщиков {{Обучение может происходить через сравнение оригинального изображения и синтетического, сгенерированного сетью или через [[Generative_Adversarial_Nets_(GAN)|генеративно---}} сначала идут слои кодирующиесостязательную сеть (GAN)]]. Во втором случае для обучения используется дискриминатор, а потом декодирующие который определяет настоящее ли изображениеподали ему на вход. Функция В современных моделях обычно используют совмещенный подход: функции потерь побуждает модель изучать другие свойства зависят и от исходного изображения, а не просто копировать его из входных данных в выходные. Именно это предоставляет возможность научить модель заполнять недостающие пикселии от выхода дискриминатора.
Обучение может происходить через сравнение оригинального изображения и синтетического, сгенерированного сетью или через генеративно-состязательную сеть. Во втором случае для обучения используется дискриминатор, который определяет фейковое ли изображение подали ему на вход. В современных моделях обычно используют совмещенный подход: функции потерь зависят и от исходного изображения, и от выхода дискриминатора. В ранних моделях часто использовались применялись два дискриминатора(см Рис. 3):
# Локальный дискриминатор (англ. Local Discriminator). Ему подавалась на вход только сгенерированная часть изображения.
# Глобальный дискриминатор (англ. Global Discriminator). В данном случае на вход подавалось все изображение целиком.
Однако в современных моделях чаще используется один дискриминатор, который принимает на вход не только канал с выходным изображениемвосстановленное изображение, но и канал с маскоймаску. Современные модели чаще всего принимают на вход маски произвольной формы (англ. free-form mask), при работе с которыми локальный дискриминатор показывает плохое качество. Именно поэтому концепция двух дискриминаторов стала не популярнойнепопулярной.
=== Виды сверток Свертки ===
Помимо Для вписывания изображения помимо классической свертки в задаче подрисовки широко применяют используются другие виды сверток, которые дают лучшее качество выходного изображенияспособы перехода от слоя к слою. Подробнее про свертки можно прочитать в конспекте [[Сверточные нейронные сети]]==== # '''Расширенная свертка (англ. Dilated convolution) ==== Похожа на пуллинг и свертку с шагом, но '''. Данный способ позволяет:* Экспоненциально расширить рецептивное поле без потери качества изображения* Получить большее рецептивное поле при тех же затратах на вычисления и памяти, сохранив сохранить качество изображения Формула отличается от классической только коэффициентом расширения l: <tex>(F *_{l} k)(p) = \sum\limits_{s+lt=p}F(s)k(t)</tex> Пример: {| |- |[[Файл:Dilated_convolution.png|border|700px|thumb|left|Расширенная свертка.]] | 1-изображении, 2- уменьшив затраты на память и 4-расширенные свертки с классическими ядрами 3x3, 5x5 и 9x9 соответственно. Красные точки обозначают ненулевые веса, остальные веса ядра равны нулю. Выделенные синие области обозначают рецептивные полявычисления. |} ==== # '''Частичная свертка (англ. Partial convolution) ==== Частичная .''' Данная свертка дает лучшее качество на масках произвольной формы. Классическая свертка позволяет решить две проблемы предыдущих подходов глубокого обучения:# Предположениепредполагает, что испорченные области имеют простую форму (прямоугольную).# Заполнение испорченной области одним цветом и применение свертки ко всему изображению вне зависимости от того, какие все пиксели испорченывалидны, а какие нет. Слой свертки состоит из:<tex>X</tex> {{---}} значения частичная учитывает количество стертых пикселей,<tex>M</tex> {{---}} маска, указывающая на то какие пиксели испорченыв рассматриваемой матрице<tex>x# '' = \begin{cases} W^T(X\bigodot M)\frac{sum(1)}{sum(M)}+b, & \mbox{if } sum(M)>0 \\ 0, & \mbox{otherwise} \end{cases}</tex> Поэлементное перемножение <tex>X</tex> и <tex>M</tex> позволяет получить результат, зависящий только от правильных пикселей, а <tex>\frac{sum(1)}{sum(M)}</tex> нормализует этот результат, так как количество правильных пикселей на каждом слое свертки различается. Маска обновляется так: <tex>m' = \begin{cases} 1, & \mbox{if } sum(M)>0 \\ 0, & \mbox{otherwise} \end{cases}</tex> Если результат свертки зависел хоть от одного реального пикселя, то на следующем слое свертки результирующий пиксель не будет считаться испорченным. Таким образом с каждым слоем свертки маска заполняется пока не будет полностью заполнена единицами. ==== Стробированная свертка (англ. Gated convolution) ==== Разделение пикселей только на правильные и испорченные не позволяет:# Контролировать восстановление изображения и вносить некоторую дополнительную информацию.# Сохранить информацию об испорченной области, так как постепенно все пиксели становятся правильными. Вместо жесткой маски, которая обновляется по некоторым правилам, стробированная свертка учится автоматически извлекать маску из данных: <tex>\begin{array}{rcl} Gating_{y,x} & = & \sum \sum W_g \cdot I \\ Feature_{y,x} & = & \sum \sum W_f \cdot I \\ O_{y,x} & = & \phi (Feature_{y,x}) \bigodot \sigma (Gating_{y,x}) \end{array}</tex> ''' Данная свертка учится динамическому отбору признаков для каждого слоя изображения позволяет сохранять информацию о маске и каждой логической области маскиэскизах пользователя во всех слоях сети, значительно улучшая однородность цвета и что дает возможность получить лучшее качество исправления испорченных областей различных форм.
=== Функции потерь ===
Существует большое множество различных функций потерь при методе обучение обучения модели через сравнение сгенерированного изображения с оригинальным.
Примеры:
* '''L1-loss''' или '''Per-pixel loss'''. Оценивает точность восстановления каждого пикселя по отдельности.
<center><tex>L_{per-pixel} = \frac{1}{N_{I_{gt}}}\|M \odot (I_{gen} - I_{gt})\| + \alpha \frac{1}{N_{I_{gt}}}\|(1 - M) \odot (I_{gen} - I_{gt})\|</tex>,</center>
:где <tex>I_{gen}</tex> {{---}} выход генератора; <tex>I_{gt}</tex> {{---}} оригинальное изображние изображение (англ. ground truth); <tex>N_a</tex> {{---}} количество элементов в объекте <tex>a</tex>; <tex>M</tex> {{---}} бинарная маска; <tex>\alpha</tex> {{---}} гиперпараметр, <tex>\odot</tex> {{--- }} поэлементное перемножение.
* '''Perceptual loss'''. Cравнивает признаки полученного сгенерированного и исходного изображений, полученные с помощью модели VGG-16<ref>[https://arxiv.org/pdf/1409.1556v6.pdf Very Deep Convolutional Networks for Large-Scale Image Recognition, Karen Simonyan, Andrew Zisserman]</ref>.
<center><tex>L_{percept} = \sum\limits_{q}\frac{\|\Theta_{q}(I_{gen}) - \Theta_{q}(I_{gt})\|}{N_{\Theta_{q}(I_{gt})}} + \sum\limits_{q}\frac{\|\Theta_{q}(I_{comp}) - \Theta_{q}(I_{gt})\|}{N_{\Theta_{q}(I_{gt})}}</tex>,</center>
:где <tex>I_{comp}</tex> {{---}} изображение <tex>I_{gen}</tex>, в котором нестертые части заменены на части из <tex>I_{gt}</tex>; <tex>\Theta_{q}(x)</tex> {{---}} карта признаков, полученная <tex>q</tex>-ым слоем VGG-16.
* '''Style loss'''. Сравнивает текстуру и цвета изображенийСчитает корреляцию между признаками на каждом слое, используя матрицу что на самом деле является матрицей Грама<ref>[https://en.wikipedia.org/wiki/Gramian_matrix Gramian matrix, Wikipedia]</ref>. Согласно алгоритму [[Neural Style Transfer|нейронного переноса стиля (англ. Neural Style Transfer, NST)]] матрица Грама содержит информацию о текстуре и цвете изображения. Таким образом style loss сравнивает сгенерированное и оригинальное изображения на схожесть стилей.
<center><tex>L_{style} = \sum\limits_{q}\frac{1}{C_q C_q} \| \frac{G_q(I_{gen})-G_q(I_{gt})}{N_q}\|</tex>,</center>
:где <tex>G_q(x) = (\Theta_{q}(I_{x}))^T (\Theta_{q}(I_{x}))</tex> {{---}} матрица Грама для выполнения автокорреляции на карте признаков VGG-16; <tex>C_{q}</tex> {{---}} размерность матрицы Грама.
* '''Total variation loss'''. Оценивает однородность полученного изображения.
<center><tex>L_{tv} = \sum\limits_{(i,j) \in R}\frac{\|I_{comp}^{i,j+1} - I_{comp}^{i,j}\|}{N_{I_{comp}}} + \sum\limits_{(i,j) \in R}\frac{\|I_{comp}^{i+1,j} - I_{comp}^{i,j}\|}{N_{I_{comp}}}</tex>,</center> где <tex>I_{comp}</tex> {{---}} изображение <tex>I_{gen}</tex>, в котором нестертые части заменены на части из <tex>I_{gt}</tex>; <tex>N_{I_{comp}}</tex> {{---}} количество пикселей в <tex>I_{comp}</tex>
* '''Adversarial loss'''. Сравнивает генерируемые и оригинальные грани границы объектов в изображении.
<center><tex>L_{adv} = \mathbb{E}[\log D(H_{gt}, I_{gray})] + \mathbb{E}[\log (1 - D(H_{gen}, I_{gray}))]</tex>,</center>
:где <tex>I_{gray}</tex> {{---}} черное черно-белое оригинальное изображение; <tex>H_{gt}</tex> {{---}} грани границы объектов оригинального изображения; <tex>H_{gen}</tex> {{---}} генерируемые граниграницы; <tex>D</tex> {{---}} дискриминатор;
* '''Feature-matching loss'''. Сравнивает изображения по признакам, извлекаемым извлекаемыми из всех слоев дискриминатора.
<center><tex>L_{FM} = \mathbb{E}[\sum\limits_{i=1}^L \frac{1}{N_i} \|D^{(i)}(H_{gt} - D^{(i)}(H_{gen}))\| ]</tex>,</center>
:где <tex>L</tex> {{---}} количество слоев дискриминатора; <tex>N_i</tex> {{---}} число нейронов на <tex>i</tex>-ом слое дискриминатора; <tex>D^{(i)}</tex> {{---}} значения диксриминатора дискриминатора на слое <tex>i</tex>;
При обучении обычно используется комбинация функций потерь с некоторыми весами, которые являются гиперпараметрами. В моделях, где вдобавок используется дискриминатор, функция потерь от его выхода также подмешивается к итоговой функции потерь.
== Примеры современных моделей ==
=== DeepFillv2<ref>[https://github.com/run-youngjoo/SC-FEGAN Free-Form Image Inpainting with Gated Convolution, Jiahui Yu, Zhe Lin, Jimei Yang, Xiaohui Shen, Xin Lu, Thomas Huang]</ref> === [[Файл:DeepFillv2_modelsc-fegan_result.jpegjpg|thumb|450px300px|Сеть DeepFillv2Рисунок 4.Пример работы модели SC-FEGAN.<ref name="SC-FEGAN"/>]]
Главная идея данной модели {{=== SC-FEGAN<ref name="SC-FEGAN">[https://github.com/run-}} это использование стробированной сверткиyoungjoo/SC-FEGAN Face Editing Generative Adversarial Network with User's Sketch and Color, которая позволила добиться хорошего качества вписывания при восстановлении изображения с разными формами испорченных областей. Также данная модель может использовать набросок пользователя в качестве входных данных.Youngjoo Jo, Jongyoul Park]</ref> ===
Кроме тогоSC-FEGAN позволяет создавать высококачественные изображения лиц за счет эскизов, в данной модели предлагается использовать вариант генеративно состязательной сети {{---}} SN-PatchGANпередаваемых пользователем вместо стертых частей изображения. Дискриминатор этой сети в каждой точке вычисляет кусочно-линейную функцию потерьИными словами пользователь может стереть фрагмент, формируя таким образом <tex>h \times w \times c</tex> генеративно состязательных сетейкоторый он хочет изменить, каждая из которых сосредотачивается нарисовать на различных частях его месте желаемый объект, и свойствах изображенияполученный эскиз, а также его цветовая палитра, будут отражены в сгенерированном фрагменте.
ГенераторДискриминатор данной сети принимает на вход сгенерированное изображение, состоящий маску и рисунок пользователя. Итоговая функция потерь формируется из двух сетей (грубой выхода дискриминатора и сети повышающей качество функций сравнения изображения) имеет слой адаптации. Обе сети используют модель кодировщикс оригинальным (per-декодировщик вместо U-Net<ref>[https://arxiv.org/pdf/1505.04597.pdf U-Net: Convolutional Networks for Biomedical Image Segmentationpixel loss, Olaf Ronnebergerperceptual loss, Philipp Fischer, Thomas Brox]</ref>, в которой все слои классической свертки заменены на стробированныеstyle loss).
----
=== SC-FEGAN<ref>[https://github.com/run-youngjoo/SC-FEGAN Face Editing Generative Adversarial Network with User's Sketch and Color, Youngjoo Jo, Jongyoul Park]</ref> === [[Файл:sc-fegan_resultDeepFillv2_model.jpgjpeg|thumb|450px300px|Пример работы модели SC-FEGANleft|Рисунок 5.Сеть DeepFillv2.<ref name="DeepFillv2"/>]]
Данная модель позволяет производить высококачественные изображения лиц=== DeepFillv2<ref name="DeepFillv2">[https://github.com/csqiangwen/DeepFillv2_Pytorch Free-Form Image Inpainting with Gated Convolution, Jiahui Yu, учитывая передаваемые пользователем эскизы и цвета на области маски (стертых частях изображения). Иными словами пользователь может легко редактировать изображенияZhe Lin, Jimei Yang, стирая фрагментыXiaohui Shen, которые он хочет изменитьXin Lu, и подставляя туда эскизы иThomas Huang]</или цвета, которые будут отражены в генерируемом фрагменте.ref> ===
Дискриминатор данной сети принимает на вход несколько каналов Главная идея этой модели {{---}} использование стробированной свертки, которая позволила добиться хорошего качества вписывания при восстановлении изображения: выходное изображение генератора, маску и слой пользовательского ввода (эскизы и цвета)с разными формами испорченных областей. Также можно использовать рисунок пользователя в качестве входных данных.
Итоговая функция В данной модели используется вариант генеративно-состязательной сети {{---}} SN-PatchGAN. Дискриминатор этой сети в каждой точке вычисляет кусочно-линейную функцию потерь формируется , формируя таким образом <tex>h \times w \times c</tex> генеративно-состязательных сетей, каждая из выхода дискриминатора которых сосредотачивается на различных частях и функций сравнения свойствах изображения с оригинальным . Генератор, состоящий из двух сетей (perгрубой и сети повышающей качество изображения), используют модель кодировщик-декодировщик вместо U-pixel lossNet<ref>[https://arxiv.org/pdf/1505.04597.pdf U-Net: Convolutional Networks for Biomedical Image Segmentation, perceptual lossOlaf Ronneberger, style loss)Philipp Fischer, Thomas Brox]</ref>, в которой все слои классической свертки заменены на стробированные. Полностью архитектура сети приведена на Рисунке 5.
----
=== Pluralistic Image Completion<ref>[https://github.com/lyndonzheng/Pluralistic-Inpainting Pluralistic Image Completion, Chuanxia Zheng, Tat-Jen Cham, Jianfei Cai]</ref> ===
Главное отличие данной этой модели от других {{---}} способность выдавать несколько вариантов заполнения отсутствующих областей изображения. Обычно имеется множество возможных реалистичных вариантов подрисовки изображения, однако большинство моделей выдают на выход лишь модели генерируют только одинвариант, пытаясь получить оригинальное изображениеприблизиться к оригинальному изображению. Используя же данную модель, человек может выбрать то сгенерированное изображение, которое выглядит более реалистичные генерируемые фрагменты и получить реалистичным, получая таким образом более качественное изображение качественные изображения на выходе.
Данная модель добивается такого эффекта путем пропускания входного изображения через две параллельные сети. Первая сеть {{---}} реконструирующая. Она пытается приблизить выходное изображение к оригинальному. Вторая сеть {{---}} генерирующая, работающая с априорным распределением отсутствующих областей и выборками известных пикселей. Каждая сеть имеет свой дискриминатор, помогающий обучить модель. Кроме выхода дискриминатора для обучения также используются функции сравнения полученного изображения с оригинальным.
----
[[Файл:EdgeConnect_sample.jpg|thumb|400px|Рисунок 6. Пример работы модели EdgeConnect.<ref name="EdgeConnect"/>]]
=== EdgeConnect<refname="EdgeConnect">[https://arxiv.org/pdf/1901.00212.pdf EdgeConnect: Generative Image Inpainting with Adversarial Edge Learning, Kamyar Nazeri, Eric Ng, Tony Joseph, Faisal Z. Qureshi, Mehran Ebrahimi]</ref> ===
Данная модель EdgeConnect разбивает задачу вписывания на две части:
# Выделение границ изображения и предсказание границ утраченной части изображения.
# Использование сгенерированных границ для заполнения утраченной части изображения.
В обоих частях используется генеративно -состязательная сеть. Генераторы состоят из кодировщика, нескольких остаточных блоков с расширенной сверткой и декодировщика(см Рис. 7). Для дискриминатора используется PatchGAN<ref>[https://paperswithcode.com/method/patchgan PatchGan, PapersWithCode]</ref>. {|-valign="top" |[[Файл:EdgeConnect_network.jpg|thumb|700px|Рисунок 7. Сеть EdgeConnect. <tex>G_1</tex> {{---}} генератор границ, <tex>G_2</tex> {{---}} генератор изображения, <tex>D_1</tex> и <tex>D_2</tex> {{---}} дискриминаторы.<ref name="EdgeConnect"/>]] |} Для генерации ребер сначала выделяются границы существующей части изображения с помощью Canny edge detector<ref>[https://en.wikipedia.org/wiki/Canny_edge_detector Canny edge detector, Wikipedia]</ref>. Потом полученная граница вместе с маской и черно-белым изображением дается генератору. В качестве целевой функции потерь для тренировки сети берется комбинация двух функций: adversarial loss и feature-matching loss. Также для стабилизации обучения генератора и дискриминатора используется спектральная нормализация.
Для генерации ребер сначала выделяются восстановления генератор получает на вход испорченное изображение и границы существующей части изображения с помощью Canny edge detector<ref>[https://en, которые составлены из реальных и сгенерированных на предыдущем этапе.wikipediaВ результате генерируется полное изображение.org/wiki/Canny_edge_detector Canny edge detectorТак же, Wikipedia]</ref>. Потом полученная граница вместе с маской как и черно-белым изображением дается генератору. В качестве целевой функции на предыдущем этапе, используется составная функция потерь для тренировки сети берется комбинация двух функций: из adversarial loss, perceptual loss и feature-matching style loss. Также для стабилизация обучения генератора и дискриминатора используется спектральная нормализация.
Для восстановления генератору дается испорченное изображение и границы Однако сети не удается предсказать достаточно хорошую границу, если отсутствует большая часть изображения, которые составлены из реальных и сгенерированных на предыдущем этапе. И в результате генерируется полное изображение. Также как и на предыдущем этапе используется составная функция потерь из: adversarial loss, perceptual loss и style lossили объект имеет сложную структуру.
Однако, данной сети не удается предсказать достаточно хорошую границу, если отсутствует большая часть изображения Также данную модель можно использовать для соединения двух изображений (см Рис. 8) или объект имеет сложную структуруудаления лишних объектов с фотографий.
Также данную модель можно использовать для {|-valign="top" |[[Файл:EdgeConnect_merge.jpg|thumb|700px| Рисунок 8. Пример соединения двух изображений или удаления лишних объектов с фотографийизображения моделью EdgeConnect.<ref name="EdgeConnect"/>]] |}
----
=== Deep Image Prior<refname="DeepImagePrior">[https://arxiv.org/pdf/1711.10925v4.pdf Deep Image Prior, Dmitry Ulyanov, Andrea Vedaldi, Victor Lempitsky]</ref> === [[Файл:DeepImagePrior_minimization.jpeg|thumb|550px|Рисунок 9. Процесс восстановления изображения с помощью Deep Image Prior.<ref name="DeepImagePrior"/>]]
Как известно, большинство методов глубокого обучения требуют больших наборов данных для тренировки. В отличии отличие от них данный метод Deep Image Prior не требует никакой предварительной обучающей выборки кроме одного изображения, которое надо исправить. Сеть Для этого сеть учится извлекать полезную информации из самого обрабатываемого изображения. Данный метод может применяться применяется для таких задач как вписывание части изображения, удаление шума и увеличение разрешения фотографий.
Сформулируем данную задачу как задачу минимизации:
<tex>\theta^{*} = \underset{\theta} {\mathrm{argmin}} ~E(f_{\theta}(z), x_0) , \;\ ; x^{*} = f_{\theta^{*}}(z)\;\; (1)</tex>  где <tex>E(x, x_0)</tex> {{---}} это функция потерь, зависящая от решаемой задачи, а <tex>f_{\theta}(z)</tex> {{---}} некоторая сверточная сеть. Алгоритм решения задачи (см Рис. 9):# Инициализируем <tex>\theta</tex> случайными весами.# На каждой итерации:## Сеть <tex>f</tex> с текущими весами <tex>\theta</tex> получает на вход фиксированный тензор <tex>z</tex> и возвращает восстановленное изображение <tex>x</tex>.## С помощью сгенерированного изображения x и исходного изображения <tex>x_0</tex> вычисляется функция потерь <tex>E(x;x0)</tex>.## Веса <tex>\theta</tex>обновляются так, чтобы минимизировать уравнение (1). В качестве <tex>f</tex> предлагается использовать сеть U-net с пропускающими соединениями.
где Для вписывания части изображения используется следующая функция потерь: <tex>E(x, x_0)= \|(x - x_0) * m \|^2</tex> - это функция потерь, зависящая от решаемой задачи, а где <tex>f_{\theta}(z)m</tex> {{--- некоторая сверточная сеть}} маска.
== См. также ==
*[[Автокодировщик]]
*[[Generative Adversarial Nets (GAN)|Генеративно-состязательныe сети]]
*[[Neural Style Transfer]]
== Примечания ==
1632
правки

Навигация