首页 每日干货分享 CV君朋友师从古玩修复大师,AI在老照片修复上大展身手

CV君朋友师从古玩修复大师,AI在老照片修复上大展身手

发布时间: 浏览量:29 0

CV君有一位朋友,这位朋友师从南京一位珍奇古玩修复大师,他常常于朋友圈分享各类修复好了的作品,进而引得朋友们纷纷点赞。

古董尽管年代久远,然而常常载有难于被割舍掉的记忆,对于老照片而言,更是这般情况。AI在老照片的修复方面,堪称是一位能手 。

本文为AI开发者的译文,希望对各位朋友有所启发。

原标题 | AI-Based Photo

作 者 | Fedor

翻 译 | 二白、(电子科技大学)、朱慧94(上海大学)

您好!诸位,我身为一名源自Mail.ru Group计算机视觉团队的研发工程师,于这篇文章里,我会阐述我们怎样为老军人的照片打造一个基于AI技术的照片修复项目()。照片修复是什么呢?它由如下三个步骤构成:

随后,我会对照片修复的每一步骤予以阐释,还会告知你我们怎样获取数据,采用何种网络进行训练,收获了哪些成就,还犯了什么错误。

寻找缺陷

我们要在一张已然上传的照片里找出全部和缺陷有关的像素值,首先,我们得搞明白人们会上传何种照片,我们同该项目的创始人交流过,那是个存储二战留存照片的非商业组织,他们把数据分享给我们,基于此展开分析,我们察觉到人们上传的多数个人或集体肖像存有中等到大量的缺陷。

紧接着,毋庸置疑我们得去收集一个训练集,此训练集要求对图像予以分割,进而获得一张图片,以及一张将所有缺陷均标注出来的黑底白纹蒙版。而进行这一步骤,极其简单的办法便是让评估员去创立分割蒙版。当然了,一般的人是十分清楚该如何寻找到缺陷的,然而那将会耗费相当漫长的时间。

标记一张照片里缺陷处的像素将要耗费一个小时或者一整个工作日,所以,在几周内收集一个超出100张图片的训练集并非易事。这便是为何我们试着强化我们的数据,并且创造我们自身的缺陷:拍摄一张照片,借助图片上的随机纹理添加缺陷,最终得到一张展现出有缺陷的图像部分的蒙版。在尚未增强的情形下,我们已然获取了含有68张手动标记照片的训练集以及11张照片的验证集。

最为流行的分割方法是,运用unet,借助预训练编码器,使BCE(cross - )与DICE(Sø–Dice ,)的和处于最小化状态。

当我们将这个分割方法用于项目任务时,会出现什么样的问题呢?

尽管照片看上去似存在 lots of 缺陷,极为陈旧且破损,存有缺陷的部分依旧远小于未受损伤的部分。要去解决这个问题,那我们能够增加 BCE里的积极类内权重,最优权重应为清晰像素跟缺陷像素的比率 。

第二个问题在于,若我们采用能够马上上手投入使用的预训练编码器与 UNET,那么将会致使诸多位置数据出现损失情况。第 1 层要是由一个核为 5 且步长为 2 的卷积予以构成,网络运行会变得更为快速。我们是以牺牲网络运转的时间为代价来达成换回更好的缺陷定位目的呀。我们于第 1 层之后卸载掉最大的层,把卷积步长削减至 1,将卷积核缩减至 3 。

要是我们借助压缩手段来处理小图片,比如说小图片将至256像素或者512像素,那么小瑕疵会因内插而不见。可是,我们还得去处理大图像。在实际运用当中我们通常会对1024像素的照片瑕疵进行分割。这便是为何我们一定要把网络训练成适宜处理大图像的。但这会引发在单个GPU上处理规格小批量的问题。

在训练之时,我们能够于一个GPU之上进行约20张图片的匹配,这样一来,我们最终于层所获取到的便是不够准确的平均值以及标准偏差值,我们能够借助In-place ()来处理此问题,一方面能够节省内存空间,另一方面拥有一个版本,可同步所有GPU之上的数据。如此我们计算平均值以及标准偏差值便并非参照一个GPU上的20张图片,而是4个GPU上的80张图片,这对网络集成起到了改善作用。

最后,基于对bce权重予以增加,对体系结构作出改变以及对于In-place加以使用,我们把分割做得更优,然而为了达成更好的效果而运用Test Time并不会耗费诸多,我们能够于一张输入的图片之上运行网络,获取镜像,接着再度运行网络去寻觅所有的小缺陷。

