Python OpenCV — сверхвысокое разрешение с глубоким обучением

Что вы можете сделать на Python Программирование и разработка

Суперразрешение (SR) подразумевает преобразование изображения из более низкого разрешения (LR) в изображения с более высоким разрешением (HR). Он широко использует аугментацию. Он лежит в основе большинства моделей компьютерного зрения и обработки изображений. Однако с развитием технологий глубокого обучения сверхразрешения, основанные на глубоком обучении, приобрели первостепенное значение. Почти все модели глубокого обучения отлично используют сверхвысокое разрешение. Поскольку суперразрешение в основном использует аугментацию точек данных, его также называют галлюцинацией точек данных.

SR играет важную роль в улучшении и восстановлении изображения. Процесс SR осуществляется следующим образом. Сначала на вход берется изображение с низким разрешением. Затем изображение масштабируется, а разрешение изображений увеличивается до более высокого разрешения и выдается в качестве вывода.

Потребность в сверхразрешении на основе глубокого обучения

В традиционной модели суперразрешения, в которой не используется глубокое обучение, отсутствуют мелкие детали. Они не устраняют различные дефекты и факты сжатия в системах. Все эти проблемы можно очень эффективно решить, используя модель SR, основанную на глубоком обучении, чтобы получить изображение с более высоким разрешением, сохраняя все детали нетронутыми.

Некоторые широко используемые обычные модели SR:

  • Структурированная световая микроскопия (или SIM)
  • Стохастическая оптическая реконструкционная микроскопия (STORM)
  • Фотоактивируемая локализационная микроскопия (PALM)
  • Стимулированное истощение выбросов (STED)

Суперразрешение с использованием методов глубокого обучения.

Интерполяция

Интерполяция относится к искажению пикселей из одной сетки в другую, что в основном поможет нам изменить разрешение изображения. Изображение с низким разрешением (LR) интерполируется с увеличением размера сетки в 2 или 4 раза. Существуют различные модели интерполяции:

  • Интерполяция ближайших соседей: в этом случае все ближайшие точки пикселей интерполируются.
  • Билинейная интерполяция:интерполирует размер поля 2×2. Сначала он полностью выполняет интерполяцию 1 оси, а затем переходит ко второй. Это намного быстрее, чем интерполяция ближайших соседей.
  • Бикубическая интерполяция:выполняет кубическую интерполяцию размера 4×4. Он выполняет интерполяцию по 2 осям одновременно. Это быстрее, чем две другие модели интерполяции.

Интерполяция изображения в 2 раза

Интерполяция изображения в 2 раза

  • Усиление шума и размытие часто являются эффектами интерполяции изображения.

Предварительная дискретизация Super Resolution

Повышение дискретизации — это метод, который подразумевает дублирование простого слоя входного слоя. Затем следует сверточная фильтрация. Обычно для этого используется бикубическая интерполяция.

Предварительная дискретизация сверхвысокого разрешения

Предварительная дискретизация сверхвысокого разрешения

Читайте также:  Floor C++

Как видно из приведенного выше примера, изображение с более низким разрешением (LR) подвергается извлечению патчей. Извлечение патчей — это процесс извлечения плотных элементов из изображения и его свертывания. В модели повышающей дискретизации присутствуют сверточные фильтры. Они помогают в нелинейном отображении. Кроме того, свернутый участок реконструируется, в результате чего получается изображение с высоким разрешением (HR).

Вот некоторые из распространенных методов, используемых для повышения частоты дискретизации изображения:

  • SRCNN (Сверточная нейронная сеть сверхвысокого разрешения)
  • VDSR (очень глубокое сверхвысокое разрешение)

Пост-апсэмплинг Super Resolution

Повышение частоты дискретизации включает использование извлечения патчей. Это может привести к потере некоторых характеристик изображения, которые могут иметь решающее значение для дальнейшей обработки. Следовательно, для извлечения признаков необходима свертка после повышения частоты дискретизации.

В методе пост-апсемплинга процесс повышения дискретизации выполняется в конце. Это значительно сокращает объем сложных вычислений за счет замены предопределенной повышающей дискретизации сквозными обучаемыми слоями. Входные изображения LR подаются в качестве входных данных для модели CNN без увеличения разрешения. А сквозные обучаемые слои повышающей дискретизации применяются в конце сети.

Пост-апсэмплинг Super Resolution

Пост-апсэмплинг Super Resolution

Некоторые популярные методы, которые используются в Post Sampling SR:

  • FSRCNN (быстрая сверточная нейронная сеть сверхвысокого разрешения)
  • ESPCN (эффективная субпиксельная сверточная нейронная сеть)

