ITСooky

IT-рецепты съедобные и не очень!

Инструкция по улучшению, увеличению лиц на фото с GPEN на Ubuntu!

дата 20.11.2021

Я все таки нашел решение именно для улучшения размытых фото с сохранением изначального лица — и оно офигенное!

Первым делом большое спасибо Tao Yang, Peiran Ren, Xuansong Xie и Lei Zhang за GAN Prior Embedded Network for Blind Face Restoration in the Wild
Публичную версию проекта они раздают всем на гитхаб github.com/yangxy/GPEN. GPEN позволят увеличивать лица до разращения 1024×1024, могла бы и больше но авторы делятся только этой нейросетью, но это более чем достаточно. Как и все великие программисты инструкцию по установке и использованию они писать не умеют поэтому и я тут вот…

В предыдущей статье Инструкция по установке PULSE: Self-Supervised Photo Upsampling на Ubuntu я видимо наступил на все грабли с CUDA и Anaconda (и подробно их описал), но тут выходит это… Anaconda не нужно точно, явно только нужен Python и он уже установлен. А вот CUDA выходит что нужен, в требованиях его нет и при обработке одной фотки не заметно что видеокарта нагружается, а при тысячи начинает гудеть как не в себя! Так что cuda-toolkit должно быть установлено как описано в статье Инструкция по установке PULSE: Self-Supervised Photo Upsampling на Ubuntu!!!

Вся конфигурация ПК:
OS: Ubuntu 20.04.3 LTS
CPU: AMD® Ryzen 7 3700x 8-core processor × 16
MB: Gigabyte X570 I AORUS PRO WIFI
Mem: 64 GB DDR4 1330 Mhz
GPU: Nvidia GeForce RTX 2070 8Gb
Disk: Samsung SSD 512Gb EVO Plus

Создаем папку и клонируем туда гитом проект
git clone https://github.com/yangxy/GPEN.git
cd GPEN
cd ./GPEN/weights

сюда качаю модели все что есть по ссылкам в описании на гитхабь (итого 1,6 Gb)
wget https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/RetinaFace-R50.pth
wget https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/GPEN-BFR-512.pth
wget https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/GPEN-BFR-512-D.pth
wget https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/GPEN-BFR-256.pth
wget https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/GPEN-BFR-256-D.pth
wget https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/GPEN-Colorization-1024.pth
wget https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/GPEN-Inpainting-1024.pth
wget https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/GPEN-Seg2face-512.pth
wget https://public-vigen-video.oss-cn-shanghai.aliyuncs.com/robin/models/rrdb_realesrnet_psnr.pth

Запускаю первый раз восстановление картинки из тестовых примеров
python face_enhancement.py --model GPEN-BFR-512 --size 512 --channel_multiplier 2 --narrow 1 --use_sr --indir examples/imgs --outdir examples/outs-BFR

Вылетают ошибки из которых легко становится ясно что мне в Python надо до установить еще
pip install opencv-python
pip install torchvision
pip install ninja

полный список того что нужно вот такой, у меня видимо остальное уже было установлено
ninja
torch
torchvision
opencv-python
numpy
scikit-image
pillow

И начинается магия создаю в папке GPEN еще две папки pic_in (сюда буду класть фотки на обработку) и pic_out (тут они будут появляются)

GPEN увеличивает в четыре раза, берем картинку 512×512. Название модели GPEN-BFR-512 не знаю почему 512, но есть еще 256, но берем 512. Замечено что чем хуже исходная картина тем лучше четкость, потому что GPEN больше дорисовывает. Надо убирать шумы с картинки если есть — мелкие точки вполне органично рисует как веснушки, а вот рябь или полосы рисует как шрамы или зомби вены.

Кладу в pic_in

В папке GPEN запускаю
python face_enhancement.py --model GPEN-BFR-512 --size 512 --channel_multiplier 2 --narrow 1 --use_sr --indir pic_in --outdir pic_out

И получаю в папке pic_out

Все черты сохранены, четкость запредельная, легко узнается Наталия Орейро в детстве и главное результат получен практический моментально, это фантастика!!!!!!

Теперь кладу эту фотку в папку /exampels/grays
запускаю для раскрашивания
python face_colorization.py
и получаю в /exampels/outs-colorization

Очуметь!!!!!

Чтобы face_colorization.py делал так же соло цветную фотку а не пару серая цветная надо после строчки

cv2.imwrite(os.path.join(outdir, '.'.join(filename.split('.')[:-1])+'.jpg'), np.hstack((grayf, colorf)))

добавить строчку

cv2.imwrite(os.path.join(outdir, '.'.join(filename.split('.')[:-1])+'_COL.jpg'), colorf)

Еще GPEN умеет добавлять недостающие детали на фото (нос там и пр), надо будет это тоже попробовать!

Проблема с этим режим в том что вот вся инструкция от авторов:

Complete faces:

python face_inpainting.py

И естественно ничего не работает. Я нашел папку в которую надо класть /examples/ffhq-10 нашел папку куда вылезает /examples/outs-inpainting но желаемоего эффекту нет

Как использовать функцию Complete faces в GPEN
Авторы не хотят чтобы мы её использовали, но не запрещают! Файл face_inpainting.py он демонстрационный, рисует на фото хаотично линии потом их убирает.

Убираем часть кода которая занимается этим вандализмом

в файле face_inpainting.py
удаляем строки между

28 for _ in range(np.random.randint(1, 4)):

...    

60 return mask

Судя по всему face_inpainting.py надо скармливать фотки размером 1024 поэтому увеличиваем их через Restore face(как описано выше)

Из фотки 512×512

Получаем 1024×1024

Виден изгиб бумаги который надо будет убирать! Для этого надо особым образом подготовить картинку в Gimp! Надо в PNG цвета RGB создать слой маску и там отметить дефекты которые мы хотим исправить. Важно как отмечать! На фоне хороший результат дают толстые мазкт толстой кистью, а на лице местами надо потоньше отмечать.

Этот файл кладем /examples/ffhq-10 запускам кастрированный
python face_inpainting.py
и в /examples/outs-inpainting получаем результат

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


Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *