论文阅读记录: Automatic Image Colorization sig16

原创 2016年06月03日 16:26:16

sig论文阅读记录

Let there be Color!: Joint End-to-end Learning of Global and Local Image Priorsfor Automatic Image Colorization with Simultaneous Classification ( siggraph 2016 )

论文简介

论文主页:http://hi.cs.waseda.ac.jp/~iizuka/projects/colorization/en/

作者是来自Waseda University(早稻田大学)的 Satoshi Iizuka 、 Edgar Simo-Serra 、 Hiroshi Ishikawa

这篇sig paper主要是基于深度学习做Colorization的,相关的工作也有不少,使用CNN的也有几篇论文,但是这篇Paper的效果是非常出众的,从figure1展示的效果来看,从Gray Image还原的Color Image 效果十分惊艳。

Figure1:

这里写图片描述

下面我们来大体介绍一下这篇Paper的要点:

Key Point:

  • 首先这篇Paper提出了一种基于全局先验(global priors)和局部特征(local image features)自动上色方法。使用卷积神经网(CNN),从small image patches中提取局部信息,从整张图像完成全局先验。这整个过程是端对端学习的(end-to-end learning),不需要预处理和后期处理。

  • 传统的Colorization算法需要用户交互,图割等手段,而这篇Paper基于深度学习数据驱动,可以全自动的上色。不过关于这一点,在我测试了一些结果之后,我认为如果在自动生成的基础上再加上交互,实用性会大大加强。

  • Paper提出的方法可以对任何分辨率的图像上色,这是和大部分基于CNN的方法所不同的,这当然和网络结构有关,后面会细说。

  • Paper提出的方法可以做到基于global信息,完成不同图像之间的风格转换,这个后面也会根据网络结构细说。

  • 论文使用了一个大型场景分类的数据集来进行模型的训练,利用数据集中的分类标签更加有效和有鉴别性的进行了全局的学习,比如利用图像的类别信息:室内,室外,白天,夜晚等来引导网络学习图像的语义(semantic context)信息。使得网络可以区分不同场景下的图像,来提高performance。论文也证明了这种方法比单纯使用局部信息要优秀很多。

  • 使用的色彩空间为CIE L* A * B * ,论文后面也说明了使用L* A * B *比 RGB和YUV更接近Ground truth,并且通过这一点,也很巧妙地降低了网络的学习难度,保证了输出的分辨率与输入相同,这里后面会细说。

  • 最终模型的泛华能力是比较强的,不仅适用于现在设备拍到的灰度图像,还适用于几十年前,甚至一个世纪之前拍到的图像。

  • 模型包括4个部分(整个framework由4个sub-network构成):

    • low-level feature network:底层的卷积网络,分为两个网络,两个网络的权重是共享的,用于从图像中提取最基本的特征,并后接不同的网络。

    • mid-level feature network:一个两层conv,感觉为这个专门起个名不大合适。与 global-level feature network相融合得到Fusion Layer。

    • global-level feature network:由几个conv和fc组成的分类网络,对输入的固定大小的图片进行分类,与mid-level feature network共同构成Fusion Layer,让colorization network可以得到 global feature。

    • colorization network:一个反卷积网络,从feature maps还原到target image。

网络结构:

这篇Paper主要是基于卷积神经网络的,网络结构自然是作者精心设计的,为一非循环图,作者把网络结构分成了四个主要部分,low-level feature network,mid-level feature network,global-level feature network,colorization network,通过这个网络完成了我们上述的要点。下面我们来仔细看一下论文作者设计的网络:

这里写图片描述

上图很详细的表现了整个网络结构,我们按照作者划分的几个部分来看一下整个网络的细节:

low-level feature network:

这里写图片描述

一个6层的卷积网络,用于直接从输入图像提取基本特征,激励函数:ReLU。这部分网络分为两个网络,两个网络的权重是共享的。

我认为这里分成两个网络是因为其后面接的网络是不同的,一个网络接用于图像分类的 global-level feature network来完成全局先验,另一个网络接mid-level feature network + colorization network反卷积网络来完成上色。