Методы обучения

Пиксельные модели Super Resolution (SR) используют функции потерь для оптимизации модели. Функции потерь также используются для измерения ошибок реконструкции модели. В модели SR используются различные функции потерь, чтобы получить результат с большей точностью и меньшими ошибками.

Вот некоторые из часто используемых функций потерь:

  • Потери пикселей: это включает в себя потерю среднеквадратичной ошибки пикселей, вычисленную между каждым значением пикселя из реального изображения и каждым значением пикселя из сгенерированного изображения HR. Пиксельные потери L1 — это абсолютная разница между пикселями ожидаемого изображения HR и сгенерированного изображения.
  • Пиксельные потери L2 представляют собой среднеквадратичную разницу между пикселями ожидаемого изображения HR и сгенерированного изображения.
  • Потеря содержимого: это евклидово расстояние между элементами выходного изображения высокого уровня и целевым изображением HR. Функции высокого уровня получаются с помощью VGG и ResNet.
  • Adversarial Loss: эта функция потерь используется для обучения моделей генератора и дискриминатора. Это также называется функцией потерь GAN.

Остаточные сети

Остаточные нейронные сети или сокращенно ResNet представляют собой форму искусственной нейронной сети. Дизайн сети ResNet может преимущественно использоваться в моделях Super Resolution благодаря доступности архитектуры SRResNet.

EDSR (расширенные глубокие остаточные сети для одного изображения с высоким разрешением)

EDSR может обрабатывать определенные масштабы сверхвысокого разрешения. Это повышает производительность SR для одномасштабных архитектур. Его архитектура основана на архитектуре SRResNet, но не имеет слоев пакетной нормализации, поскольку он нормализует входные данные, что приводит к ограничению диапазона сети, а удаление BN приводит к повышению точности модели. Слои BN также потребляют 40% доступной памяти. Таким образом, его удаление приводит к уменьшению объема памяти и улучшению обучения сети. Они используют остаточные блоки, как показано на диаграмме ниже:

Читайте также:  Отсутствующие математические методы в JavaScript

Сравнение SRResNet и EDSR

Сравнение SRResNet и EDSR

MDSR (Многомасштабная система с глубоким сверхвысоким разрешением)

MDSR является расширением EDSR. Он реконструирует различные масштабы изображений с высоким разрешением в одной модели. Он имеет несколько модулей ввода и вывода, которые обеспечивают выходное разрешение с 2-кратным, 3-кратным и 4-кратным увеличением. Здесь в качестве слоев предварительной обработки используется ядро ​​большего размера, что делает сеть простой, но при этом обеспечивает высокое восприимчивое поле. Общие общие остаточные блоки в конце модулей предварительной обработки для всех разрешений. После апсэмплинга глубина MDSR достигнет 5 раз по сравнению с одномасштабной EDSR. Это может дать сопоставимые результаты с комбинированной моделью EDSR для конкретного масштаба с меньшими параметрами.

Другие сетевые проекты

Помимо остаточных сетей, есть и другие сетевые проекты, которые можно использовать при разработке моделей SR:

  • Рекурсивная сеть
  • Плотная сеть соединений
  • Сеть групповой свертки
  • Локальная сеть с несколькими путями

Однако остаточная сеть предпочтительнее из-за наличия остаточных блоков.

Генеративные модели (ГАН)

Генеративные модели (GAN) оптимизируют качество для создания изображений, приятных для человеческого глаза, поскольку люди не различают изображения по разнице в пикселях. Сети оптимизируют разницу в пикселях между ожидаемыми и выходными изображениями HR.

Некоторые часто используемые архитектуры GAN:

  • SRGAN
  • ESRGAN

SRGAN

То же самое с GAN, SRGAN также имеет генератор и дискриминатор. Этот фреймворк поддерживает 4-кратное масштабирование. Он использует функцию потери восприятия, которая представляет собой взвешенную сумму потерь противника и потерь контента. Противоборствующая потеря подталкивает решение к естественному многообразию изображений с использованием сети дискриминатора, которая обучена различать изображения со сверхвысоким разрешением и исходные изображения.

Архитектура SRGAN

Архитектура SRGAN

Сеть генератора состоит из остаточных блоков. Они используют пропущенные соединения для облегчения обучения. Сеть дискриминатора различает прочитанное изображение HR и полученное выходное изображение HR.

Генератор и дискриминатор в сети SRGAN

Генератор и дискриминатор в сети SRGAN

