Апскейл, который смог

Термин «апскейл» используется для обозначения процесса увеличения разрешения цифровых изображений с фокусом на создание иллюзии «настоящего» высокого разрешения. Правда, 90% таких продуктов — это барахло, больше намёк на перспективы, чем волшебство. Недавно мои ручки добрались до двух алгоритмов повышения чёткости, которые оказались настолько хороши, что появилась эта статья. Будут субъективные и объективные тесты алгоритма Real-ESRGAN для увеличения разрешения и алгоритма GFPGAN для детализации лиц.

Traffic_Warning: в статье демонстрируется множество примеров.
eg1jktqrr0hcjrqsua4rsxqqio0.jpeg


Методика тестирования


Обучение алгоритмов производится на относительно ограниченном наборе данных, и на практике рано или поздно встретятся изображения, которые будут неправильно обработаны. Невозможно заранее предсказать ценность алгоритма без тестирования в рамках конкретной задачи, отчётам разработчиков сложно доверять, ведь их задача — «продать» свою работу. Проверка алгоритма должна начинаться с тестирования на данных, которые повстречаются наиболее вероятно. Если первичные результаты удовлетворяют ожиданиям, следует оценить диапазон применимости, подбирая всё более маргинальные варианты. Для оценки качества работы алгоритмов тренированного глаза достаточно, но ради придания статье тончайшего налёта профессионального исследования, сравнение будет сопровождаться количественными оценками.

Алгоритм тестирования:

  1. Уменьшить эталонное изображение обратно пропорционально коэффициенту увеличения алгоритма (2 или 4 раза).
  2. «Заапскейлить» уменьшенное изображение тестируемым алгоритмом, а также Lancoz (базовая точка) и Topaz Gigapixel (предыдущий чемпион).
  3. Проверить адекватность увеличения.
  4. Проверить детали.
  5. Вычислить «попугаи».


Cравнить исходное и увеличенное изображения можно разными методами, начиная с квадратичного среднего и заканчивая специализированными нейросетями. Вменяемым выбором был бы MSSIM, поскольку он одновременно самый устойчивый и соответствует человеческому пониманию одинаковости картинок. Но так как чёткость увеличенного изображения формируется за счёт имитации текстур (грубо говоря, подбираются и вырисовываются микрокусочки от других изображений), то MSSIM покажет сильное отличие. Согласитесь, вне научного применения предпочтение получит правдоподобное чёткое изображение, но не математически точное мыло. При обучении нейросетей правдоподобность измеряется выделенной нейросетью, которая умеет оценивать реалистичность и качество. Но демонстрация циферок от чёрных ящиков не вызовет доверия, если только это не какой-то стандарт. Из оценок такого типа общепризнанным является VMAF, которую использует Netflix для подбора оптимальных настроек передачи и хранения видеопотоков. Эта интегральная оценка учитывает степень сходства оригинального и изменённого изображения и набор показателей качества картинки.

Кроме того, будут использоваться следующие косвенные оценки:

  1. «Резкость». Очень простая оценка, которая является аналогом второй производной. Чем более размыто изображение, тем меньше в нём резких переходов значений.
  2. Энтропия текстур. Мутноватая штука, но если на пальцах, то это показатель сложности «раскраски» поверхностей (запомнить цвет покрашенной стены проще, чем узор обоев).
  3. Размер файла PNG. Колхозная оценка общей энтропии изображения, чем больше размер файла, тем больше деталей в картинке.


Тестирование апскейла


В рамках проекта Real-ESRGAN доступно несколько предобученных моделей:

  • RealESRGAN_x4plus — для общего применения, увеличение 4х
  • RealESRNet_x4plus — устаревшая модель для общего применения, увеличение 4х
  • RealESRGAN_x4plus_anime_6B — для рисованных изображений, увеличение 4х
  • RealESRGAN_x2plus — для общего применения, увеличение 2х
  • official ESRGAN_x4 — модель, использовавшаяся для публикации официальных результатов, увеличение 4х


Для тестирования подобраны изображения, которые представляют широкий диапазон того, что может пожелать заапскейлить среднестатистический землянин. Средний размер изображений после уменьшения в четыре раза составляет 350×250 пикселей. Бóльшая сторона исходных изображений имеет длину в диапазоне от 1200 до 2000 пикселей, приводить их целиком неуместно, поэтому только ссылки и уменьшенные версии.

Для проверки использована модель ESRGAN_SRx4_DF2KOST_official-ff704c30, которая субъективно превосходит прочие.

▍ Тестовое изображение «sample01»


Уменьшение 4x ➟ 300×200

b0grzrx09qxr-dlb3kp3n2t2oto.jpeg

После первого теста уже можно заподозрить, что RealESRGAN превосходит на голову существующие разработки. Если не знать, что изображение было увеличено, то заметить подвох сложно. Gigapixel демонстрирует неплохие результаты, но заметно, что это синтетика.

