128
правок
Изменения
Нет описания правки
[[Файл:inpainting_sample.jpg|thumb|400px|(a) - оригинальное изображение, (b) - изображение со стертыми частями, (с) - изображение, полученное в результате inpainting]]
'''Inpainting''' {{---}} процесс восстановление восстановления испорченных или утраченных частей изображений и видео. В основном, этот процесс происходит используя фоновую информацию и заполняя недостающие данные в определенной области визуального ввода.
Методы данной области применяются как для восстановления изображений, часть которых была утрачена или подвержена некоторым дефектам, так и для их редактирования изображений. С помощью современных моделей можно вырезать ненужные объекты (например, лишних людей на фотографиях), а также гибко редактировать изображения (например , изменить цвет глаз у человека на фото).
== Виды вписывания inpainting ==
[[Файл:denoising_sample.jpg|thumb|550px|Пример устранения наложенного текста на изобрежении. В данном случае текстом покрыто 18.77% площади.]]
* '''Non-blind inpainting''' {{---}} информация о том, какие пиксели в изображении нужно заменить, подается на вход модели.
* '''Blind inpainting''' {{---}} модель должна сама определить, где на изображении пиксели, которые нужно заменить. Эту задачу также называют denoising (устранение шума), так как модели blind inpainting почти всегда устраняют именно шумы. В качестве шума может быть как примененный фильтр к изображению, так и наложенный текст. Пример работы модели удаления наложенного текста приведен на картинке справа.
В этом конспекте далее преимущественно речь пойдет только про non-blind inpainting.
== Простые методы ==
Есть два основных простых способа восстанавливать данные:
# Быстрый пошаговый метод (англ. Fast marching method). Этот метод двигается от границ области, которую нужно закрасить, к ее эпицентру, постепенно закрашивая пиксели. Каждый новый пиксель вычисляется как взвешенная сумма известных соседних пикселей.
# Метод Навье - Стокса (англ. Navier-Stokes method). Метод основывается на том, что грани объектов в изображении должны быть непрерывными. Цвета пикселей вычисляются на основе известных областей около граней. Метод основывается на дифференциальных уравнениях в частных производных.
== Глубокое обучение ==
[[Файл:inpainting_network.jpg|thumb|550px|Пример GAN для inpainting.]]
Современные методы машинного обучения для решения данной задачи часто базируются на глубоких нейронных сетях для классификации изображений, [[Автокодировщик|автокодировщиках (autoencoder)]] и [[Generative_Adversarial_Nets_(GAN)|генеративно-состязательных сетях (GAN)]].
Для того, чтобы понимать, какую часть изображения нужно заполнить, на вход сети кроме самого изображения подается слой маски с информацией о пикселях, где данные отсутствуют.
Сети обычно имеют модель автокодировщиков {{- --}} сначала идут слои кодирующие, а потом декодирующие изображение. Функция потерь побуждает модель изучать другие свойства изображения, а не просто копировать его из входных данных в выходные. Именно это предоставляет возможность научить модель заполнять недостающие пиксели.
Обучение может происходить через сравнение оригинального изображения и синтетического, сгенерированного сетью , или через генеративно-состязательную сеть. Во втором случае для обучения используется дискриминатор, который определяет фейковое ли изображение подали ему на вход. В современных моделях обычно используют совмещенный подход: функции потерь зависят и от исходного изображения , и от выхода дискриминатора.
В ранних моделях часто использовались два дискриминатора:
# Локальному (англ. Local Discriminator) подавался на вход только сгенерированная часть изображения.
# Глобальному (англ. Global Discriminator) подавалось на вход все изображения изображение целиком.Однако в современных моделях чаще используется один дискриминатор, который принимает на вход не только канал с выходным изображением, но и канал с маской (такие сети часто называются patchGAN). Современные модели чаще всего работают с масками произвольно произвольной формы (англ. free-form mask), при работе с которыми локальный дискриминатор показывает плохое качество. Именно поэтому концепция двух дискриминаторов стала не популярной.
=== Виды сверток ===
=== Функции потерь ===
Существует большое множество различных функций при при методе обучение модели через сравнение сгенерированного изображения с оригинальным.
Примеры:
* '''L1-loss''' или '''Per-pixel loss''' {{---}} оценивает точность восстановления каждого пикселя по отдельности.
:<tex>N_aI_{gen}</tex> {{---}} количество элементов в объекте <tex>a</tex>выход генератора; <tex>MI_{gt}</tex> {{---}} бинарная маскаоригинальное изображние (англ. ground truth); <tex>I_{gen}N_a</tex> {{---}} выход генератораколичество элементов в объекте <tex>a</tex>; <tex>I_{gt}M</tex> {{---}} оригинальное изображние (англ. 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>
При обучении обычно используется комбинация функций потерь с некоторыми весами, которые являются гиперпараметрами. В моделях, где вдобавок используется GANдискриминатор, функция потерь от его выхода дискриминатора также подмешивается к итоговой функции потерь.
== Примеры современных моделей ==
[[Файл:DeepFillv2_model.jpeg|thumb|450px|Сеть DeepFillv2.]]
Главная идея данной модели {{---}} это использование стробированной свертки, которая позволила добиться хорошего качества вписывания при восстановлении изображения с разной формы испорченными областямиразными формами испорченных областей. Также данная модель может использовать набросок пользователя в качестве входных данных.
Более того, чтобы добиться более высокого качества вписывания, предлагается использовать вариант генеративно состязательной сети {{---}} SN-PatchGAN. Дискриминатор этой сети в каждой точке вычисляет кусочно-линейную функцию потерь, формируя таким образом <tex>h \times w \times c</tex> генеративно состязательных сетей, каждая из которых сосредотачивается на различных частях и свойствах изображения.
== Применение ==
Inpainting применяется может применяться для различных целей:
* Восстановление старых фотографий