CVPR 之 老照片修复

周末闲来无事整理照片,望着一张张物是人非的老相片,勾起了斑驳的回忆。转念一想,何不 PS 下,但 Photoshop 有些大且不免费自己懒得装,于是,转向免费的图像复原软件。

网上搜来找去,一直没寻到合适的,最后查到 CVPR 2020 的一篇 Oral 论文,看到有的博客已经详细介绍过了,恰好作者也开放了源码,于是,一时兴起,拿这个来复原老相片。

结果,忙活了半晚上 (主要是用手机热点,时间浪费在了下载速度上) 加一上午 (踩了很多第三方库安装、python 向低版本重装的坑),终于成功复原图像,遂写下此博文,以免后来者重复踩坑 ......

1 CVPR 会议

CVPR 全称 IEEE Conference on Computer Vsion and Pattern Recongniton,是计算机视觉的三大顶会之一 (另两个是 ICCV 和 ECCV),由 IEEE 每年举办一次。2021年,按照 Google Scholar Metrics 排名,CVPR 已经成为全球影响力排名第四的顶级期刊会议,排在前面的有 《Nature》和《Science》

2 Oral 论文

2020年的 CVPR 会议,投稿 6656 篇论文,1470 篇被录用,接收率 22%,其中 335 篇选中 Oral,这篇《Bringing Old Photos Back to Life》属于 Oral 论文,含金量可见一斑,论文链接请点击

摘录实现的效果图,如下: 源码已开放,GitHub 链接:github.com/microsoft/B...

3 实践步骤

3.1 测试环境

Win64 中使用 PoweShell 终端,已安装 Python 3.9.9,安装过程中勾选 pip 选项: 可在 PowerShell 中输入 py --version,查看安装的 Python 版本

3.2 源码和模型

3.2.1 源码

如有 git 可用 git clone 命令,如下

bash 复制代码
git clone https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life.git 

也可直接下载 Source code: github.com/microsoft/B...

3.2.2 模型

  1. 下载 face_landmark 预训练模型,解压后放在 Face_Detection 目录下
bash 复制代码
cd Face_Detection/
wget http://dlib.net/files/shape_predictor_68_face_landmarks.dat.bz2
bzip2 -d shape_predictor_68_face_landmarks.dat.bz2
cd ../
  1. 下载 face_checkpoints 模型,解压后置于 Face_Enhancement 目录下
bash 复制代码
cd Face_Enhancement/
wget https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life/releases/download/v1.0/face_checkpoints.zip
unzip face_checkpoints.zip
cd ../  
  1. 下载 global_checkpoints 模型,解压后置于 Global 目录下
bash 复制代码
cd Global/
wget https://github.com/microsoft/Bringing-Old-Photos-Back-to-Life/releases/download/v1.0/global_checkpoints.zip
unzip global_checkpoints.zip
cd ../

2)和 3) 也可通过 3.2.1 中的链接下载,解压后分别置于对应目录中

3.2.3 sync_batchnorm

下载 Synchronized-BatchNorm-PyTorch,将子文件夹 sync_batchnorm,拷贝到 Face_Enhancement/models/networks/ 目录下

bash 复制代码
cd Face_Enhancement/models/networks/
git clone https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
cp -rf Synchronized-BatchNorm-PyTorch/sync_batchnorm .
cd ../../../

相同的 sync_batchnorm 文件夹,再拷贝到 Global/detection_models/ 目录下

bash 复制代码
cd Global/detection_models
git clone https://github.com/vacancy/Synchronized-BatchNorm-PyTorch  # no need doing git clone once again
cp -rf Synchronized-BatchNorm-PyTorch/sync_batchnorm .
cd ../../ 

3.3 依赖库

3.3.1 第三方库

可直接使用 pip 和 requirements.txt,一键下载全部依赖库

pip install -r requirements.txt

requirements.txt 中的所有依赖库如下:其中,torch, torchvision 和 dlib 稍复杂,可在后面单独安装

arduino 复制代码
torch
torchvision
dlib
scikit-image
easydict
PyYAML
dominate>=2.3.1
dill
tensorboardX
scipy
opencv-python
einops
PySimpleGUI

3.3.2 Torch 和 Torchvision

Torch, Torchvision 和 Python,三者版本是有一定的对应关系,需要单独安装,关系图参考:github.com/pytorch/vis...
第一种方法,用 pip install torch==1.8.1 和 pip install torchvision==0.9.2 进行安装,但在 PowerShell 中,有时会因网络不稳定导致安装不成功 第二种方法,提前下载好对应的 .whl 版本,下载链接:download.pytorch.org/whl/torch_s...,然后,分别执行如下命令

pip install  torch-1.8.1+cpu-cp39-cp39-win_amd64.whl
pip install  torchvision-0.9.1+cpu-cp39-cp39-win_amd64.whl

安装成功后,可用如下命令查看版本

go 复制代码
import torch
print(torch.__version__)

查看到的版本是 torch 1.8.1+cpu 和 torchvision 0.9.1+cpu

3.3.3 dlib

直接使用 pip install dib,安装并不成功,建议先下载 .whl 文件,再通过 pip 来安装,下载链接:github.com/sachadee/Dl...

pip install dlib-19.22.99-cp39-cp39-win_amd64.whl

3.4 执行效果

此处使用普通电脑测试,没有 GPU,所以 "--GPU" 设为 "-1" 1) 对于带有划痕的照片,加选项 "--with_scratch" 2) 对于高分辨率的照片,加选项 "--HR"

css 复制代码
py run.py --input_folder ./test_images/old/ --output_folder ./output/ --GPU -1

翻拍的老相片,复原前后对比如下:尤其放大相片后,人脸的对比效果非常明显

4 其它方法

阅读一篇好的论文,显然比在网上搜索更加有效,从文末的效果对比可知,主流的图像复原方法有:DIP, CyleGAN, Sequential, Pix2Pix 和 Operation-wise Attention 等,也算是一个额外的收获吧。

参考资料

Bringing Old Photos Back to Life
照片修复-使用Bringing-Old-Photos-Back-to-Life

相关推荐
van叶~5 分钟前
算法妙妙屋-------1.递归的深邃回响:二叉树的奇妙剪枝
c++·算法
简简单单做算法6 分钟前
基于Retinex算法的图像去雾matlab仿真
算法·matlab·图像去雾·retinex
云卓SKYDROID21 分钟前
除草机器人算法以及技术详解!
算法·机器人·科普·高科技·云卓科技·算法技术
985小水博一枚呀26 分钟前
【深度学习滑坡制图|论文解读3】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
人工智能·深度学习·神经网络·cnn·transformer
AltmanChan27 分钟前
大语言模型安全威胁
人工智能·安全·语言模型
985小水博一枚呀31 分钟前
【深度学习滑坡制图|论文解读2】基于融合CNN-Transformer网络和深度迁移学习的遥感影像滑坡制图方法
人工智能·深度学习·神经网络·cnn·transformer·迁移学习
数据与后端架构提升之路40 分钟前
从神经元到神经网络:深度学习的进化之旅
人工智能·神经网络·学习
半盏茶香1 小时前
【C语言】分支和循环详解(下)猜数字游戏
c语言·开发语言·c++·算法·游戏
爱技术的小伙子1 小时前
【ChatGPT】如何通过逐步提示提高ChatGPT的细节描写
人工智能·chatgpt
徐子童1 小时前
双指针算法习题解答
算法