【读点论文】deeplabv3 Rethinking Atrous Convolution for Semantic Image Segmentation-ASPP

Rethinking Atrous Convolution for Semantic Image Segmentation

  • 多尺度速度的级联或并行卷积的模块来捕获多尺度上下文,为了解决多尺度目标分割的问题
  • Atrous Spatial Pyramid Pooling module:Atrous空间金字塔池模块
  • 该模块探测多个尺度的卷积特征,使用图像级特征编码全局上下文,进一步提高性能
tips:提出的“DeepLabv3”系统在没有DenseCRF后处理的情况下显著改进了我们之前的DeepLab版本
  • 深度卷积神经网络在语义分割任务下的两大挑战

    • 由于连续的池操作或卷积跨步导致的特征分辨率降低,这使得dcnn学习越来越抽象的特征表示
    • 这种局部图像变换的不变性可能会妨碍密集的预测任务,而密集的预测任务需要详细的空间信息
    • 物体在多个尺度上的存在(捕获多尺度上下文的可选架构4种)

      • DCNN应用到图像金字塔中,提取每个尺度输入的特征,不同尺度的目标在不同的特征地图上变得突出

        • 【读点论文】deeplabv3 Rethinking Atrous Convolution for Semantic Image Segmentation-ASPP_第1张图片
    - 同样的模型,通常具有共享的权重,被应用于多尺度输入
    
      - 同样的模型,通常具有共享的权重,被应用于多尺度输入
    
      - 大尺度输入保留了小对象的细节
    
      - > 例子
        >
        > - 通过拉普拉斯金字塔变换输入图像,将每个比例的输入输入到DCNN中,并合并来自所有比例的特征图
        > - 采用从粗到细的多尺度输入
        > - 直接调整多个尺度的输入,融合所有尺度的特征
    
    • 编码器-解码器结构利用编码器部分的多尺度特征,从解码器部分恢复空间分辨率

      • 【读点论文】deeplabv3 Rethinking Atrous Convolution for Semantic Image Segmentation-ASPP_第2张图片
    - 在编码器中,**特征图的空间维数逐渐减少**,从而更容易在编码器输出的深度中捕获更长的距离信息;(b)的编码器中,目标细节和空间维数逐渐恢复。
    
    • 额外的模块级联在原始网络之上,用于捕获远程信息(上下文模块)

      • DenseCRF用于编码像素级的成对相似性,通过级联发展几个额外的卷积层来逐步捕获远程上下文。
      • 【读点论文】deeplabv3 Rethinking Atrous Convolution for Semantic Image Segmentation-ASPP_第3张图片
    - 该模型包含以级联方式排列的额外模块,以编码远程上下文
      - 一种有效的方法是将DenseCRF(结合高效的高维滤波算法)加入到dcnn
      - 提出**联合训练CRF和DCNN组件**
      - 在DCNN的置信图(**置信图是最终包含输出通道等于预测类数的DCNN特征图**)上使用几个额外的卷积层来捕获上下文信息
    
    • 空间金字塔池化通过多速率、多有效视场的过滤器或池化操作探测进入的feature map,从而捕获多个比例尺的目标。

      • 【读点论文】deeplabv3 Rethinking Atrous Convolution for Semantic Image Segmentation-ASPP_第4张图片
    - 在特征图上应用了4个不同Atrous速率的并行Atrous卷积
    
    - 在级联模块和`SPP`的框架下,我们使用`Atrous Convolution`来增大滤波器的感受野去融合多尺度的语境信息。
    
    - 表明它可以有效地对不同尺度的特征进行重采样,从而准确有效地分类任意尺度的区域,采用不同速率的ASPP可以有效地捕获多尺度信息
    
      - 随着采样率的增大,有效滤波器权值(即应用到有效特征区域的权值,而不是填充的零)的数量会变小
      - ![在这里插入图片描述](https://img-blog.csdnimg.cn/db9a43e97425443ab85e632c45b3547e.png#pic_center)
    
      - 当atrous率较小时,所有9个滤波权值都应用到feature  map上的大部分有效区域,当atrous率变大时,3×3filter退化为a1×1filter,因为只有中心权值有效。
    
    - Atrous空间金字塔池(ASPP)
    
      - 问题:在应用a3×3 atrous卷积时,由于图像边界效应,无法捕获远程信息,有效地简单退化to1×1convolution
      - 方案:提出将图像级特征纳入ASPP模块
    
    - 该模型使用空间金字塔池来**捕获多个范围内的上下文**
    
    - > 例子
      >
      > - ParseNet中利用图像级特征来获取全局上下文信息。
      > - DeepLabv2提出了atrous空间金字塔池(ASPP),其中**具有不同速率的并行atrous卷积层捕获多尺度信息**。
      > - 基于LSTM的方法来聚合全局上下文
    
  • 标准卷积是rater= 1的特殊情况,而atrous卷积允许我们通过改变速率值自适应地修改滤波器的视场

    • 【读点论文】deeplabv3 Rethinking Atrous Convolution for Semantic Image Segmentation-ASPP_第5张图片

    • 引入的跨步可以让我们更容易地在更深的区块中获取长距离的信息

  • 训练策略

    • 学习率的调整策略:

      • 本文采用“聚”学习率策略,其中初始学习率乘以(1-iter/max_iter)**power。其中power=0.9
    • Crop size(Caffe)

      • 利用crop_size这种方式可以剪裁中心关注点和边角特征,mirror可以产生镜像,弥补小数据集的不足.
      • 为了使大速率的空洞卷积有效,需要大的Crop size;而滤光率较大的滤光权值大多应用于填充的零区域
    • Batch normalization

      • 批标准化, 和普通的数据标准化类似, 是将分散的数据统一的一种做法, 也是优化神经网络的一种方法.
      • 具有统一规格的数据, 能让机器学习更容易学习到数据之中的规律.
    • Upsampling logits

      • Odds(A)= 发生事件A次数 / 其他事件的次数(即不发生A的次数)
      • 概率P(A)和Odds(A)的值域是不同的。
      • Logit一词的分解,对它(it)Log(取对数),这里“it”就是Odds
      • 通常,我们先借助Logit变换,让我们方便拟合数据(即逻辑回归),然后再变换回我们熟悉的概率。就是这么一个循环,为数据分析提供了便利。某种程度上,这类变换,非常类似于化学中的催化剂
    • Data augmentation

      • 本文通过随机缩放输入图像(从0.5到2.0)和随机左右翻转来应用数据增强。
  • 改进主要来自于在模型中加入并微调批处理归一化参数,以及更好地编码多尺度环境。

  • 为了编码多尺度信息,提出的级联模块逐渐使atrous率翻倍

  • 提出的atrous空间金字塔池化模块增强了图像级特征,在多个采样率和有效视场下用滤波器探测特征

  • A. Effect of hyper-parameters

    • 有三个主要区别(77.21%,定量分析)
      1. 更大的Corp size
        • 如果我们采用更小的作物大小值,则性能显著下降至67.22%,表明小的作物大小导致的边界效应影响了在atrous Spatial Pyramid Pooling (ASPP)模块中使用大atrous率的DeepLabv3的性能。
      2. 训练期间的上采样logits
        • 如果我们在训练时不向上采样(instead downsample the groundtruths),性能下降到76.01%
      3. 微调批处理归一化
        • 当训练DeepLabv3而不调整批处理规范化时,性能下降到75.95%
  • DeepLabv3的突出点在于:

    • 空洞卷积的使用,这让我们在级联模块和空间金字塔池化的框架下,能够获取更大的感受野从而获取多尺度信息。

    • 改进了ASPP模块:由不同采样率的空洞卷积和BN层组成,我们尝试以级联或并行的方式布局模块。

      • BN层

        • Batch Normalization:解决在训练过程中,中间层数据分布发生改变的问题,以防止梯度消失或爆炸、加快训练速度

          • 归一化(Normalized Data)(为什么我们需要对数据都要做一个归一化预处理的原因):
            • 神经网络学习过程本质就是为了学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低;
            • 一旦每批训练数据的分布各不相同(batch 梯度下降),那么网络就要在每次迭代都去学习适应不同的分布,这样将会大大降低网络的训练速度。
            • 对于深度网络的训练是一个复杂的过程,只要网络的前面几层发生微小的改变,那么后面几层就会被累积放大下去。
            • 一旦网络某一层的输入数据的分布发生改变,那么这一层网络就需要去适应学习这个新的数据分布,所以如果训练过程中,训练数据的分布一直在发生变化,那么将会影响网络的训练速度。
        • BN训练

          • 随机梯度下降法(SGD)对于训练深度网络简单高效,需要我们人为的去选择参数(学习率、参数初始化、权重衰减系数、Drop out比例等),使用BN之后,你可以不需要那么刻意的慢慢调整参数。
          • 神经网络一旦训练起来,那么参数就要发生更新,除了输入层的数据外(因为输入层数据,我们已经人为的为每个样本归一化),后面网络每一层的输入数据分布是一直在发生变化的,因为在训练的时候,前面层训练参数的更新将导致后面层输入数据分布的变化。把网络中间层在训练过程中,数据分布的改变称为:“Internal Covariate Shift”
            • 要解决在训练过程中,中间层数据分布发生改变的情况,于是就有了Batch Normalization,这个算法的诞生。
          • BN的地位:与激活函数层、卷积层、全连接层、池化层一样,BN(Batch Normalization)也属于网络的一层。
          • BN的本质原理:在网络的每一层输入的时候,又插入了一个归一化层,也就是先做一个归一化处理(归一化至:均值0、方差为1),然后再进入网络的下一层。
        • BN的作用

          1. 改善流经网络的梯度
          2. 允许更大的学习率,大幅提高训练速度
          3. 减少对初始化的强烈依赖
          4. 改善正则化策略:作为正则化的一种形式,轻微减少了对dropout的需求
          5. 再也不需要使用使用局部响应归一化层了(局部响应归一化是Alexnet网络用到的方法,搞视觉的估计比较熟悉),因为BN本身就是一个归一化网络层;
            • 正则化(Regularization:避免过拟合的一种技术)
      • 神经网络学习过程本质就是为了:学习数据分布,一旦训练数据与测试数据的分布不同,那么网络的泛化能力也大大降低,所以需要使用输入数据归一化方法,使训练数据与测试数据的分布相同。
        https://www.cnblogs.com/king-lps/p/8378561.html
        
  • 上采样与下采样

    • 上采样:简单的理解就是把图片进行放大了。在算法中,在我们做图像识别过程中,需要对图像进行像素级别的分类,因此在卷积提取特征后需要通过上采样将feature map 还原到原图中。

      • 图像放大几乎都是采用内插值方法,即在原有图像像素的基础上在像素点之间采用合适的插值算法插入新的元素
      • 常见的上采样方法有双线性插值以及转置卷积、上采样(unsampling)和上池化(unpooling).
    • 下采样:

      • 背景:机器学习算法就是从大量的数据集中通过计算得到某些经验,进而判定某些数据的正常与否。但是,不均衡数据集,显然少数类的数量太少,模型会更倾向于多数集。

      • 常用的下采样方法

        • 随机下采样

          • 从多数类样本中随机选取一些剔除掉。这种方法的缺点是被剔除的样本可能包含着一些重要信息,致使学习出来的模型效果不好。
        • EasyEnsemble 和 BalanceCascade

          • EasyEnsemble和BalanceCascade采用集成学习机制来处理传统随机欠采样中的信息丢失问题。
          • EasyEnsemble将多数类样本随机划分成n个子集,每个子集的数量等于少数类样本的数量,这相当于欠采样。接着将每个子集与少数类样本结合起来分别训练一个模型,最后将n个模型集成,这样虽然每个子集的样本少于总体样本,但集成后总信息量并不减少。
          • BalanceCascade则是采用了有监督结合Boosting的方式(Boosting方法是一种用来提高弱分类算法准确度的方法,这种方法通过构造一个预测函数系列,然后以一定的方式将他们组合成一个预测函数)。
            • 在第n轮训练中,将从多数类样本中抽样得来的子集与少数类样本结合起来训练一个基学习器H,训练完后多数类中能被H正确分类的样本会被剔除。
            • 在接下来的第n+1轮中,从被剔除后的多数类样本中产生子集用于与少数类样本结合起来训练,最后将不同的基学习器集成起来
            • BalanceCascade的有监督表现在每一轮的基学习器起到了在多数类中选择样本的作用,而其Boosting特点则体现在每一轮丢弃被正确分类的样本,进而后续基学习器会更注重那些之前分类错误的样本。
        • NearMiss

          • NearMiss本质上是一种原型选择(prototype selection)方法,即从多数类样本中选取最具代表性的样本用于训练,主要是为了缓解随机欠采样中的信息丢失问题。

          • NearMiss采用一些启发式的规则来选择样本,根据规则的不同可分为3类:

            1. NearMiss-1:选择到最近的K个少数类样本平均距离最近的多数类样本
            2. NearMiss-2:选择到最远的K个少数类样本平均距离最近的多数类样本
            3. NearMiss-3:对于每个少数类样本选择K个最近的多数类样本,目的是保证每个少数类样本都被多数类样本包围
        • https://blog.csdn.net/weixin_44451032/article/details/99974665
          
  • 双线性插值:双线性插值是对线性插值在二维直角网格上的扩展,用于对双变量函数(例如 xy)进行插值。其核心思想是在两个方向分别进行一次线性插值。
  • 转置卷积
    • 一个卷积操作就是一个多对一的映射关系
    • 我们想要将输入矩阵中的一个值映射到输出矩阵的9个值,这将是一个一对多(one-to-many)的映射关系。这个就像是卷积操作的反操作,其核心观点就是用转置卷积
  • 全局特征上下文交互有助于正确分类像素进行语义分割

其核心思想是在两个方向分别进行一次线性插值。

  • 转置卷积
    • 一个卷积操作就是一个多对一的映射关系
    • 我们想要将输入矩阵中的一个值映射到输出矩阵的9个值,这将是一个一对多(one-to-many)的映射关系。这个就像是卷积操作的反操作,其核心观点就是用转置卷积
  • 全局特征上下文交互有助于正确分类像素进行语义分割

你可能感兴趣的:(论文笔记,计算机视觉,深度学习,机器学习)