用了四个显卡,耗费了十八个小时,相对来讲时间比较长,然而这便是精益求精所付出的代价。

图像修复

基于深度学习的图像修复方法_AI老照片修复技术_ai可以修复老照片吗

在图像分割领域,Unet网络是很火的,我们使用了它。有一些情况是这样的,在某些开源的图像数据集(示例:该数据集中含有生活场景中的图像)融入一些会出现于生活的照片瑕疵,基于这种情况,为开展图像修复,先是这样做的,我们上传原始图像以及给出标记指示从而区分需要修复像素区域或是干净区域的掩模(掩模之中为:用数字1标记干净区域像素,用数字0标记需修复像素),接着,针对附加了瑕疵图像的数据集这部分,我们开展网络训练,以此实现对有瑕疵部分的重新修复 。

我们是如何使用在图像修复中使用Unet的呢?

我们运用了部分卷积替换了起初的那一版本, 当我们借助一些核去对一个区域进行卷积操作时,我们并未将被损坏的像素计算在内 这致使图像修复更为精密 以英伟达的论文来进行举例 他们采用Unet结合默认的2维卷积所得到的修复结果呈现在中间这一幅图之中 使用部分卷积所获得的修复结果呈现在右边这一幅图之中 。

我们花费了5天时间用于训练这个网络,在训练的最后一天我们停止了训练行为,目的是使得受损部分的边缘更不容易被看见。

这一网络,处理一幅尺寸为512*512的图像,所需时长为50ms,在验证集上,PSNR(“Peak to Noise Ratio”的简称,也就是峰值信噪比)的值为26.4,不过,于此类任务当中,你无法全然依赖该指标,为挑选出最佳模型,我们于一些验证图片之上,运行数个不错的模型,把结果予以隐藏,接着投票选出我们最为中意的经模型修复过的图片,此乃我们选取最终模型的方式 。

我之前讲过一次,我们人工在洁净的图片上增添了一些瑕疵,所以在训练期间要始终追踪所添加瑕疵的最大面积,以防当你给予网络一张它从未在训练时经历过处理的、带有巨大瑕疵的图片时,网络可能会失去控制并且产生无法使用的后果,因此,要是你想修复有大瑕疵的图片,那就增大你训练集中的瑕疵 。

这是一个关于我们的算法效果的例子:

着色

我们已把图片有缺陷的部分分割出来,并且修复了它们,第三步是颜色复原。跟我之前讲的一样,项目存在许多个人或集体的相片。我们期望网络能在修复这些照片方面发挥很好的作用。鉴于现有的服务无法快速且有效地进行着色,所以我们决定提出自身的着色方案。我们期望我们被着色的图片更具可信度。

有个相片着色repo很流行(),它效果很好,然而仍存在诸多问题,比如,它存在将衣服涂成蓝色的可能性,这亦是我们未使用它的缘由。

所以,我们做出决定,要在图像着色方面提出一个算法,其中最简单的方案是预测一张黑白照片的R通道的值,预测一张黑白照片的G通道的值,预测一张黑白照片的B通道的值。但是,我们能够让工作更为简单,使用YCbCr色彩表达式来替换使用RGB色彩表达式。其中Y通道所表示的是亮度。再者,存在一张上传的黑白照片,这张黑白照片仅仅在Y通道里存在数值,而我们将会复用这个数值。并且,只需要预测Cb通道的值,只需要预测Cr通道的值。其中Cb是蓝色这一颜色与亮度之间的差值,Cr是红色这一颜色与亮度之间的差值。

为何要选用 YCbCr 色彩表达式呢,是由于人眼对于明暗变化的敏感程度相较于对色彩变化的敏感程度而言更高呀。这便是我们选择复用那人眼更为敏感的 Y 通道(亮度)以及预测我们有可能出错的 Cb 和 Cr 通道值的缘由所在,原因是我们不会对颜色错误予以格外留意。这个特定的特性在彩色电视诞生的初期被广泛运用到,那个时候通道传输能力尚不足以传输全部颜色呢。图片是依照 YCbCr 色彩表达式来进行传输的,Y 通道的数值并未发生改变,Cb 和 Cr 的数值都被减半了。

如何新建一个基准模型

我们把现有的CbCr值,输入至带有预训练好编码器的Unet网络,接着最小化L1损失函数,以此来预测合理的CbCr值。我们期望为照片上色,故而除了数据集的相片以外,我们需要更多任务特定的相片。

