Использование модели нейронной сети ESRGAN для улучшения качества изображений

XXV Международный конкурс научно-исследовательских и творческих работ учащихся
Старт в науке

Использование модели нейронной сети ESRGAN для улучшения качества изображений

Волощенко Я.В. 1
1МБОУ Ширинская СШ №18
Мункина А.Г. 1Дробкова О.С. 1
1МБОУ Ширинская СШ №18
Автор работы награжден дипломом победителя I степени
Текст работы размещён без изображений и формул.
Полная версия работы доступна во вкладке "Файлы работы" в формате PDF

Введение

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

Процедуры суперразрешения, приобретают особенно важное значение для следующих областей:

  • Космические исследования: повышение детализации снимков с космических спутников и телескопов;

  • Наука и цифровая реставрация: восстановление архивных изображений и видеоархивов;

  • Медиа и развлечения: обработка фотографий и видео для создания контента, подходящего для современных дисплеев.

  • Медицина: улучшение качества рентгеновских снимков и других медицинских данных для более точной диагностики;

Для решения указанных проблем разработаны современные технологии, основанные на использовании нейронных сетей, такие как SRGAN, EDSR, VDSR, но одним из наиболее эффективных инструментов для повышения разрешения изображений является ESRGAN (EnhancedSuper-ResolutionGenerativeAdversarialNetwork). Это объясняет актуальность данного проекта.

Цель проекта: изучение и подготовка к использованию модели ESRGAN, которая сможет качественно масштабировать изображение, сохраняя все детали.

Задачи проекта:

  1. Изучить историю создания и развития нейронных сетей.

  2. Изучить алгоритм и дополнительные программы для работы с моделью нейронной сети ESRGAN.

  3. Подготовить к работе нейронную сеть, включая написание алгоритма для работы в нейронной сети ESRGAN.

  4. Провести тесты на различных изображениях

Объект: нейронная сеть ESRGAN

Предмет: использование нейронной сети ESRGAN

Методы:

  • анализ литературных источников;

  • сбор и обработка информации;

  • написание алгоритма для работы в нейронной сети ESRGAN.

Глава 1. История развития нейросетей

1.1 История создания нейросетей

Нейросеть (или Нейронная сеть) — это математическая модель, вдохновлённая устройством нервной системы человека. Она состоит из искусственных «нейронов», организованных в слои и соединённых друг с другом.

В середине XX века начала формироваться первая концепция нейросети: исследователи пытались создать машину, имитирующую функции человеческого мозга. В 1943-м Уорреном Мак-Каллоком и Уолтером Питтсом была предложена математическая модель нейрона, а уже в конце 1950-х Фрэнк Розенблатт представил персептрон – простую модель машинного обучения, созданную для помощи компьютерам в обучении на разных объёмах данных. Именно его можно назвать первой практической реализацией нейросети.

В период 1980-2000 стали разрабатываться и появляться первые алгоритмы обучения, сравнения и анализа данных, в XXI направление стало стремительно развиваться. В 2000-х появились мощные графические процессоры, и стали доступны большие объёмы данных, что побудило сообщество начать разработку алгоритмов DeepLearning – совокупность методов машинного обучения, основанных на обучении представлениям, а не на специализированных алгоритмах под конкретные задачи.

Интерес воплощения человеческого мышления «на плате» появился почти сразу же, как вычислительная техника стала доступна большинству людей. В XX веке люди смогли довольно быстро достичь тех или иных результатов за счёт алгоритмов, которые были придуманы человеком, но не смогли продвинуть это дальше ввиду недостаточного развития технологий.

В декабре 2015 года была основана некоммерческая организация OpenAI – американская научно-исследовательская организация, занимающаяся разработками в области искусственного интеллекта.С этого времени развитие данной области стало активно набирать обороты и продолжает свое развитие до настоящего времени.

Эволюция нейронных сетей характеризуется динамичным и впечатляющим прогрессом, который наблюдается как на Западе, так и в России. Переход от ранних концепций нейросетей, сформированных в середине XX века, к созданию сложных и мощных алгоритмов глубокого обучения демонстрирует резкий скачок в данной области. Основными движущими силами прогресса на Западе выступают компании OpenAI, Google и Microsoft. В России же лидирующие позиции в разработке нейросетевых технологий занимают продукты таких компаний, как «Яндекс» и «Сбер». Российские производители оперативно адаптировались к мировым трендам и стремятся достичь уровня функциональности, сопоставимого с западными аналогами. В истории современных нейросетей особое внимание следует уделить частоте обновлений, что является индикатором интенсивного роста и превосходит объемы обновлений в год.

1.2 НейросетьESRGAN (Enhanced Super Resolution Generative Adverserial Network)

В 2018 году специалисты из КНР  XintaoWang и его коллеги создали нейросеть, которая улучшает качество изображения в играх. Технологию назвали ESRGAN (EnhancedSuperResolutionGenerativeAdverserialNetwork - Сеть, генерирующая улучшенное разрешение). Эта нейросеть является улучшенной версией GAN (GenerativeAdversarialNetwork), созданной специально для задач суперразрешения. ESRGAN сочетает в себе высокую точность восстановления текстур и реалистичное воспроизведение деталей, что делает её одной из самых передовых технологий в этой области.

