老照片修复训练数据构建全攻略:从数据准备到模型训练的7步实战指南

【免费下载链接】Bringing-Old-Photos-Back-to-Life Bringing Old Photo Back to Life (CVPR 2020 oral) 【免费下载链接】Bringing-Old-Photos-Back-to-Life 项目地址: https://gitcode.com/gh_mirrors/br/Bringing-Old-Photos-Back-to-Life

Bringing Old Photos Back to Life是一个基于深度学习的老照片修复项目,能够自动修复老照片中的划痕、褪色和损坏,让珍贵的历史影像重获新生。本文将详细介绍如何构建高质量的训练数据集并完成模型训练,即使是AI新手也能轻松掌握。

为什么高质量训练数据对老照片修复至关重要?

训练数据的质量直接决定了老照片修复模型的效果。一个精心构建的数据集能够让AI学习到各种老照片的退化模式,包括:

  • 物理损伤:划痕、折痕、污渍和撕裂
  • 化学退化:褪色、变色和氧化
  • 扫描 artifacts:噪点、模糊和对比度问题

老照片修复效果对比 老照片修复效果对比:左侧为受损原图,右侧为修复后效果,展示了模型在去除划痕和恢复细节方面的强大能力

老照片修复训练数据集的核心组成

1. 原始老照片收集

理想的训练数据集应包含至少1000张不同类型的老照片,建议从以下来源收集:

  • 个人收藏:家族老照片和历史相册
  • 公共档案:图书馆、博物馆的开放资源
  • 历史数据库:如美国国会图书馆历史照片集

项目提供了示例数据集在test_images/old/test_images/old_w_scratch/目录,包含多种类型的受损老照片,可作为初始训练样本。

典型老照片样本 典型的老照片样本,展示了褪色和轻微损坏的历史影像

2. 高质量参考图像

为了训练模型恢复照片质量,需要收集清晰的现代照片作为参考,包括:

  • 不同年龄段的人脸照片(用于面部修复模块)
  • 各种场景的风景和建筑照片(用于全局修复)
  • 不同光照条件下的图像(帮助模型学习光照恢复)

3. 合成退化图像

由于真实受损老照片有限,项目采用了合成退化技术来扩充训练数据。通过以下方式模拟老照片退化:

# 代码逻辑位于Global/data/online_dataset_for_old_photos.py
def add_degradation(image):
    # 1. 添加随机划痕
    # 2. 模拟褪色和色彩偏移
    # 3. 添加噪点和模糊
    # 4. 模拟折痕和污渍
    return degraded_image

数据准备的完整步骤

步骤1:搭建基础环境

首先克隆项目仓库并安装依赖:

git clone https://gitcode.com/gh_mirrors/br/Bringing-Old-Photos-Back-to-Life
cd Bringing-Old-Photos-Back-to-Life
pip install -r requirements.txt

步骤2:收集和整理原始数据

创建以下目录结构存放训练数据:

dataset/
├── original_photos/      # 原始老照片
├── clean_references/     # 高质量参考图像
├── masks/                # 划痕和损坏区域掩码
└── synthetic_degraded/   # 合成退化图像

步骤3:生成训练文件

使用项目提供的工具将分散的图像文件整合为训练所需的大文件:

cd Global/data/
python Create_Bigfile.py

注意:需要根据实际数据路径修改Create_Bigfile.py中的文件路径配置

步骤4:数据预处理与增强

项目采用多种数据增强技术提高模型泛化能力:

  • 随机裁剪和缩放(256×256像素)
  • 随机旋转和翻转
  • 颜色抖动和对比度调整
  • 随机添加不同类型的退化效果

相关代码实现位于Global/data/base_dataset.pyFace_Enhancement/data/face_dataset.py

模型训练的详细流程

阶段1:训练域A和域B的VAE模型

项目采用双域转换网络架构,首先需要分别训练两个域的VAE模型:

# 训练域A模型(高质量图像到退化图像)
python train_domain_A.py --use_v2_degradation --continue_train --training_dataset domain_A \
    --name domainA_SR_old_photos --label_nc 0 --loadSize 256 --fineSize 256 \
    --dataroot [your_data_folder] --no_instance --resize_or_crop crop_only \
    --batchSize 100 --gpu_ids 0,1,2,3 --self_gen --nThreads 4

# 训练域B模型(退化图像到高质量图像)
python train_domain_B.py --continue_train --training_dataset domain_B \
    --name domainB_old_photos --label_nc 0 --loadSize 256 --fineSize 256 \
    --dataroot [your_data_folder] --no_instance --resize_or_crop crop_only \
    --batchSize 120 --gpu_ids 0,1,2,3 --self_gen --nThreads 4

阶段2:训练域间映射网络

在VAE模型基础上,训练连接两个域的映射网络:

