Изменения

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

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

12 872 байта добавлено, 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]]которая опирается на имеющуюся неиспорченную часть изображении для замены поврежденной.
'''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).]]
Задача inpainting обычно разделяется на две задачи:* Non-blind inpainting {{---}} информация о том, какие пиксели в изображении нужно заменить, подается на вход модели. * Blind inpainting {{---}} модель должна сама определить, где на изображении пиксели, которые нужно заменить. Эту задачу также называют denoising (устранение шума), так как модели blind inpainting почти всегда устраняют именно шумы. В качестве шума может быть как примененный фильтр к изображению, так и наложенный текст. Пример работы модели удаления наложенного текста приведен на картинке справаэтом конспекте преимущественно речь пойдет про управляемое восстановление.
В конспекте далее речь пойдет только про non-blind inpainting.== Традиционные методы ==
== Простые Для решения данной задачи существует множество различных методов, в том числе простых. Почти все простые методы ==основаны на следующей концепции: заполнение отсутствующих частей пикселями, идентичными соседним пикселям или похожими на них. Такие методы наиболее подходят для задачи устранения шума или небольших дефектов изображения. Но на изображениях, где отсутствует значительная часть данных, эти методы дают плохое качество изображения на выходе.
Для решения данной задачи существуют несколько разных методов. В этой части речь пойдет о простых решениях. Почти все простые методы основаны на следующей концепции: заполнение отсутствующих частей пикселями, идентичными соседним пикселям или похожими на них. Такие методы часто зависят от множества факторов и наиболее подходят для задачи устранения шума или небольших дефектов изображения. Но на изображениях, где отсутствует значительная часть данных, эти методы дают плохое качество выходного изображения.  Есть два основных простых способа восстанавливать данныеметода восстановления данных:# Быстрый пошаговый метод (англ. 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), при работе с которыми локальный дискриминатор показывает плохое качество. В современных моделях обычно используют совмещенный подход: функции потерь зависят и от исходного изображения и от выхода дискриминатораИменно поэтому концепция двух дискриминаторов стала непопулярной.
В ранних моделях часто использовались два дискриминатора:# Локальному (англ. Local Discriminator) подавался на вход только сгенерированная часть изображения.# Глобальному (англ. Global Discriminator) подавалось на вход все изображения целиком.Однако в современных моделях чаще используется один дискриминатор, который принимает на вход не только канал с выходным изображением, но и канал с маской (такие сети часто называются patchGAN). Современные модели чаще всего работают с масками произвольно формы (англ. free-form mask), при работе с которыми локальный дискриминатор показывает плохое качество. Именно поэтому концепция двух дискриминаторов стала не популярной.=== Свертки ===
=== Виды сверток ===Для вписывания изображения помимо классической свертки широко используются другие способы перехода от слоя к слою. Подробнее про свертки можно прочитать в конспекте [[Сверточные нейронные сети]].# '''Расширенная свертка (англ. 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_{per-pixelstyle} = \frac{1}{N_{I_{gt}}}\|M sum\odot (I_{gen} - I_limits_{gtq})\| + \alpha \frac{1}{N_{I_{gt}}C_q C_q}\|(1 - M) \odot 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> {{---}} размерность матрицы Грама.
:<tex>N_a</tex> {{---}} количество элементов в объекте <tex>a</tex>; <tex>M</tex> {{---}} бинарная маска; <tex>I_{gen}</tex> {{---}} выход генератора; <tex>I_{gt}</tex> {{---}} оригинальное изображние (англ* '''Total variation loss'''. ground truth); <tex>\alpha</tex> {{---}} гиперпараметр, <tex>\odot</tex> - поэлементное перемножениеОценивает однородность полученного изображения.
* '''Perceptual loss''' {{---}} сравнивает признаки полученного и исходного изображений, полученные из изображения с помощью модели 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_{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>
где <centertex>I_{comp}</tex>L_ {percept} = \sum\limits_{q---}\frac{\|\Theta_{q}(изображение <tex>I_{gen}) - \Theta_{q}(</tex>, в котором нестертые части заменены на части из <tex>I_{gt})\|}{</tex>; <tex>N_{\Theta_{q}(I_{gtcomp})}} + \sum\limits_</tex> {q}\frac{\|\Theta_{q}(I_{comp}) - \Theta_{q}(I_{gt--})\|}{N_{\Theta_{q}(количество пикселей в <tex>I_{gt})}comp}</tex></center>
:<tex>I_{comp}</tex> {{---}} изображение <tex>I_{gen}</tex>, * '''Adversarial loss'''. Сравнивает генерируемые и оригинальные границы объектов в котором нестертые части заменены на части из <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]</ref>.
<center><tex>L_{styleadv} = \sum\limits_mathbb{qE}[\fraclog D(H_{1gt}, I_{C_q C_qgray} )] + \| mathbb{E}[\frac{G_qlog (1 - D(I_H_{gen})-G_q(, I_{gtgray})}{N_q}\|)]</tex>,</center>
:где <tex>G_q(x) = (\Theta_I_{qgray}(I_</tex> {{x---}))^T (\Theta_{q}(I_черно-белое оригинальное изображение; <tex>H_{xgt}))</tex> {{---}} матрица Грама для выполнения автокорреляции на карте признаков VGG-16границы объектов оригинального изображения; <tex>C_H_{gen}</tex> {{q---}} генерируемые границы; <tex>D</tex> {{---}} размерность матрицы Грама.дискриминатор;
* '''Total variation Feature-matching 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>
<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>;  При обучении обычно используется комбинация функций потерь с некоторыми весами, которые являются гиперпараметрами. В моделях, где вдобавок используется GANдискриминатор, функция потерь от его выхода дискриминатора также подмешивается к итоговой функции потерь.
== Примеры современных моделей ==
=== 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> генеративно состязательных сетей, каждая формируется из которых сосредотачивается на различных частях выхода дискриминатора и свойствах функций сравнения изображенияс оригинальным (per-pixel loss, perceptual loss, style loss).
---- [[Файл:DeepFillv2_model.jpeg|thumb|300px|left|Рисунок 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> генеративно-состязательных сетей, каждая из которых сосредотачивается на различных частях и свойствах изображения. Генератор, состоящий из двух сетей (грубой и сети повышающей качество изображения) также адаптируется. Обе сети , используют модель кодировщик-декодировщик вместо 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.
----
=== SC-FEGANPluralistic Image Completion<ref>[https://github.com/run-youngjoolyndonzheng/SCPluralistic-FEGAN Face Editing Generative Adversarial Network with User's Sketch and ColorInpainting Pluralistic Image Completion, Chuanxia Zheng, Youngjoo JoTat-Jen Cham, Jongyoul ParkJianfei Cai]</ref> ===
[[Файл:scГлавное отличие этой модели от других {{-fegan_result--}} способность выдавать несколько вариантов заполнения отсутствующих областей изображения.jpg|thumb|450px|Пример работы Обычно модели SC-FEGANгенерируют только один вариант, пытаясь приблизиться к оригинальному изображению. Используя же данную модель, человек может выбрать то сгенерированное изображение, которое выглядит более реалистичным, получая таким образом более качественные изображения на выходе.]]
Данная модель позволяет производить высококачественные добивается такого эффекта путем пропускания входного изображения лицчерез две параллельные сети. Первая сеть {{---}} реконструирующая. Она пытается приблизить выходное изображение к оригинальному. Вторая сеть {{---}} генерирующая, учитывая передаваемые пользователем эскизы работающая с априорным распределением отсутствующих областей и цвета на области маски (стертых частях изображения)выборками известных пикселей. Каждая сеть имеет свой дискриминатор, помогающий обучить модель. Иными словами пользователь может легко редактировать Кроме выхода дискриминатора для обучения также используются функции сравнения полученного изображения, стирая фрагменты, которые он хочет изменить, и подставляя туда эскизы и/или цвета, которые будут отражены в генерируемом фрагментес оригинальным.
Основа данной сети patchGAN - дискриминатор принимает на вход несколько каналов изображения---[[Файл:EdgeConnect_sample.jpg|thumb|400px|Рисунок 6. В данном случае помимо выходного изображения генератора и маски, дискриминатор принимает еще слой пользовательского ввода (эскизы и цвета)Пример работы модели EdgeConnect.<ref name="EdgeConnect"/>]]
Итоговая функция потерь формируется из функций сравнения изображения с оригинальным (per-pixel loss=== EdgeConnect<ref name="EdgeConnect">[https://arxiv.org/pdf/1901.00212.pdf EdgeConnect: Generative Image Inpainting with Adversarial Edge Learning, Kamyar Nazeri, perceptual lossEric Ng, style loss) и выхода дискриминатораTony Joseph, Faisal Z.Qureshi, Mehran Ebrahimi]</ref> ===
== Применение ==EdgeConnect разбивает задачу вписывания на две части: # Выделение границ изображения и предсказание границ утраченной части изображения. # Использование сгенерированных границ для заполнения утраченной части изображения.
Inpainting применяется для различных целейВ обоих частях используется генеративно-состязательная сеть. Генераторы состоят из кодировщика, нескольких остаточных блоков с расширенной сверткой и декодировщика (см Рис. 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<ref name="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>m</tex> {{---}} маска.
== См. также ==
*[[Автокодировщик]]
*[[Generative Adversarial Nets (GAN)|Генеративно-состязательныe сети]]
*[[Neural Style Transfer]]
== Примечания ==
<references/>
 
== Источники информации ==
* [https://heartbeat.fritz.ai/guide-to-image-inpainting-using-machine-learning-to-edit-and-correct-defects-in-photos-3c1b0e13bbd0 Guide to Image Inpainting: Using machine learning to edit and correct defects in photos, Heartbeat]
* [https://wandb.ai/site/articles/introduction-to-image-inpainting-with-deep-learning Introduction to image inpainting with deep learning, Weights & Biases]
* [https://towardsdatascience.com/pushing-the-limits-of-deep-image-inpainting-using-partial-convolutions-ed5520775ab4 Pushing the Limits of Deep Image Inpainting Using Partial Convolutions, Towards Data Science]
* [https://towardsdatascience.com/understanding-2d-dilated-convolution-operation-with-examples-in-numpy-and-tensorflow-with-d376b3972b25 Understanding 2D Dilated Convolution Operation with Examples in Numpy and Tensorflow with Interactive Code, Towards Data Science]
[[Категория: Машинное обучение]]
[[Категория: Глубокое обучение]]
[[Категория: Нейронные сети]]
[[Категория: Компьютерное зрение]]
1632
правки

Навигация