您的位置:首页 > 其它

Let there be Color!: Automatic Image Colorization with Simultaneous Classification - sig - 2016

2016-05-05 10:55 483 查看
最近在arxiv上逛逛,看到一篇关于colorization的paper觉得挺有意思的:

Let there be Color!: Joint End-to-end Learning of Global and Local Image Priors for Automatic Image Colorization with Simultaneous Classification - sig - 2016

作者开源了代码:

https://github.com/satoshiiizuka/siggraph2016_colorization

===

先看看效果,从Fig1可以看出,该论文能够很好地从gray image还原到color image,效果不错。



motivation:

对于纹理区域,如天空,草地,树叶,街道,墙,海面等这些,

如何利用全局和局部的信息,使得网络可以充分学习到并区分到?

如何利用context的信息来区分不同场景下的图像,如indoor,outdoor?

所有该paper的核心研究内容是:如何充分利用global,local,semantic context信息,来更好地训练网络模型:

1 user-intervention-free的方式,即不需要用户的干涉,例如graphcut需要用户的操作,而它是不需要的;

2 end-to-end的网络,能够同时学习到图像的global和local的features;

3 利用图像的类别信息,如indoor,outdoor,来引导网络学习图像的semantic context信息,

   使得网络可以区分不同场景下的图像,同时提高performance;

4 基于global信息,不同图像之间可以transfer sytle;

5 模型不仅适用于现在设备拍到的图像,还适用于几十年前,甚至一个世纪之前拍到的图像。

下面就直接说下该paper的网络是如何做的以上的几点。

看图,废话少说。



网络framework如Fig2所示,网络参数如Tab1所示。

整个framework由4个sub-network构成:

1 low-level feature network,简称LNet

2 mid-level feature network,简称MNet

3 global-level feature network,简称GNet

4 colorization network,简称CNet

下面分开将下这4个sub-network。

LNet: 底层的卷积层构成,其为两个网络,只是网络的权重是共享的。

为什么需要两个网络,笔者猜测,后面的GNet和CNet应该是不同的网络,需要加以区分,而且论文的重点是CNet,GNet只是辅助的。

为什么另一个需要固定大小(如224*224),而另一个不需要?

笔者认为,GNet是分类网络,类型AlexNet一样,分类效果不错,而且为了学习到semantic context,需要用到fc层(全连接层)

而CNet的目的在于可以处理任意输入大小的图像,是一个全卷积网络(FCN)。

其实笔者认为可以将GNet改成FCN的,套用SPPNet的RoI Pooling即可,即对应的roi prop为整个输入图像

MNet:这个有点牵强了,毕竟只是2个conv而已,这里论文作者只是为了清晰表达出网络,才这么说的吧。

GNet:由几个conv和fc构成,其作用是:

后接一个cls layer,对固定大小的输入图像进行分类

为什么可以这样做?

这是因为论文作者用到了具有类别标签的Places Sence Dataset(共2448872张,205种类别)

当然如果你的数据集没有这个类别标签,以上的framework,只需去掉这个cls layer,同样适用于你的数据集

后接fusion layer,使得CNet可以融合global的features

笔者认为这个fusion layer是framework的关键点之一,将不同网络的特征融合到一起,学习到不同的特征


Fig3

CNet:一个反卷积网络,类似auto-encoder的后半部分网络,从feature maps还原到target image。

这里的target image不是彩色图像(如rgb),而且彩色空间里的CIE L*a*b*的a*b*。

这是该paper的巧妙之处。(事实上,paper里也做了RGB和YUV的对比实验)

学习a*b*,而不用学习L*(灰度图本身就是L*),这样不仅降低了网络的学习难度,而且不需要改变原来的L*。

就是不断的上采样,使得最后的输出和target image的大小一致。

(目前反卷积网络目前还是很火的)

当然target image不一定需要和原图大小一致,可以低于原图的分辨率,这不会影响到网络的performance的。

到目前,整个framework清晰明了,那么怎么定义它的目标函数,以及如何训练?


Fig4

显然目标函数由2个损失函数构成,一个CNet的预测和目标图像之间的欧式距离,一个GNet分类的cross-entropy loss,用alpha变量来控制不同网络的权重。

笔者认为,cls layer在这里不仅起到学习global features,semantic context这些信息,而且在一定程度上减缓了梯度回传的梯度弥漫的问题,使得这么大的网络更容易学。

为了使得网络可以加快收敛或者能够收敛起来,paper里提及可以用目前比较火的batch normalization,以及AdaDelta optimizer来优化网络。

显然该网络非常大,训练起来还是有难度的,至少要求数据集巨大,你的显卡也是杠杠的。

paper里提及训练该网络,需要3周,骚年颤抖吧。

一旦网络训练完毕,测试起来就相当方便了。

那么怎么做到不同图像的style的transfer?

由于LNet是是两个网络构成,一个对应原图输入,一个对应固定大小的输入,

当这两个输入对应于不同的输入图像时,固定大小的输入图像的style就会嫁接到原图输入上。

这是由于GNet学习的是固定大小输入图像的global feature和semantic context导致的。

当然这两张图像至少要做语义上是相同的或者相似的,即它们的类别标签是一样或者相似的,这样的style transfer才比较有意义。

到目前为止,该网络是不需要用户互动的,可以说是user-intervention-free。

另外普遍认为深度模型的泛化能力还是比较牛逼的,以及几十年前的灰度图和目前的灰度图没多大区别,

该网络当然能够在几十年前的灰度图上表现出色。

由于灰度图到彩色图是不可逆的,所以灰度图对应的彩色图可能是多种情况的,所以paper里的网络不能够处理好这种情况,如下图所示:



嗯,看到这里,恭喜你,因为笔者已经不知道说啥好了。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  CNN colorization