Вписывание части изображения — различия между версиями
Fedleonid (обсуждение | вклад) |
Fedleonid (обсуждение | вклад) |
||
Строка 1: | Строка 1: | ||
{{В разработке}} | {{В разработке}} | ||
− | [[Файл:inpainting_sample.jpg|thumb|400px|(a) {{---}} оригинальное изображение, (b) {{---}} изображение со стертыми частями, (с) {{---}} изображение, полученное в результате | + | [[Файл:inpainting_sample.jpg|thumb|400px|(a) {{---}} оригинальное изображение, (b) {{---}} изображение со стертыми частями, (с) {{---}} изображение, полученное в результате подрисовки]] |
− | ''' | + | '''Подрисовка изображений '''(англ. inpainting) {{---}} процесс замены дефектных частей изображения на реалистичные фрагменты. '''Вписывание части изображения''' - это подзадача подрисовки. Процесс подрисовки обычно опирается на имеющиеся неиспорченные пиксели в изображении для замены поврежденных. |
− | Методы данной области применяются | + | Методы данной области применяются для редактирования изображений или для их восстановления, если их часть была утрачена или подвержена некоторым дефектам. С помощью современных моделей можно вырезать ненужные объекты или изменить их свойство (например поменять цвет глаз у человека). |
− | == Виды | + | == Виды подрисовки == |
− | [[Файл:denoising_sample.jpg|thumb|550px|Пример устранения наложенного текста на | + | [[Файл:denoising_sample.jpg|thumb|550px|Пример устранения наложенного текста на изобрежение. В данном случае текстом покрыто 18.77% площади.]] |
− | + | Подрисовка обычно разделяется на две задачи: | |
− | * ''' | + | * '''Управляемая подрисовка'''(англ. non-blind inpainting). В этой задаче на вход модели вместе с изображением подается информация о том, какие пиксели нужно заменить. |
− | * ''' | + | * '''Слепая подрисовка'''(англ. blind inpainting). В решениях данной проблемы модель сама определяет, где на изображении дефектные пиксели. Модели слепой подрисовки чаще всего занимаются устранением шумов (англ. denoising). В качестве шума может быть как примененный фильтр к изображению, так и наложенный текст. Пример работы модели удаления наложенного текста приведен на картинке справа. |
− | В этом конспекте преимущественно речь пойдет про | + | В этом конспекте преимущественно речь пойдет про управляемую подрисовку. |
== Простые методы == | == Простые методы == | ||
− | Для решения данной задачи существуют | + | Для решения данной задачи существуют множество различных методов, в том числе простых. Почти все простые методы основаны на следующей концепции: заполнение отсутствующих частей пикселями, идентичными соседним пикселям или похожими на них. Такие методы часто зависят от множества факторов и наиболее подходят для задачи устранения шума или небольших дефектов изображения. Но на изображениях, где отсутствует значительная часть данных, эти методы дают плохое качество выходного изображения. |
Есть два основных простых способа восстанавливать данные: | Есть два основных простых способа восстанавливать данные: | ||
# Быстрый пошаговый метод (англ. Fast marching method). Этот метод двигается от границ области, которую нужно закрасить, к ее эпицентру, постепенно закрашивая пиксели. Каждый новый пиксель вычисляется как взвешенная сумма известных соседних пикселей. | # Быстрый пошаговый метод (англ. Fast marching method). Этот метод двигается от границ области, которую нужно закрасить, к ее эпицентру, постепенно закрашивая пиксели. Каждый новый пиксель вычисляется как взвешенная сумма известных соседних пикселей. | ||
− | # Метод Навье-Стокса (англ. Navier-Stokes method). Метод основывается на том, что грани объектов в изображении должны быть непрерывными. Цвета пикселей вычисляются | + | # Метод Навье-Стокса (англ. Navier-Stokes method). Метод основывается на том, что грани объектов в изображении должны быть непрерывными. Цвета пикселей вычисляются из известных областей около граней. Метод основывается на дифференциальных уравнениях в частных производных. |
== Глубокое обучение == | == Глубокое обучение == | ||
Строка 30: | Строка 30: | ||
[[Файл:inpainting_network.jpg|thumb|550px|Пример GAN для inpainting.]] | [[Файл:inpainting_network.jpg|thumb|550px|Пример GAN для inpainting.]] | ||
− | Глубокое обучение позволяет в процессе | + | Глубокое обучение позволяет в процессе подрисовки учитывать семантику изображения (в отличие от приведенных выше простых методов). То есть в данном случае заполнение отсутствующих областей основывается на контексте, вносимым самим изображением, объектах, находящихся на изображении, и их классах. |
Современные методы машинного обучения для решения данной задачи часто базируются на глубоких нейронных сетях для классификации изображений, [[Автокодировщик|автокодировщиках (autoencoder)]] и [[Generative_Adversarial_Nets_(GAN)|генеративно-состязательных сетях (GAN)]]. | Современные методы машинного обучения для решения данной задачи часто базируются на глубоких нейронных сетях для классификации изображений, [[Автокодировщик|автокодировщиках (autoencoder)]] и [[Generative_Adversarial_Nets_(GAN)|генеративно-состязательных сетях (GAN)]]. | ||
Строка 38: | Строка 38: | ||
Сети обычно имеют модель автокодировщиков {{---}} сначала идут слои кодирующие, а потом декодирующие изображение. Функция потерь побуждает модель изучать другие свойства изображения, а не просто копировать его из входных данных в выходные. Именно это предоставляет возможность научить модель заполнять недостающие пиксели. | Сети обычно имеют модель автокодировщиков {{---}} сначала идут слои кодирующие, а потом декодирующие изображение. Функция потерь побуждает модель изучать другие свойства изображения, а не просто копировать его из входных данных в выходные. Именно это предоставляет возможность научить модель заполнять недостающие пиксели. | ||
− | Обучение может происходить через сравнение оригинального изображения и синтетического, сгенерированного сетью | + | Обучение может происходить через сравнение оригинального изображения и синтетического, сгенерированного сетью или через генеративно-состязательную сеть. Во втором случае для обучения используется дискриминатор, который определяет фейковое ли изображение подали ему на вход. В современных моделях обычно используют совмещенный подход: функции потерь зависят и от исходного изображения, и от выхода дискриминатора. |
В ранних моделях часто использовались два дискриминатора: | В ранних моделях часто использовались два дискриминатора: | ||
− | # | + | # Локальный дискриминатор (англ. Local Discriminator). Ему подавалась на вход только сгенерированная часть изображения. |
− | # | + | # Глобальный дискриминатор (англ. Global Discriminator). В данном случае на вход подавалось все изображение целиком. |
− | Однако в современных моделях чаще используется один дискриминатор, который принимает на вход не только канал с выходным изображением, но и канал с маской (такие сети часто называются patchGAN). Современные модели чаще всего | + | Однако в современных моделях чаще используется один дискриминатор, который принимает на вход не только канал с выходным изображением, но и канал с маской (такие сети часто называются patchGAN). Современные модели чаще всего принимают на вход маски произвольной формы (англ. free-form mask), при работе с которыми локальный дискриминатор показывает плохое качество. Именно поэтому концепция двух дискриминаторов стала не популярной. |
=== Виды сверток === | === Виды сверток === | ||
− | Помимо классической свертки в задаче | + | Помимо классической свертки в задаче подрисовки широко применяют другие виды сверток, которые дают лучшее качество выходного изображения. |
==== Расширенная свертка (Dilated convolution) ==== | ==== Расширенная свертка (Dilated convolution) ==== | ||
Строка 101: | Строка 101: | ||
=== Функции потерь === | === Функции потерь === | ||
− | Существует большое множество различных функций при методе обучение модели через сравнение сгенерированного изображения с оригинальным. | + | Существует большое множество различных функций потерь при методе обучение модели через сравнение сгенерированного изображения с оригинальным. |
Примеры: | Примеры: | ||
− | * '''L1-loss''' или '''Per-pixel loss''' | + | * '''L1-loss''' или '''Per-pixel loss'''. Оценивает точность восстановления каждого пикселя по отдельности. |
Строка 110: | Строка 110: | ||
:<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> - поэлементное перемножение. | :<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''' | + | * '''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>. |
Строка 117: | Строка 117: | ||
:<tex>I_{comp}</tex> {{---}} изображение <tex>I_{gen}</tex>, в котором нестертые части заменены на части из <tex>I_{gt}</tex>; <tex>\Theta_{q}(x)</tex> {{---}} карта признаков, полученная <tex>q</tex>-ым слоем VGG-16. | :<tex>I_{comp}</tex> {{---}} изображение <tex>I_{gen}</tex>, в котором нестертые части заменены на части из <tex>I_{gt}</tex>; <tex>\Theta_{q}(x)</tex> {{---}} карта признаков, полученная <tex>q</tex>-ым слоем VGG-16. | ||
− | * '''Style loss''' | + | * '''Style loss'''. Сравнивает текстуру и цвета изображений, используя матрицу Грама<ref>[https://en.wikipedia.org/wiki/Gramian_matrix Gramian matrix, Wikipedia]</ref>. |
Строка 124: | Строка 124: | ||
:<tex>G_q(x) = (\Theta_{q}(I_{x}))^T (\Theta_{q}(I_{x}))</tex> {{---}} матрица Грама для выполнения автокорреляции на карте признаков VGG-16; <tex>C_{q}</tex> {{---}} размерность матрицы Грама. | :<tex>G_q(x) = (\Theta_{q}(I_{x}))^T (\Theta_{q}(I_{x}))</tex> {{---}} матрица Грама для выполнения автокорреляции на карте признаков VGG-16; <tex>C_{q}</tex> {{---}} размерность матрицы Грама. | ||
− | * '''Total variation loss''' | + | * '''Total variation loss'''. Оценивает однородность полученного изображения. |
Строка 139: | Строка 139: | ||
Главная идея данной модели {{---}} это использование стробированной свертки, которая позволила добиться хорошего качества вписывания при восстановлении изображения с разными формами испорченных областей. Также данная модель может использовать набросок пользователя в качестве входных данных. | Главная идея данной модели {{---}} это использование стробированной свертки, которая позволила добиться хорошего качества вписывания при восстановлении изображения с разными формами испорченных областей. Также данная модель может использовать набросок пользователя в качестве входных данных. | ||
− | + | Кроме того, в данной модели предлагается использовать вариант генеративно состязательной сети {{---}} 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>, в которой все слои классической свертки заменены на стробированные. |
---- | ---- | ||
Строка 153: | Строка 153: | ||
Основа данной сети patchGAN {{---}} дискриминатор принимает на вход несколько каналов изображения. В данном случае помимо выходного изображения генератора и маски, дискриминатор принимает еще слой пользовательского ввода (эскизы и цвета). | Основа данной сети patchGAN {{---}} дискриминатор принимает на вход несколько каналов изображения. В данном случае помимо выходного изображения генератора и маски, дискриминатор принимает еще слой пользовательского ввода (эскизы и цвета). | ||
− | Итоговая функция потерь формируется из функций сравнения изображения с оригинальным (per-pixel loss, perceptual loss, style loss) | + | Итоговая функция потерь формируется из выхода дискриминатора и функций сравнения изображения с оригинальным (per-pixel loss, perceptual loss, style loss). |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
== См. также == | == См. также == |
Версия 00:04, 8 января 2021
Подрисовка изображений (англ. inpainting) — процесс замены дефектных частей изображения на реалистичные фрагменты. Вписывание части изображения - это подзадача подрисовки. Процесс подрисовки обычно опирается на имеющиеся неиспорченные пиксели в изображении для замены поврежденных.
Методы данной области применяются для редактирования изображений или для их восстановления, если их часть была утрачена или подвержена некоторым дефектам. С помощью современных моделей можно вырезать ненужные объекты или изменить их свойство (например поменять цвет глаз у человека).
Содержание
Виды подрисовки
Подрисовка обычно разделяется на две задачи:
- Управляемая подрисовка(англ. non-blind inpainting). В этой задаче на вход модели вместе с изображением подается информация о том, какие пиксели нужно заменить.
- Слепая подрисовка(англ. blind inpainting). В решениях данной проблемы модель сама определяет, где на изображении дефектные пиксели. Модели слепой подрисовки чаще всего занимаются устранением шумов (англ. denoising). В качестве шума может быть как примененный фильтр к изображению, так и наложенный текст. Пример работы модели удаления наложенного текста приведен на картинке справа.
В этом конспекте преимущественно речь пойдет про управляемую подрисовку.
Простые методы
Для решения данной задачи существуют множество различных методов, в том числе простых. Почти все простые методы основаны на следующей концепции: заполнение отсутствующих частей пикселями, идентичными соседним пикселям или похожими на них. Такие методы часто зависят от множества факторов и наиболее подходят для задачи устранения шума или небольших дефектов изображения. Но на изображениях, где отсутствует значительная часть данных, эти методы дают плохое качество выходного изображения.
Есть два основных простых способа восстанавливать данные:
- Быстрый пошаговый метод (англ. Fast marching method). Этот метод двигается от границ области, которую нужно закрасить, к ее эпицентру, постепенно закрашивая пиксели. Каждый новый пиксель вычисляется как взвешенная сумма известных соседних пикселей.
- Метод Навье-Стокса (англ. Navier-Stokes method). Метод основывается на том, что грани объектов в изображении должны быть непрерывными. Цвета пикселей вычисляются из известных областей около граней. Метод основывается на дифференциальных уравнениях в частных производных.
Глубокое обучение
Глубокое обучение позволяет в процессе подрисовки учитывать семантику изображения (в отличие от приведенных выше простых методов). То есть в данном случае заполнение отсутствующих областей основывается на контексте, вносимым самим изображением, объектах, находящихся на изображении, и их классах.
Современные методы машинного обучения для решения данной задачи часто базируются на глубоких нейронных сетях для классификации изображений, автокодировщиках (autoencoder) и генеративно-состязательных сетях (GAN).
Для того, чтобы понимать, какую часть изображения нужно заполнить, на вход сети кроме самого изображения подается слой маски с информацией о пикселях, где данные отсутствуют.
Сети обычно имеют модель автокодировщиков — сначала идут слои кодирующие, а потом декодирующие изображение. Функция потерь побуждает модель изучать другие свойства изображения, а не просто копировать его из входных данных в выходные. Именно это предоставляет возможность научить модель заполнять недостающие пиксели.
Обучение может происходить через сравнение оригинального изображения и синтетического, сгенерированного сетью или через генеративно-состязательную сеть. Во втором случае для обучения используется дискриминатор, который определяет фейковое ли изображение подали ему на вход. В современных моделях обычно используют совмещенный подход: функции потерь зависят и от исходного изображения, и от выхода дискриминатора.
В ранних моделях часто использовались два дискриминатора:
- Локальный дискриминатор (англ. Local Discriminator). Ему подавалась на вход только сгенерированная часть изображения.
- Глобальный дискриминатор (англ. Global Discriminator). В данном случае на вход подавалось все изображение целиком.
Однако в современных моделях чаще используется один дискриминатор, который принимает на вход не только канал с выходным изображением, но и канал с маской (такие сети часто называются patchGAN). Современные модели чаще всего принимают на вход маски произвольной формы (англ. free-form mask), при работе с которыми локальный дискриминатор показывает плохое качество. Именно поэтому концепция двух дискриминаторов стала не популярной.
Виды сверток
Помимо классической свертки в задаче подрисовки широко применяют другие виды сверток, которые дают лучшее качество выходного изображения.
Расширенная свертка (Dilated convolution)
Похожа на пуллинг и свертку с шагом, но позволяет:
- Экспоненциально расширить рецептивное поле без потери качества изображения
- Получить большее рецептивное поле при тех же затратах на вычисления и памяти, сохранив качество изображения
Формула отличается от классической только коэффициентом расширения l:
Пример:
1-, 2- и 4-расширенные свертки с классическими ядрами 3x3, 5x5 и 9x9 соответственно. Красные точки обозначают ненулевые веса, остальные веса ядра равны нулю. Выделенные синие области обозначают рецептивные поля. |
Частичная свертка (Partial convolution)
Частичная свертка позволяет решить две проблемы предыдущих подходов глубокого обучения:
- Предположение, что испорченные области имеют простую форму (прямоугольную).
- Заполнение испорченной области одним цветом и применение свертки ко всему изображению вне зависимости от того, какие пиксели испорчены, а какие нет.
Слой свертки состоит из:
— значения пикселей, — маска, указывающая на то какие пиксели испорчены.
Поэлементное перемножение
и позволяет получить результат, зависящий только от правильных пикселей, а нормализует этот результат, так как количество правильных пикселей на каждом слое свертки различается.Маска обновляется так:
Если результат свертки зависел хоть от одного реального пикселя, то на следующем слое свертки результирующий пиксель не будет считаться испорченным. Таким образом с каждым слоем свертки маска заполняется пока не будет полностью заполнена единицами.
Стробированная свертка (Gated convolution)
Разделение пикселей только на правильные и испорченные не позволяет:
- Контролировать восстановление изображения и вносить некоторую дополнительную информацию.
- Сохранить информацию об испорченной области, так как постепенно все пиксели становятся правильными.
Вместо жесткой маски, которая обновляется по некоторым правилам, стробированная свертка учится автоматически извлекать маску из данных:
Данная свертка учится динамическому отбору признаков для каждого слоя изображения и каждой логической области маски, значительно улучшая однородность цвета и качество исправления испорченных областей различных форм.
Функции потерь
Существует большое множество различных функций потерь при методе обучение модели через сравнение сгенерированного изображения с оригинальным. Примеры:
- L1-loss или Per-pixel loss. Оценивает точность восстановления каждого пикселя по отдельности.
- — выход генератора; — оригинальное изображние (англ. ground truth); — количество элементов в объекте ; — бинарная маска; — гиперпараметр, - поэлементное перемножение.
- Perceptual loss. Cравнивает признаки полученного и исходного изображений, полученные с помощью модели VGG-16[1].
- — изображение , в котором нестертые части заменены на части из ; — карта признаков, полученная -ым слоем VGG-16.
- Style loss. Сравнивает текстуру и цвета изображений, используя матрицу Грама[2].
- — матрица Грама для выполнения автокорреляции на карте признаков VGG-16; — размерность матрицы Грама.
- Total variation loss. Оценивает однородность полученного изображения.
При обучении обычно используется комбинация функций потерь с некоторыми весами, которые являются гиперпараметрами. В моделях, где вдобавок используется дискриминатор, функция потерь от его выхода также подмешивается к итоговой функции потерь.
Примеры современных моделей
DeepFillv2[3]
Главная идея данной модели — это использование стробированной свертки, которая позволила добиться хорошего качества вписывания при восстановлении изображения с разными формами испорченных областей. Также данная модель может использовать набросок пользователя в качестве входных данных.
Кроме того, в данной модели предлагается использовать вариант генеративно состязательной сети — SN-PatchGAN. Дискриминатор этой сети в каждой точке вычисляет кусочно-линейную функцию потерь, формируя таким образом
генеративно состязательных сетей, каждая из которых сосредотачивается на различных частях и свойствах изображения.Генератор, состоящий из двух сетей (грубой и сети повышающей качество изображения) имеет слой адаптации. Обе сети используют модель кодировщик-декодировщик вместо U-Net[4], в которой все слои классической свертки заменены на стробированные.
SC-FEGAN[5]
Данная модель позволяет производить высококачественные изображения лиц, учитывая передаваемые пользователем эскизы и цвета на области маски (стертых частях изображения). Иными словами пользователь может легко редактировать изображения, стирая фрагменты, которые он хочет изменить, и подставляя туда эскизы и/или цвета, которые будут отражены в генерируемом фрагменте.
Основа данной сети patchGAN — дискриминатор принимает на вход несколько каналов изображения. В данном случае помимо выходного изображения генератора и маски, дискриминатор принимает еще слой пользовательского ввода (эскизы и цвета).
Итоговая функция потерь формируется из выхода дискриминатора и функций сравнения изображения с оригинальным (per-pixel loss, perceptual loss, style loss).
См. также
Примечания
- ↑ Very Deep Convolutional Networks for Large-Scale Image Recognition, Karen Simonyan, Andrew Zisserman
- ↑ Gramian matrix, Wikipedia
- ↑ Free-Form Image Inpainting with Gated Convolution, Jiahui Yu, Zhe Lin, Jimei Yang, Xiaohui Shen, Xin Lu, Thomas Huang
- ↑ U-Net: Convolutional Networks for Biomedical Image Segmentation, Olaf Ronneberger, Philipp Fischer, Thomas Brox
- ↑ Face Editing Generative Adversarial Network with User's Sketch and Color, Youngjoo Jo, Jongyoul Park
Источники информации
- Guide to Image Inpainting: Using machine learning to edit and correct defects in photos, Heartbeat
- Introduction to image inpainting with deep learning, Weights & Biases
- Pushing the Limits of Deep Image Inpainting Using Partial Convolutions, Towards Data Science
- Understanding 2D Dilated Convolution Operation with Examples in Numpy and Tensorflow with Interactive Code, Towards Data Science