Bootstrap

codeformer_pytorch 人脸修复&图形超分算法模型

CodeFormer

论文

Towards Robust Blind Face Restoration with Codebook Lookup Transformer

模型结构

如图所示,该方法分为(a)、(b)两个阶段,每个阶段的模型有所不同。其中(a)阶段包含,𝐼ℎ(高质量图像),𝐸ℎ(高质量图像编码器),𝑍ℎ(编码后得到的特征),𝐶(编码本,存储量化的特征),𝑆(最近邻匹配后得到的索引),𝑍𝑐(𝑍ℎ量化后的特征),𝐷𝐻(解码器,从特征重构原始高质量图像),𝐼𝑟𝑒𝑐(重构得到的高质量图像);(b)阶段包含,𝐼𝑙(待修复的低质量图像),𝐸𝐿(低质量图像编码器,在𝐷𝐻基础上微调),𝑍𝑙(编码后得到的特征),𝑇(Transform模块,对全局特征建模并预测每个特征对应的索引),𝐶(固定的预训练编码本),𝑍^𝑐(量化后的特征),𝐷𝐻(固定的预训练解码器),𝐿𝑟𝑒𝑠(重构得到的高质量图像),此外,𝐹𝑒(低质量图像特征),𝐶𝐹𝑇(可控特征变换),𝐹𝑑(解码特征)。

 

81d3a23f754398a133c2edcf7eefb26a.png

算法原理

该算法结合了编码本(codebook)以及Transformer的思想,可以将低质量的人脸图像恢复为高质量的人脸图像,具体如下,

1.编码本

将海量的先验知识以离散化的方式存储。

 

87e21f14b4e42625ec63ec448f0dde86.png

2.Transfomer

低质量图像特征在存在多样化退化的情况下,可能会偏离正确的索引,并被归为附近的聚类,导致不理想的恢复结果。使用Transformer模块对全局关系建模可以消除该问题。

环境配置

Docker

docker pull image.sourcefind.cn:5000/dcu/admin/base/pytorch:1.13.1-centos7.6-dtk-23.04.1-py39-latest

docker run --shm-size 10g --network=host --name=codeformer --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined -v 项目地址(绝对路径):/home/ -it <your IMAGE ID> bash

pip install -r requirements.txt

pip install cython

python basicsr/setup.py develop

# 以下内容可选,仅在视频增强时需要
yum install epel-release -y

yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm -y

yum install ffmpeg ffmpeg-devel -y

Dockerfile

# 需要在对应的目录下
docker build -t <IMAGE_NAME>:<TAG> .

# <your IMAGE ID>用以上拉取的docker的镜像ID替换
docker run -it --shm-size 10g --network=host --name=codeformer --privileged --device=/dev/kfd --device=/dev/dri --group-add video --cap-add=SYS_PTRACE --security-opt seccomp=unconfined <your IMAGE ID> bash

pip install -r requirements.txt

pip install cython

python basicsr/setup.py develop

# 以下内容可选,仅在视频增强时需要
yum install epel-release -y

yum localinstall --nogpgcheck https://download1.rpmfusion.org/free/el/rpmfusion-free-release-7.noarch.rpm -y

yum install ffmpeg ffmpeg-devel -y

数据集

链接: GitHub - NVlabs/ffhq-dataset: Flickr-Faces-HQ Dataset (FFHQ)

注意:原始数据为1024x1024需要处理为512x512,可运行data_process.py对数据进行处理。

python data_process.py --zip_dir <path/to/zipdir> --output_dir <dataset/ffhq_512>

本项目也提供了mini数据集(链接:百度网盘 请输入提取码 提取码:kwai),可用于验证程序是否可以正常运行。

dataset
|—— ffhq_512
    ├── 00522.png
    ├── 01459.png
    ├── 02090.png
    ├── xxx.png

训练

阶段一 - 训练VQGAN

python -m torch.distributed.launch --nproc_per_node=8 --master_port=4321 basicsr/train.py -opt options/VQGAN_512_ds32_nearest_stage1.yml        --launcher pytorch

获取训练数据的码本序列,可以加速后续训练

python scripts/generate_latent_gt.py

阶段二 - 训练Transformer (w = 0)

python -m torch.distributed.launch --nproc_per_node=8 --master_port=4322 basicsr/train.py -opt options/CodeFormer_stage2.yml --launcher pytorch

阶段三 - 训练可控特征Transformer (w = 1)

python -m torch.distributed.launch --nproc_per_node=8 --master_port=4323 basicsr/train.py -opt options/CodeFormer_stage3.yml --launcher pytorch

注意:vqgannet_g_xxx.pthnet_d为第一阶段生成。

推理

模型下载

Github:Release CodeFormer V0.1.0 Release · sczhou/CodeFormer · GitHub

weights
├── CodeFormer
│   ├── codeformer_colorization.pth
│   ├── codeformer_inpainting.pth
│   └── codeformer.pth
├── dlib
│   ├── mmod_human_face_detector-4cb19393.dat
│   ├── shape_predictor_5_face_landmarks-c4b1e980.dat
│   └── shape_predictor_68_face_landmarks-fbdc2cb8.dat
├── facelib
│   ├── detection_Resnet50_Final.pth
│   └── parsing_parsenet.pth
├── README.md
└── realesrgan
    └── RealESRGAN_x2plus.pth

也可以使用脚本下载模型

python scripts/download_pretrained_models.py facelib

python scripts/download_pretrained_models.py dlib (only for dlib face detector)

python scripts/download_pretrained_models.py CodeFormer

脸部修复

# 获取图像中人脸部分
python scripts/crop_align_face.py -i [input folder] -o [output folder]

# 对人脸部分进行修复
python inference_codeformer.py -w 0.5 --has_aligned --input_path [image folder]|[image path]

注意:参数-w为保真度权重,取值范围为0-1,通常,较小的w倾向于产生更高质量的结果,而较大的w则产生更高保真度的结果。

整图增强

# For whole image
# Add '--bg_upsampler realesrgan' to enhance the background regions with Real-ESRGAN
# Add '--face_upsample' to further upsample restorated face with Real-ESRGAN
python inference_codeformer.py -w 0.7 --input_path [image folder]|[image path]

视频增强

# For video clips
# Video path should end with '.mp4'|'.mov'|'.avi'
python inference_codeformer.py --bg_upsampler realesrgan --face_upsample -w 1.0 --input_path [video path]

脸部着色

# For cropped and aligned faces (512x512)
# Colorize black and white or faded photo
python inference_colorization.py --input_path [image folder]|[image path]

脸部修复(脸部遮挡修复)

# For cropped and aligned faces (512x512)
# Inputs could be masked by white brush using an image editing app (e.g., Photoshop) 
# (check out the examples in inputs/masked_faces)
python inference_inpainting.py --input_path [image folder]|[image path]

result

 

7e6d01437ac2662438e11e11343aee05.png

精度

 LPIPSPSNRSSIMFID
DCU0.3068.6390.636123.14
GPU0.3128.6940.635124.7

注意:该数据仅用于对比DCU与GPU之间的指标差异。

应用场景

算法类别

图像超分

热点应用行业

媒体,科研,教育

源码仓库及问题反馈

参考资料

 

悦读

道可道,非常道;名可名,非常名。 无名,天地之始,有名,万物之母。 故常无欲,以观其妙,常有欲,以观其徼。 此两者,同出而异名,同谓之玄,玄之又玄,众妙之门。

;