(给Python开发者加星标,提升Python技能)
转自:机器之心(ID:almosthuman2014)
一键点击,百年旧照变彩色。
如何把女神的黑白照片变成彩照?今日小编发现新加坡 GovTech 数据科学与人工智能部门在 Medium 上介绍了一个为百年旧照上色的项目。
这个项目名为 Colourise.sg,最初是该团队(成员包括:定量分析师 Andrew Tan、软件工程师 Preston Lim、数据科学家 Tan Kai Wei)参加 hackthon 时为新加坡旧照做的深度学习上色工具。点击以下项目地址可以自己尝试给任意黑白照片上色。
项目地址:https://colourise.sg/#colorize
应用页面
具体效果如何呢?小编找了玛丽莲·梦露的经典照片尝试了一下,效果惊艳。
以下是从 Colourise.sg 图库中找到的效果对比图。
以及作者根据项目初衷作出的新加坡旧照上色前后的对比图。
原始黑白照片(左)和 Colourise.sg 生成的彩色照片(右)。照片为「新加坡华人女子学校」,摄于 1890-1920 年期间。美国国会图书馆 Frank and Frances Carpenter Collection 收藏。
看过对比图之后,我们发现有的照片效果惊艳,但有的照片效果并不好。作者表示,该配色工具的意义在于生成颜色看上去比较合理的照片。它不保证生成的彩色照片就是当时的真实颜色。此外,该项目也只是该研究领域的一角,其模型也并非是完美的。它在一些照片上表现很好,但在其它照片上可能不是。
所以,这个上色工具是如何做的呢?为什么其表现不太稳定?以下是作者在 Medium 上写的技术解读:
这项技术之前没有人做过吗?
可以说有,也可以说没有。
之前的确有人做过上色工具,但那些工具都不是专门针对新加坡历史背景的。
你可能会问,这有什么关系?以 Algorithmia 创建的彩色图像为例,Algorithmia 创建的图像色彩强度不够,可信度也不够高。
原始图像(左)和由 Algorithmia 创建的彩色图像(右)
新加坡老照片上色效果较差的一个主要因素可能是新加坡黑白照片和训练集之间差别太大。Algorithmia 使用的模型是用来自 ImageNet 的 130 万张图像训练而成的。ImageNet 由来自斯坦福大学和普林斯顿大学的研究人员创建,可能不包含与新加坡相关的图像。也就是说,模型可能无法学到旧时新加坡校园的真实颜色。
研究人员认为,针对新加坡老照片训练的工具也许能够生成比现有工具更逼真的彩色新加坡老照片。
如何给黑白旧照上色
在解释电脑程序如何上色之前,我们先来看一下人类如何给图像上色。
上色是一份非常耗时且对技能要求很高的工作。为了创建一张色彩协调的照片,人类着色师必须完成两项任务:
对照片的历史、地理、文化背景进行深入研究,以推断出合适的颜色;
用 Photoshop 等软件工具对黑白图像进行上色。
同样,计算机程序也需要完成两项任务:
识别黑白照片中的目标并基于之前见过的照片推断出适合目标的颜色;
给黑白照片上色
使用生成对抗网络进行上色
为了给黑白照片上色,我们运用了深度学习中已知的生成对抗网络技术。包括:
首先,使用具有大量数学参数(>2000 万)的「生成器」基于图像中的特征来预测不同像素黑白照片的像素值;
其次,用「判别器」来确定与原始彩色图像相比,生成照片的颜色是否逼真。
训练模型,直到判别器无法区分生成器生成的照片是否为真实的。训练模型的架构的简化视图如下所示:
用于上色的简化 GAN 架构
我们使用流行的 fast.ai 和 PyTorch 程序库开发模型,其架构和训练步骤受到 Jason Antic 的启发。我们基于一组超过 50 万张关于新加坡的旧照片的数据集进行训练,我们使用装有英伟达 V100 GPU 的本地 GPU 集群编译了这些照片。
在提升模型时我们还采取了一些其它措施,包括添加一些来自谷歌 Open Image V4 的照片(这主要是针对该模型做得不太好的身体部位,如模型难以识别的手、腿和手臂),修改学习率和批大小,从而取得更好效果。
将我们的深度学习模型部署为 web 端应用程序
至此,我们的深度学习模型位于办公室本地端的 GPU 集群上——这意味着,只有我们的团队可以使用 colouriser 模型。为使其他人可以使用 coloriser,我们必须在网络上部署这一模型。
我们将谷歌云作为 coloriser 云服务的供应商,其架构非常简单:
(1)CDN 提供 DDos 防护并缓存静态内容,
(2)NGINX 前端代理和静态内容服务器,
(3)负载平衡器负责流量分配,
(4)用英伟达 Tesla K80 GPU 支持 colouriser 服务,进行实际的上色操作。
Colourise.sg 架构图
上色过程属于计算密集型任务,完成一张图片大约花费 3 秒钟。照此,我们打算使用 NGINX 服务器将请求排至后端,从而屏蔽后端 colouriser 服务器。如果请求导入的速度远远超出后端服务器的操作能力,NGINX 服务器直接将状态响应返回至客户,请求用户再次尝试。
这一架构的关键点在于 colouriser 服务虚拟机能够对每台虚拟机所必须提供的流量做出自动调整。此举可以节省成本,其他虚拟机只在需要时开启。
结果
以下是我们最喜欢的一些生成结果,使用的训练照片来自纽约公共图书馆(New York Public Library)和新加坡国家档案馆(National Archives of Singapore)。这些原始照片均为黑白照片,对我们创建的彩色照片没有任何影响。
较好的生成结果
该模型在高分辨率照片上表现很好,这些照片突出了人类主体(人在照片中占很大比例)和自然景色。
下面的照片看起来很真实(至少对我们来说),因为它们包含一些在图像数据集中训练充分的目标。因此模型可以识别图像中的正确目标,并给它们准确上色。
「在巴东庆祝马来西亚日」——摄于 1963 年 9 月 16 日。图中为 Yang Di-Pertuan Negara Yusof Ishak 和联邦内部安全长官 Ismail bin Dato Abdul Rahman 拿督。新加坡国家档案馆馆藏照片(左),用 Colourise.sg 上色的照片(右)。
「内政和国防部长林金山在裕廊巴西拉峇军营举行的军官学员阅兵仪式上发表讲话」,摄于 1969 年 7 月 10 日。新加坡国家档案馆馆藏照片(左),用 Colourise.sg 上色的照片(右)。
「新加坡,康乐通道上行驶的汽车」。来自纽约公共图书馆。左为原始照片,右为加工后的照片。
「新加坡」,来自纽约公共图书馆。左为原始照片,右为加工后的照片。
趣事
当模型不能识别照片中的目标时,会发生一些有趣的事。
比如下面这张照片——「新加坡的日本投降者」。配色工具将一个士兵的拳头变成了红色,但其他士兵的拳头颜色是对的。这是因为,从照片拍摄的角度来看,模型不能确定那个紧握的拳头是真的拳头。所以它做出了最佳预测,但却没有猜对。
「新加坡的日本投降者」,摄于 1945 年 12 月 12 日。摄影师为皇家海军官方摄影师 Trusler C。帝国战争博物馆的原始照片(左),Colourise.sg 上色后的照片(右)。
下面这张照片也出现了这种情况。图为「财政部长 Dr. Goh Keng Swee 抵达直落布兰雅 Bata 鞋厂开业现场」。照片中最右边那个人的脸被染成了可怕的灰色,因为他半张脸被挡住了,所以模型无法识别该目标。
这种现象被称为「遮挡(occlusion)」,是计算机视觉的主要挑战之一。在这种情况下,目标识别算法无法识别被部分遮挡的目标。
「财政部长 Dr. Goh Keng Swee 抵达直落布兰雅 Bata 鞋厂开业现场」,摄于 1964 年 4 月 9 日。来自新加坡国家档案馆的原始照片(左)和 Colourise.sg 上色后的照片(右)。
更多照片
下面是更多效果比较好的照片。
「新加坡,马来女孩」,拍摄日期不详。来自纽约公共图书馆。左为原始照片,右为加工后的照片。
「新加坡」,拍摄日期不详。来自纽约公共图书馆。左为原始照片,右为加工后的照片。
「新加坡,牛在成堆的椰子壳中吃草」。来自纽约公共图书馆。左为原始照片,右为加工后的照片。
「新加坡 Jiksha 站」。来自纽约公共图书馆。左为原始照片,右为加工后的照片。
Twitter 网友把爷爷奶奶的黑白结婚照都翻出来了
该网站发布后引起了大量 Twitter 网友的转载,他们从各种渠道找到了一些早已淡出大众视野的老照片,有些还是自己祖父母的旧照。上色之后,这些照片上的人似乎又变得鲜活起来。
利用 Colourise.sg 给 1880 年的汤加(太平洋岛国)旧照上色。
网友惊呼利用 Colourise.sg 可以将黑白照片「秒变」彩照
网友利用 Colourise.sg 给自己祖父母的结婚照上色,惊呼「So so awesome」
网友利用 colourise.sg 技术给旧风景照上色,效果惊人。直呼:盘它!
参考链接:https://blog.data.gov.sg/bringing-black-and-white-photos-to-life-using-colourise-sg-435ae5cc5036
推荐阅读
(点击标题可跳转阅读)
9 个超酷的深度学习案例
这 6 段代码,成就了如今的深度学习
觉得本文对你有帮助?请分享给更多人
关注「Python开发者」加星标,提升Python技能
喜欢就点一下「好看」呗~