Четыре раза ухудшил и улучшил одно фото: во что апскейлер превратил кота
Если хочется узнать, как улучшить качество фото нейросетью, обычный совет занимает одну строчку: кидаете маленькую картинку и нажимаете x4. Получаете большую и на этом заканчиваете.
Я решил устроить этой кнопке зацикливание. После каждого улучшения снова уменьшал картинку до размера древней аватарки и отправлял на новый круг. И тут обнаружился странный эффект: пикселей на выходе становилось больше, а связь с настоящей фактурой кота слабела. Апскейлер постепенно начал усиливать следы собственной предыдущей работы.
За четыре круга кот сохранил позу и силуэт. Зато фотография стала похожа на гравюру, которую очень долго крутили в редакторе. Мягкая шерсть превратилась в систему уверенных штрихов, а обычная ткань кресла начала выглядеть как кольчуга. В общем, деградировала картинка очень деятельно, словно с каждым кругом становилась все увереннее в деталях, которых уже не могла разглядеть.
На финальной картинке особенно хороши две улики. Глаз выглядит все контрастнее, хотя рисунок радужки к нему не возвращается. Синее кресло постепенно покрывается мелкой сеткой и в какой-то момент начинает выглядеть детальнее самого кота. За ними и будем следить: они лучше всего показывают, как увеличение разрешения превращается в усиление ошибки.
Сначала превращаю кота в аватарку
Для теста я взял фотографию бенгальского кота размером 1272 на 1065 пикселей. Исходник выпущен автором Gabel в общественное достояние, поэтому кот участвовал в эксперименте на совершенно законных основаниях.
Потом я уменьшил его до 128 на 107 пикселей. Примерно такой размер могла иметь аватарка на форуме, где люди ставили в подпись мигающих драконов и спорили, какой Winamp правильнее.
Справа маленькая версия увеличена без сглаживания, чтобы ее можно было рассмотреть. Источник оригинала: Wikimedia Commons, автор Gabel, public domain.
Чтобы увеличить разрешение фото нейросетью, я каждый раз делал одно и то же. Отправлял картинку 128 на 107 пикселей в апскейлер и получал версию 512 на 428. Затем снова уменьшал ее до 128 на 107 и запускал следующий круг. Всего получилось четыре прохода.
Уменьшал я одинаково, одним проходом Lanczos. Шум и размытие не добавлял, шарп и цвет тоже не трогал. Между кругами менялся результат апскейлера, а очередное уменьшение решало, какая часть этого результата попадет в следующий вход.
Есть одна техническая оговорка. Первый результат бот вернул в JPEG, следующие три в PNG. Я ничего отдельно не пересохранял. Переход от второго к четвертому кругу целиком идет внутри PNG и показывает, что эффект продолжал накапливаться при одном формате.
Первый цикл: глаз остался без радужки
После первого круга все выглядит вполне прилично. Кот узнаваем, крупные полосы сидят примерно на своих местах, силуэт не поплыл. Для обычной задачи на этом можно было бы закончить: маленький файл снова стал большим.
Подвох сидит в глазу. В оригинале видна радужка и маленький блик, после уменьшения эта информация почти исчезла. Апскейлер сделал глаз крупнее и собрал вокруг него правдоподобные границы, но потерянный рисунок назад не принес. С усами та же беда: отдельные линии угадываются, целиком они уже не вернулись.
Размер вырос в четыре раза по каждой стороне. Достоверной информации в глазу от этого больше не стало. Вот эту разницу между большим файлом и восстановленной деталью дальше уже невозможно развидеть.
Второй цикл: кресло спалило весь фокус
Я еще раз уменьшил результат и попросил нейросеть улучшить фото тем же способом.
На коте изменения уже видны, особенно вокруг белой морды и груди. Темные границы становятся жирнее, светлые участки отделяются жестче. Но самый удобный свидетель тут вообще кресло за головой.
В первом цикле обивка еще выглядит мягкой. Во втором ее мелкий узор становится контрастнее, словно апскейлер решил, что ткань недостаточно старается быть тканью. Похожая обводка проступает на краю двери и пакете справа. Алгоритм цепляется за перепады яркости по всему кадру, коту никакой особой привилегии не выдали.
Поэтому фраза «стало резче» тут мало что объясняет. На изображении появляется все больше уверенных границ. Их достоверность при этом никто не гарантировал.
Третий цикл: фотография меняет жанр
Еще одно уменьшение, еще один запуск x4:
Вот теперь мягкие переходы исчезают уже без увеличительного стекла. Полосы на груди превращаются в толстые черные дуги, а край уха идет ступеньками. Фотография начинает напоминать газетную печать или не слишком аккуратную гравюру.
Глаз по-прежнему стоит на месте и старательно изображает детализацию. Он стал контрастнее, но рисунок радужки не появился. Вместо него остался набор светлых и темных пятен. Картинка выглядит увереннее ровно там, где исходной информации уже не хватает.
Кресло тоже не отстает. Спокойный узор обивки превращается в синюю сетку. Никто отдельно не просил улучшать кресло, оно просто оказалось рядом и попало под раздачу.
Четвертый цикл: кот узнаваем, фотография уже нет
Последний круг я сделал по той же схеме:
К четвертому проходу черная обводка расползается почти по каждому перепаду яркости. Кресло уже похоже на кольчугу, а шерсть покрыта плотной сеткой из рыжих и белых штрихов. Даже ровные участки двери получают вертикальную штриховку.
При этом поза кота почти не изменилась. На месте остались силуэт и крупные пятна на боку. Большую форму апскейлер удерживал все четыре круга. Мелкая фототекстура тем временем постепенно уступила место грубому контрастному узору.
Теперь можно посмотреть всю цепочку. К предыдущим разделам возвращаться не придется:
И еще раз те же участки крупнее:
Усы к финалу смешались с обводкой морды. Отдельные волоски не вернулись, их место заняла зернистая сетка. Крупные пятна сохранили расположение, поэтому мозг без труда узнает того же кота даже на четвертом результате.
Вот это и оказалось самым интересным итогом. Апскейлер хорошо удерживал большую форму на крошечном входе. Правдоподобная мелкая фактура с каждым кругом выглядела все активнее, а ее связь с исходными волосками и радужкой становилась все слабее.
Как апскейлер начал усиливать сам себя
Представьте микрофон рядом с колонкой. Сначала он ловит звук, потом колонка воспроизводит его, микрофон ловит уже это воспроизведение, и круг замыкается. Тихий шум быстро превращается в уверенный писк.
С котом получилось похоже, только вместо звука по кругу ходили контуры и текстуры. В аватарке шириной 128 пикселей уже нет точного рисунка каждой шерстинки или радужки. Апскейлеру приходится собирать правдоподобную большую версию. После первого круга я уменьшил именно ее. Мягкие переходы при ужимании частично исчезли, а самые контрастные штрихи пережили его и попали на следующий вход.
В моей серии новый круг получал эти штрихи уже как часть исходной картинки. Границы снова подчеркивались, затем я еще раз все уменьшал. Так сетка на кресле становилась плотнее, а глаз ярче. Достоверная радужка вернуться уже не могла: данных о ней в маленьком файле не осталось.
У этой странности есть вполне земная основа. Для одной крошечной картинки можно построить много убедительных больших версий, и самая эффектная версия вовсе не обязана быть самой точной. Исследователи называют это компромиссом между восприятием и искажением. Сам принцип разобран в работе The Perception-Distortion Tradeoff, а проблему артефактов на мелких фактурах рассматривают в исследовании методов super-resolution 2024 года.
Точную модель внутри этого апскейлера я не знаю. Поэтому объяснение выше опирается на видимую последовательность и общий принцип super-resolution. С другим сервисом или другой фотографией петля может выглядеть иначе.
Когда одного апскейла вполне хватает
Сам по себе апскейл фото нейросетью решает обычную бытовую задачу: был маленький файл, стал большой. Первый результат в этой серии выглядит гораздо спокойнее остальных и сохраняет общий вид фотографии. Для публикации в интернете или увеличения старой аватарки этого может хватить.
Только проверяйте детали, которые для вас важны. На портрете смотрите на глаза и волосы. На товарной фотографии проверьте мелкие края и надписи. Большой размер файла еще не подтверждает правильность каждой мелочи.
Эксперимент я делал в Telegram-боте «Генерация фото | Nano Banana | ИИ-фотошоп». Один запуск x4 стоил 1 кредит, на четыре круга ушло 4 кредита. По минимальному пакету это примерно 17 рублей.
Если вам нужно разово увеличить свое изображение, тот же сценарий можно проверить в этом боте или любом другом апскейлере. Я бы остановился после первого удачного результата. Иначе однажды откроете файл, а там кресло уже выглядит детальнее кота


























































































































































































