高伟,吴顺
(1.上海文广科技(集团)有限公司,上海 200233;2.上海交通大学 图像通信与网络工程研究所,上海 200240)
照片具有直观、鲜明、形象生动、信息量丰富的特点,是社会记忆中的重要组成部分[1]。老照片一般都以纸等介质存在,随着时间、存储环境等因素的影响,会造成照片的划痕损伤。虽然造成划痕损伤的原因不同,但都有类似的视觉效果和一些共同的特征。传统修复方法通过专业人员手工修复,修复过程复杂且成本高。随着数字化技术的成熟,基于数字图像处理技术为老照片修复提供了便利[2-3],如美图秀秀、Remini Photo Enhancer 等图像编辑软件具有老照片修复功能,但好的修复效果仍需依靠专业人员手工修复,费时且价格昂贵[4]。
老照片往往同时含有多种损伤,文献[5]指出老照片包括结构性损伤和非结构性损伤,结构性损伤主要是指划痕、破损等,而非结构性损伤主要是指颜色泛黄、低分辨率等。尽管老照片包含多种损伤,但是多数的老照片都存在划痕/折痕样损伤,和老电影胶片划痕类似,也有研究人员进行老电影胶片划痕的自动修复[6]。尽管老电影可以利用相邻帧的时序信息[7],但是老照片是静态图像,不能利用时序信息,且老电影划痕都是直线,而老照片的划痕不一定是直线,所以修复老照片划痕更加困难。
数字图像修复的方法可以分为传统方法和基于深度学习的方法。传统的修复方法一般都是先检测图像划痕[8],再利用划痕周边特征进行修复[9]。随着深度学习技术的发展,深度学习方法能够在纹理修复的基础上获取图像的语义信息并预测语义内容,使修复的整体效果更加符合客观事实[10]。文献[11]利用叠加部分卷积运算和掩模更新步骤进行图像修复,恢复干净的图像。文献[12]则提出一种全新的注意力模块,该模块不仅有效利用了上下文信息,同时能够捕捉到生成补丁之间的相关性去修复那些不规则的划痕和孔洞。文献[13]则将不规则划痕和孔洞修复任务分为结构重建和纹理生成两部分。上述方法都需要在网络训练中同时加入掩码,才能得到较好的修复效果。
深度学习是一种数据驱动的学习方法,文献[5]为研究老照片深度学习修复方法,从网络上搜集真实的老照片,并且模拟老照片的退化过程制作了合成数据集,但由于版权原因,搜集到的真实老照片和合成数据集都没有公开。因此,搜集老照片进行数据增强以形成划痕老照片数据集,对于深度学习的划痕自动修复方法研究具有重要意义。
本文针对老照片划痕修复缺少划痕数据集的问题,参考去雨痕的全监督MSFA 方法,提出一种基于半监督学习的Semi-MSFA 老照片修复方法。通过搜集划痕分布图像,制作了700 张图像的SynOld 老照片划痕合成数据集,同时搜集含有划痕的537 张真实老照片用于训练和测试。在此基础上,对合成数据集与真实老照片同时加入网络进行学习,以提升在合成数据集与真实老照片上的修复效果。
目前,针对图像划痕的数据集主要有Quick Draw Irregular Mask Dataset(QD-IMD)、NVIDIA Irregular Mask Dataset(NVIDIA-IMD)[11]、II-CGAN[14]等数据集,如表1 所示。QD-IMD 和NVIDIA-IMD 分别生成了不同数量的不规则掩码,如图1 所示,QD-IMD 在CelebAHQ[15]人脸数据集上加上这些图像掩码得到最终的划痕数据集,NVIDIA-IMD 则是在ImageNet[16]、Places2[17]和CelebA-HQ 3 个数据集上添加图像掩模制作出最终的数据集,如图2 所示。II-CGAN 重点关注绘画的破损修复,数据集搜集了800 张绘画,制作了50 个掩码,其中30 个来自互联网,其他20 个由计算机生成,背景像素为0,划痕像素为255。这些划痕数据集都是人工合成的数据集,掩码也是人工随机生成的,白色划痕像素值为255,而老照片白色划痕值范围为0~255,并且人工生成的随机划痕掩码宽度大,与老照片的细长划痕相差较远。文献[5]搜集了62 种划痕图像来模拟老照片的结构性划痕,制作了模拟老照片退化的数据集,如图3 所示,但因图像版权问题,所建划痕图像集未公开。
图2 NVIDIA-IMD 数据集中掩码叠加后的图像与原图Fig.2 Images after mask overlay and original images in NVIDIA-IMD dataset
图3 模拟的老照片划痕图像Fig.3 Simulated old photos scratch image
表1 划痕数据集Table 1 Scratch datasets
图1 QD-IMD 与NVIDIA-IMD 划痕数据集的掩模示例Fig.1 Mask examples of QD-IMD and NVIDIA-IMD scratch datasets
要完全模拟出老照片的退化过程是十分困难和不切实际的,因为老照片退化可能会出现以下类型的缺陷:不准确的处理或原始图像存储不当;由化学因素引起退化;由底层支架的分解造成的退化。但是,不同的缺陷可能在文档数字化后看起来是相似的[18],并且划痕沿着所有图像以任何方向和颜色延伸,宽度和方向的变化可能很小,有可能存在中断,且没有分支[19],但也有的划痕呈现弯曲状,和镜子破碎时的裂纹类似。除未公开的文献[5]制作的数据集外,表1 中的数据集也无法达到模拟出受损的老照片的效果。
针对老照片划痕自动修复学习任务要求,本文尽可能地去逼近老照片退化的过程,减少和真实老照片之间的差异。考虑到老照片的损伤多数是划痕类型的结构性损伤,所以本文重点关注划痕的修复过程。通过对老照片白色划痕位置处像素值分析,划痕像素值并不是255,从网络上搜集了133 张符合老照片划痕分布的图像,如图4 所示,背景像素为0,白色划痕像素值为[1,255],这些划痕均是细条纹,同时还存在小块白色区域,可类比老照片中部分缺失区域。在此基础上,从Pascal VOC 2012[20]中选取图像作为背景图像,随机选取数据增加后的白色划痕图像进行图层叠加,制作生成了SynOld 老照片划痕数据集,如图5 所示,该数据集共有700 张图像。
图4 划痕掩模图像Fig.4 Scratch mask images
图5 SynOld 数据集中老照片合成示例Fig.5 Example of old photo synthesis in the SynOld dataset
考虑到生成的老照片划痕数据集不能完全模拟真实老照片划痕中存在的各类情况,直接应用所生成的SynOld 数据集进行学习实现划痕修复效果并不理想。为此,本文参考多尺度特征注意力(MSFA)网络[21]的监督学习模型方法,提出一种综合利用合成数据集与真实老照片的半监督学习的Semi-MSFA 划痕修复方法,以更好地适用于老照片修复任务。
Semi-MSFA 的网络结构如图6 所示。本文方法将合成图像和真实老照片图像同时加入到网络中进行训练,合成图像为有真值的数据对,其中,分别代表第i张划痕合成图像和对应的目标图像,共有l对;代表第i张真实划痕老照片,共有u张。在整体的网络框架中使用具有多尺度特征注意力的MSFA 方法[21],将两条MSFA 分支作为相应的生成器:第1 条有监督的分支用于训练划痕合成图像,输出为;第2 条无监督的分支用于学习真实划痕老照片修复,输出为。同时,引入判别器D来计算网络生成后的图像和对应的修复图像之间的差异,判别器D由五层卷积层和一层全连接层组成,利用卷积-归一化层-激活函数提取图像高级特征。
图6 Semi-MSFA 划痕修复网络Fig.6 Semi-MSFA scratch repairing network
为减少网络参数,有监督与无监督修复两条分支共享参数,在训练过程中迭代更新参数,即随机从有真值的数据样本中选取批次大小为2 的图像块计算对应的损失函数。同时,从无标签的老照片样本中选取批次为2 的图像块,计算相应的损失函数。综合两条分支得到总的损失函数,根据反向传播来更新参数。
判别器D参数如下:
对于有监督分析,损失函数有以下3 种:
1)为了让合成图像经过网络之后的复原图像尽可能地靠近真值,因此本文采用了均方差损失,均方差损失Lmse为:
2)感知损失Lper为:
其中:φ(·)代表特征层输出。感知损失是将网络修复后的图像卷积后得到的特征和真值卷积后得到的特征进行比较,使得高层特征接近,用于衡量修复之后的图像与真值之间的相似性,起到去除伪影的作用。
3)对抗损失Lgan为:
其中:D代表判别器。加入判别器引入了额外的对抗损失,为网络增加了新的正则化,帮助网络恢复出更好的结果,用于判别是网络生成的图像还是真值图像。
对于无监督分支,采用总变差损失(Total Variation Loss)Ltv为:
其中:∇h和∇v分别代表水平和垂直方向上的微分运算矩阵,用于保存图像细节,使得恢复后的图像更加真实[22]。
总的损失函数为:
其中:α、β和γ是超参数。
算法1Semi-MSFA 迭代训练过程
为了评估所提出的方法,本文使用SynOld 中700 张合成图片及网上搜集的537 张划痕老照片进行半监督去划痕学习,其中500 张SynOld 图片与355 张老照片用于训练,200 张SynOld 图片及182 张老照片用于测试。损失函数L中参数设定为:α=0.1,β=0.01,γ=0.01。
在训练过程当中,网络总共训练90 个epoch,每个epoch 迭代5 次,学习率为10-4,在后45 个epoch 中学习率线性递减,学习率为10-4–(10-4-10-6)(E-45)/45,其中,E代表训练轮数。采用Adam 优化算法,β1=0.9,β2=0.99。在训练过程中,将图像裁剪为256×256 像素大小,随机旋转90°或者翻转180°进行数据增强。
为更清晰地了解各个损失函数的作用,本文做了以下消融实验:即无监督分支的损失函数不发生变化,有监督分支仅使用均方差损失、感知损失、均方差损失和感知损失、均方差损失和对抗损失、感知损失和对抗损失、均方差损失和感知损失及对抗损失进行实验,表2 为在合成数据集的测试集上得到的PSNR 与SSIM 值。从表2 可以看出,在同时使用均方差损失、感知损失和对抗损失条件下,PSNR 与SSIM 值最高。
表2 不同损失函数条件下的PSNR 与SSIM 结果Table 2 PSNR and SSIM results under different loss functions
为了对比本文方法的去划痕效果,对于SynOld 中的划痕合成图片,图7 给出了与文献[5,21]方法去划痕效果的对比,图8 给出了其中手臂、人脸细节部分的划痕修复结果对比。在合成数据集上,文献[5]的方法有一定的划痕修复效果,但也存在细小噪声点不能修复的问题。可以看出,在修复第1 张合成图像划痕图像的同时,人脸修复失败,但MSFA 与Semi-MSFA 方法并未出现这种情况,在修复划痕的同时也能保存完整人脸细节。观察第2 张合成图像划痕修复情况,在图8中人手臂的细节图像部分,可以发现文献[5]方法修复噪点失败,造成手臂和真值图像相差甚远。对于第4 张合成图像划痕修复情况,通过对比截取放大部分人脸的细节,发现虽然人脸处没有受到划痕的影响,但是文献[5]方法模糊了人脸处的细节,文献[21]方法虽然没有模糊细节,但是修复划痕的效果却不如本文Semi-MSFA 网络方法。
图7 合成图像修复结果对比Fig.7 Comparison of synthetic image repairing results
图8 图7 中第2 张手臂与第4 张人脸局部细节对比Fig.8 Comparison of the details of the human hand in the second image and the face in the fourth image on figure 7
对于在加入网络学习的真实老照片修复结果中,文献[5]方法在对比度方面有增强效果,在人脸方面也比其他的方法更清晰,主要是在训练网络时加入了人脸增强的网络,但是有时恢复人脸的过程中会出现差错,比如图9 第1 张老照片中鼻子附近区域的恢复过程中出现白色区域的缺失(见图10)。对于嘴唇上方有需要修复的细小划痕,文献[21]也未能修复,而Semi-MSFA 方法更能保护细节。对于未加入网络训练的真实老照片,图11 给出了这3 种方法修复结果:第1 张老照片中耳朵附近区域存在白色斑点需要修复(见图12),可以观察到,文献[5,21]方法没有修复完全,Semi-MSFA 方法能很好地修复斑点及划痕。第5 张人脸部位也有划痕需要修复,对比局部细节可以看出,除Semi-MSFA 方法外,文献[5,21]方法结果中划痕均存在不同程度未被修复的情况。
图9 训练过程老照片修复结果Fig.9 Repairing results of old photos from the training process
图10 图9 中方框标示区域局部细节对比Fig.10 Comparison of local details in the area marked by the box in figure 9
图11 未训练老照片的修复结果对比Fig.11 Comparison of repairing results of untrained old photos
图12 图11 中方框标示区域局部细节对比Fig.12 Comparison of local details in the area marked by the box in figure 11
划痕是老照片最常见的损伤,基于生成对抗网络,通过有监督学习方法进行老照片划痕修复是当前老照片划痕修复的主要方法。针对真实划痕老照片缺少原始图片用于监督学习的问题,本文建立人工划痕合成数据集,同时搜集建立含有划痕的真实老照片数据集。对于老照片划痕修复,在有监督MSFA 方法基础上,提出一种Semi-MSFA 老照片划痕修复方法。实验结果表明,与MSFA 方法相比,本文提出的Semi-MSFA 方法实现了对老照片划痕修复的半监督学习,在合成数据测试集及真实老照片上具有较好的修复效果。本文方法修复后的老照片在色彩方面不够鲜明,下一步将在颜色恢复方面进行研究。此外,老照片多数都存在人脸图像,因此在修复老照片划痕的同时,将考虑对人脸进行增强,提升人脸部分的修复质量。