论文阅读 || 语义分割系列 —— deeplabv1 详解

论文地址:https://arxiv.org/pdf/1412.7062.pdf

1 deeplabv1 的简介

使用 DCNN 解决图像分割存在的问题

  • 1 下采样:增大感受野。但会导致分辨率的下降,丢失了细节信息
  • 2 CNN的空间不变性:根本是源于重复的池化和下采样。
  • 3 多个尺度上存在对象(在deeplabv2之后得以解决)

deeplabv1的解决方法:

  • 1 使用空洞卷积解决下采样的问题:将最后两个池化的 stride=1,不改变特征图的大小(空洞卷积扩大了感受野)
  • 2 使用DenseCRF解决了空间不变性的问题

deeplabv1 的效果:

  • 1 效果:在VOC2012 上获得了当时的最有性能,在测试集上达到了71.6%的 IOU
  • 2 速度:运行效率达到 8 FPS,其中 DenseCRF平均需要0.5s
  • 3 简单:系统是由两个非常成熟的模块的结合,DCNN、CRF

deeplabv1 存在的问题

  • 1 从目前来看,基于VGG提取特征,相对落后
  • 2 从目前来看,效果一般

2 基本概念

  • High-Level Vision Task:对细节信息不敏感、抽象度较高的任务(如 图像分类)
  • Low-Level Vision Task:对图像细节敏感、抽象度较低的任务(如 语义分割、姿态估计等)
  • 空间不变性:
    • High-Level Vision Task 以获取图像中物体为核心的任务,必然需要空间不变性\不敏感。也就是说,对于统一张图片进行空间变换(如旋转、平移)其图像分类的结果是不变的
    • Low-Level Vision Task 需要对空间敏感,任务的结果会随着图像空间变化而改变
  • 论文中的 output stride:输入通过网络的到的输出,output_stride = input size / output size
    例如:input image为224 * 224,经过多次卷积pooling操作后,feature map为7*7,那么output stride为224/7 = 32

3 模型搭建

神经网络部分的设计:调整 VGG16模型,转为一个可以有效提取特征的语义分割系统

  • 现将 VGG16 的 FC层转为 conv层,模型变为全卷积的方式
  • 将最后的两个最大池化层的stride=1(原本的output_stride=32,现在为 8)
  • conv5 修改为空洞卷积,rate=2;FC6的 rate=4
    在这里插入图片描述

训练时:(1) 在预训练的 VGG16 的权重上做 fine-tune;(2) 损失为 网络输出的特征图 与 ground truth下采样8倍 做交叉熵
测试时:(1)将网络输出结果双线性上采样8倍 得到结果

3.1 空洞卷积的使用

自己在另外一篇博客中有介绍到 空洞卷积

  • pooling:好处是 缩小特征图尺寸,增大感受野;坏处:分辨率下降,细节信息丢失
  • 空洞卷积:增大感受野,同时分辨率不下降

3.2 控制感受野的大小

在重新设计网络进行密集分数计算时,需要明确控制网络的感受域大小(receptive filed size FOV)。
这里调整的层,针对的是特征提取模块结束后的第一层,也就是FC1。

简单的说,当前很多基于DCNN图像识别方法都依赖于ImageNet上预训练的分类网络。比如VGG16卷积部分具有较大的感受野,将网络转化成全卷积网络,那么第一层的全连接有4096个7x7的卷积,是训练过程中的计算瓶颈。
如果将第一层的 FC大小变为4x4或者3x3,是的第一层的FC的计算时间降低了2-3倍,使网络变得高效,效果对比在下文实验中有介绍。


(该优化操作不为常见,就自己阅读的论文,看到仅在 deeplabv1、deeplabv2中使用)

3.3 DenseCRF

localization challenge

网络预测结果存在的问题:

  • 图像输入 CNN 是一个逐步抽象的过程,原本的位置信息会随着深度而减少、甚至消失
    例:FCN-based model 因为经过层层下采样和上采样(感受野大且重合),从而丢失了大量的位置信息。结果如下图,边界十分平滑,但实际需要的是 sharp segmentation
    在这里插入图片描述

