该项目由GovTech Singapore的数据科学和人工智能部门提供。
Andrew Tan,定量分析师
Preston Lim,软件工程师
Tan Kai Wei,数据科学家
你有没有看过一张旧的黑白照片,并想知道:拍这张照片的人到底看到了什么?
是否有关于颜色排列的事情迫使摄影师捕捉到这一刻?如果是这样的话,摄影师是否看到了我们 – 这张黑白照片的现代观众 – 不知情的东西?
虽然无法复制拍摄原始照片的确切条件,但可以为照片添加颜色,以帮助我们想象摄影师在那一瞬间可以看到的内容。令人难以置信的 – 几乎是神奇的 – 一点点的颜色如何能够让我们更接近那个特定的时刻。
因此,对于1月份的黑客马拉松,我们的团队决定建立一个专门为新旧照片培训的深度学习色彩工具。
这里有一个重要的注意事项:着色点是生成一个看似合理的颜色的图像。它绝不能保证着色图像能够准确表示实际快照的时间。
另一个注意事项:色彩化是一个活跃的研究领域,我们的模型绝不是完美的 – 它在一些图像上很好用,但在其他图像上却不行。
如果你有旧的黑白照片,并想要给它们着色,你可以在这里这样做:Colourise.sg。我们不会将您上传的任何照片存储到我们的colouriser应用程序中。我们计划在2月份运行此服务 – 但可能会根据使用情况对其进行扩展。
我们将在本篇博文的以下部分中解释我们如何创建Colourise.sg。如果您想查看更多我们的结果,请跳到最后!
等待。以前没有这样做过吗?
是的 – 没有。
虽然确实存在着色工具,但据我们所知,这些工具都没有经过专门针对新加坡历史背景的彩色图像的培训。
你问,为什么这很重要?例如,文章开头的黑白图像及深度学习工具Algorithmia创建的彩色输出。Algorithmia生成的图像缺乏颜色强度,并且不太可信。
旧新加坡照片色彩不佳的一个主要因素可能是旧的新加坡黑白图像与训练数据集太不相同。Algorithmia(由Zhang等人创建)使用的模型使用来自ImageNet的 130万张图像进行训练 – ImageNet是斯坦福大学和普林斯顿大学研究人员创建的常用图像数据库。
因此,ImageNet不太可能有与新加坡相关的图像。这意味着该模型不太可能已经了解旧新加坡校园场景的颜色可能是什么。
我们假设一个训练有关新加坡特定历史图像的工具将比现有工具产生更可信的新旧新加坡照片。
如何将黑白图像着色?
在我们开始讨论如何通过计算机程序完成颜色化之前,让我们首先考虑一下人类色彩如何完成颜色化。
Colourisation是一项极其耗费时间和技能的工作。为了制作适当的彩色照片,经验丰富的人类色彩师必须完成两项任务:
- (1)对照片的历史,地理和文化背景进行重要研究,以得出合适的颜色,并且
- (2)使用Photoshop等软件工具为黑白图像着色。
(这当然是对艺术品色彩艺术家的过度简化 – 为了更详细和准确的解释,请查看Vox的这个精彩视频。)
类似地,计算机程序需要执行这两个任务,尽管方式略有不同。一个程序需要:
- (1)识别黑白照片中的物体,并在过去看到的图像中找出对象的合理颜色,以及
- (2)对黑白图像进行着色。
使用生成性对抗网络(GAN)进行着色 – 一种深度学习技术
为了使黑白图像着色,我们采用了一种称为生成对抗网络(GAN)的深度学习技术。这包括:
- 第一个神经网络 – 一个’生成器’ – 具有许多数学参数(> 2000万),试图根据图像中的特征预测黑白图像中不同像素的颜色值,以及
- 第二个神经网络 – “鉴别器” – 试图识别生成的颜色与原始彩色图像相比是否是照片般逼真的。
训练模型直到发生器能够预测鉴别器无法有效区分为假的颜色。用于培训的架构的简化视图如下所示:
我们使用流行的fast.ai和PyTorch库来开发我们的模型,其架构和培训步骤受Jason Antic的启发(https://github.com/jantic/DeOldify)。我们使用带有NVIDIA V100 GPU的本地GPU集群,基于我们编制的一组新的超过500,000个旧的,可公开获得的新图像来训练我们的模型。
我们为改进模型而采取的其他步骤包括添加来自Google的Open Images V4的图像,特别是对于我们的模型似乎没有做得太好的身体部位(例如,模型难以识别的手,腿和手臂),并修改学习率和批量大小以获得更好的结果。
将我们的深度学习模型部署为Web应用程序
在这一点上,我们的深度学习模型存在于我们办公室的本地GPU集群中 – 这意味着只有我们的团队才能访问着色器模型。为了使色彩系统对我们团队以外的任何人有用,我们必须在互联网上进行部署。
我们选择Google Cloud Platform作为色彩服务的云提供商。该架构非常简单,具有:
- (1)提供DDoS保护和静态内容缓存的CDN,
- (2)NGINX前端代理和静态内容服务器,
- (3)分配流量的负载均衡器
- (4)后端彩色服务与NVIDIA Tesla K80 GPU一起执行实际的彩色化。
颜色化步骤是计算密集型的,每张图像需要大约3秒钟才能完成。因此,我们决定使用NGINX服务器将请求排队到后端来屏蔽后端颜色服务。如果传入请求的速率远远超过我们的后端服务可以处理的速率,NGINX服务器会立即向客户端返回状态响应,要求用户稍后再试。
此体系结构的关键亮点是色彩服务虚拟机(VM)是自动调整大小以响应每个VM必须服务的流量。这节省了成本,因为只有在需要时才会打开其他VM。
结果
以下是使用纽约公共图书馆和新加坡国家档案馆许可获得的照片,我们最喜欢的一些结果。我们想要注意的是,我们的消息来源仅向我们提供了黑白照片,并且不以任何方式对我们创建的彩色输出负责。
效果很好
我们的模型在高分辨率图像上表现良好,这些图像突出显示人类主体(人们占据图像的大部分的图像)和自然风景。
以下图像看起来很可信(至少对我们而言),因为它们包含存在于训练图像数据集的足够示例中的对象。因此,该模型能够识别图像中的正确对象并使其可信地着色。
✗酷酷的✗
学习了,谢谢?