Bringing-Old-Photos-Back-to-Life 中文教程:把家里的老照片修复成高清彩照
2026-10-02发表于
框架与库一、这个工具能帮你做什么
入门
家里翻出来的老照片,往往有折痕、霉斑、发黄,人脸也糊成一团。这个项目就是干这件事的:把一张受损的老照片丢进去,它输出一张干净、上色、人脸清晰的高清图。
它由微软亚洲研究院和香港城市大学联合开发,论文发表在 CVPR 2020(计算机视觉领域的顶级会议)。核心能力拆成三块,你可以理解成流水线上的三个工位:
- 划痕修复:识别并抹掉照片上的折痕、斑点、霉点
- 上色:给黑白照片自动填上合理的颜色
- 人脸增强:把模糊的人脸单独拎出来重画一遍,再贴回去
它不是"滤镜",而是真的在"重建"图像内容。所以修复结果会有一定的"想象成分",人脸尤其如此——这是所有生成式 AI(让机器自己"画"出新内容的技术)的通病,不是 bug。
二、跑起来之前,先确认三件事
入门
这个项目不是双击就能用的软件,它需要你在命令行里敲几条指令。别慌,跟着做就行。但有三件事必须先满足,否则后面一定卡住。
第一,你得有一块 NVIDIA 显卡。 项目基于 PyTorch(一个深度学习框架,可以理解成"跑 AI 模型的发动机"),官方只支持 CUDA(NVIDIA 显卡的并行计算接口)。AMD 显卡和 Mac 的 M 系列芯片跑不了,纯 CPU 也能跑但一张图可能要等十几分钟。
第二,显存最好 8GB 以上。 人脸增强模块非常吃显存,6GB 勉强能跑但要调小参数,4GB 基本会直接报"内存不足"。
第三,Python 版本用 3.7 到 3.9。 不要用 3.10 以上,依赖库里的旧版本包会装不上。
如果你没有显卡,也不想折腾环境,README 里提供了一个 Colab 在线 Demo 的链接,可以直接在浏览器里上传照片试用,适合先看看效果再决定要不要本地部署。
三、安装:分四步走
入门
整个安装过程可以类比成"组装一台机器":先装发动机(PyTorch),再装零件(依赖库),再补两个特殊螺丝(同步批归一化模块),最后装电池(预训练模型)。
第 1 步,创建独立环境。 强烈建议用 conda(一个包管理器,作用类似手机上的"应用商店 + 沙盒"),避免污染你系统里其他 Python 项目:
conda create -n oldphoto python=3.8
conda activate oldphoto
第 2 步,安装 PyTorch。 去 PyTorch 官网找到对应你 CUDA 版本的安装命令,比如 CUDA 11.3 的:
pip install torch==1.10.0+cu113 torchvision==0.11.1+cu113 -f https://download.pytorch.org/whl/torch_stable.html
第 3 步,装项目依赖。 进入项目根目录后执行:
pip install -r requirements.txt
第 4 步,补两个特殊模块。 项目用到了一个第三方的"同步批归一化"实现,必须手动放进两个目录,否则加载模型时会报 ModuleNotFoundError:
cd Face_Enhancement/models/networks/
git clone https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
cp -rf Synchronized-BatchNorm-PyTorch/sync_batchnorm .
cd ../../../
cd Global/detection_models
git clone https://github.com/vacancy/Synchronized-BatchNorm-PyTorch
cp -rf Synchronized-BatchNorm-PyTorch/sync_batchnorm .
cd ../../
四、下载预训练模型
进阶 · 推荐细读
模型文件是这个项目的"大脑",没有它程序跑不起来。官方把权重放在 OneDrive 上,国内下载会比较慢,建议挂代理或者用离线下载工具。
需要下载两个压缩包,分别解压到指定位置:
Face_Enhancement/checkpoints.zip→ 解压到Face_Enhancement/checkpoints/Global/checkpoints.zip→ 解压到Global/checkpoints/
下载地址在 README 顶部的 "Pretrained Model" 链接里。解压完成后,目录结构应该是这样的:
Face_Enhancement/checkpoints/
├── detection_Resnet50_Final.pth
├── parsing_parsenet.pth
└── ...
Global/checkpoints/
├── mapping_00400000_net_G.pth
└── ...
如果解压后目录套了一层文件夹(比如
checkpoints/checkpoints/xxx.pth),一定要把内层文件挪出来,否则程序找不到模型,会报FileNotFoundError。
五、三种修复模式怎么选
进阶 · 推荐细读
装好之后,最常用的命令只有三条,对应三种不同的输入情况。先判断你的照片属于哪一类,再选命令,别一股脑全跑。
模式一:照片有划痕、折痕、霉斑。 用完整流程:
python run.py --input_folder ./test_images/old_w_scratch \
--output_folder ./output \
--GPU 0
模式二:照片只是模糊、发黄,没有明显破损。 加上 --with_scratch 的反向开关反而会引入伪影,所以直接跑:
python run.py --input_folder ./test_images/old \
--output_folder ./output \
--GPU 0
模式三:只想要高清放大,不做修复。 加 --HR 参数:
python run.py --input_folder ./test_images/old \
--output_folder ./output \
--GPU 0 --HR
输出目录里会生成多个子文件夹,分别对应"仅上色""仅划痕修复""完整修复"等中间结果。最终成品在
final_output文件夹里,别拿错图。
六、显存不够怎么办
深入 · 老手可选
如果你跑人脸增强时看到 CUDA out of memory,说明显存被吃满了。有三个调整方向,从简单到麻烦依次尝试:
- 把
--GPU参数改成单卡,不要多卡并行 - 在
run.py里找到人脸增强的调用处,把输入图的边长限制调小(默认会做人脸检测再裁剪,裁剪尺寸可以降低) - 先只跑全局修复(不加人脸增强),把
--with_scratch和人脸模块拆开跑,中间结果存盘后再单独处理人脸
另外注意,输入图片不要太大。手机拍的老照片动辄 4000 像素宽,直接喂进去大概率爆显存。建议先用系统自带的图片工具把长边压到 1500 像素以内。
七、常见报错对照表
深入 · 老手可选
| 报错信息 | 原因 | 处理方式 |
|---|---|---|
ModuleNotFoundError: No module named 'sync_batchnorm' |
第三步的特殊模块没放对位置 | 回到第三节,确认两个目录下都有 sync_batchnorm 文件夹 |
FileNotFoundError: xxx.pth |
模型没下载或路径不对 | 检查 checkpoints 目录层级,确认 .pth 文件直接在里面 |
CUDA out of memory |
显存不足 | 见第六节,优先压缩输入图尺寸 |
RuntimeError: CUDA error: no kernel image is available |
PyTorch 版本和显卡驱动不匹配 | 重装对应 CUDA 版本的 PyTorch |
| 输出图人脸扭曲、颜色诡异 | 生成式模型的正常波动 | 换一张清晰度更高的原图重试,或改用不带人脸增强的模式 |
八、把它接进你的工作流
进阶 · 推荐细读
如果你要批量处理一整个相册,一条条敲命令太慢。项目本身没有提供批处理脚本,但你可以自己包一层 shell 循环:
for f in ./my_album/*.jpg; do
python run.py --input_folder "$f" --output_folder ./restored --GPU 0
done
注意 run.py 的 --input_folder 接受的是文件夹而不是单个文件,所以更稳妥的做法是把照片按批次放进不同文件夹,分批跑。
项目作者在 README 里明确说明:这是研究代码,没有从产品角度做工程优化,速度和并发都不是它的强项。如果你要做线上服务,建议参考 README 里提到的 Replicate Docker 镜像方案,而不是直接把这份代码塞进生产环境。
最后提醒一句:修复老照片是"创作"而不是"还原"。AI 补出来的细节未必是照片原本的样子,尤其是人脸。用于家族纪念没问题,但不要拿修复结果当作历史考据的依据。
项目信息
| 项目 | 值 |
|---|---|
| 仓库 | microsoft/Bringing-Old-Photos-Back-to-Life |
| 语言 | Python |
| Star | 15,722 |
| Fork | 2,089 |
| 主页 | https://arxiv.org/abs/2004.09484 |
参考链接
延伸阅读
想继续探索?这些同领域的教程可能也适合你:
163
72
1
3401
文章目录
评论