计算机视觉论文阅读一:谷歌SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS

首先,文章原址:https://arxiv.org/pdf/1412.7062.pdf

 这篇文章是在DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs的前版本,deeplab很多思想都是本篇文章的扩写,毕竟同一群人的后续工作。

本博客不翻译论文,而写论文总结。因为博客作者字太丑,笔记记得太烂了,自己都不想回看,所以依赖于电脑。

计算机视觉论文阅读一:谷歌SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS

以及为什么还要总结一些历史啊论文之外的东西啊,当然是因为这些“废话”小白作者没看之前不知道啊。所以要学要记啊。

 

  • 摘要
  1. 这个网络是基于DCNN
  2. 像素级的分类或者说是语义分割
  3. 克服了DCNNs的不能局部精准物体分割问题(DCNNs优点在于局部扰动无关)所以说是个博弈,你又想认真看局部,又想对于局部变化不敏感
  4. 把最后一层DCNN网络的反馈和马尔科夫全连接场结合
  • introduction
    • DCNN一直用以解决高层次问题,比如图像分类,物体探测,优越性来源于对于局部变型(transform)不敏感,也就有助于层次化抽象有效信息
    • 本论文很重视运算效率,所以采用了hole算法来效率的解决同时又能得到密集的特征图,在此推荐一个博客里面hole讲的很细https://blog.****.net/touch_dream/article/details/79267818
    • caffe以及im2col function做的,该function将多通道特征图转换成vectorized patch我翻译为向量形式的一个包
    • 本网络是建立在VGG-16上的,调整了模型的weight。
    • 两个DCNN应用与labeling的技术性问题:1.signal down-sampling ---DCNN的maxpooling以及downsample导致了分辨率的减小2.空间扰动不敏感(空间无关)---会导致边缘探测模糊
    • 我们用hole算法来解决第一个问题
    • 我们用全连接的pairwise成对的CRF来解决第二个问题
    • 该CRF有三个优点:1.计算效率高 2.边缘细节抓取 3.可建立远范围的依赖(long range dependecies)
    • 我们DeepLab的三个优点:1.速度 2.准确率 3.简易
3.稠密标注的CNN网络

本章节讨论了如何在VGG16上调整,改成我们的网络,下图vgg16

计算机视觉论文阅读一:谷歌SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS



  • 3.1  EFFICIENT DENSE SLIDING WINDOW FEATURE EXTRACTION WITH THE HOLE
  1. 把VGG16的全连接层全都改成卷积层,并且在原始分辨率下做卷积(还不够,因为步长=32像素产生的探测分数太稀疏) 借用FCN中转换全连接层为卷积层的图:                                                                      计算机视觉论文阅读一:谷歌SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS
  2. VGG16最后两个max-pooling层后面跟着一个subsampling,我们把这个subsampling步骤去掉
  3. 这两个max-pooling层后面跟着的卷积层的filters也要增加大小,简单来讲就是往filter里面增加零元,将最后三个卷积层的filters大小增加两个零元素,并且把第一个全连接层增加四个。注意二维从3×3变成5×5和7×7了。这就是所谓的hole算法之前说这个为了能不破坏VGG16结构参数的基础上,产生更加dense的score,分辨率更高。
    1. 参考材料:https://blog.****.net/touch_dream/article/details/79267818,就是之前提到的那个,必须看哈。
    2. 可以看出来kernel size是没有变的还是3,步长也没有变。但是为了计算效率,我们可以将input步长分别增加到2和4像素来替代增补零元素。下图我们叫他图一:注意看最上面写着imput stride,下面是output stride                     计算机视觉论文阅读一:谷歌SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS
    3. 之所以可以这么做是因为,我们用caffe框架加上im2col这一个函数将多通道特征图转换成了向量化的包(vectorized patch).其实就是简化了零乘以漏掉的元素这一个步骤来提高运算效率,拿上图来说,仔细一想五个里面少算了两个,的确是有提高。
  4. 将1000-way的分类器改成21-way分类器。
  5. 最后的特征图,或者说score map相当于之前分辨率的8分之1.
  6. 损失函数是最后score map上每个位置的和。每个位置以及每个标签的权重是一样的,因为有些损失函数会考虑大的物体分配小的权重来平衡损失。(那么问题来了,你怎么逐项素标注原始图像。)
  7. 好,这就是逐项素标注的方法。最后特征图毕竟8分之1大小,而我们的目标是原始大小的逐项素标注。由于网络产出的特征图很平滑,所以我们可以利用简单的线性插值来增加分辨率到原始大小,好处就是不需要学习。所以很快。

好那么我们现在就有了原始图像大小的逐项素标注好的图片了。

  • 3.2控制感受野以及使用可卷积网络对稠密计算进行加速
  1. 先说说为什么要控制感受野。由于现有网络的感受野都太大了,vGG16是224×224,如果把全连接层换成全卷积层的话,感受野就是404×404.第一个全连接层就有4096个filters,大小是7×7的。不利于计算。
  2. 第一个全连接层下采样到4*4大小,3×3也行,感受野就从404下降到308了。运算速度旧提高了2倍多。
  3. 将全连接层的通道从4096 下降为1024,发现并没有损失performance
  4. 而且如果使用更小的网络,可以在轻型GPU上达到边录边segment,比方说特斯拉的自动驾驶。实时的。所以说吧,deeplab还是很看中test的速度的。