ESRGAN (EnhancedSuper-ResolutionGenerativeAdversarialNetwork) — это нейросеть, предназначенная для выполнения процедур суперразрешения (Super-Resolution). Она позволяет увеличить разрешение изображения и при этом восстанавливать потерянные мелкие детали, улучшая общее качество изображения. ESRGAN применяется в самых разных областях: от улучшения снимков архивных источников до создания современных визуальных эффектов для видео- и медиапроектов. Эта технология активно используется для обработки фотографий и видео контента, повышения детализации медицинских снимков, а также улучшения качества изображений для космических исследований и научных целей.

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

Глава 2. Практическая часть

2.1 Алгоритм для работы в нейронной сети ESRGAN

Основная настройка и запуск нейронной сети ESRGAN будут осуществляться с использованием возможностей GoogleColab.

  • GoogleColab - облачный сервис, не требующий установки, с бесплатным доступом к вычислительным ресурсам

Писать код мы будем на популярном во всем мире языке программирования Python.

  • Python Высокоуровневый язык программирования с очень простым синтаксисом, созданный для решения крупного спектра задач – от алгоритмики до нейронных сетей

В языке программирования Python существует около 100 000 различных библиотек, предназначенных для решения самых разнообразных задач. В рамках нашего проекта планируется использование следующих библиотек:

  • os – встроенная библиотека Python, используемая для взаимодействия с операционной системой. В нашем проекте она будет задействована для загрузки и сохранения изображений.

  • time – стандартная библиотека Python, предназначенная для работы с временными данными. В данном случае мы будем использовать её для реализации таймера.

  • Pillow (PIL) – библиотека, предназначенная для обработки изображений.

  • NumPy – библиотека для работы с большими наборами данных. В рамках нашего проекта она будет использоваться для хранения изображений в формате тензоров (таблиц данных).

  • TensorFlow и TensorFlowHub – фреймворк для создания, сохранения, развертывания и работы с нейронными сетями. TensorFlow станет основной библиотекой нашего проекта, а TensorFlowHub будет использоваться в качестве менеджера загрузки нейросети ESRGAN.

Алгоритм для работы в нейронной сети ESRGAN

В первую очередь создадим блокнот в GoogleColab, который можно назвать по желанию.

1. Подключение всех ранее упомянутых библиотек в наш код. В языке Python это осуществляется с помощью конструкции import [библиотека] as [название библиотеки] (Рис.1).

(Рис. 1)

Также будет применена конструкция from, которая позволяет указать: "из PIL загрузить только Image".

2 . Объявить специальные переменные, в которых будут указаны пути к изображению и модели, которые будут использоваться в проекте. (Рис. 2)

(Рис. 2)

3. Создание функций для преобразования изображения в структуру данных, пригодную для обработки, а также для обратного восстановления изображения из этих данных.

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

  1. Декодирование изображения в массив данных.

  2. Проверка наличия прозрачного фона. В случае его обнаружения функция удаляет данный фон.

  3. Рассчет размеров массива для дальнейшей обработки.

  4. Приведение размера массива к значениям, кратным 4, что необходимо для корректной работы модели.

  5. Преобразование массива в требуемый тип данных.

  6. Возвращение подготовленного тензора, готового для использования в нейронной сети.

Пример реализации функции представлен ниже: (Рис. 3)

(Рис.3)

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

Далее рассматривается функция сохранения изображения из массива, которую назовем Save. (Рис. 4)

(Рис. 4)

  1. На первом этапе проверяется, является ли переданный объект image экземпляром класса PIL.Image.Image из модуля Pillow. Другими словами, функция проверяет, не было ли передано уже готовое изображение. Если image не является объектом класса Image.Image, предполагается, что это тензор TensorFlow. В таком случае выполняются необходимые преобразования. Если же объект соответствует классу Image.Image, дополнительные преобразования не требуются.

  2. Если передан тензор, значения массива ограничиваются диапазоном от 0 до 255, поскольку значение каждого пикселя изображения должно находиться в данном диапазоне. Все значения ниже 0 заменяются на 0, а значения выше 255 обрезаются до 255.

  3. Затем функция преобразует массив в изображение.

  4. На финальном этапе выполняется сохранение изображения.

Функции подготовлены, и следующим шагом является разработка основной программы.

4. Создания переменной hr_image, в которой будет храниться изображение в виде массива: (Рис. 5)

(Рис. 5)

5. Создадим переменную model, в которой будет размещена модель, загруженная из интернета: (Рис. 6)

(Рис. 6)

6. Реализуем активацию модели, включая таймер: (Рис. 7)

(Рис. 7)

7. Произведем сохранение изображение: (Рис. 8)

(Рис. 8)

На этом этапе наша программа полностью готова к работе. В итоге весь основной код будет выглядеть следующим образом: (Рис. 9)

( Рис. 9)

