老照片修复训练数据构建实战:3步解决数据稀缺难题

【免费下载链接】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 Photo Back to Life是一个基于深度学习的老照片修复项目,能够自动修复老照片中的划痕、褪色和破损等问题,让珍贵的历史影像重获新生。本文将详细介绍如何构建高质量的老照片修复训练数据,帮助你解决数据稀缺难题,提升模型修复效果。

为什么老照片修复需要高质量训练数据?

老照片修复是一项复杂的计算机视觉任务,需要模型学习大量的照片退化模式和修复规律。然而,真实的老照片修复数据集往往存在数量少、质量参差不齐、退化类型单一等问题,严重影响模型的泛化能力和修复效果。

老照片修复效果对比 老照片修复效果对比:左图为修复前的破损老照片,右图为使用本项目修复后的效果,展现了模型强大的修复能力

通过构建高质量的训练数据,我们可以:

  • 让模型学习各种类型的照片退化(划痕、褪色、折痕等)
  • 提高模型对不同年代、不同风格照片的适应能力
  • 增强模型修复细节的能力,使修复结果更加自然

第1步:收集与筛选基础图像数据

构建训练数据的第一步是收集足够数量的清晰图像作为基础数据。项目中使用了VOC数据集作为基础图像来源,你也可以使用自己的照片集。

数据收集渠道

  • 公开数据集:如VOC、COCO等通用图像数据集
  • 个人照片库:扫描清晰的现代照片
  • 历史档案:博物馆或图书馆提供的无版权历史照片

数据筛选标准

项目中在Global/data/online_dataset_for_old_photos.py中实现了数据筛选功能,主要筛选条件包括:

  • 图像尺寸:过滤小于256x256的图像
  • 图像质量:去除模糊、过度曝光或曝光不足的图像
  • 内容多样性:确保包含不同场景、人物、光照条件的图像
# 代码片段来自Global/data/online_dataset_for_old_photos.py
print("-------------Filter the imgs whose size <256 in VOC-------------")
self.filtered_imgs_clean=[]
for i in range(len(self.loaded_imgs_clean)):
    img_name,img=self.loaded_imgs_clean[i]
    h,w=img.size
    if h<256 or w<256:
        continue
    self.filtered_imgs_clean.append((img_name,img))

第2步:模拟老照片退化效果

真实的老照片往往存在各种退化问题,如划痕、褪色、污渍等。为了让模型能够处理这些问题,我们需要对清晰图像进行退化处理,模拟老照片的各种损坏效果。

常用退化模拟方法

项目在Global/data/online_dataset_for_old_photos.py中实现了多种退化模拟方法:

  1. 模糊处理:使用不同大小的高斯核进行模糊
  2. 噪声添加:包括高斯噪声、椒盐噪声和斑点噪声
  3. 分辨率降低:模拟低分辨率老照片
  4. JPEG压缩:模拟多次保存导致的压缩 artifacts
  5. 颜色退化:将彩色图像转为黑白或模拟褪色效果

老照片退化模拟流程 老照片退化模拟流程图:展示了从清晰图像到模拟老照片的处理过程

退化处理代码实现

以下是项目中实现的在线退化处理函数:

# 代码片段来自Global/data/online_dataset_for_old_photos.py
def online_add_degradation_v2(img):
    task_id=np.random.permutation(4)
    for x in task_id:
        if x==0 and random.uniform(0,1)<0.7:
            img = blur_image_v2(img)
        if x==1 and random.uniform(0,1)<0.7:
            flag = random.choice([1, 2, 3])
            if flag == 1:
                img = synthesize_gaussian(img, 5, 50)
            if flag == 2:
                img = synthesize_speckle(img, 5, 50)
            if flag == 3:
                img = synthesize_salt_pepper(img, random.uniform(0, 0.01), random.uniform(0.3, 0.8))
        if x==2 and random.uniform(0,1)<0.7:
            img=synthesize_low_resolution(img)
        if x==3 and random.uniform(0,1)<0.7:
            img=convertToJpeg(img,random.randint(40,100))
    return img

第3步:创建配对训练数据

为了训练监督学习模型,我们需要创建输入(退化图像)和目标(修复后图像)的配对数据。项目中提供了多种数据集类来实现这一功能。

数据集类介绍

  1. UnPairOldPhotos_SR:用于非配对数据训练
  2. PairOldPhotos:基本配对数据集,生成退化图像和原始清晰图像对
  3. PairOldPhotos_with_hole:带孔洞的配对数据集,专门用于修复有较大破损的照片

数据加载与使用

项目中通过数据加载器来加载和使用这些数据集:

# 代码片段来自Global/train_mapping.py
data_loader = CreateDataLoader(opt)
dataset = data_loader.load_data()
dataset_size = len(dataset) * opt.batchSize
print('#training images = %d' % dataset_size)

数据增强技巧

为了提高模型的泛化能力,项目还实现了多种数据增强技术:

  • 随机裁剪:从图像中随机裁剪256x256的区域
  • 随机翻转:以50%的概率水平翻转图像
  • 随机旋转:小角度随机旋转图像
  • 颜色抖动:随机调整亮度、对比度和饱和度

原始老照片示例 原始老照片示例:一张带有典型老化特征的历史照片,可用于测试模型修复效果

总结与扩展

通过以上三个步骤,我们可以构建出高质量的老照片修复训练数据。这种方法的优势在于:

  • 解决了真实老照片数据稀缺的问题
  • 可以控制退化类型和程度,便于针对性训练
  • 能够生成大量多样化的训练样本

如果你想进一步提升数据质量,可以考虑:

  1. 收集更多真实老照片,建立真实退化样本库
  2. 结合GAN技术生成更真实的退化效果
  3. 引入用户反馈机制,不断优化退化模拟方法

通过本文介绍的方法,即使在缺乏大量真实老照片数据的情况下,你也能构建出有效的训练数据,训练出高性能的老照片修复模型。开始你的老照片修复之旅吧!

【免费下载链接】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

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

更多推荐