DeepLab语义分割

参考:
DeepLab V1 V2 V3 V3+及pytorch实现

V1

  1. DeepLab是针对语义分割任务提出的模型,主要使用了DCNN、CRF、空洞卷积做密集预测。
  2. DeepLab是结合了深度卷积神经网络DCNNs和概率图模型DenseCRFs的方法。
  3. DCNNs做语义分割时精度不够,原因是DCNNs的高级特征的平移不变性,也叫作高层次特征映射。平移不变性增强了对数据分层抽象的能力,但是也会阻碍低级视觉任务,例如姿态估计、语义分割等。
  4. DeepLab解决DCNNs做语义分割准确度不够的解决措施是:将DCNNs层的响应和完全连接的条件随机场CRF结合,同时将hole即空洞卷积应用到DCNNs模型上。
  5. DCNN深度卷积神经网络在图像标记任务中存在两个技术障碍:一是信号下采样。二是空间不敏感invariance
  6. 信号下采样的技术障碍涉及到在DCNN中重复最大池化和下采样带来的分辨率下降,这会导致丢失细节。DeepLab采用atrous带孔算法扩展感受野,获取更多的上下文信息。
  7. 空间不敏感的技术障碍涉及到分类器获取以对象中心的决策是需要空间变换的不变性,这限制了DCNN的定位精度,DeepLab采用完全连接的条件随机场DenseCRF提高模型捕获细节的能力。
  8. DeepLab用在语义分割上,目的是做逐像素分类。

总结DeepLab v1的模型结构

  1. 它是一个VGG-16
  2. 为了使得图像语义分割更准确,5个max-pooling层skip了后面两个(这里不确定是不是准确,因为在github上的代码实现上,发现似乎没有取出后面两个max-pooling层,而是将stride=2改为了stride=1,kernal=3),卷积层的输出整体stride从32x 下降到8x
  3. 由于后面2个max-pooling层影响了其后的卷积层,使其视野分别下降了2x和4x,为了保持其原来的视野,将其改为空洞卷积,dilation分别为2和4,理念与DRN一致。如下图
    DeepLab语义分割_第1张图片
  4. 它也是一个全卷积网络,即将全连接层替换为1 * 1的卷积层,输出和原图大小一致的特征图,对每个像素分类。
  5. 使用双线性插值上采样8x得到和原图大小一致的像素分类图。
  6. 使用CRF条件随机场使得最后分类结果的边缘更精细,如下图,但是V3以及V3+就没有再使用CRF
    DeepLab语义分割_第2张图片
  7. 多尺度预测,希望获得更好的边界信息,与FCN skip layer类似,在输入图片与前四个max pooling后添加128 * 3 * 3和128 * 1 * 1的卷积层,这四个预测结果和最终模型输出拼接到一起,相当于多了128 * 5=640个channel。

密集分类下的卷积神经网络

DCNN的设计

调整VGG16模型,转为一个可有效提取特征的语义分割系统,先将VGG16的FC层转为卷积层,模型变为全卷积方式,在图像的原始分辨率上产生稀疏的计算检测分数,为了以更密集的计算得到,在最后两个最大池化层不下采样(padding到原大小),再通过2或4的采样率的空洞卷积对特征图做采样扩大感受野,缩小歩幅。

V2

三个主要贡献

  1. 使用空洞卷积,作为密集预测任务的工具。空洞卷积能明确控制DCNN内计算特征响应的分辨率,可以有效扩大感受野,在不增加参数量和计算量的同时获取更多上下文。
  2. 提出空洞卷积池化金字塔,以多尺度的信息得到更强健的分割结果。空洞空间卷积池化金字塔并行的采用多个采样率的空洞卷积层来探测,以多个比例捕捉对象以及图像上下文。
  3. 组合DCNN和概率图模型,改进分割边界结果。

特点

  1. 在V1基础上,基础层由VGG16换成了更先进的ResNet,添加了多尺度和ASPP模块。
  2. 空洞卷积能在保持计算量和参数量的同时扩大感受野,配合使用金字塔池化方案可以聚合多尺度的上下文信息,可以通过空洞卷积控制特征分辨率,配合先进的DCNN模型,多尺度联合技术、并在DCNN之上继承全连接的CRF可以获取更好的分割结果。

