Изменения

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

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

673 байта добавлено, 01:04, 12 января 2021
Нет описания правки
{{В разработке}}
 
[[Файл:inpainting_sample.jpg|thumb|400px|Рисунок 1. Пример восстановления изображения. (a) {{---}} оригинальное изображение, (b) {{---}} изображение со стертыми частями, (с) {{---}} изображение, полученное в результате восстановления.<ref name="SC-FEGAN"/>]]
'''Восстановление изображения '''(англ. 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>]]
Восстановление изображения разделяется на две задачи:
=== Свертки ===
Для вписывания изображения помимо классической свертки широко используются другие способы перехода от слоя к слою. Подробнее про свертки можно прочитать в конспекте [[Сверточные нейронные сети]].
# '''Расширенная свертка (англ. Dilated convolution)'''. Данный способ позволяет сохранить качество изображении, уменьшив затраты на память и вычисления.
# '''Частичная свертка (англ. Partial convolution).''' Данная свертка дает лучшее качество на масках произвольной формы. Классическая свертка предполагает, что все пиксели валидны, а частичная учитывает количество стертых пикселей в рассматриваемой матрице.
<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>;
При обучении обычно используется комбинация функций потерь с некоторыми весами, которые являются гиперпараметрами. В моделях, где вдобавок используется дискриминатор, функция потерь от его выхода также подмешивается к итоговой функции потерь.
=== 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 позволяет производить создавать высококачественные изображения лиц за счет эскизов, передаваемых пользователем вместо стертых частей изображения. Иными словами пользователь может стереть фрагмент, который он хочет изменить, нарисовать на его месте желаемый объект, и полученный эскиз, а также его цветовая палитра, будут отражены в сгенерированном фрагменте.
Дискриминатор данной сети принимает на вход сгенерированное изображение, маску и рисунок пользователя. Итоговая функция потерь формируется из выхода дискриминатора и функций сравнения изображения с оригинальным (per-pixel loss, perceptual loss, style loss).
Главная идея этой модели {{---}} использование стробированной свертки, которая позволила добиться хорошего качества вписывания при восстановлении изображения с разными формами испорченных областей. Также можно использовать рисунок пользователя в качестве входных данных.
В данной модели используется вариант генеративно-состязательной сети {{---}} SN-PatchGAN. Дискриминатор этой сети в каждой точке вычисляет кусочно-линейную функцию потерь, формируя таким образом <tex>h \times w \times c</tex> генеративно-состязательных сетей, каждая из которых сосредотачивается на различных частях и свойствах изображения. Генератор, состоящий из двух сетей (грубой и сети повышающей качество изображения), используют модель кодировщик-декодировщик вместо U-Net<ref>[https://arxiv.org/pdf/1505.04597.pdf U-Net: Convolutional Networks for Biomedical Image Segmentation, Olaf Ronneberger, Philipp Fischer, Thomas Brox]</ref>, в которой все слои классической свертки заменены на стробированные. Полностью архитектура сети приведена на Рисунке 5.
----
|}
Для генерации ребер сначала выделяются границы существующей части изображения с помощью 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.
<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):
*[[Автокодировщик]]
*[[Generative Adversarial Nets (GAN)|Генеративно-состязательныe сети]]
*[[Neural Style Transfer]]
== Примечания ==
Анонимный участник

Навигация