# 训练无划痕修复模型
python train_mapping.py --use_v2_degradation --training_dataset mapping \
    --use_vae_which_epoch 200 --continue_train --name mapping_quality \
    --loadSize 256 --fineSize 256 --dataroot [your_data_folder] \
    --batchSize 80 --gpu_ids 0,1,2,3 --nThreads 8 \
    --load_pretrainA [ckpt_of_domainA_SR_old_photos] \
    --load_pretrainB [ckpt_of_domainB_old_photos]

# 训练带划痕修复模型
python train_mapping.py --no_TTUR --NL_res --random_hole --use_SN \
    --training_dataset mapping --NL_use_mask --name mapping_scratch \
    --loadSize 256 --fineSize 256 --dataroot [your_data_folder] \
    --batchSize 36 --gpu_ids 0,1,2,3 --nThreads 8 \
    --load_pretrainA [ckpt_of_domainA_SR_old_photos] \
    --load_pretrainB [ckpt_of_domainB_old_photos] \
    --irregular_mask [absolute_path_of_mask_file]

阶段3:人脸增强模型训练

针对老照片中的人脸区域进行专项优化:

cd Face_Enhancement/
python train.py --name face_enhancement --model pix2pix \
    --dataroot [face_dataset_path] --direction AtoB \
    --lambda_L1 100 --no_lsgan --norm batch

人脸修复流程图 人脸修复流程图:展示了从检测、对齐到增强的完整流程,使用卷积和实例归一化等技术提升面部细节

模型训练的关键参数调整

1. 批处理大小(batchSize)

  • 初始训练:建议使用较小的批处理大小(如16-32)
  • 稳定后:可增加到64-128(根据GPU内存调整)
  • 人脸修复模块:建议使用较小的批处理大小(如8-16)

2. 学习率调度

  • 初始学习率:2e-4
  • 采用余弦退火调度,每100个epoch衰减一半
  • 映射网络训练时可使用较小学习率(1e-5)

3. 损失函数权重

  • L1损失权重:100
  • 感知损失权重:10
  • GAN损失权重:1
  • KL散度权重:1

训练结果评估与优化

定量评估指标

  • PSNR(峰值信噪比):衡量图像保真度,越高越好
  • SSIM(结构相似性):衡量结构相似性,越接近1越好
  • LPIPS(感知相似度):衡量感知质量,越低越好

定性评估方法

  1. 随机抽取测试集中的图像进行修复效果对比
  2. 重点检查以下方面:
    • 划痕和损坏区域是否完全修复
    • 颜色和对比度是否自然
    • 细节是否得到保留和增强
    • 是否引入了不自然的伪影

全局修复效果对比 全局修复效果对比:左侧为修复前的老照片,右侧为修复后的效果,展示了色彩恢复和细节增强的效果

常见问题及解决方案

问题 可能原因 解决方案
修复后图像过于模糊 训练数据不足或学习率过高 增加训练数据,降低学习率
面部特征扭曲 人脸数据集不足 增加多样化人脸样本
划痕修复不完全 掩码质量不高 优化掩码生成算法
颜色过度饱和 色彩映射不当 调整色彩损失权重

实战技巧:提升训练效果的5个秘诀

  1. 数据质量优先:花更多时间收集和清洗数据,质量比数量更重要
  2. 分阶段训练:先训练基础模型,再针对特定问题(如划痕)进行微调
  3. 混合真实与合成数据:使用30%真实老照片和70%合成退化图像
  4. 定期可视化检查:每50个epoch生成样本修复结果,及时发现问题
  5. 模型集成:训练多个模型并融合结果,提高鲁棒性

总结与下一步

通过本文介绍的步骤,你已经掌握了老照片修复模型的训练数据构建和模型训练全过程。这个流程包括数据收集、预处理、增强、VAE模型训练、映射网络训练和人脸增强等关键步骤。

下一步,你可以尝试:

  • 扩展训练数据到特定类型的老照片(如黑白照片、证件照)
  • 优化模型结构以提高修复速度
  • 开发用户友好的界面,如项目提供的GUI.py
  • 尝试将模型应用于视频修复,参考项目作者的后续工作Bringing-Old-Films-Back-to-Life

老照片修复不仅是一项技术挑战,更是连接过去与现在的桥梁。通过AI技术,我们能够让珍贵的历史影像重获新生,为后代保存更多宝贵的视觉记忆。

【免费下载链接】Bringing-Old-Photos-Back-to-Life Bringing Old Photo Back to Life (CVPR 2020 oral) 【免费下载链接】Bringing-Old-Photos-Back-to-Life 项目地址: https://gitcode.com/gh_mirrors/br/Bringing-Old-Photos-Back-to-Life

Logo

脑启社区是一个专注类脑智能领域的开发者社区。欢迎加入社区,共建类脑智能生态。社区为开发者提供了丰富的开源类脑工具软件、类脑算法模型及数据集、类脑知识库、类脑技术培训课程以及类脑应用案例等资源。

更多推荐