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

news/2024/7/24 4:29:48

论文地址: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 与其他模型相比

在这里插入图片描述


http://www.niftyadmin.cn/n/960389.html

相关文章

oracle ocp题库变化,052最新考试题及答案整理-30

30、Which is true when a database instance is shut down? A. Only transactional and normal modes wait for all uncommitted transactions to commit or rollback and then close the database. B. Immediate, transactional, and normal modes all result in a checkpoi…

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

论文地址:https://arxiv.org/pdf/1606.00915.pdf 1 deeplabv2的概述 主要贡献 1 强调使用空洞卷积。作为密集预测任务的强大工具,空洞卷积能够明确的控制 DCNN 内计算特征响应的分辨率。 既可以有效的扩大感受野,在不增加参数量和计算量的同时…

Spring系列之Spring框架和SpringAOP集成过程分析(十一)

转载请注明出处:https://blog.csdn.net/zknxx/article/details/80725173 我们在这篇文章中来分析一下AnnotationAwareAspectJAutoProxyCreator这个类,看这个类的名字我们大概可以知道它主要是为AspectJ注解提供服务的类。这个类不得了了是一个相当厉害的…

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

论文链接:https://arxiv.org/abs/1706.05587 1 deeplabv3的主要贡献 我们知道: 连续的池化和下采样,使特征分辨率下降,不利于定位全局特征或上下文之间的互相作用有利于语义分割的效果   deeplabv3的主要贡献 提出了更通用的框架…

思维导图—描述vue执行机制

xmind地址 参考(排序按照看过的时间顺序) 剖析 Vue.js 内部运行机制Vue.js 技术揭秘Vue源码阅读 - 文件结构与运行机制【大型干货】手拉手带你过一遍vue部分源码当面试官问你Vue响应式原理,你可以这么回答他Vue源码剖析——render、patch、up…

labelme标注软件的使用 || 语义分割数据标注、批量转换、多类别转换颜色错位问题

源码地址:https://github.com/wkentaro/labelme 1 labelme的安装 工作环境: ubuntu16 anconda   安装命令: 安装不同的工程python相关库,建议创建不同的虚拟环境,然后进行安装(当然直接安装在base环境下&…

01背包问题关于空间优化的讨论

今天学习到了dp(其实以前就学过,不过没学好),再次看到背包问题的时候,突然意识到空间优化过后,他对剩余体积的遍历方式改变了! 看看背包九讲上的伪代码: 这是优化空间之前的 这是优化…

deeplabv3开源工程详解(2)—— 使用自己的数据集进行训练、迁移学习

前言 deeplabv3是当前较为常用的语义分割的神经网络,且整个训练工程已经全部开源,使用公布的模型进行测试或基于自己的训练都可以得到一个较好的结果。   deeplabv3开源工程详解(1)—— 开源模型测试自己的图片 deeplabv3开源工程…