可解决方法:

  • 利用神经网络中多层的信息估计边界
  • 采样超像素图片

CRF for accurate localization
  • 1 CRF 在传统图片处理上主要做平滑处理。即在决定一个位置的像素时,会考虑到周边的像素值,这样能够处理一定的噪声
  • 2 但对于 CNN 来说,short-range CRF 可能会起反作用,因为当前的目标是恢复局部信息,而不是进一步平滑图像
  • 3 引入 fully connected CRF累考虑全局的信息

使用空洞卷积 避免了层层上采样,得到了网络的输出。之后直接使用双线性插值(bilinear interpolation)恢复到原尺寸,然后使用 fully-connected conditional random fields(邻域间的锐化),得到最终的分割结果。
在这里插入图片描述


CRF 计算公式

对于每个像素位置 i 具有隐变量 xi (这里隐变量就是像素的真实类别标签,如果预测结果有21类,则 i ∈ ( 1 , 2...21 ) i\in(1,2...21) i(1,2...21)),还有对应的随机场观测值 yi (即像素点对应的颜色值)。以像素为节点,像素与像素间的关系作为边,构建了一个条件随机场(CRF)。通过观测变量 yi 来预测像素位置 i 对应的类别标签 xi。条件随机场示意图如下:
在这里插入图片描述整个模型的能量函数 E ( x ) = ∑ i θ i ( x i ) + ∑ i j θ i j ( x i , x j ) E(x)=\sum_{i}\theta_i(x_i)+\sum_{ij}\theta_{ij}(x_i,x_j) E(x)=iθi(xi)+ijθij(xi,xj)其中 x:对于全局的pixels概率预测分步; xi:其中一个pixel的概率预测分布
E(x)包括医院函数 θ ( x i ) \theta(x_i) θ(xi) 和二元函数势 θ i j ( x i , x j ) \theta_{ij}(x_i,x_j) θij(xi,xj) 两部分

  • θ i \theta_i θi:一元势函数
    定义在观测序列位置 i 的状态特征函数,用于刻画 观测序列对标记变量的影响。定义为: θ i ( x i ) = − l o g P ( x i ) \theta_i(x_i)=-logP(x_i) θi(xi)=logP(xi)也就是 我们观测到像素点 i 的当前像素为 yi,则其对应为标签 xi 的概率值(例如,在城市道路任务中,观测到像素点为黑点,对应车子的像素比天空可能性更大)。原先这个一元势函数是通过一些分类器完成的,现在 Deeplab 中有了DCNN来做像素分割,故这里 P(xi) 是取 DCNN 计算关于像素 i 的输出的标签分配概率。
  • θ i j \theta_{ij} θij 二元势函数
    定义在不同观测位置上的转移特征函数,用于刻画 变量之间的相关关系,以及 观测序列对其的影响。这里定义为: θ i j ( x i , x j ) = μ ( x i , x j ) ∑ m = 1 k w m ∗ k m ( f i , f j ) \theta_{ij}(x_i,x_j)= \mu(x_i,x_j)\sum_{m=1}^{k}w_m*k^{m}(f_i,f_j) θij(xi,xj)=μ(xi,xj)m=1kwmkm(fi,fj)
    • μ ( x i , x j ) = { 1 , i f x i ≠ x j 0 , o t h e r w i s e \mu(x_i,x_j)=\left\{\begin{matrix}1, if x_i\neq x_j\\ 0,otherwise\end{matrix}\right. μ(xi,xj)={1,ifxi=xj0,otherwise。因为任意两个像素点都有此项,故成为fuuly connected CRFs
    • k m ( f i , f j ) k^m(f_i,f_j) km(fi,fj) ( f i , f j ) (f_i,f_j) (fi,fj)之间的高斯核,fi 是像素i的特征向量。例如像素点 i 的特征向量 fi 用(x,y,r,g,b)表示。对应的权重 w m w_m wm 在deeplab 中高斯核采用双边位置颜色组合,式为 w 1 ∗ e x p ( − ∣ ∣ p i − p j ∣ ∣ 2 2 σ α 2 − ∣ ∣ I i − I j ∣ ∣ 2 2 σ β 2 ) + w 2 ∗ e x p ( − ∣ ∣ p i − p j ∣ ∣ 2 2 σ γ 2 ) w_1*exp(-\frac{||p_i-p_j||^2}{2\sigma_{\alpha}^2}-\frac{||I_i-I_j||^2}{2\sigma_{\beta}^2})+w_2*exp(-\frac{||p_i-p_j||^2}{2\sigma_{\gamma}^2}) w1exp(2σα2pipj22σβ2IiIj2)+w2exp(2σγ2pipj2)
      第一核取决于核像素位置§核像素强度(i),第二个核取决于像素位置§。也就是,二元势函数是描述像素和像素之间的关系。如果比较相似,那就可能是一类,否则就是异类,可以进行细化边缘。一般的二元势函数只读取像素点于周围像素之间的边,这里只用的是全连接,即像素点于其他所有像素之间的关系。`

3.4 多尺度预测

多尺度预测是希望获得更好的边界信息,与 FCN skip layer 类似。实现:

  • 首先,在输入图片和前4个 maxpooliing后添加 MLP(多层感知机,第一层是 3x3x33x128卷积,第二层是 1x1x11x128 卷积),得到预测结果
  • 然后,MLP输出的特征映射送到模型的最后一层辅助预测,合起来后模型的sofmax层输入特征多了5x128=640个通道

效果不如 dense CRF,但有一定的提高。最终模型:DenseCRF + Multi-scale Prediction

4 实验

4.1 训练细节

选项配置
数据集PASCAl VOC 2012 segmentation
分割图像数量 训练集1464、验证集1449、测试集1456、扩展训练集 10582
DCNN预训练的 VGG16
DCNN损失交叉熵
优化器SGD,batch=20
学习率初始为 0.001,最后分类层是0.01,每2000次衰减0.1倍
权重动量0.9,衰减系数0.0005
  • Deeplab 是由DCNN 和 CRF 组成,训练时分阶段进行的。即 DCNN 的输出是 CRF的一元势函数,在训练时CRF时保持固定
  • 在对 DCNN 做 fine-tune后,使用上述公式对 CRF 做交叉验证,在100个图像上。这里使用 w 2 = 3 w^2=3 w2=3 σ γ = 3 \sigma_{\gamma}=3 σγ=3 在小的交叉验证集上,给定初始搜索范围,采用从粗到细的寻找策略,寻找到最佳的 w 1 , σ α , σ β w^1,\sigma_{\alpha},\sigma_{\beta} w1,σα,σβ。所有的实验报告的平均迭代次数为10。

4.2 在验证集上的表现

在这里插入图片描述

DeepLabFOV(kernelsize=3x3,r=12)取得了一个很好的平衡。可以看出:

  • 【小卷积+高采样率】可以保持感受野、减小参数、加快计算,同时分割效果也很好
  • 多尺度特征的增加,使得性能提升约 1.5%;使用CRF,性能提升4%
4.3 多尺度的视觉表现 在这里插入图片描述

第一行是普通输出,第二行是带多尺度的输出。 可以看出多尺度输出的细节部分更好一些。

4.4 FC1 的感受野的影响

对于第一层 fc (已经替换成卷积),以通过调整输入滑动(input stride)来控制FOV(Field of View)。修改参数有以下性能: 在这里插入图片描述

  • 表中的 kernel size 和 input stride 都是针对 fc1 的。kernel size 为卷积核的size,input stride 为空洞卷积的 rate
  • 卷积核小,参数减少,速度提高
  • 增大rate,速度提高,平均 IOU 提高。【Deeplab-CRF-LargeFOV】性能和【Deeplab-CRF-7x7】一样,而且速度更快。
4.5 目标边界的平均IOU

验证数据集的对象边界周围有 “void” 标签,计算位于这些标签的 trimap 里的像素平均IOU,结果如图所示:
在这里插入图片描述

4.6 与其他模型相比

在这里插入图片描述

  • 14
    点赞
  • 46
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值