Время прочтения: 4 мин.

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

GAN – Generative Adversarial Networks, генеративно-состязательные сети, метод обучения генеративной модели. На высоком уровне можно представить эту модель как соревнование двух подмоделей, одна из которых – генератор – пытается научиться обманывать вторую – дискриминатор. Генератор при этом учится создавать новые объекты на основании распределения некоторого сложного набора данных, например, фотографий человеческих лиц. Дискриминатор же учится отличать сгенерированные объекты от реальных.

ESRGAN – Enhanced Super-Resolution GAN, улучшенные генеративно-состязательные сети для высокого разрешения. В названии есть «улучшенные», потому что есть проект SRGAN, а «улучшенные» – его усовершенствование от других авторов. Ссылка на Github проекта.

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

Некоторые категории из списка моделей:

— Увеличение разрешения изображений (рисунки; фотографии; текстуры видеоигр)

— Удаление артефактов (размытие; зернистость; шум; сглаживание; последствия компрессии алгоритмов JPG, BC1/DXT1, Cinepak, H264) Для демонстрации работы модели рассмотрим изображение текста исходного кода файла test.py из репозитория проекта ESRGAN с низким разрешением.

Рисунок 1 – Изображение с низким разрешением

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

Рисунок 2 – Фрагмент изображения после обработки моделью Map

Как можно увидеть, буквенные символы на изображении получили искажения и некоторую стилизацию. Но размер изображения стал 2000 на 2116 пикселей.

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

На практике эта модель применялась для предварительной обработки изображений с текстом перед распознаванием с помощью ABBYY Fine Reader. Для лучшего распознавания в программу нужно подавать изображения с плотностью пикселей не менее 300 dpi. Генеративная модель решила эту проблему и усиливала резкость характеристических фрагментов отдельных буквенных символов. Таким образом программа выдавала лучшие результаты, чем без обработки.

В другом примере исходное изображение (833×881 пикселей) было трижды сжато алгоритмом JPG и имеет некоторые артефакты – серые пикселизированные пятна вокруг символов. Универсальная модель для удаления артефактов с JPG изображений – DeJpeg Fatality PlusULTRA.

Рисунок 3 – Фрагмент изображения с артефактами компрессии JPG
Рисунок 4 – Фрагмент изображения после применения модели DeJpeg

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

Модели генеративно-состязательных сетей очень требовательны к памяти и вычислительному ресурсу, поэтому рекомендуется запускать генерацию на устройствах с графическим ускорителем. Чтобы воспользоваться проектом ESRGAN нужно скачать GitHub репозиторий с тэгом old. Это условие необходимо для работы моделей из списка сообщества, поскольку позднее были внесены изменения в архитектуру, нарушающие обратную совместимость с предыдущими версиями. Затем нужно скачать одну из моделей в каталог models. Изображения низкого качества помещаются в каталог LR, результаты будут появляться в каталоге results. Запуск производится консольной командой:

python test.py models/<имя скачанной модели.pth>