▍ Тестовое изображение «sample02»


Уменьшение 4x ➟ 350×231

rfeafowsapfkiqi036vubtea1vk.jpeg

На результате от RealESRGAN листья деревьев выглядят не только реалистично, но и более чётко чем в оригинале, что-то необычное.

▍ Тестовое изображение «sample03»


Уменьшение 4x ➟ 320×180

4lvmpnfjbrhp-pijtxbf1odg_yw.jpeg

Настоящий дождь, чёткое лицо. Как? Пришлось перепроверять, уж слишком хорошо, чтобы это было правдой, но это действительно апскейл.

Ещё больше удивительных примеров (ОЧЕНЬ МНОГО КАРТИНОК)

▍ Тестовое изображение «sample04»


Уменьшение 4x ➟ 350×232

58qykg3y3qv40dfk8gdcrtjxn50.jpeg

Снова сложно поверить, что это алгоритмически увеличенное изображение. Обратите внимание на ручку двери и руль.

▍ Тестовое изображение «sample05»


Уменьшение 4x ➟ 300×201

v310-lupzhbjnbvt97k4mybk_f8.jpeg

▍ Тестовое изображение «sample06»


Уменьшение 4x ➟ 238×128

ebmo_0wnbultt9omlddk3zpevcg.jpeg


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

▍ Тестовое изображение «sample07»


Уменьшение 4x ➟ 250×167

dgh84deitbz3x-xorucu1asgscu.jpeg


▍ Тестовое изображение «sample08»


Уменьшение 4x ➟ 300×200

gfe3mfhyed6qkcrplkfzkynvh78.jpeg


▍ Тестовое изображение «sample09»


Уменьшение 4x ➟ 350×350

gs1widqmwvv7ktgkugc6rjchi8g.jpeg


▍ Тестовое изображение «sample10»


Уменьшение 4x ➟ 375×250

ed2fvovusm7cqi0fuplgm1qyo8c.jpeg


В очередной раз обращает на себя внимание прорисовка плёночного зерна. Даже закрадываются сомнения: уж не наложенный ли это эффект, хотя распределение зерна специфично, алгоритмический шум лежал бы равномернее. Может это какое-то читерство, так или иначе, это впечатляет.

▍ Тестовое изображение «sample11»


Уменьшение 4x ➟ 405×270

ia1q-dw6esg7bpow_sdo9htobw8.jpeg


▍ Тестовое изображение «sample12»


Уменьшение 4x ➟ 450×300

s5ks-4jvar6kscwbdlqkdcoscdu.jpeg


▍ Тестовое изображение «sample13»


Уменьшение 4x ➟ 320×213

z5tssblzlng74rurwcxahfifiri.jpeg


▍ Тестовое изображение «sample14»


Уменьшение 4x ➟ 272×181

grz8euzaw5mhoaxq43shr3qadai.jpeg


▍ Тестовое изображение «sample15»


Уменьшение 4x ➟ 300×200

pumbjx-tpjuy-bj7du24kusei78.jpeg


▍ Тестовое изображение «sample16»


Уменьшение 4x ➟ 280×280

oeigjumot4x_too-auy9x6fcp-w.jpeg


И визуально и по объективным оценкам (далее в таблице) понятно, что Real-ESRGAN нарисовал больше деталей, чем было в оригинале, не артефактов, а именно дополнительных деталей. Нейросети всегда фантазируют на тему вероятного оригинала, но обычно это выстрел в сторону цели с недолётом. Но качественно превзойти оригинал? Такое встречалось в очень специализированных алгоритмах. Апскейл изображений реального мира — это задача c огромной вариативностью, поэтому это серьёзное достижение.

▍ Тестовое изображение «sample17»


Уменьшение 4x ➟ 320×180

-5dbrlhn0lylox6axduqwf4ckrm.jpeg


▍ Тестовое изображение «sample18»


Уменьшение 4x ➟ 512×341

pcfu0ooczaxuznsnkiczt1cnqh4.jpeg


Этот тест показывает насколько уверенно Real-ESRGAN умеет работать с боке. На уменьшенном изображении теряется информация о границах фокуса. Gigapixel рисует резкие линии там, где их быть не должно. Real-ESRGAN правдоподобно воспроизводит эти нюансы.

▍ Тестовое изображение «sample19»


Уменьшение 4x ➟ 267×200

om4g1u3hwesq2j2i0jjlghtb0ty.jpeg


▍ Тестовое изображение «sample20»


Уменьшение 4x ➟ 350×350

jzwuptfylrrb_rafzd2x7yojwl4.jpeg


▍ Тестовое изображение «sample21»


Уменьшение 4x ➟ 256×205

ezfo915tb68gqmgxpt-dawhuoe0.jpeg