其中接 global-level feature network的网络是固定大小的(112*112),需要将图像Scaling后输入,之所以固定大小我觉得这是因为这部分网络是是用来确定图像的所处环境(学习semantic context),说白了就是一个图像分类的网络,所以采取了和AlexNet相似的结构,固定大小conv + fc 的结构。

而接 mid-level feature network + colorization network的网络是不固定大小的(H/2 * W/2),这里也很好理解,colorization network的目的在于可以处理任意输入大小的图像,是一个全卷积网络(FCN),所以网络大小取决于原图。

也因为这样的设计,虽然全局特征的计算是使用固定大小的图片,但是通过Fusion Layer将全局特征与局部特征融合,使得可以计算任意分辨率的图像。

这部分网络的下采样并不是采用的max pooling层,而是使用了strides,这种方法要优于max pooling,目前也比较流行。
(use convolution layers with increased strides)

mid-level feature network:

这里写图片描述

这部分网络是一个两层conv,激励函数:ReLU,感觉把这一部分单独拿出来命名确实有些牵强,可能是为了更清楚的描述整个网络吧。这部分网络的输入为low-level feature network输出的H/8 * W/8 * 512维特征,经过两层卷积神将网络后输出H/8 * W/8 * 256维特征与 global-level feature network输出的256维向量进行融合得到Fusion Layer。

global-level feature network:

这里写图片描述

因为论文作者用到了具有类别标签的Places Sence Dataset(共2448872张,205种类别),所以可以通过这些标签让网络学习到照片的semantic context,来作为全局特征。因此在global-level feature network后接一个ClassificationNetwork完成场景分类,使用互熵损失完成训练。

所以这部分网络是由4个conv和3个fc组成的分类网络(激励函数:ReLU)。说白了就是对输入的固定大小的图片进行分类,输出为一个256维的向量,与mid-level feature network共同构成Fusion Layer,让colorization network可以得到 global feature。

Fusing Global and Local Features(Fusing Layer):

这里写图片描述

作者一直强调全局特征与局部特征的融合,我也认为这个Fusing Layer是framework的关键点之一。通过将不同网络的特征融合到一起,学习到不同的特征,提升performance。例如,如果全局特征表明,它是一种室内图像,局部特征将偏向于不尝试添加天空颜色或草的颜色,而是偏向于尝试家具的颜色。

mid-level feature network将low-level feature network输出的H/8 * W/8 * 512维特征,经过两层卷积神将网络后,得到了 H/8 * W/8 * 256维特征;global-level feature network输出的全局特征为一256维向量;这两者通过作者提出的Fusing Layer进行了融合,使得colorization network能够基于局部与全局信息进行上色。

融合公式为:

Yfusionu,v=σ(b+W[YglobalYmidu,v])

这里写图片描述

这里把global-level feature network和mid-level feature network通过一层网络进行了融合,图上示例画的很清楚。

colorization network:

这里写图片描述

这部分网络是由一系列conv Layer和upsample Layer组成反卷积网络,类似auto-encoder的后半部分网络,从feature maps还原到target image。upsample Layer使用最近邻的方法(nearest neighbour)来不断地上采样,conv和upsample不断交叉输出直到size为输入图像的一半。

colorization network的输出层是一个使用sigmod函数做激励函数的Conv层,用来输出原始灰度图的色度(chrominance)

网络的最后会将色度(chrominance)与输入的亮度图(luminance)(即输入的灰度图)相结合,生成最后的彩色图像。

这里是Paper的一个非常巧妙的地方,之前说过作者一直使用的是CIE L* a * b * 色彩空间,那么为什么不使用常用的RGB,YUV呢?(事实上,paper里也做了RGB和YUV的对比实验)

这里网络的结果是色度(chrominance)也就是CIE L* a * b * 中的 a * b * , 而不是直接生成rgb。这是因为灰度图本身就是L* ,因此使用CIE L* a * b * 就可以只学习a* b* ,而不用学习L* ,这样不仅降低了网络的学习难度,而且不需要改变原来的L*。