Модель SR с использованием глубокого обучения

Приведенный ниже код демонстрирует преобразование изображения с низким разрешением (LR) в изображение с высоким разрешением (HR) с использованием модели Super-Resolution (SR).

Шаг 1. Импортируйте необходимые библиотеки

Python3

# Importing all the required packages and libraries
import tensorflow as tf
import tensorflow_hub as hub
import cv2
import requests
import numpy as np
import matplotlib.pyplot as plt

Шаг 2: Загрузите входное изображение и нарисуйте его

Python3

# Loading the image of the GFG Logo
img = "https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcTdVHUvpMzlUKnxGtZSXcZ1XXZLxfu9hqc8BB77sNTcGjSbiLhLlqRpntUZhk222DQV9UM&usqp=CAU"
getContent = requests.get(img).content
array_img = np.asarray(bytearray(getContent), dtype=np.uint8)
# Change the color space BGR to RGB
image_plot = cv2.cvtColor(cv2.imdecode(array_img, -1), cv2.COLOR_BGR2RGB)
# Plot the image
plt.figure(figsize=(10, 10))
plt.title(image_plot.shape)
plt.imshow(image_plot)
plt.show()

Выход:

Читайте также:  Строка в JavaScript

рузите входное изображение и нарису

Входное изображение

Шаг 3: Предварительно обработайте изображение

Python3

# Model to preprocess the images
def preprocessing(img):
    imageSize = (tf.convert_to_tensor(image_plot.shape[:-1]) // 4) * 4
    cropped_image = tf.image.crop_to_bounding_box(
        img, 0, 0, imageSize[0], imageSize[1])
    preprocessed_image = tf.cast(cropped_image, tf.float32)
    return tf.expand_dims(preprocessed_image, 0)

Шаг 4. Здесь мы используем предварительно обученную модель GAN с расширенным суперразрешением (ESRGAN) от tfhub[https://tfhub.dev/captain-pool/esrgan-tf2/1]. Загрузите модель.

Python3

# This is a model of Enhanced Super Resolution GAN Model
# The link given here is a model of ESRGAN model
esrgn_path = "https://tfhub.dev/captain-pool/esrgan-tf2/1"
model = hub.load(esrgn_path)

Шаг 5. Используйте модель

Python3

# Employ the model
def srmodel(img):
    preprocessed_image = preprocessing(img)  # Preprocess the LR Image
    new_image = model(preprocessed_image)  # Runs the model
    # returns the size of the original argument that is given as input
    return tf.squeeze(new_image) / 255.0

Шаг 6: Постройте выходное изображение сверхвысокого разрешения.

Python3

# Plot the HR image
hr_image = srmodel(image_plot)
plt.title(hr_image.shape)
plt.imshow(hr_image)
plt.show()

Выход:

тройте выходное изображение сверхвысокого

Выходное изображение

Полный код

Приведенный ниже код будет принимать изображение и преобразовывать его в изображение с высоким разрешением.

Python3

# Importing all the required packages and libraries
import tensorflow as tf
import tensorflow_hub as hub
import cv2
import requests
import numpy as np
import matplotlib.pyplot as plt
# Loading the image of the GFG Logo
img = cv2.imread('GFG.jpeg')
image_plot = cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
plt.title(image_plot.shape)
plt.imshow(image_plot)
plt.show()
# Running the SR model
# Model to preprocess the images
def preprocessing(img):
imageSize = (tf.convert_to_tensor(image_plot.shape[:-1]) // 4) * 4
cropped_image = tf.image.crop_to_bounding_box(
img, 0, 0, imageSize[0], imageSize[1])
preprocessed_image = tf.cast(cropped_image, tf.float32)
return tf.expand_dims(preprocessed_image, 0)
# This is a model of Enhanced Super Resolution GAN Model
# The link given here is a model of ESRGAN model
esrgn_path = "https://tfhub.dev/captain-pool/esrgan-tf2/1"
model = hub.load(esrgn_path)
# Model to employ the model
def srmodel(img):
preprocessed_image = preprocessing(img)  # Preprocess the LR Image
new_image = model(preprocessed_image)  # Runs the model
# returns the size of the original argument that is given as input
return tf.squeeze(new_image) / 255.0
# Plot the HR image
hr_image = srmodel(image_plot)
plt.title(hr_image.shape)
plt.imshow(hr_image)
plt.show()

Выход:

дное изображение

Входное изображение

Выходное изобра

Выходное изображение

Оцените статью
bestprogrammer.ru
Добавить комментарий