CodeFormer是一款利用深度学习技术,特别是人脸复原模型,实现高质量面部图像修复和增强的AI软件。此外,它还能处理视频中的各种问题,如模糊、抖动、颜色失真等,从而提供更清晰、更稳定的视频观看体验。
本文将使用丹摩平台复现CodeFormer,并实现老旧照片的修复。
一、浅谈CodeFormer
1.1、CodeFormer的主要功能
1. 人脸修复
CodeFormer能够高效地去除人脸图像中的噪声、马赛克、划痕等损坏元素,并恢复和增强图像的细节和色彩。这使得它在老照片修复、模糊照片清晰化等场景中具有广泛的应用价值。
2. 视频去码
除了处理静态图像外,CodeFormer还能对视频进行去码处理。它能够有效提升视频的清晰度、稳定性和色彩还原度,同时修复视频中的模糊、抖动和颜色失真等问题。这为用户提供了更加清晰、流畅的视频观看体验。
1.2、CodeFormer的工作原理
1. 自动编码器实现人脸变换
CodeFormer首先利用自动编码器(Autoencoder)的架构来学习和实现人脸图像的多种变换。自动编码器是一种无监督学习的神经网络,它通过编码器将输入图像压缩成较低维度的潜在表示(latent representation),然后通过解码器尝试从这个潜在表示中重建原始图像。在CodeFormer中,这个过程被用于执行诸如色彩增强、清晰度提升、去马赛克等多种修复和增强任务。这些变换使得图像在保持人脸特征的同时,显著提升了视觉质量。
2. 预训练VQGAN离散码本空间
为了更有效地处理人脸复原任务,CodeFormer采用了预训练的VQGAN(Vector Quantized Generative Adversarial Network)模型。VQGAN通过训练一个离散化的码本(codebook),将图像数据映射到一系列离散的向量表示上。这种表示方法不仅降低了复原任务的数据复杂度,还通过码本的先验知识为复原过程提供了丰富的人脸细节信息。通过将复原任务转化为Code序列的预测任务,VQGAN显著降低了复原结果的不确定性,使得复原出的人脸图像更加自然和真实。
3. Transformer全局建模
为了进一步增强模型对复杂图像退化情况的鲁棒性,CodeFormer结合了Transformer的全局建模能力。Transformer模型以其处理序列数据的强大能力而闻名,它能够捕捉长距离依赖关系,这对于图像和视频中的全局一致性恢复至关重要。在CodeFormer中,Transformer被用来分析整个图像或视频帧的Code序列,从而识别并修复那些由于严重退化而难以局部恢复的区域。这种全局建模能力使得CodeFormer即使在面对严重损坏的图像或视频时,也能进行有效的修复和增强。
二、Codeformer实践指南
目前,CodeFormer 尚未提供官方的在线使用平台,而本地部署又会非常的吃显卡的算力,所以本次使用丹摩算力平台为例子来部署 CodeFormer。
2.1、创建实例
首先进入丹摩平台:丹摩DAMODEL|让AI开发更简单!算力租赁上丹摩!
点击创建GPU云实例——创建实例:
由于CodeFormer的显存较大,如果使用自己的服务器,建议 NVIDIA GPU,民用卡 30、40 系列,商用卡 T4、V100、A10 等系列,这里推荐使用丹摩平台的RTX-4090实例,或者L40S、H800等实例。
硬盘可以就选默认系统盘100GB、数据盘50GB,基础镜像选择PyTorch2.1.2、Python3.10.13即可:
2.2、下载代码与依赖
创建好实例后,点击Jupyter打开实例。
进入控制台后,使用git clone https://github.com/sczhou/CodeFormer.git克隆CodeFormer仓库,如果遇到git clone报错或者超时,也可以选择本地下载压缩包后上传到丹摩平台,然后解压,克隆成功后的文件如下所示:
下载好代码文件后,开始安装相关依赖。
这一步熟悉conda的同学可以使用conda新建虚拟环境进行配置会方便很多。这里采用比较常规的pip安装
首先cd 进入CodeFormer项目文件夹:cd CodeFormer-master,然后输入pip install -r requirements.txt 根据requirements.txt 安装相关依赖:
其次,补充安装opencv、basicsr、scipy依赖:
pip install opencv-python pip install basicsr pip install scipy
然后执行如下命令,安装 basicsr 框架。
python basicsr/setup.py develop
在运行这一步时,可能遇见ImportError: libGL.so.1: cannot open shared object file: No such file or directory的问题,可能是因为libgl1库的问题,输入apt-get update && apt-get install libgl1安装即可
2.3、下载模型
下载好代码和依赖后,还需要下载预训练模型,可以通过本地下载然后上传的方式分别下载facelib和CodeFormer的预训练模型,下载地址如下:
facelib: Google Drive | OneDrive
CodeFormer: Google Drive | OneDrive
下载完成之后分别放在CodeFormer\weights\CodeFormer
和CodeFormer\weights\facelib
目录下。
2.4、模型运行
整体增强(适合一张图片里有多个人脸)
cd 进入CodeFormer-master目录,然后输入命令
python inference_codeformer.py -w 0.7 -i /root/workspace/CodeFormer-master/inputimgs
其中/root/workspace/CodeFormer-master/inputimgs里预先放好了想要增强的图片:
运行之后,模型会在result目录下生成一张对应增强后的图片,效果如下,可以看到效果出奇,对比下来非常明显,人脸质量和细节有很大程度的提升:
单体增强(适合一张图片只有单人)
与整体增强类似,不过将0.7调为0.5,输入命令:
python inference_codeformer.py -w 0.5 -i /root/workspace/CodeFormer-master/inputimgs
修复的效果如下:
上色修复
上色修复需要运行的文件,输入指令:
python inference_colorization.py -i /root/workspace/CodeFormer-master/inputimgs
运行中如果遇到提示Downloading: "https://github.com/sczhou/CodeFormer/releases/download/v0.1.0/codeformer_colorization.pth" to /root/workspace/CodeFormer-master/weights/CodeFormer/codeformer_colorization.pth的提示,可以跟2.3相同的方式下载对应的pth模型然后放到CodeFormer-master/weights/CodeFormer目录当中。
上色修复的效果如下:
视频修复
另外,CodeFormer 还支持视频增强,去除马赛克等功能,部署依赖中需要提前安装 ffmpeg 应用。这里不再演示,感兴趣的同学, 可以自行找一些模糊视频进行尝试修复。
python inference_codeformer.py --bg_upsampler realesrgan --face_upsample -w 1.0 -i [video path]