DeconvNet 笔记

关键点

  1. encoder-decoder 结构
  2. 反卷积层:deconvolution + relu + upooling,可学习的
  3. 结合目标检测:把每张图片的不同的 proposal 送入网络,通过聚合得到最后的语义分割结果。

一、FCN 突出的缺点

  1. 网络的感受野是固定的

那些大于或者小于感受野的目标,就可能被分裂或者错误标记。具体点来说,对于大目标,进行预测时只使用了local information所以可能会导致属于同一个目标的像素被误判为不连续的标签(即不同目标),如下图,左侧为input,中间为ground truth,右侧为result,可见这个大巴由于too large所以被分割成了很多不连续的部分。

而对于小目标来说,经常会被忽略掉,被当作了背景。如下图,左侧为input,中间为ground truth,右侧为result。由于人很远所以在图中面积too small,结果被当作背景了:

  1. 目标的细节结构常常丢失或者被平滑处理掉

输入 deconvolution-layer的label map太粗糙了(只有16x16),而且 deconvolution 这个步骤在 FCN 这篇文章中做的过于简单了。缺少一个在大量数据上得到训练的deconvolution network 使得准确地重构物体边界的高维非线性结构变得困难。

二、网络结构

DeconvNet 和 SegNet 的结构非常类似,只不过 DeconvNet 在 encoder 和 decoder 之间使用了 FC 层作为中介,用于增强类别的分类。

三、Unpooling

与 SegNet Upsample 的方法一样。正向 pooling 的时候用 switch variables 记录 Maxpooling 操作得到的activation的位置,在 Unpooling 层利用 switch variables 把它放回原位置,从而恢复成 pooling 前同样的大小。

switch variables 记录的只是 Pooling 的时候被选中的那些值的位置,所以 Unpooling之后得到的 map 虽然尺寸变回来了,但是只是对应的位置有值,其它地方是没有值的。

四、Deconvolution

五、网络总结

较低层网络更多捕捉物体的粗略的外形,像位置,形状,区域等,在高层网络中捕捉更加复杂的模式类别。反池化与反卷积在重构feature map时发挥着不同的作用,反池化通过原feature map中较强像素的位置信息来捕捉 example-specific 结构,进而以一定的像素来构建目标的结构细节,反卷积中的卷积核更倾向于捕捉 class-specific 形状,经过反卷积,虽然会有噪声的影响,但激活值仍会与目标类别进行相关联。该网络将反卷积和反池化结合,获得较好的分割效果。

六、训练方法

  1. Batch Normalization :将每层的输入分布变为标准高斯分布来减少内协变量,在卷积和反卷积的每一层后添加BN层。避免进入局部最优。
  2. 两阶段训练:首先基于标签,对含有实例的图片进行裁剪得到包含目标的图片,进一步构成较简单的数据进行预训练,然后使用复杂的数据进行微调,复杂数据集基于简单数据进行构建,proposals 与 groundTruth 的 Iou 大于 0.5 的被选作用于训练。但此做法的弊端是,目标物的位置与尺寸信息与原始数据集出现差别。

七、Inference

  1. 聚合实例分割图
\[\text{像素最大值:} P \left ( x,y,c \right ) = max_{i} G_{i} \left ( x,y,c \right ), \forall _{i}\] \[\text{像素平均值:} P \left ( x,y,c \right ) = \sum_{i} G_{i} \left ( x,y,c \right ), \forall _{i}\]
  1. 结合 FCN
Table of Contents