ITCooky Recetas

Vamos a cocinar it cositas

¡Cómo mejorar, ampliar caras en una foto con red neuronal GPEN en Ubuntu!

дата noviembre 25, 2021

Por fin encontré una solución específicamente para mejorar las fotos borrosas preservando la cara original, ¡y es increíble!

Primero que nada muchas gracias a Tao Yang, Peiran Ren, Xuansong Xie y Lei Zhang por GAN Prior Embedded Network for Blind Face Restoration in the Wild
Entregan gratis la versión pública del proyecto en github github.com/yangxy/GPEN. GPEN permite cuadruplicar caras, si hay mas de una cara tambien lo hace. Como todos los grandes programadores, no saben cómo escribir instrucciones de instalación y uso, por eso estoy yo aquí …

En el artículo anterior Инструкция по установке PULSE: Self-Supervised Photo Upsampling на Ubuntu aparentemente pisé todos los rastrillos con CUDA y Anaconda (y los describí en detalle), pero aquí sale … Anaconda no es necesario con seguridad, obviamente solo se necesita Python y ya lo tengo instalado. Pero CUDA aparentemente patese que se necesita, no está en los requisitos, y al procesar una foto no se nota que la tarjeta de video está laburando, ¡y con mil comienza a zumbar como pinche loca! Por lo tanto, cuda-toolkit debe estar instalado, como lo describo en el artículo ese Инструкция по установке PULSE: Self-Supervised Photo Upsampling на Ubuntu!!!

PC Hardware:
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

Crea una carpeta y clona el proyecto allí con git
git clone https://github.com/yangxy/GPEN.git
cd GPEN
cd ./GPEN/weights

aquí descargo los modelos todo lo que hay en los enlaces en la descripción de githab (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

Primer intento de remasterisar imágenes que van con app
python face_enhancement.py --model GPEN-BFR-512 --size 512 --channel_multiplier 2 --narrow 1 --use_sr --indir examples/imgs --outdir examples/outs-BFR

Aparcen menssages de errores de los cuales es fácil entender que es necesario instalar más en Python
pip install opencv-python
pip install torchvision
pip install ninja

una lista completa de lo que necesita de Python es así, aparentemente el resto ya lo tenia instalado
ninja
torch
torchvision
opencv-python
numpy
scikit-image
pillow

Y comienza la magia, creo en la carpeta GPEN dos carpetas más pic_in (aquí pondré imágenes para procesar) y pic_out (aquí aparecerán)

GPEN se cuadruplica, toma una imagen de 512×512. El nombre del modelo es GPEN-BFR-512, no sé por qué 512, pero hay 256 más, pero tomamos 512. Se nota que cuanto peor es la imagen original, mejor es la claridad, porque GPEN dibuja(crea inventa) más. Es necesario eliminar el ruido de la imagen, si lo hay: los puntos pequeños se dibujan de manera bastante orgánica como pecas, pero las ondas o rayas se dibujan como cicatrices o venas de zombies.

Pongo en pic_in

En carpeta GPEN hago
python face_enhancement.py --model GPEN-BFR-512 --size 512 --channel_multiplier 2 --narrow 1 --use_sr --indir pic_in --outdir pic_out

Y tengo el resultado en pic_out

Se conservan todas las aspectos de cara original, la claridad es supernatural, Natalia Oreiro es fácilmente reconocible en la infancia y, lo más importante, el resultado se obtiene prácticamente al instante, esto es fantástico!!!

Ahora pongo esa nueva imagen en la carpeta /exampels/grays
hago para colorearla
python face_colorization.py
y tengo el resultado en /exampels/outs-colorization

Fantastico!!!

Para que face_colorization.py haga la foto en color sola y no en par dcon gris, es necesario después de la línea

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

añadir línea

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

GPEN también sabe cómo agregar detalles faltantes a la foto (la nariz o detalles mas pequeños), ¡voy a probar eso también!

El problema con este modo es que aquí está la instrucción completa de los autores:

Complete faces:

python face_inpainting.py

Y, clara, nada funciona. Encontré una carpeta en la que poner /examples/ffhq-10 encontré una carpeta por donde sale /examples/outs-inpainting pero está el efecto deseado

Cómo utilizar la función Complete faces en GPEN
Los autores no quieren que la usemos, ¡pero no nos lo prohíben! File face_inpainting.py es de demostración, dibuja líneas en la foto de forma caótica y luego las elimina.

Eliminamos la parte del código que hace ese vandalismo

En file face_inpainting.py
eliminamos las líneas entre

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

...    

60 return mask

Parese que a face_inpainting.py hay que darele las imágenes de tamaño 1024×1024, por lo que las aumentamos a través de Restaurar rostro (como se describe arriba)

De foto 512×512

Hacemos 1024×1024

¡Puede ver la curvatura del papel que tendrá que quitar! ¡Para hacer esto, necesita preparar una imagen de una manera especial en el Gimp! Es necesario crear una máscara de capa en color PNG RGB y marcar allí los defectos que queremos arreglar. ¡Es importante cómo hacerlo! Para el fondo son buenos los trazos gruesos con un pincel grueso dan un buen resultado, y en la cara en lugares es necesario marcar más delgado.

Ponemos la foto en /examples/ffhq-10 hacemos
python face_inpainting.py
y en /examples/outs-inpainting tenemos el esultado

En total, resulta muy magnífico con la coloración!


Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *