ECCV 2016的文章
github代码:DeepJointFilter
Motivation
Basic Idea about Joint image filtering
Joint image filtering要解决的问题是给定一张Guidance Image,和被noise影响或是Low-spatial-resolution的Target Image,我们要利用这样的Guidance Image作为prior,将Guidance Image中的structural details的信息transfer到对应的Target Image上,最终得到一张High-Resolution的Target Image.
TrackOff
- 需要的部分
Guided image中和target image consistent structures. - 不需要的部分
避免Guided image中erroneous structures的影响.
Inconsistent structure problem in Joint image filtering
Guidance image和Target image中的structures并不都是consistent的,传统的Filtering based和Global optimization framework based的方法都缺乏对erroneous structures部分的关注,或者说因为传统方法的局限性,需要explicit filter kernel或者是handle-designed object function,因此不能很好handle这个问题。
作者提出了一个learning-based方法,构建一个CNN的网络来得到joint filter,来handle这种inconsistent structure problem.
Contributions
- 提出了一个learning-based framework - CNN,来构建joint image filters,来解决guided fitering中的inconsistent structure问题.
- 利用上述learned filters,作者在四个joint depth upsampling datasets上得到了state-of-the-art performance.
- 作者证明了在RGB/D datasets上train好的模型对于输入数据的类型有很好地泛化能力,能够transfer到一系列的domains上。
Related Work
Joint Image filters
传统方法中的Joint image filtering的方法可以分为如下两类:
explict filter based
比较有代表性的就是bilateral filtering和它的变式,以及之后的guided image filtering.
这种方法的问题是kernel的pattern是显式定义的,缺乏inconsistency check,会引入不必要的erroneous structures.-
global optimization based
这类方法一般会有一个object function,主要包含了data terms和regularization terms。- data term
确保output尽可能接近于input target image. - regularization term
这是大多数方法做文章的地方,主要是希望output的structures尽可能接近guidance image.
这种方法的问题是比较time-consuming,同时handle-designed object function不能很好反应自然世界的复杂情况.
- data term
Deep model for low-level vision
受到CNN在high-level视觉任务上的有效应用的启发,近些年在一些low-level的视觉任务上也出现了一些CNN的应用,比如image denoising, rain drop removal, image super-resolution, optical flow estimation等等.
作者在这些工作的基础上受到了启发,希望利用CNN强大的特征提取和泛化能力,来解决joint image filter的问题。
Network Architecture
整个CNN model主要包含three sub-networks: CNNT,CNNG,CNNF
-
CNNT
负责提取Target Image的特征,可以看做是non-linear的feature extractors,来capture the local structural details.
-
CNNG
负责提取Guidance image的特征.
CNNF
负责concatenate sub-network CNNT 和subnetwork CNNG的特征,来生成最终的joint filtering的结果。
整个网络可以看做是从target image和guidance image的feature responses中,进行non-linear regression.
要注意的几个点:
- 各个子网络都是9x9conv+1x1conv+5x5conv,都是三层,但是输出的channels数量有细微的区别,单个子网络的结构类似于SRCNN..
- 在特征提取的两个子网络CNNG和CNNT的输出的feature map的channel数量都是1,作者认为更多地channel可能会有助于特征的表达,但是实验发现会降低训练速度,而且精度没有太大提升(这里要质疑一下,真的吗)
- 作者继续增加网络层数,更深的网络并没有提升性能,认为和SRCNN的结论一致,所以认为更深的网络并不能带来性能的提升(然而SRCNN已经被后面的VDSR网络反驳了,这个结论也有待论证)
- 更大的Kernel和Filter的数量没有帮助性能的提升。
当然这个看似非常简单的网络,作者也给出了为什么这样设计的思路,还是有很强的逻辑性在里面的,之后将会分析。
Loss Function
作者用的就是最基本的L2 Loss来train.
Design Ideas
要不要直接把target image和guidance image concat训练一个CNN作为CNNF
经验主义告诉他们performance肯定不好,他们做了一些实验,如下:
Blurry boundaries and the texture-copying
作者认为guided image上的detail structrues没有很好transfer到target image,比如床的边缘结构。而不需要的texture的信息却出现在了最终的image上,比如墙上的纹理。
通过加深网络,这样的现象并没有减缓,而作者提出的网络却可以handle这两个问题。
所以作者认为这样直接Concat guidance image和target image的方式是不好的。
什么样的指导是有效的
之后作者思考了既然这样是不好的,那是为什么,什么样的指导是有效的?
作者认为RGB直接Concat起来效果不好,因为一次性混合了太多的信息(texture,indensity,edges)
如果把原始的RGB图像换成RGB检测得到的Edge Map,特征更加干净直接,是不是会有一定的作用。
作者做了如下实验:
作者发现确实加了Edge Map以后效果比直接Concat RGB图像好很多.
因此作者认为有效的特征,可以更好的进行指导,于是才出现了划分两路分别提取特征的网络,效果证明这样的方式比Edge Detection的结果更有效。
Experimental Results
Network Training
160000 training patch pairs of size 32x32 from 1000 RGB an depth in NYU2 dataset.
image upsampling: 4x,8x,16x
Test
Depth Upsampling
在Middlebury,Lu,NYU v2, SUN RGB/D四个Dataset上测试
各个Dataset情况:
其实效果和传统方法差的不多,个人感觉。
Discussions
What has the network learned
作者把CNNG部分输出的Feature map,和Edge Map做了比较,
发现网络学到的结果更加的shape,说明CNN特征提取的结果是比较好的。
但是我们会发现这时候被子上的不必要的纹理也被提取了出来,别急,作者在后面会解释
Selective structure transfer
作者认为RGB那路学到的Feature有可能是inconsistent feature,比如前面我们提到过的被子的纹理,但是CNNF部分的网络可以有效的滤除那部分的信息,实验结果如下:
作者提取了各个子网络的中间特征层,发现在Fusion网络的帮助下,墙上的窗户,被子的纹理这些inconsistent feature得到了抑制。
作者又举了一个例子,关于texture-copying问题,传统的方法本身利用的就是guidance image的structure信息,当Guidance image中有很强的color constrast时,就会导致text-copying.而Fusion网络有助于帮助解决这个问题。
我的总结
总体来看这篇文章的网络其实没有太大的创新,feature map的concat也是非常直接常规的操作,子网络的设计也借鉴了其他问题的网络。
个人觉得这篇文章的亮点就在于整个网络设计的流程,对出现的问题一步步地分析,并且证明了每一步的修改的有效性,整个逻辑还是非常严谨的。
我自己在读这篇文章的时候想到的问题,作者都会合理的在后面一一进行解释,这点是比较值得欣赏的。
其他的网络设计上的创新,就见仁见智了,我觉得没有太大的针对这个问题的创新点。