前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >图像风格转移Automatic Photo Adjustment Using Deep Neural Networks

图像风格转移Automatic Photo Adjustment Using Deep Neural Networks

作者头像
水球喵子
发布2018-04-10 10:58:08
1.4K0
发布2018-04-10 10:58:08
举报
文章被收录于专栏:计算机视觉计算机视觉

P图技术日新月异,有些P图大神的作品,让我们驻足相忘~嗷嗷,如何使用神经网络对这些大神的P图风格进行学习,我们这篇论文就提出了下面的方法。我认为这篇文章能很好的帮助我们去理解浅层的神经网络,然后他提出了一个描述子【文中花很大篇幅介绍这个描述子】作为网络的输入,再然后在选择训练图片上【得到有代表性的图片】,提出了自己的方法。

框架最开始是选择有代表性的图片,比如选出了下面的这个图片。

整个框架流程,蓝色框表示描述子的生成

我们需要知道,我们训练的目的是什么?既然提到了神经网络,人家是怎样把一个图片调整的问题使用神经网络去解决呢?

接下来,我们先回答下这两个问题,然后按照框架的流程,依次来解释他是如何做到的。

图片调整示例,上面是原图,下面是调整后的GroundTruth,艺术家调整后的图

1.训练目的 

首先,描述下图片调整的流程,假设,我们存在很多图像对,上面车车的示例只是其中一对,看原图中右上角的黄色标记(右侧黑弧线上起点处),便于理解,把这个黄色的标记看成是一个像素,把这个像素表示为描述子【高维向量】,通过一个映射函数F,得到对应像素的颜色值(黑色弧线下终点,深黄色)。

我们网络训练的目的就是,训练得到一个F映射函数,对于输入的所有描述子,输出得到像素的值与对应像素真实值的差异最小->也就是我们的目标函数。

2.如何使用神经网络去解决图片调整的问题? 

神经网络可以表示任意复杂的连续函数,所以可以使用神经网络得到上面提到的映射函数F,【Hornik et al.1989论文下载】,举个可以理解的例子,我假设大家了解了CNN的基础知识了,对于CNN的框架,我们输入是一张   长*宽*通道数    这么大的图片,最终得到的是高维向量表示这张图片。对于我们的图片调整的例子呢?我们输入的是一个高维向量,得到的是调整后对应像素的颜色值。这两个过程都是由多->少的过程,所以,我们也可以用神经网络来解决图片调整的问题。【实际上是神经网络可以解决回归问题(多自变量对一个因变量)】

这两个问题解决完了,我们按照框架流程,依次解释他要做什么和他怎么做到的。


一、选取有代表性的图片

为什么要选取有代表性的图片呢?

基于图像对的增强,需要艺术家对图片操作,得到对应的图片。既然要让艺术家处理,总不能让人家处理上万幅图片吧----累死他了。所以我们要向找出有代表性的图片,选取的是尽量少的图片包含的物体类别最丰富,作为我们的训练样本的同时,让艺术家减少工作量【省钱啊】。

延伸下,如果现实有这种大量数据图像对存在的话,我认为可以把他们用深层的网络直接对图片进行训练。可以参考Let there be Color!

如何选取呢?

首先,我们有一堆原图,如何选出一个有代表性的子集让艺术家来处理,文中提出了交叉熵的方法。第一部分用的是BOW【关于BOW详细介绍请看我的另一篇文章】,然后呢,使用信息熵来选取了。

BOW得到每张图片的直方图     算法的变量解释

每次向子集加入一张图片,使得扩展后的子集交叉熵最大,I*表示熵最大时选出的当前子集

首先,我们知道当一个随机变量均匀分布时,熵值最大,这里的随机变量指的直方图的横坐标物体类别数即BOW中的【codewords】,我们就是想要codeword都尽可能出现,并且出现的概率是一样的,这样选出的图片中的类别就很丰富。


二、选取有代表性的像素点

为什么要选取有代表性的像素呢?

