• SS-Model【3】:DeepLabv2


    系列文章目录

    DeepLab语义分割系列(一):
    SS-Model【2】:DeepLabv1
    DeepLab语义分割系列(二):
    SS-Model【3】:DeepLabv2
    DeepLab语义分割系列(三):
    SS-Model【4】:DeepLabv3



    前言

    DeepLabv2是一个用于语义分割的架构,它建立在DeepLab的基础上,有一个无轨的空间金字塔集合方案。在这里,我们在输入特征图中应用了不同速率的平行扩张卷积,然后将它们融合在一起。由于同一类别的物体在图像中可能有不同的尺寸,ASPP有助于解释不同的物体尺寸。

    原论文链接:
    DeepLab: Semantic Image Segmentation with Deep Convolutional Nets, Atrous Convolution, and Fully Connected CRFs


    1. Abstract & Introduction

    1.1. Abstract

    回顾下 DeepLab v1 ,其主要是在 FCN 的基础上对 VGG 网络进行调参 fine tuning,并在最后加上一个全连接的 CRF,保证对 FCN 得到的结果在局部细节(边界)上进行优化。

    DeepLab v2 的主要贡献有三个,具体如下:

    • Atrous Convolution 代替原来上采样的方法,作为密集预测任务的强大工具,空洞卷积能够明确的控制 DCNN 内计算特征响应的分辨率。 既可以有效的扩大感受野,在不增加参数量和计算量的同时获取更多的上下文
    • ASPP (atrous spatial pyramid pooling) ,基于空间空洞金字塔池化的多尺度分割方法,即多尺度特征提取,ASPP 并行的采用了多个采样率的空洞卷积层来预测,用多个比例捕获对象以及图像上下文
    • 全连接的CRF,利用低层的细节信息对分类的局部特征(边缘)进行优化
      • 通过组合 DCNN 和 概率图模型 DenseCRF,改进分割边界结果。在 DCNN 中最大池化和下采样组合存在平移不变性,通过最终的DCNN层相应与全连接的CRF结合,来克服这个问题

    DeepLab v2 是在 DeepLab v1 的基础上进行改进。改进点有三个,具体如下:

    • backbone:用 RestNet 网络替代了 VGG网络
    • ASPP:解决了多尺度上存在对象的问题
    • DenseCRF:公式的更新

    主要优点

    • 效果:在 PASCAL VOC2012、PASCAL-Context、PASCALPerson-Part、Cityscapes 上都获得当时的最优的性能
    • 速度:现代 GPU 上,运行效率达到 8 FPS,DenseCRF 平均需要 0.5s(与v1一样)
    • 简单:系统是由两个非常成熟的模块结合而来,DCNN、CRF(与v1一样)

    1.2. Introduction

    在语义分割任务中,DCNN 面临三方面挑战:

    • 传统分类DCNNs中连续的池化和下采样将导致空间分辨率明显下降,不利于图像分割
      • 对应的解决方案:去掉最后几个最大池化层下采样,而在随后的卷积层中进行上采样,从而得到了采样率更高的特征图
    • 对象多尺度检测问题
      • 常用方法:将不同尺度重新调节至尺度相同并聚合特征图或分数图,但计算量大大增加
      • 解决方案:对特征层重采样,得到多尺度的图像文本信息,使用具有不同采样率的多个并行的空洞卷积层来有效地实现多尺度采样,提出的技术称为 ASPP
    • 以物体为中心的分类器,需要保证空间转换不变性 ,导致细节信息丢失
      • 使用跳跃层结构,从多个网络层中抽取高层次特征进行预测,并且使用全连接条件随机场增强捕捉精细细节能力,进行边界预测优化

    DeepLab 系统的整个过程(将 VGG16 和 ResNet-101 迁移到语义分割中),如下所示:

    • 将全连接层转为卷积层
    • 通过空洞卷积提高特征图分辨率,将原图降低8倍,而不是32倍
    • 使用双线性插值得到原图的分辨率
    • 输入到CRF得到最后的分割结果。

    在这里插入图片描述


    2. Methods

    2.1. Structure

    backbone 为 ResNet-101 的网络结构如下所示(不考虑MSC):

    在这里插入图片描述

    2.2. Atrous Convolution

    一维上的空洞卷积,如下所示:

    在这里插入图片描述

    其中rate是膨胀因子,空洞卷积公式如下:
    y [ i ] = ∑ k = 1 K x [ i + r ⋅ k ] w [ k ] y[i] = \displaystyle\sum^K_{k=1} x[i + r \cdot k] w[k] y[i]=k=1Kx[i+rk]w[k]

    参数含义:

    • y:输出信号
    • x:输入信号
    • w:卷积模板
    • K:滤波器长度
    • r:输入信号的采样间隔

    二维上的空洞卷积,如下所示:

    在这里插入图片描述

    空洞卷积有两种实现方式:

    • 方式一:先下采样输入特征图,使得特征图变为原来的 1 / 2,隔行去采样最后产生 r 2 r^2 r2 个子特征图,然后正常卷积,最后插值返回与输入大小相等的特征图
    • 方式二:先对卷积核上采样,将卷积核参数之间插入 ( r - 1 ) 个 0
      • 例如 K 大小的卷积核上采样之后大小为 k + ( k - 1 ) ( r - 1 )

    更详细的内容可以参考我的另一篇blog:SS【1】:转置卷积与膨胀卷积

    2.3. ASPP

    尝试的两种在多尺度上进行分割的方案:

    • 通过 resize 多尺度输入图片,取对象像素点位置最大的响应结果为最终结果
    • 受spatial pyramid pooling (SPP) 启发,得到 ASPP 结构

    ASPP 具体结构如下所示:

    在这里插入图片描述

    文中提出了 2 组感受野的尺寸:

    • ASPP-S: r = {2, 4, 8, 12}
    • ASPP-L: r = {6, 12, 18, 24}
      • 需要注意的是,在 DeepLabv1 中,我们堆叠使用空洞卷积层,该情况下堆叠空洞卷积层的空洞系数需要满足对应的条件(如:各空洞卷积层的空洞系数的最大公约数为1,具体信息请参考我的另一篇blog:SS-Model【2】:DeepLabv1
      • 此处所使用的一组空洞卷积层并不是堆叠使用,只是每次使用一组并将对应的结果融合,所以无需满足特定的条件

    将 ASPP 添加到 backbone 为 VGG16 的网络结构中:

    在这里插入图片描述

    2.4. CRF

    对于每个像素位置 i i i 具有隐变量 x i x_i xi (这里隐变量就是像素的真实类别标签,如果预测结果有21类,则 i ∈ 1 , 2 , . . , 21 i \in 1, 2, .. ,21 i1,2,..,21),还有对应的观测值 y i y_i yi(即像素点对应的颜色值)。以像素为节点,像素与像素间的关系作为边,构成了一个条件随机场(CRF)。通过观测变量 y i y_i yi 来推测像素位置i对应的类别标签xi。条件随机场示意图如下:

    在这里插入图片描述

    比起 DeepLabv1 的 CRF,v2 中的 CRF 修改了能量函数和二元势函数的表达式,给模型带来了一定程度的提升

    此处涉及到复杂的数学推导与计算,博主不是很了解,建议大家自行在网上搜索,到了 Deeplabv3 的时候,将不再使用 CRF 了

    2.5. Learning rate policy

    l r × ( 1 − i t e r m a x _ i t e r ) p o w e r lr \times (1 - \frac{iter}{max\_iter})^{power} lr×(1max_iteriter)power

    参数:

    • lr:初始学习率
    • iter:当前训练的“步数”
    • max_iter:整个训练过程所需迭代的“步数”
    • power:超参数,论文中的值为 0.9

    总结

    视频资料

    DeepLabv2 将空洞卷积应用到密集的特征提取,进一步的提出了空洞卷积金字塔池化结构、并将 DCNN 和 CR F融合用于细化分割结果。实验表明,DeepLabv2 在多个数据集上表现优异,有着不错的分割性能。

  • 相关阅读:
    设计模式定义
    UVa 762 - We Ship Cheap
    云游戏未来展望
    在ubuntu中搭建Java开发环境
    LLM之幻觉(一):大语言模型幻觉解决方案综述
    听GPT 讲Rust源代码--library/std(3)
    Spring Cloud(十一):Spring Cloud Security Oauth2
    Linux NetworkManager 的使用方法(nmcli和nmtui)
    Docker部署的时候从容器获取宿主机的CPU等信息
    TienChin 活动管理-准备工作
  • 原文地址:https://blog.csdn.net/HoraceYan/article/details/126574239