V2相较于V1最大的改动

增加了受SPP启发的ASPP,在模型最后进行像素分类前增加一个类似inception的结构,包含不同rate空洞间隔的空洞卷积,增强模型识别不同尺寸的同一物体的能力。

基于DCNN的语义分割系统有三类:

  1. 第一类:采样基于DCNN的自下而上的图像分割级联。
  2. 第二类:依靠DCNN做密集计算得到预测结果,并将多个独立结果做耦合。
  3. 第三类:使用DCNN直接做密集的像素级别分类。直接使用全卷积方式应用在整个图像,将DCNN后续的FC层转为卷积层,为了处理空间定位问题,使用上采样和连接中间层的特征来细化结果。

V3

主要贡献

  1. 重新讨论了空洞卷积的使用,在级联模块和空间金字塔池化的框架下,能获取更大的感受野而获得多尺度信息。
  2. 改善了ASPP模块,由不同采样率的空洞卷积和BN层组成,尝试以级联和并行的方式布局模块。
  3. 使用大采样率的3 * 3的空洞卷积,因为图像边界响应无法捕捉远距离信息,会退化为1 * 1的卷积,将图像级特征融合到ASPP模块中。

V3的主要变化

  1. 使用了Multi-Grid策略,即在模型后端多加几层不同rate的空洞卷积,如下图
    DeepLab语义分割_第3张图片
  2. 将batch normalization加入到ASPP模块
  3. 具有不同atrous rates的ASPP能有效的捕获多尺度信息,随着采样率的增加,游戏哦啊filter特征权重(即有效特征区域,而不是补零区域的权重)的数量会变小,极端情况下,当空洞卷积的rate和feature map大小一致时,3 * 3卷积会退化为1 * 1
  4. 为了保留较大视野的空洞卷积的同时解决这个问题,V3的ASSP加入了全局池化层+conv 1 * 1+双线性插值上采样的模块,如下图
    DeepLab语义分割_第4张图片
全局特征或者是上下文之间的互相作用有助于语义分割,下面是四种不同类型利用上下文信息做语义分割的全卷积网络。
  1. 图像金字塔:使用共享权重的模型,适用于多尺度的输入,小尺度的输入响应控制语义,大尺度的输入响应控制细节。通过拉布拉斯金字塔对输入变换成多尺度,传入DCNN。融合输出。这类的缺点是:因为GPU存储器的限制,对于更大、更深额模型不方便扩展,通常用于推断阶段。
  2. 编码器—解码器:编码器的高层次特征容易捕获更长的距离信息,在解码器阶段使用编码器阶段的信息帮助恢复目标的细节和空间维度。
  3. 上下文模块:包含了额外的模块用于级联编码长距离的上下文,一种有效的办法是DenseCRF并入到DCNN中,共同训练DCNN和CRF。
  4. 空间金字塔池化:可以捕捉多个层次的上下文。

一句话概括:采用了级联的语境模块和并联的增广的ASPP模块,通过这样的方式,多尺度的语境信息能更好的辅助分割算法,得到准确的物体描述。

V3+

V3+最大的改进

  1. 将DeepLab的DCNN部分看成是Encoder,将DCNN输出的特征图上采样成原图大小的部分看成Decoder,构成Encoder+Decoder体系,双线性插值上采样是一个简单的Decoder,而强化Decoder可以使得模型整体在图像语义分割边缘部分取得好结果。
  2. 具体说也就是:V3+在stride=16的DeepLab V3模型输出上采样4x后,将DCNN中0.25x的输出使用1 * 1的卷积降维后与之连接,再使用3 * 3卷积处理后双线性插值上采样4倍后得到更精细的结果。

V3+其他的改进

  1. 借鉴MobileNet,使用Depth-wise空洞卷积+ 1 * 1卷积
  2. 使用修改过的Xception

你可能感兴趣的:(计算机视觉,CV)