这篇论文是加里福利亚大学Richard Zhang发表在ECCV 2016上的文章,论文的工作是灰度图的自动着色,这里博主想要重点关注一下论文对颜色分布预测的工作,所以把一篇这么老的论文翻出来重新看。
论文主页:http://richzhang.github.io/colorization/,东西比较全,论文,github,在线demo都有
用论文作者自己的话说,论文贡献主要体现在两方面:
论文所做的事情用一句话就能概括:给灰度图上色。不过论文的切入点我觉得很巧妙,它不是恢复灰度图的真实颜色,而是用灰度图中物体的纹理、语义等信息作为线索,来预测可能的上色,最后的上色结果只要真实即可。这不仅降低了上色的难度,而且也符合人们的认知:比如一个苹果,给它上青色,上红色都是正常的,不限于某一个颜色,只要不是紫色黑色等奇怪的颜色。
考虑到这篇论文是发表于2016年,当时图像着色方面的工作还不是很多,已有的方法比如ICCV 2015的《Deep colorization》,可以看到下图中的上色结果,虽然大体上正确,但是颜色显得饱和度比较低,有些单调的感觉。Richard Zhang认为,前人的目标只是优化预测结果和真实图片间的欧氏距离(即MSE),这种损失函数会鼓励比较保守的预测(原因在后面会将),从而导致颜色饱和度不高,色彩不丰富。
《Very deep convolutional networks for large-scale image recognition》这篇文章指出,颜色预测是一个多模的问题,一个物体本来就可以上不同的颜色。为了对这种多模性建模,Richard Zhang为各个像素预测一个颜色的分布,这可以鼓励探索颜色的多样性,而不仅仅局限在某一种颜色中。
基本模型还是比较简单的,输入图片的 L L L通道,使用一个CNN预测对应的 a b ab ab通道取值的概率分布,最后转化为 R G B RGB RGB图像结果。网络模型这里不存在什么难点,下面着重看一下作者是怎么设计损失函数的。
给定输入的 L L L通道 X ∈ R H × W × 1 X\in \mathbb{R}^{H\times W \times 1} X∈RH×W×1,现在的目标是学习一个到相应 a b ab ab通道 Y ∈ R H × W × 2 Y \in \mathbb{R}^{H \times W \times 2} Y∈RH×W×2的映射 Y ^ = F ( X ) \hat{Y}=\mathcal{F}(X) Y^=F(X)。最自然的一个想法是使用预测结果和真实图像间的 L 2 L_2 L2损失: (1) L 2 ( Y ^ , Y ) = 1 2 ∑ h , w ∥ Y h , w − Y ^ h , w ∥ 2 2 L_2(\hat{Y}, Y)=\frac{1}{2}\sum_{h,w}\|Y_{h, w}-\hat{Y}_{h,w}\|_2^2\tag{1} L2(Y^,Y)=21h,w∑∥Yh,w−Y^h,w∥22(1)但是这种损失函数对于着色问题的固有歧义和多模特性不是很鲁棒。如果一个物体可以上若干种颜色, L 2 L_2 L2损失函数的最优解将会是这几种颜色的平均值,直观上来看就是那些灰色的,不饱和的结果。而且,如果可能颜色所在的平面是非凸的,平均后的结果可能就会在平面之外,从而出现比较诡异的颜色(这里的平面可以理解为真实自然上色的解集)。
这篇论文将上色问题视为一个分类问题。首先将 a b ab ab通道的输出空间以10为步长量化为 Q = 313 Q=313 Q=313类,对于给定的输入 X X X,学习一个到颜色概率分布 Z ^ ∈ [ 0 , 1 ] H × W × Q \hat{Z} \in [0, 1]^{H \times W\times Q} Z^∈[0,1]H×W×Q的映射 Z ^ = G ( X ) \hat{Z}=\mathcal{G}(X) Z^=G(X)。
为了比较预测的结果 Z ^ \hat{Z} Z^和真实值的差距,我们定义一个函数 Z = H g t − 1 ( Y ) Z=\mathcal{H}^{-1}_{gt}(Y) Z=Hgt−1(Y)将真实颜色 Y Y Y转换成向量 Z Z Z(通过搜索最接近的分类将 Y Y Y变为One-Hot向量)。论文中的soft-encoding scheme
是指在313类的输出空间中找到 Y h , w Y_{h,w} Yh,w的5个最近邻,并按照它们距离 Y h , w Y_{h,w} Yh,w的距离按比例进行高斯加权。最后使用多分类交叉熵作为损失函数: (2) L c l ( Z ^ , Z ) = − ∑ h , w v ( Z h , w ) ∑ q log ( Z ^ h , w , q ) L_{cl}(\hat{Z}, Z)=-\sum_{h,w}v(Z_{h,w})\sum_q\log(\hat{Z}_{h,w,q})\tag{2} Lcl(Z^,Z)=−h,w∑v(Zh,w)q∑log(Z^h,w,q)(2)其中 v ( ⋅ ) v(\cdot) v(⋅)是用来平衡那些出现频率较少的类的权重(下一节会将)。最后再使用函数 Y ^ = H ( Z ^ ) \hat{Y}=\mathcal{H}(\hat{Z}) Y^=H(Z^)将预测得到的概率分布 Z ^ \hat{Z} Z^映射到具体的颜色值 Y ^ \hat{Y} Y^(下下节中会讲)。
由于云朵、路面、沙漠等经常大面积地作为背景出现在图片中,自然图像中 a b ab ab的取值倾向于较小的方向。下图是从130万的数据集中统计的 a b ab ab取值分布,可以发现自然图片中取值都集中在不饱和区域,如果不考虑这个问题,那损失函数将会被不饱和的 a b ab ab取值主导。
为了处理这问题,作者在训练的时候为每个像素的loss重新调整权重,这个权重的大小是基于像素颜色的稀有度来设置的: (3) v ( Z h , w ) = w q ∗ q ∗ = arg max q Z h , w , q v(Z_{h,w})=w_{q*} q^*=\arg \max_q Z_{h,w,q}\tag{3} v(Zh,w)=wq∗ q∗=argqmaxZh,w,q(3) (4) w ∝ ( ( 1 − λ ) p ~ + λ Q ) − 1 E [ w ] = ∑ q p ~ q w q = 1 w\propto((1-\lambda)\tilde{p}+\frac{\lambda}{Q})^{-1} \mathbb{E}[w]=\sum_q\tilde{p}_qw_q=1\tag{4} w∝((1−λ)p~+Qλ)−1 E[w]=q∑p~qwq=1(4)为了得到平滑的经验分布 p ~ ∈ Δ Q \tilde{p}\in \Delta^Q p~∈ΔQ,作者统计了ImageNet训练集的 a b ab ab概率分布,并使用高斯核 G σ G_\sigma Gσ进行平滑。然后再用权重为 λ ∈ [ 0 , 1 ] \lambda \in [0,1] λ∈[0,1]的均匀分布进行混合并进行归一化。作者发现 λ = 1 2 , σ = 5 \lambda=\frac{1}{2},\sigma=5 λ=21,σ=5时效果比较好。
最后,我们定义函数 H \mathcal{H} H,将预测的概率分布 Z ^ \hat{Z} Z^映射到 a b ab ab空间的点估计 Y ^ \hat{Y} Y^。一种方法是直接取每个像素,预测得到的模式,如下图最右边一列所示( T = 0 T=0 T=0),这种情况下能得到鲜艳的颜色,但是有时会出现颜色在空间上不连续,比如巴士上红色的点。如果取预测分布的平均值,将没有颜色不连续的现象,但是颜色的饱和度不高,显得不自然(最左边一列, T = 1 T=1 T=1)。造成这种低饱和度问题的原因和使用MSE损失是一样的,为了在这两者之前寻求一个平衡点,作者通过在softmax分布中引入参数 T T T,然后取结果的平均值: (5) H ( Z h , w ) = E [ f T ( Z h , w ) ] f T ( z ) = exp ( log ( z ) / T ) ∑ q exp ( log ( z q ) / T ) \mathcal{H}(Z_{h,w})=\mathbb{E}[f_T(Z_{h,w})] f_T(z)=\frac{\exp(\log(z)/T)}{\sum_q\exp(\log(z_q)/T)}\tag{5} H(Zh,w)=E[fT(Zh,w)] fT(z)=∑qexp(log(zq)/T)exp(log(z)/T)(5)参数 T T T的选择借鉴模拟退火的思想,最终选定 T = 0.38 T=0.38 T=0.38,效果如下图所示。
整个模型 F \mathcal{F} F最终包含两个部分:用于预测所有像素颜色分布的卷积神经网络 G \mathcal{G} G,和用于产生最终预测图像的退火平均操作 H \mathcal{H} H。虽然整个系统不能严格意义的端到端训练,但是可以注意到 H \mathcal{H} H是对每个像素单独作用的,只有一个参数,可以作为CNN的前向转播的一部分实现。
这篇论文的实验设计的还是蛮精心的,这里来好好学习一下。
使用ImageNet的130万数据集训练,1万的验证集上测试。实验了不同Loss函数的效果,并和另外两种上色方法(Dahl, Larsson et al.)进行了对比,结果如下表所示:
下面来解释一下表格每一行具体代表什么:
接下来再来看看使用了哪些评价指标。因为评价合成图像的质量缺少定量的指标,而RMS误差通常又难以衡量视觉真实性,作者使用了3种指标来总和评价:
为了进一步说明上色对于图形学任务的重要地位,作者解释了上色是如何作为表达学习的一种pretext task。这部分就不详细说了,作者就是把上色网络编码器的权重固定,然后重新训练成为一个分类、分割、识别网络,来检验这个上色网络特征学习的能力。
为了阐述图片上色的应用价值,这里用的是黑白老照片上色。黑白老照片的灰度值分布和训练的 L L L通道图像还是有差别的,但是效果不错。