Bob学步
首发于Bob学步
精读深度学习论文(20) DeepLab V1

精读深度学习论文(20) DeepLab V1

0. 前言


1. 素质四连

  • 要解决什么问题?
    • 使用CNN解决图像分割问题是,主要存在两个问题:
  1. 下采样(downsampling,如max pooling)导致的细节信息丢失。
  2. CNN的空间不变性(spatial insensitivity/invariance)。
  • 用了什么方法解决?
    • 使用带孔卷积解决下采样问题。
    • 使用Dense CRF解决空间不变形问题。
  • 效果如何?
    • 在VOC2012上获得了当时的最优性能,在测试集上达到71.6%的IOU。
    • 同时,运行效率达到8 frames per second。
  • 还存在什么问题?
    • 基于VGG提取特征,有些落后(从现在的角度看)。
    • 从目前来看,效果一般。

    2. 基本概念

    2.1. High-Level & Low-level vision task

    • 在论文中提到:CNN适合于Hight-Level Vision Task(如图像分类),不太适合于Low-Level Vision Task(如图像分割、姿态估计)。
    • 个人理解:High-Level Task指的是对细节信息不敏感、抽象度比较高的任务。Low-Level Task指的是对细节敏感、抽象度比较低的任务。

    2.2. CNN处理图像分隔任务存在的问题

    • 下采样导致的信息丢失:
      • 下采样(如max pooling)导致分辨率下降,从而引起细节信息(局部信息)的丢失。
    • 空间不变性/不敏感:
      • 以获取图像中物体为核心的决策(High Level Vision Task,如图片分类任务),必然需要空间不变性/不敏感。换句话说,对于同一张图片进行空间变换(如平移、旋转),其图片分类结果是不变的。
      • 但对于图像分割等Low-Level Vision Task,对于一张图片进行空间变换后,其结果是改变的。

    3. 模型搭建

    3.1. 空洞卷积

    • 参考资料: 知乎提问:如何理解空洞卷积(dilated convolution)?
    • 空洞卷积的引入:
      • 由于普通下采样(max pooling)方法导致分辨率下降、局部信息丢失。
      • 为什么要用max pooling:每个像素有较大receptive field,且减小图像尺寸。
      • 想使用一种方法,不进行max pooling,但也能使每个像素有较大receptive field。
    • 论文中原图描述空洞卷积:
    • 基于pre-trained model理解空洞卷积的意义
      • 由于max pooling存在问题,所以在DeepLab中,减少了原有VGG网络中的max pooling的数量。
      • 由于max pooling的减少,因此不能使用普通卷基并调用VGG pre-trained model中的权重来进行训练。
      • 使用空洞卷积时,其权重还可以使用VGG pre-trained model。

    3.2. Dense CRF

    • 参考资料:
    • CRF的引入
      • CRF在传统图像处理上主要做平滑处理。
      • 但对于CNN来说,short-range CRFs可能会起到反作用,因为我们的目标是恢复局部信息,而不是进一步平滑图像。
      • 引入fully connected CRF来解决这个问题,考虑全局的信息。
    • 这部分还不明白,之后要单独学习。

    3.3. Multi-scale Prediction

    • 多尺寸预测,希望获得更好的边界信息。
    • 引入:与FCN skip layer类似。
    • 实现:
      • 在输入图片与前四个max pooling后添加MLP(多层感知机,包括3*3*128以及1*1*128),得到预测结果。
      • 这四个预测结果与最终模型输出拼接(concatenate)到一起,相当于多了128*5=640个channel。
    • 效果不如dense CRF,但也有一定提高。最终模型是结合了Desne CRF与Multi-scale Prediction。

    3.4. DeepLab V1 结构

    • 主要是对原有VGG网络进行了一些变换:
      • 将原先的全连接层通过卷基层来实现。
      • VGG网络中原有5个max pooling,先将后两个max pooling去除(看别的博客中说,其实没有去除,只是将max pooling的stride从2变为1),相当于只进行了8倍下采样。
      • 将后两个max pooling后的普通卷基层,改为使用带孔卷积。
    • 为了控制视野域(同时减少计算量),对于VGG中的第一个fully connected convlution layer,即7*7的卷基层,使用3*3或4*4的卷积来替代。
      • 计算时间减少了2-3倍。
    • 其他训练信息
      • 损失函数:交叉熵之和。
      • 训练数据label:对原始Ground Truth进行下采样8倍,得到训练label。
      • 预测数据label:对预测结果进行双线性上采样8倍,得到预测结果。

    4. 其他

    • 疑问:
      • multi-scale,输入图片以及几个max pooling的输出的分辨率都不一致,那是通过什么方法最终获取到同一分辨率的?
    发布于 2018-04-24

    文章被以下专栏收录