4  边界细节探测:全连接CRF和多规模的prediction

  1.   4.1  DCN网络和局部化挑战
                  因为更深网络和更多的maxpooling可以提供更加抽象,更加准确的分类特征,这就导致了细节上的粗糙,边缘的模糊上图:从左往右CRF迭代次数增加,第一个是GroundTruth。
计算机视觉论文阅读一:谷歌SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS
那么市面上现有两种解决方案:

  1. 利用多个卷积层的信息,比方说FCN
  2. 利用超像素表达Feedforward semantic segmentation with zoom-out features
  3. 我们的解方式就是将CRF与DCNN结合来弥补边缘探测问题

4.2 为了局部准确性,fighting!!——全连接CRF

下面的图就是在不同的CRF迭代次数下的对比效果:

可以看出来CRF还是很有用的。看下图:

计算机视觉论文阅读一:谷歌SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS

下面来说下传统来讲的CRF。

一般用来平滑去噪,离得近的节点更倾向于分配相同的标签。用于清理手工特征+弱分类器带来的伪预测。

对我们已经很平滑的结果来讲,我们缺失的是更加具体的边缘特征,所以short-range CRF肯定是没什么用,此处要用全连接的CRF模型,能量函数如下:

计算机视觉论文阅读一:谷歌SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS

tips:ubuntu的word libreOffice writer在剪裁之后粘贴的还是原始图像,因为裁剪的确不会直接把裁剪掉的丢掉,但是这是个bug吧?!人家libreOffice Impress就可以保存裁剪之后的。

计算机视觉论文阅读一:谷歌SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS

这个能量函数是对整个图片的标签预测而言的,所以能量函数中第一项是标签的可能性之和。第二项比较复杂,第二项是对任意两个不同节点,不论这两个节点离得多远,而对于我们这样全连接的就是N*N对,提取这两个节点的特征,然后把特征作为高斯核函数的自变量,乘以权重再求和,对每对节点一共K个高斯核,那么我们一共有N*N*K个高斯核函数。

之后公式(2)是核函数的具体含义。第一个核与像素位置以及色彩有关,第二个核只与位置有关。分母上的参数控制了高斯核的“范围”

后面作者解释了下这个模型可以经得起最大似然估计,之后说消息经过全连接CRF的传递可以解释为特征空间卷积,卷积用的是高斯核。截图最后一句话。

基本每个方法作者都要想一下加速,此处用了高维空间过滤算法high-dimentional filtering algorithms.(Adams et.,2010)

4.3  多规模预测(multy-scale prediction)

由于FCN还有Hariharan的结果还不错,所以我们也跟着试了这个多规模预测。mark:别人用的好,你要用,得提到一下谁用了。这个动作也比较多,我们写个序号。

  1. 把输入图像和头四个maxpooling层的输出,共五个feature map准备好(感觉这个叙述有点像菜谱)
  2. 给这五个feature map分别训练一个两层的感知机(第一层filters 128 个3*3大小,第二层128个 1*1大小)
  3. 我们再把这个MLP的特征图直接连到主网络最后一层的特征图上,这个混合特征送到softmax层,这样我们就增加128*5=640个通道的特征了
  4. 注意在整个过程中,我们都没有改变主网络的参数。

那么可想而知,这整个过程都是为了让边缘更加清晰。不过效果不如FCN那么好。

我觉得吧,FCN是用自己的feature map,也就是后面深层的会用上之前浅层得到的,而DeepLab则是自己再训练一个,参数肯定是不一样的,那么也许可以认为,如果使用FCN的方法,也许效果会更好一些。

0 回顾

我们先回顾一下流程,然后再说实验。看下图。

把原始图像通过加入HOLE算法以及全卷积化得新式DCNN。加入了多规模的特征图传到softmax层,插值扩大到原始图像大小,再用全联接的CRF细化边缘。



计算机视觉论文阅读一:谷歌SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS

实验

深度学习之类的论文实验很重要,之后做好了对比试验,才知道有没有效果。残差网络ResNet的实验还有SegNet的实验做的都特别好。

这个论文的实验不如ResNet以及SegNet,作者介绍了一下数据库,训练参数,评价指标。此处的训练注意,先训练DCNN固定DCNN参数,然后再训练CRF。

某些实验着重于自身创新点的对比,所以图表突出每增加一个创新点,就增加识别率。比如(a)。

计算机视觉论文阅读一:谷歌SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS

左边是和自己纵向对比,在自己的方法上修改,找到最好的组合,右边是横向对比,和其他网络对比。FOV是field of view,是感受野。IOU是交并比,自己画个韦恩图就明白了,左手ground truth,右手deeplab分割,交集比上并集。

感受野这里多说两句。由于使用了hole算法,得以在第一个全连接层通过改变输入的步长来控制感受野大小。请看图一,并非是我们conv中的步长。那么由于我们的目标是快速算出来,所以通过调整,再不损失表现的情况下,使用了3*3大小的filter,12输入步长最后两层filters就从4096下降到1024了。

另外再说一个对我来说新鲜的概念:Mean Pixel IOU along Object Boundaries.

计算机视觉论文阅读一:谷歌SEMANTIC IMAGE SEGMENTATION WITH DEEP CONVOLUTIONAL NETS AND FULLY CONNECTED CRFS

看右上角的(a)那个描边,也就是说,Ground Truth描边多宽,我DEEPLAb的描边能在你的粗线条描边范围内。但愿我说清楚了。

而(b)(c)则是描边宽度与落在里面的关系,你想啊,遍越宽,孜然落进去的越多咯,所以这个曲线是只增不减的。

之后就是图篇展示。

好了完。