告别模糊与划痕:Bringing Old Photos Back to Life 全流程使用教程
你是否还在为家中老照片的褪色、划痕和模糊问题烦恼?是否想让珍贵的回忆重现光彩?本文将带你一步步使用 Bringing Old Photos Back to Life 项目,通过简单的命令行操作,让老照片恢复清晰质感。读完本文后,你将能够:
- 搭建完整的老照片修复环境
- 使用全流程自动化修复(带划痕/无划痕照片)
- 掌握高分辨率照片修复技巧
- 了解项目核心技术模块的工作原理
项目简介
Bringing Old Photos Back to Life 是一个基于深度学习的老照片修复项目,能够解决老照片常见的模糊、褪色、划痕等问题。该项目在 CVPR 2020 会议上作为口头报告发表,采用了三域翻译网络(triplet domain translation network)和渐进式人脸增强技术,实现了从全局到局部的精细修复。
项目核心功能包括:
- 划痕检测:自动识别照片中的划痕区域
- 全局修复:解决结构化和非结构化退化问题
- 人脸增强:针对面部区域进行精细化处理
- 高分辨率支持:处理大尺寸照片的修复需求
项目结构采用模块化设计,主要包含以下关键目录:
- Face_Detection/:人脸检测与对齐模块
- Face_Enhancement/:人脸区域增强模块
- Global/:全局修复与划痕检测模块
- test_images/:测试用例图片(含带划痕和无划痕样本)
环境搭建
准备工作
首先克隆项目仓库到本地:
git clone https://gitcode.com/gh_mirrors/br/Bringing-Old-Photos-Back-to-Life
cd Bringing-Old-Photos-Back-to-Life
安装依赖组件
项目需要同步批归一化(Synchronized-BatchNorm)支持,执行以下命令安装:
# 安装人脸增强模块依赖
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 ../../
下载预训练模型
- 人脸关键点检测模型:
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 ../
- 修复模型权重:
# 人脸增强模型
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 ../
# 全局修复模型
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 ../
- 安装Python依赖:
pip install -r requirements.txt
快速开始:全流程修复
项目提供了便捷的全流程修复脚本 run.py,支持三种模式:无划痕照片修复、带划痕照片修复和高分辨率照片修复。
1. 无划痕照片修复
对于仅存在模糊、褪色等问题的老照片,使用基础修复模式:
python run.py --input_folder test_images/old/ \
--output_folder results/no_scratch \
--GPU 0
2. 带划痕照片修复
当照片存在明显划痕时,启用划痕检测与修复功能:
python run.py --input_folder test_images/old_w_scratch/ \
--output_folder results/with_scratch \
--GPU 0 \
--with_scratch
划痕检测模块会自动生成掩码(mask)标识划痕区域,如上图所示:左为原始带划痕照片,右为检测结果
3. 高分辨率照片修复
对于大尺寸照片,使用--HR参数启用高分辨率修复模式:
python run.py --input_folder test_images/old_w_scratch/ \
--output_folder results/hr_restoration \
--GPU 0 \
--with_scratch \
--HR
高分辨率修复效果对比:上排为输入图片,下排为修复结果
注意:修复结果默认保存在
output_folder/final_output/目录下,中间过程结果(如划痕掩码、全局修复中间产物)会保存在对应子目录中,方便调试和查看。
核心功能详解
划痕检测
划痕检测模块可单独运行,用于生成照片中的划痕掩码,方便后续修复:
cd Global/
python detection.py --test_path test_images/old_w_scratch/ \
--output_dir results/scratches \
--input_size full_size
该模块使用 Global/detection_models/ 中的网络结构,通过深度学习自动识别照片中的划痕区域。支持三种输入尺寸模式:
resize_256:调整为256x256尺寸full_size:保持原始尺寸scale_256:按比例缩放到256像素(保持纵横比)
全局修复
全局修复模块处理照片的整体退化问题,包括色彩还原、对比度调整和结构修复:
cd Global/
# 仅质量修复(无划痕)
python test.py --Quality_restore \
--test_input test_images/old/ \
--outputs_dir results/global_quality
# 划痕与质量联合修复
python test.py --Scratch_and_Quality_restore \
--test_input test_images/old_w_scratch/ \
--test_mask results/scratches/masks/ \
--outputs_dir results/global_scratch
全局修复采用三域翻译网络架构,工作流程如下:
三域翻译网络架构:通过A→C→B的映射关系,实现从退化老照片到修复后照片的转换
人脸增强
人脸增强模块针对照片中的面部区域进行精细化处理,使用渐进式生成器提升面部细节:
cd Face_Enhancement/
python test_face.py --dataroot test_images/old/ \
--results_dir results/face_enhance \
--name faceenhancer \
--model test \
--no_dropout \
--gpu_ids 0
该模块的核心代码位于 Face_Enhancement/models/,特别是生成器网络 Face_Enhancement/models/networks/generator.py 实现了渐进式细节增强。
人脸增强效果对比:左为输入,中为全局修复结果,右为最终人脸增强结果
GUI界面(适合非技术用户)
项目提供了图形用户界面,简化操作流程:
python GUI.py
使用步骤:
- 点击"Browse"按钮选择要修复的照片(可从 test_images/old_w_scratch/ 选择带划痕样本)
- 点击"Modify Photo"按钮开始修复
- 修复完成后在界面查看结果
- 关闭窗口后,结果自动保存到output文件夹
图形用户界面:简单直观的操作流程,适合非技术用户
高级应用:训练自定义模型
如果你有大量标注数据,可以训练自定义修复模型。完整训练流程包括以下步骤:
1. 准备训练数据
cd Global/data/
python Create_Bigfile.py # 根据实际数据路径修改代码
2. 训练域A和域B的VAE模型
# 训练域A VAE(高分辨率到低分辨率映射)
cd Global/
python train_domain_A.py --use_v2_degradation --continue_train \
--training_dataset domain_A \
--name domainA_SR_old_photos \
--dataroot [你的数据文件夹] \
--batchSize 100 --gpu_ids 0,1,2,3
# 训练域B VAE(老照片到新照片映射)
python train_domain_B.py --continue_train \
--training_dataset domain_B \
--name domainB_old_photos \
--dataroot [你的数据文件夹] \
--batchSize 120 --gpu_ids 0,1,2,3
3. 训练映射网络
# 无划痕映射
python train_mapping.py --use_v2_degradation --training_dataset mapping \
--name mapping_quality \
--load_pretrainA [domainA模型路径] \
--load_pretrainB [domainB模型路径] \
--dataroot [你的数据文件夹]
# 带划痕映射
python train_mapping.py --no_TTUR --NL_res --random_hole --use_SN \
--training_dataset mapping \
--name mapping_scratch \
--load_pretrainA [domainA模型路径] \
--load_pretrainB [domainB模型路径] \
--dataroot [你的数据文件夹] \
--irregular_mask [掩码文件路径]
训练参数配置可在 Global/options/train_options.py 中调整,包括学习率、批大小、迭代次数等超参数。
常见问题解决
内存不足问题
- 降低输入图片分辨率:使用
--input_size resize_256参数 - 减少批处理大小:修改测试脚本中的
--batchSize参数 - 使用CPU运行:添加
--GPU -1参数(速度会显著变慢)
修复效果不佳
- 确保使用正确的模型:带划痕照片需使用
--with_scratch参数 - 尝试高分辨率模式:添加
--HR参数处理大尺寸照片 - 检查预处理步骤:确保人脸检测模型正确安装
中文路径问题
项目不支持中文路径,请确保所有图片和文件夹路径仅使用英文字符和数字。
总结与展望
Bringing Old Photos Back to Life 项目通过深度学习技术,为老照片修复提供了一套完整的解决方案。其模块化设计不仅便于使用,也为二次开发提供了灵活性。无论是家庭用户修复珍贵回忆,还是专业人员进行批量照片修复,都能找到适合的工具和流程。
项目目前仍在持续维护中,未来可能会加入更多功能,如视频修复、色彩增强等。如果你对项目有任何改进建议或问题反馈,可以参考 SECURITY.md 中的联系方式与开发团队取得联系。
提示:更多技术细节可参考项目论文 Paper (CVPR version)。如果觉得本项目有帮助,请为仓库点赞和收藏!
创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考







