Изменения

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

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

1170 байт убрано, 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>Свертки ===
Для вписывания изображения помимо классической свертки широко используются другие способы перехода от слоя к слою. Подробнее про свертки можно прочитать в конспекте [[Сверточные нейронные сети]].# '''Расширенная свертка (англ. Dilated convolution)'''. Данный способ позволяет сохранить качество изображении, уменьшив затраты на память и вычисления.# '''Частичная свертка (англ. Partial convolution).''' Данная свертка учится динамическому отбору признаков для каждого слоя изображения дает лучшее качество на масках произвольной формы. Классическая свертка предполагает, что все пиксели валидны, а частичная учитывает количество стертых пикселей в рассматриваемой матрице. # '''Стробированная свертка (англ. Gated convolution).''' Данная свертка позволяет сохранять информацию о маске и каждой логической области маскиэскизах пользователя во всех слоях сети, значительно улучшая однородность цвета и что дает возможность получить лучшее качество исправления испорченных областей различных форм.
=== Функции потерь ===
Существует большое множество различных функций потерь при методе обучение обучения модели через сравнение сгенерированного изображения с оригинальным.
Примеры:
* '''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>
* '''Adversarial loss'''. Сравнивает генерируемые и оригинальные грани объектов где <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>
:<texcenter>I_{gray}</tex> L_{adv} = \mathbb{---E}} черное белое оригинальное изображение; <tex>[\log D(H_{gt}</tex> , I_{gray})] + \mathbb{E}[\log (1 ---}} грани объектов оригинального изображения; <tex>D(H_{gen}</tex> , I_{{---}gray} генерируемые грани; ))]</tex>D,</texcenter> {{---}} дискриминатор;
* '''Featureгде <tex>I_{gray}</tex> {{-matching loss'''. Сравнивает --}} черно-белое оригинальное изображение; <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>
:<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[Файл://githubsc-fegan_result.jpg|thumb|300px|Рисунок 4.com/runПример работы модели SC-youngjoo/FEGAN.<ref name="SC-FEGAN Free-Form Image Inpainting with Gated Convolution, Jiahui Yu, Zhe Lin, Jimei Yang, Xiaohui Shen, Xin Lu, Thomas Huang]<"/ref> ===]]
=== SC-FEGAN<ref name="SC-FEGAN">[[Файлhttps:DeepFillv2_model//github.jpeg|thumb|450px|Сеть DeepFillv2.]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> генеративно состязательных сетей, каждая формируется из которых сосредотачивается на различных частях выхода дискриминатора и свойствах функций сравнения изображения. Генератор, состоящий из двух сетей с оригинальным (грубой и сети повышающей качество изображения) имеет слой адаптации. Обе сети используют модель кодировщик-декодировщик вместо U-Net<ref>[https://arxiv.org/pdf/1505.04597.pdf Uper-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. Также для стабилизация стабилизации обучения генератора и дискриминатора используется спектральная нормализация.
Для восстановления генератору дается генератор получает на вход испорченное изображение и границы изображения, которые составлены из реальных и сгенерированных на предыдущем этапе. И в В результате генерируется полное изображение. Также Так же, как и на предыдущем этапе , используется составная функция потерь из: 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 и исходного изображения x0 <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>m</tex> {{---}} маска.
*[[Автокодировщик]]
*[[Generative Adversarial Nets (GAN)|Генеративно-состязательныe сети]]
*[[Neural Style Transfer]]
== Примечания ==
1632
правки

Навигация