paper里对RGB、YUV、L* a * b * 的对比实验:

这里写图片描述

训练:

目标函数:

先来看一下目标函数:

这里写图片描述

目标函数由2个损失函数构成,一项是colorization network的预测和目标图像之间的欧式距离,另一项是global-level feature network + ClassificationNetwork分类的互熵损失(cross-entropy loss),这都是非常常用的损失函数。也不需要过多解释,两者之间用alpha变量来控制不同网络的权重。

作者也提到过直接使用最终的上色结果和GrandTruth之间的欧氏距离作为损失,梯度回传整个网络的方法,但是这样会导致没法很好的学习到全局特征。

而且我认为ClassificationNetwork在这里不仅起到了学习global features,semantic context这些信息的作用,一个更重要的作用是在一定程度上减缓了梯度回传的梯度弥漫的问题,使得这么大的网络更加容易学习。

在反向传播过程中color loss 会影响这个网络,而分类损失只影响 ClassificationNetwork,global-level feature network以及共享的low-level feature network,不影响colorization network和mid-level feature network。

训练优化:

Paper中也提到了一些针对训练过程的优化:

一是对于训练数据大小的选择,如果使用的input image的size是224 * 224 像素,那么大家可以看到low-level feature network的两个子网络将完全相同,那么两个子网络的outputs就可以进行共享,也就是说训练的时候只需要训练一个网络就可以了,然后把outputs输入接下来的两种不同网络,对于作者使用的比较大的数据集,这里少训练一个子网络还是很有用的,所以作者在训练数据集的时候采用的是224 * 224像素的图像。

再就是为了使得网络可以加快收敛或者能够收敛起来,paper里还提到了可以用目前比较火的batch normalization,2015年提出,只过了一年已经300+引用,具体可以看大神的博客:
http://blog.csdn.net/hjimce/article/details/50866313

以及使用AdaDelta optimizer来优化目标函数,加快训练。

时间:

paper里提及训练该网络,所用的数据集有2448872个training image 和 20500个 validation image,总共有205个场景类别,比如修道院,会议中心,火山。训练使用的batch size 为 128,大约200000次迭代,11个epoch,在NVIDIA Tesla K80 GPU上训练整整需要3周。

至于计算时间,使用GPU的话作者说大概可以接近实时,不过作者的GPU是NVIDIA GeForce GTX TITAN X 。CPU是 Intel Core i7 - 5960X。

风格转换:

另外之前也提到了,Paper提到可以做不同图像的style的transfer,其实也是对网络结构的一个小利用:由于low-level feature network是是两个网络构成,一个对应原图输入进行局部特征提取,一个对应固定大小的输入完成全局分类,当这两个输入对应于不同的输入图像时,固定大小的输入图像的style就会嫁接到原图输入上。这是由于global-level feature network学习的是固定大小输入图像的global feature和semantic context导致的。

下面是一些style转换结果:

这里写图片描述

结果:

论文中贴出了很多验证集上的结果,看着效果都很不错:

这里写图片描述

甚至在一些100年前的老照片上也取得了不错的效果,说明模型的泛化能力还是很不错的:

这里写图片描述

作者为了证明加入全局特征的效果,也做了只使用上半部分网络,不使用全局信息的实验,下面是一些对比,BaseLine就是令融合公式中的alpha为0,即抛弃全局特征的实验结果。

这里写图片描述

这里写图片描述

可以看到上面这个图片把室内的天花板当做了天空,而增加了全局信息之后就不会出现这样的情况,对室内温暖的光线模拟的很好。

另外由于灰度图到彩色图是不可逆的,所以灰度图对应的彩色图可能是多种情况的,所以和Ground truth有所差距也是很正常的,比如paper中的这个例子:

这里写图片描述