Если вам показалось, что «INDIAN OCEAN» чётко видно на интерполяции Lancoz, то вам показалось. Буквы I, E, A без контекста не различить.

▍ Тестовое изображение «sample22»


Уменьшение 4x ➟ 250×167

ddq0sfpagec-gvqmiuoixget16o.jpeg


▍ Тестовое изображение «sample23»


Уменьшение 4x ➟ 512×341

kxfmkzsj5e_luedimxllltfew_4.jpeg


*конец спойлера*


Далее будут таблицы с измерениями, но перед этим приведу примеры, которые наглядно продемонстрируют, как зависят значения от картинки.
Чем ближе VMAF к 100, тем лучше. Остальные параметры абсолютны.
RealESRGAN показывает самые высокие результаты, которые иногда превосходят показатели исходного изображения.
Интерпретируя оценку VMAF, следует помнить, что её значительную часть формирует буквальное соответствие оригиналу, что ведёт к формальному превосходству Lancoz, так как он ничего не сочиняет от себя. Сравнивать стоит оценки RealESRGAN и Gigapixel между собой. Cреднее значение VMAF 56,92 против 55,10 подтверждает превосходство RealESRGAN.

▍ Далее проверяем режим увеличения рисованных изображений


В качестве алгоритма для сравнения был выбран Waifu, который долгое время считался стандартом. Не имею дела с рисованной анимацией, поэтому могу только эмпирически предположить, что сейчас топовым алгоритмом является Anime4k. На примерах в интернете не наблюдается значительной разницы между Anime4k и RealESRGAN, поэтому в тестировании Anime4k не используется (нет смысла устанавливать ради нескольких картинок).

Уменьшение 4x ➟ 300×200

9zt7rbc-vnsd5opyqgv9lbx0hsy.jpeg

На целевом типе анимации RealESRGAN проявляет себя ожидаемо превосходно, собственно поэтому будет интересно протестировать разные типы графики.

Ещё немного примеров
Уменьшение 4x ➟ 300×225

vokau3wwkekdpqn5l8iudcyyarq.jpeg


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

Уменьшение 4x ➟ 256×379

cz8o5p5uwia-fx335bins98sf1e.jpeg


Интересно, что RealESRGAN может как бы перерисовать детали за счёт знания, как это «должно выглядеть», правда, навязывая при этом свой графический стиль. Ленивый способ преобразования рисунка в коммерческую иллюстрацию?

Уменьшение 4x ➟ 203×311

9wchqzkskgfcqkjfddnktophcrs.jpeg


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

Уменьшение 4x ➟ 375×211

uiogifdeiwz8dkzelbmeul2doiq.jpeg


Настоящая магия Deep Learning: адекватная фантазия RealESRGAN получилась детальнее оригинала.


Специально для простых смертных существует версия RealESRGAN, упакованная в один файл, которая не требует установки вспомогательных библиотек.

Ссылки под разные ОС:


Портативная версия использует модели в своём формате, в комплекте есть следующие:

  • realesrgan-x4plus (для общего применения)
  • realesrnet-x4plus (устаревшая модель для общего применения)
  • realesrgan-x4plus-anime (для рисованных изображений)


Самая мощная модель, аналогичная той, что использовалась в данном сравнении, лежит почему-то в другом месте:

  • models-DF2K — это «official ESRGAN_x4»
  • models-DF2K_JPEG — это та же модель, но способная переносить сильно сжатые JPEG. Пригодится, если на других моделях результат разваливается в мозаику.


Файлы моделей следует поместить в каталог ./models, переименовав по примеру содержимого.

Командная строка для запуска с дефолтной моделью realesrgan-x4plus:
realesrgan-ncnn-vulkan.exe -i dir_in -o dir_out -j 1:1:2

Для переключения модели нужно добавлять специальный ключ:»-n realesrgan-x4plus-anime»,
»-n df2k-x4»

GFPGAN


Решение GFPGAN предназначено для восстановления детализации лиц с изображений низкого разрешения.

Существуют две модели:

  • GFPGANCleanv1-NoCE-C2 — упрощённая модель
  • GFPGANv1 — сложная модель


Сложная модель рисует настоящее лицо с фотографической точностью. У неё есть три проблемы:

  1. Требует дополнительной мороки с установкой.
  2. Не подстраивается под освещение фотографии.
  3. Почти всегда искажает цвет области вокруг лица, то есть нужно допиливать в фотошопе.


Простая модель соответственно не имеет таких проблем, но качество её работы заметно ниже.

Ради эксперимента проверим, что будет, если запустить алгоритм на хорошем разрешении.

Уменьшение 2x ➟ 512×512

5dbi9r2fnvsvb6mcnwxta3pjw9c.jpeg

Улучшения не только не происходит, но и есть сильная потеря деталей. Штош

© Habrahabr.ru