Восстановил старые фото бесплатными нейросетями. Резкость отличная, а лица они дорисовывают от себя
Нейросети для старых фото сейчас советуют все кому не лень. Решил проверить, что они делают на самом деле и сколько там правды.
Взял четыре старых фото начала XX века из Викисклада, все в общественном достоянии (ссылки в конце). Семейные снимки из ателье Павловского Посада, Богородска и Минска: мелкие, выцветшие, одно в сепии.
Чем прогонял, всё бесплатное и с открытым кодом:
- Real-ESRGAN: увеличивает в 2 раза и убирает шум;
- GFPGAN и CodeFormer: восстанавливают лица;
- DDColor: раскрашивает.
Запускал на машине без видеокарты: Intel Xeon, 8 потоков, 16 ГБ памяти.
В масштабе всей фотографии выглядит прилично. Ткань, пуговицы, фуражки, фон стали чётче, мыло ушло. Лица здесь по 40–50 пикселей в ширину, а после обработки на них появились ресницы и радужки.
Лучше всего вышел профиль. Черты почти не поменялись, подпись фотографа «М. В. Страшунеръ, Минскъ» стала заметно резче. Когда лицо на исходнике крупное и хоть как-то видно, результат близок к оригиналу.
А дальше начинается интересное. Режу крупно и сравниваю.
У девочки в волосах есть пара светлых пикселей. GFPGAN решил, что это заколка, и нарисовал заколку. Глаза и брови обе модели прорисовали сами, потому что на оригинале там просто серое пятно.
Снимок в сепии, цвета глаз на нём нет и быть не может. GFPGAN и CodeFormer сделали ребёнку голубые глаза, колоризатор сделал карие. Три нейросети, две версии, правильной нет ни одной: её просто неоткуда взять.
Здесь лицо около 60 пикселей. После обработки получился вполне живой человек с гладкой кожей и заметной улыбкой. Похож? Похож. Он ли это? Уже не уверен. Модель не восстанавливает лицо, она рисует правдоподобное лицо, которое совпадает с размытым пятном.
С мелким текстом то же самое. Адрес ателье под «Богородскъ» на исходнике мутный, но по форме букв ещё можно гадать. После обработки он резкий и уверенный, только это уже не буквы, а закорючки, похожие на буквы. Даже в крупном слове поплыла вторая «р». Если на фото есть надпись, вывеска или номер, читайте их по оригиналу.
Колоризация отдельная история. Бордовое платье у девочки, рыжеватый фон, синеватая юбка у матери. Может, так и было, а может, всё было серым. Нейросеть не знает, она подбирает цвета по похожим снимкам. Сепию она перекрашивает целиком, вместе с подписью фотографа: у Софьи надпись внизу стала розовой.
По времени без видеокарты всё терпимо. Real-ESRGAN с GFPGAN занимают от 8 до 30 секунд на фото, CodeFormer со всеми примочками до полутора минут, раскраска пару секунд. С видеокартой должно быть быстрее, но я не мерил.
Что в итоге:
- шум, мыло и резкость нейросети реально вытягивают, тут они полезны;
- царапины и пятна Real-ESRGAN почти не трогает. Царапина на груди у отца на фото выше осталась во всех вариантах, это отдельная задача;
- лица размером в несколько десятков пикселей не восстанавливаются, а дорисовываются. Похоже на человека, но не обязательно на того самого;
- цвет и мелкий текст придуманы целиком;
- оригинал храните отдельно. Если фото нужно для памятника или документа, несите его живому ретушёру и честно говорите, что лицо важнее красоты.
Как запустить самому. Real-ESRGAN, GFPGAN, CodeFormer и DDColor лежат на GitHub, веса скачиваются там же. Нужен Python 3.11. На свежем torchvision пакет basicsr падает с ошибкой functional_tensor, лечится правкой одной строки импорта в basicsr/data/degradations.py. У GFPGAN и CodeFormer есть онлайн-демо на Hugging Face, их сам не проверял. У CodeFormer некоммерческая лицензия, для семейных фото это не проблема.
Источники фото (Викисклад, общественное достояние):
1. Семья Голубковых, Павловский Посад, 1900-е, фотограф Н. В. Бажанов: commons.wikimedia.org/wiki/File:Golubkov_family_1900s...
2. Семья Смирновых, Богородск, 1900-е, фотограф П. С. Афанасьев: commons.wikimedia.org/wiki/File:Smirnov_family_1.jpg
3. Дети Смирновых, Богородск, 1900-е, фотограф А. Н. Милославов: commons.wikimedia.org/wiki/File:Smirnov_family_2.jpg
4. Софья Герасимович, Минск, 1900–1905, ателье М. Страшунера: commons.wikimedia.org/wiki/File:Sofia_Gerasimovich_by...
Разбираю такие штуки у себя в канале в MAX: max.ru/channel_neuro5min





















