Almost a year ago, Tencent researchers released their GFPGAN Face Restoration, an AI model which is trained specifically on faces, to better upscale and restore details in low-resolution or damaged portrait photos. I thought I’d give it a whirl.

I first saw a post on Reddit which led me to an article by Louis Bouchard, Impressive photo restoration by AI! and accompanying video on YouTube. Since then, Engadget also picked it up, so I figure others would be interested to try.

Danger. Do not blindly copy! I don’t know what I’m doing, but it works for me. I seriously know nothing about A.I. or Machine Learning (AI/ML).

This is not a review or a tutorial and certainly this is not the correct way to build a Docker container... I’m just doing what is expedient and recording the instructions I pieced together from here and there to try out the model. I would rather run it in a container, air-gapped if necessary... just so that I am sure.

The only pre-requisite is Docker. No GPU (or CUDA) acceleration required, unlike a lot of other models. Therefore, I am using my Multipass setup on an M1 mac.

Everything needed is in the GFPGAN GitHub, including the code, pre-trained models v1.2 and v1.3 and test images, making it super simple to use. The steps below download what is needed in an Anaconda image, and then run the sample images through the model.

# in the Multipass docker VM, start an instance of Anaconda
docker pull continuumio/anaconda3
docker run -it --name anaconda -p 8080:8080 -p 8888:8888 continuumio/anaconda3 /bin/bash

# in the Anaconda container, install OpenGL
apt update
apt install -y libgl1-mesa-glx

## optionally, install Jupyter Notebooks
conda install jupyter -y --quiet
mkdir -p /opt/notebooks
cd /opt/notebooks/
# jupyter notebook --notebook-dir=/opt/notebooks --ip='*' --port=8888 --no-browser --allow-root &

# optionally, install FileBrowser https://filebrowser.org/ to easily upload/download files
curl -fsSL https://raw.githubusercontent.com/filebrowser/get/master/get.sh | bash
filebrowser -a 0.0.0.0 -p 8080 -r /opt/notebooks &

# get the GFPGAN source code and pre-trained models
git clone https://github.com/TencentARC/GFPGAN.git
cd GFPGAN
wget https://github.com/TencentARC/GFPGAN/releases/download/v1.3.0/GFPGANv1.3.pth -P experiments/pretrained_models
wget https://github.com/TencentARC/GFPGAN/releases/download/v0.2.0/GFPGANCleanv1-NoCE-C2.pth -P experiments/pretrained_models

# install Python pre-requisites
pip install basicsr
pip install facexlib
pip install -r requirements.txt
python setup.py develop
pip install realesrgan

# upgrade NumPy, otherwise pytorch/.../tensor_numpy.cpp complains "module compiled against API version 0xf"
pip install -U numpy

# test using the provided images, and check the results folder
python inference_gfpgan.py -i inputs/whole_imgs -o results -v 1.3 -s 2

Good luck!