当然这就是论文里提到的最失败的例子了,我自己从作者的Github上下载了作者的模型,然后随便找了一些自己拍的学校啊,网上的照片啊,进行尝试,我发现对于草和天空,木质纹理等等,这些自然场景,以及人的皮肤,上色的效果非常的好,对于建筑和人的衣物就差一些,有的时候建筑颜色很诡异,衣服很多情况下都是棕色。对于一些乱七八糟的图片,甚至是画的画,感觉模型总是会用棕色来进行填充,下面是一些结果,大家随意感受一下就好:

先来几个效果好的:

从网上找的一些自然风光的图:

GT:
这里写图片描述

Proposed:
这里写图片描述

GT:
这里写图片描述

Proposed:
这里写图片描述

GT:
这里写图片描述

Proposed:
这里写图片描述

GT:
这里写图片描述

Proposed:
这里写图片描述

学校的楼呵呵了,试了几个建筑效果都不大好,但是草和树很逼真
GT:
这里写图片描述

Proposed:
这里写图片描述

纹理比较复杂的,估计也没这个语义
GT:
这里写图片描述

Proposed:
这里写图片描述

还试了一些自己同学的照片,皮肤部分做的确实不错,涉及他人权利,就不上传了。

老照片:

input:
这里写图片描述

Proposed:
这里写图片描述

input:
这里写图片描述

Proposed:
这里写图片描述

从网上找的老毕业照
input:
这里写图片描述

Proposed:
这里写图片描述

input:
这里写图片描述

Proposed:
这里写图片描述

input:
这里写图片描述
Proposed:
这里写图片描述

input:
这里写图片描述

Proposed:
这里写图片描述

版权声明:本文为博主原创文章,未经博主允许不得转载 *作者:MingChaoSun *博客地址:http://blog.csdn.net/sunmc1204953974

相关文章推荐

CUDA编程(九)并行矩阵乘法

CUDA编程(九)矩阵乘法 在之前我们一直围绕着一个非常简单的求立方和的小程序学习CUDA,不过这个立方和的小程序没有什么实际意义,这篇博客我们用CUDA并行了矩阵乘法,问题也比较简单,基于上一个立方...

CUDA编程(八)树状加法

CUDA编程(八)树状加法上一篇博客我们介绍了ShareMemory和Thread同步,最后利用这些知识完成了block内部线程结果的加和,减轻了CPU的负担,结果还是比较令人满意的,但是block的...

关于浮点数和IEEE754标准的一点理解

1.什么是浮点数? 小数点浮动的数,简称浮点数 2.

CUDA编程(十)使用Kahan's Summation Formula提高精度

CUDA编程(十) 使用Kahan’s Summation Formula提高精度 之前我们用CUDA完成了矩阵乘法,但是当然会存在很多问题,除了速度问题,GPU浮点数运算的精度也很差,本篇博客从...

一个整数倒序输出(2种方法)

#include #include using namespace std; int main() { int x,t,m=0; int i; char s[10]; cin>...

哈夫曼编码和译码(老师给的样题样解)

标题: 作业六----哈夫曼编码和译码 内容: [问题描述]有两个城市要进行通讯,已知他们通讯内容为字符集C且字符集中的每一个字符c的频率是f(c).现在要你给通讯内容编码使通讯信息量最少,并输出字符...

float与double的范围和精度

1 范围float和double的范围是由指数的位数来决定的。float的指数位有8位,而double的指数位有11位,分布如下:float:1bit(符号位)8bits(指数位)23bits(尾数位...
  • dxy612
  • dxy612
  • 2010-04-23 09:39
  • 95442

float的范围和有效数字怎么算出来的?

首先说一下:  范围是3.4E-38 ——3.4E+38,可提供7位有效数字。  上述这两个量都是近似值,各个编译器不太一样的。  下面我就将标准值是怎么定义的,和你说一下:  这个比较复...

【计算机视觉文章阅读之一】Perspective-aware Manipulation of Portrait Photos_siggraph2016

Perspective-aware Manipulation of Portrait Photos 对人脸进行多视角转化处理这篇文章是siggraph2016上的一股清流,siggraph上的文章一般...

cuda编程入门示例7

#include #include #include #include #define BLOCK_SIZE 16 static void HandleError(cudaError_t e...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)