比如,一张图片中人只占图片的一小部分,天空占据整张图片的绝大部分,如果用图片的所有像素进行训练,映射函数中就会包含很多天空的映射信息,导致训练很不平衡。这样就保证了映射函数中不同类别均衡。此外,过度密集的像素会增加训练代价。

如何选取呢?

对一张图片I,我们使用基于图的分割,从每个不规则的区域中,选取固定数量的pixel。

三、新的描述子用于这些有代表性的像素

如何描述?

首先,先使用场景分割,和物体分割。【用于之后的描述】

生成语义标签图

先进行场景分割,主要分割出草地、路、天空,得到Parsing map。类别数Sp【SceneParsing】

在进行目标分割,主要分割出人、车、建筑物,得到每个类别的detection置信图。最后,把这些融合起来,在每个像素位置,选出置信度最高的值,作为这个像素的类别,得到Detecion map。类别数Od【Object Detection】

然后,将上面两个分割结果合并,合并时,我们把目标分割置信值大于一个阈值的像素label保留,去直接覆盖场景分割的label。对于最终合并的图,会有一些噪声,我们使用了别人的算法解决这些噪声,得到最终的语义标签map。

对于给定分割好的语义图,我们找到之前得到的那些像素点,对这些像素点操作,找出一个P作为示例,下面是得到他的描述子过程。

红点为P点,不同形状表示不同label类别

根据分割的结果,在P的周围划出一个正方形区域,区域生成是以等比数列倍数为3生成,如上图所示,根据框里的内容,生成一个直方图,横坐标是    场景类别+物体类别=所有的label标签,类似于bow中的直方图横坐标codeword。纵坐标是划分区域之后对应label类别出现的次数。我们直接串联所有的lebel对应的数值,生成具有上下文意义的描述。试验中,作者使用积分图简化计算,详细可以私信讲。

这样,具有上下文信息的特征就得到了,我们再融合像素本身特征+全局特征得到最终的描述子。


四、我们的深度神经网络模型

网络模型

训练模型的输入是我们之前得到的那些描述子,虚线之下的输出是φ(θ,Xv),在我们实验里有30个神经元,把他看为3*10的矩阵,与基向量V(cj)10*1相乘,得到pixel的Lab的值,计算他与真实值的距离——相减的二范数。目标函数就是这个。测试时,输出是像素值。

v是superpixel,Sv是从superpixel中采样的pixel,Xv是靠近superpixel质心位置的特征向量(描述子)

也就是说,输入到网络中训练的是superPixel那么多个,论文中一张图片7000个。变化的是V(cj),pixel的基向量。

我们测试的时候,选出的也是superpixel中靠近质心的pixel作为输入,得到φ(θ,Xv)这个颜色转换矩阵,对这个superpixel中的所有像素φ(θ,Xv)*V(cj),得到最后颜色值。

然后,我们就大功告成了。


实验部分

实验很多,也很有趣,我们只在这讲两个。

提出的方法与Hwang作比较

上面的图,两个方法使用相同的数据集,横坐标是像素点L2错误直方图。随机选择250张图的那个直方图,我们的方法出现2-3个错误的图片个数是60多,7--12个错误的有大概110个,我们可以看出,我们的方法出现少量错误的图片占据大部分。

验证交叉熵选图片的好处

图中,我们可以获取两个信息,选择图片张数超过50张的时候,L2错误不再减少。在选取少量图片的时候,比如10张,我们的错误率最少。


论文讲完了,巨累,该跑实验了,理解的不对的地方欢迎指正。

实验详细介绍:

比较坑的是,实验中中没有给如何选有代表性的图片和如何选有代表性的点,木有办法拿自己的图片在他给的代码里实现

Automatic Photo Adjustment Using Deep Neural Networks 论文实验

Automatic Photo Adjustment Using Deep Neural Networks 论文实验训练测试部分

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017.06.21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 1.训练目的 
  • 2.如何使用神经网络去解决图片调整的问题? 
  • 一、选取有代表性的图片
  • 二、选取有代表性的像素点
    • 三、新的描述子用于这些有代表性的像素
      • 四、我们的深度神经网络模型
      • 实验部分
      领券
      问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档