我们知道,深度学习几乎已经应用在每一个领域,但如果我们能够构建一个基于深度学习的模型,让它能够给老照片着色,重现我们童年的旧回忆,这该多么令人激动啊!那么我们要怎么做呢?本文的作者将为大家介绍一个教程,通过深度学习方法为黑白老照片自动上色,带我们重新忆起那段老时光!
现如今,给照片着色通常是在 PS 中手工完成的。
所以说,如果要给一幅照片着色的话,短时间内是不可能完成的。它需要广泛的研究,要知道,单是一张脸的着色,就需要多达20层粉色、绿色和蓝色的色调才能使照片拥有恰到好处的效果。
现在,我要介绍的这个简单的神经网络——Inception Resnet V2,已经训练了120万张图像,可以帮助我们完成着色的任务。为了能够实现着色,我们将用 Unsplash 的肖像来训练这个神经网络。
介绍
在本节中,我将就如何渲染图像、数字颜色的基础知识以及神经网络的主要逻辑进行概述。
黑白图像可以用像素网格表示,每个像素都有与其亮度相对应的值。这些值的范围是0~255,对应的是从黑到白。
彩色图像是由三层组成:红色层、绿色层和蓝色层。你可以想象一下,在白色背景上将绿叶分成三个通道。直觉上,你可能会认为植物只存在于绿色层中。
但是,如下图所示,叶子在所有三个通道中都存在。这些层不仅决定了颜色,还决定了亮度。
例如,要得到白色,你需要所有的颜色均匀分布。通过增加等量的红色和蓝色,会使绿色变得更亮。因此,彩色图像使用三层来对颜色和对比度进行编码:
和黑白图像一样,彩色图像中的每一层,也有0~255的值。值0表示这个层中没有颜色。如果像素网格所有颜色通道的值都为0,那么这个图像像素就是黑色的。
神经网络在输入值和输出值之间创建了一种关系。为了能够更为准确地完成着色任务,网络需要找到能够将灰度图像和彩色图像联系起来的特征。
总的来说就是,我们需要找到能够将灰度值网格链接到三个颜色网格的特征。
f()是神经网络,[B&W]是我们的输入,[R]、[G]、[B]是我们的输出
现在,随着数据集的增加,由于我们处理的是高分辨率图像,因此我们需要更多的计算能力。为此,我个人更喜欢使用 Deep Cognition 的 Deep Learning Studio jupyter notebooks,它为Amazon 的深度学习示例提供了GPU,可用来训练模型。
如果你不熟悉如何使用Deep Learning Studio,可以看看以下这些资料:
Deep Learning made easy with Deep Learning Studio — An Introduction
http://u6.gg/eqfdu
Deep Learning made easy with Deep Learning Studio — Complete Guide
http://u6.gg/eqffa
A video walkthrough of Deep Cognition
http://u6.gg/eqfh7
python代码和数据集可以从 GitHub 中下载:
https://github.com/Rajat2712/Deep-Learning-Studio
环境设置
Deep Learning Studio 最好的地方之一就是,只需单