来自伯克利大学和麻省理工学院的三名研究者Richard Zhang、Phillip Isola、Alexei A. Efros日前给出了深度学习在另一个特定领域的研究进展,开发了一套可以通过深度学习自动学会帮黑白图片上色的技术。从给出的示例来看,这项技术的准确性还是比较高的。说到这些技术的应用,让许多承载着回忆的老照片焕发新生是它能做的极好的贡献之一。
值得注意的是,这个算法是在算法应用平台Algorithmia上的,雷锋网之前报道过这个平台,它的主要作用就是让算法的开发者将他们开发出来的算法托管在平台上,而APP的开发者等需要算法的人就可以很方便的通过几条简单的指令就调用上面存储着的算法,这样就能达到一个研究成果最大化利用的目的。
研究小组表示,他们给算法制定的目标——为随意给出的黑白照片上色,很明显条件过于宽泛,因此之前的类似算法要么需要用户很多的干涉,要么生成的照片的颜色饱和度往往相当低。而他们通过将算法设定为一个分类任务并且在训练时使用重分类方法来增加了图像颜色的多样性。他们为算法设计了一个类似于图灵测试的“颜色图灵测试”,用来评估算法的效果。让受试者区分摄制了同样物体的照片,哪张是真的哪张是程序生成颜色的结果。结果他们的方法成功骗过了20%的人,这个结果要显著高于之前的方法。
上图是这个算法的网络结构,每个卷积层(conv layer)都代表着由2到3个重复的卷积和整流线性单元(ReLU)层组成的区块,最后是一个BatchNorm层。整个网络没有池化层。分辨率的变化是由卷积块之间的空间缩减取样或不取样实现的。
研究团队在他们的论文中介绍,在图像本身的信息之外,该方法的灵感倒主要来源于它的语义学特征和其中物体的表面提供的线索,在实例中通常意味着图像标签(label)所含有的信息:如草一般都是绿的,天一般都是蓝的等。虽然这个规律并不一定是通用的,但是事实上,要让一幅图变成漂亮的彩色,并不意味着它的着色一定要跟现实中的颜色一模一样,很多时候只要颜色的相对关系看起来合理,就足够骗过人类的眼睛了。
与传统的实现方法不同,他们并不是利用着色问题的损失定制来实现算法的,之前提到过,其实颜色的预测结果有时并不需要同现实结果一模一样,比如一件衬衫,表现出很多种颜色看起来其实都是合理的。他们的方法是在算法中对每一个像素点都预测了颜色可能的分布情况。并且在训练中给不常出现的颜色更多的权重,以增加最终颜色的多样性。最终以一种分布退火的方式得到最后的颜色分布函数。得到的结果同以前的结果相比看起来会更加真实。
研究团队展示了他们的算法在1000组来自ImageNet的图像上的实验效果,其中大部分都得到了比较好的效果。
研究团队在Github上提供了他们算法的源代码(目前还是Demo版):https://github.com/richzhang/colorization
由于其算法发在了Algorithmia上,因此想要使用他们的研究结论,只需用简单的几句指令就可以调用算法实现图片的转换。
或者用这样的格式
小组展示了许多算法成功的案例。如下图
不过还需要注意的一点是,该团队自己也表示,这个算法仍处在试验阶段,它在运算有些图片的时候表现得会很好,但有的时候又会表现得很差,(不过在这一点上其他的类似算法也一样)。因为目前这个算法主要使用ImageNet的图像做训练数据,因此在处理与其训练数据类似的图像的时候会表现得比较好。但该团队也给出了一些失败的例子,不过他们在示例中同时加入了其他算法的表现,可以看出,在这些图片上,其他算法几乎也无法给出比他们算法更好的结果:
最右侧是现实情况,中间的三个是不同算法的横向比较,其中标记为“Ours”的就是该团队的算法。