我们要从哪里获取身着军装之人的彩色照片呢,在网络上,会有一些人,出于兴趣或者金钱因素,对老照片进行上色,他们做得极为仔细且精准,他们依据档案材料为制服、肩牌还有勋章上色,所以他们的成果极具可信度,最终,我们采用了200幅经过手工上色的、身着军装之人的照片。

有用的另一个数据源是The ’ and ’ Red Army网站(),创办者之一几乎拍了所有穿着二战时期军装的自己的照片。

在一些照片里头,他对著名照片人物的姿势做了模仿,他的照片背景全是白色,这能够使我们去借助背景加入各异的自然风景用以扩充数据,我们还运用了一些普通的相片,在上面增添了肩章以及其他和战争有关的元素。

我们进行了训练,训练的对象是 -50,它是一个有着将预训练好的 -50 用作编码器的 Unet。在预测阶段的时候,这个网络给出了一些呈现合理状态的结果,具体为皮肤呈现粉色,眼睛呈现灰绿色,肩章呈现微黄色。然而,存在一些区域没有被进行着色。这是源于对于去预测一些别的颜色而言,不做任何改变会让 L1 误差产生更具优势的结果 。

我们正在比较我们的结果与原始真实照片-由手工着色

基于深度学习的图像修复方法_ai可以修复老照片吗_AI老照片修复技术

该如何解决这个问题呢,需要一个判别,是一个输入图像,且判断图像是否为真实图像的神经网络,下面其中一张图片是手工着色的,另一张是由我们生成器 - 50 绘制的,人类怎样区分手动和自动着色的照片呢,靠观察细节,你能告知我们哪个照片是基准解决方案得出的吗?

回答:左边的图片是手动上色的,右边是自动上色的。

我们运用了出自基于自注意机制GAN的那篇论文里的判别器,这是个挺小的卷积网络,其最上面的几层是那种被叫做自注意力的层,它能让我们的网络对图像细节“更为关注”,我们还采用了谱归一化,你能在上述论文里找寻到更多细节,我们借助L1损失项与判别器损失项的组合对网络展开了训练,如今所得到网络在图像细节的着色方面更佳,背景看上去更为一致,再举个例子,放在左边的是仅训练L1损失项的网络所获取的结果,放在右边的是结合L1损失项而得出的结果。

在四个方面,训练过程耗去两天时间,处理一张图片需30毫秒,验证集的最小均方误差即MSE为34.4,如同图像修复那样,基于我们不想选用的评价准则,所以我们选取了6个具备最佳验证指标的模型,且直接为最佳模型投票。

当我们已然创建了一个生产系统,又推出了一个网站,我们持续进行验证,得以获得结果,我们最优是尽可能减少每个像素的L1损失,而非减少感知损失。为了对它加以计算,我们把网络的预测跟一张照片提供给VGG - 16网络,从而获取底层的特征map,并且运用最小均方误差展开比较。这种方法修复了更多的区域,还给出了更具色调的结果。

简要回顾

Unet是个相当出色的模型,在首个分割任务里,于训练进程中碰到了一个情况,即要处理高分辨率图像那类情况,所以我们采用In - Place批归一化,在第二个任务也就是图像修复任务中,我们运用部分卷积而非标准卷积,这使得我们收获更好结果,在开展着色操作时,我们加进了一个简单判别器网络,其能够对生成不真实图像的生成器予以惩罚,我们还运用了感知损失。

第二个结论,评估人员是必不可少的,不仅在创建分割掩码阶段,而且在最终的结果验证阶段,最后,我们给用户提供了三张照片,一幅带有缺陷的原始照片,一幅带有缺陷的彩色照片,以及一幅简单的彩色照片,以防缺陷搜索和图像修复算法出错。

我们获取了一些照片,这些照片来自War Album (),并且我们在神经网络上对其进行了处理,以下是我们得到的结果:

除此以外,你能够以更为详尽的方式查看原本的图像以及所有的处理流程,具体的情况可以通过访问: 来知晓 。

via @fedor./ai-based-photo--

图像恢复/修补交流群

快来添加CV君,若你之前添加过别的CV君账号,那就直接私信,如此才能拉近你与群的距离,拉你进入群中哦!

(务必注明:图像修补):

喜欢在QQ交流的童鞋,可以加52CV官方QQ群:。

(不会时时在线,如果没能及时通过验证还请见谅)

长按关注我爱计算机视觉

欢迎 发表评论:

请填写验证码

评论列表

暂无评论,快抢沙发吧~