А полный код проекта представлен в Приложении 1.

2.2 Тесты на различных изображениях

(Рис. 11)

Для первого тестирования была выбрана широко известная в профессиональной среде программистов демонстрационная картинка, изображающая обезьяну, которая часто используется для проверки производительности и результатов алгоритмов работы с изображениями. Данное изображение представлено на (Рис. 11 слева). После запуска программы и обработки изображения был получен итоговый результат, представленный на (Рис. 11 справа). Время выполнения работы алгоритма составило всего 5,2 секунды. Проанализировав итоговое изображение, можно заметить значительное улучшение его качества, что подтверждает эффективность работы алгоритма. Детализация текстур и устранение различных артефактов визуально оценены как очевидное достижение нейросети.

Для проведения следующего тестирования было решено использовать изначально качественное изображение, которое перед обработкой подвергли искусственному ухудшению (умышленному сжатию), чтобы проверить, как программа справится с восстановлением из более сложных условий. В качестве исходного материала была выбрана фотография песца, представленная на (Рис. 12 слева).

 

(Рис. 12)

Результаты обработки показали следующее:

  • Изображение после применения алгоритма сжатия оказалось заметно ниже по качеству, что хорошо видно на (Рис. 12 центр). Множество деталей охарактеризованы размытостью, снижение четкости линий и общие потерянные элементы структуры изображения подтверждают искусственное ухудшение.

  • Изображение после обработки программой, настроенной на нашей модели, представлено на (Рис. 12 справа). Процесс восстановления занял около 6 секунд. На итоговом изображении можно чётко проследить стремление программы восстановить утраченные детали и приблизить визуализацию к качеству оригинала. Текстуры стали значительно более четкими, детали восстановлены, а общий вид изображения ощутимо улучшился.

Для третьего тестирования был выбран кадр из игры 1996 года «KirbySuperStar», разработанной для игрового устройства SuperNintendoEntertainmentSystem (SNES). Справа (Рис. 13 справа) представлено оригинальное изображение, имеющее разрешение 256 на 225 пикселей. В результате выполнения программы разрешение изображения было увеличено в четыре раза, что значительно улучшило четкость кадра. (Рис. 13 слева)

 

(Рис. 13)

Заключение

Эволюция нейронных сетей отмечается динамичным и впечатляющим прогрессом, как на Западе, так и в России. Появление модели ESRGAN (EnhancedSuperResolutionGenerativeAdversarialNetwork) стало отправной точкой для нового этапа в развитии технологий суперразрешения, что существенно улучшает качество изображений и расширяет их применение в различных областях.

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

В процессе реализации проекта были достигнуты следующие результаты:

1. Исследована история создания и развития нейронных сетей.

2. Изучены принципы работы и дополнительные инструменты, используемые в модели ESRGAN.

3. Подготовлена нейронная сеть к практическому использованию, а также разработан алгоритм для ее функционирования.

4. Проведено тестирование на различных изображениях, включая те, которые были вручную сжаты до низкого качества.

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

Список литературы

  1. Дэн Бейдер., Чистый Python. Тонкости программирования для профи. 2018г.

  2. Марк Лутц., Изучаем Python [пер. с англ.]. 2009г.

  3. Прамод Сингх., Learn TensorFlow 2.0: Implement Machine Learning and Deep Learning Models with Python. 2019г.

  4. Трэвис Олифант., Guide to NumPy. 2006г.

  5. https://www.python.com/

  6. https://www.tensorflow.org/

  7. https://numpy.org/doc/stable/user/

  8. https://habr.com/ru/articles/861888/

Приложение 1

Глоссарий

  1. Google Colab – облачный сервис, не требующий установки, предоставляющий бесплатный доступ к вычислительным ресурсам.

  2. Блокнот — файл проекта Google Colab.

  3. Python – высокоуровневый язык программирования с простым синтаксисом, предназначенный для решения широкого спектра задач, включая алгоритмическое программирование и разработку нейронных сетей.

  4. Высокоуровневый язык программирования – язык программирования, взаимодействие с которым осуществляется через понятные человеку команды и конструкции.

  5. Библиотека – совокупность предварительно разработанных программных модулей, предназначенных для упрощения выполнения различных задач.

  6. Фреймворк – набор низкоуровневых библиотек и инструментов, позволяющий разработчику создавать программы.

  7. os– встроенная в Python библиотека, предназначенная для работы с операционной системой.

  8. Time - встроенная в Python библиотека для работы с временными параметрами и задачами, связанными со временем.

  9. PILLOW (PIL) – библиотека, предназначенная для обработки и редактирования изображений.

  10. Numpy – библиотека для обработки и анализа больших объемов данных (датасетов).

  11. Tensorflow и Tensorflowhub – фреймворки для работы с нейронными сетями в Python, включая их создание, сохранение, развертывание и применение.

  12. Tensorflowhub – инструмент для загрузки и использования предварительно обученных моделей.

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

  14. ESRGAN – нейронная модель, обученная для маштабирования изображений (до 2К).

Просмотров работы: 68