DeepLab 笔记

2019March10deeplabDeepLab笔记一、背景DCNN存在的问题:多次下采样使输出信号分辨率变小——空洞卷积池化对输入变换具有内在空间不变性——CRF二、空洞卷积1.作用保证感受野不发生变化得到密集的featuremap2.卷积核new\_kernel=kernel+\left(kernel-1\right…

大家好,又见面了,我是你们的朋友全栈君。

DeepLab 笔记

一、背景

DCNN 存在的问题:

  1. 多次下采样使输出信号分辨率变小 —— 空洞卷积
  2. 池化对输入变换具有内在空间不变性 —— CRF

二、空洞卷积

1. 作用

  • 保证感受野不发生变化
  • 得到密集的 feature map

2. 卷积核

3. 输出大小

4. 感受野

三、条件随机场(CRF)

作用:精细化边缘信息

DeepLab 后面接了一个全连接条件随机场 (Fully-Connected Conditional Random Fields) 对分割边界进行 refine label map。CRF 经常用于 pixel-wise 的 label 预测。把像素的 label 作为随机变量,像素与像素间的关系作为边,即构成了一个条件随机场且能够获得全局观测时,CRF 便可以对这些 label 进行建模。全局观测通常就是输入图像。


1.png

令随机变量 $X_{i}$ 是像素 i 的标签,$X_{i} \in L = l_{1},l_{2},\cdots,l_{L}$,令变量 $X$ 是由 $X_{1},X_{2},\cdots,X_{N}$ 组成的随机向量,N 就是图像的像素个数。

假设图 $G = \left(V,E\right)$,其中 $V = X_{1},X_{2},\cdots,X_{N}$,全局观测为$I$。条件随机场符合吉布斯分布,$\left(I,X\right)$ 可以被模型为 CRF,

在全连接的CRF模型中,标签 x 的能量可以表示为:

其中,$\theta_{i}\left(x_{i}\right)$ 是一元能量项,代表着将像素 i 分成 label $x_{i}$ 的能量,二元能量项 $\varphi_{p} \left(x_{i},x_{j}\right)$ 是对像素点 i, j 同时分割成 $x_{i},x_{j}$ 的能量。二元能量项表述像素点与像素点之间的关系,鼓励相似像素分配相同的标签,而相差较大的像素分配不同的标签,而这个“距离”的定义与颜色值和实际相对距离有关。所以这样 CRF 能够使图片尽量在边界处分割。最小化上面的能量就可以找到最有可能的分割。而全连接条件随机场的不同就在于,二元势函数描述的是每一个像素与其他所有像素的关系,所以叫“全连接”。具体来说,在 DeepLab 中一元能量项直接来自于前端 FCN 的输出,计算方式如下:

而二元能量项的计算方式如下:

其中,$\mu \left ( x_{i},x_{j} \right ) = 1$, 当 $i \neq j$ 时,其他的值为0。也就是说当标签不同是,才有惩罚。剩余表达式是在不同特征空间的两个高斯核函数,第一个基于双边高斯函数基于像素位置 p 和 RGB 值 I,强制相似 RGB 和超参数 $\sigma_{\alpha},\sigma_{\beta},\sigma _{\gamma}$ 控制高斯核函数的权重。

四、语义分割的常见结构


2.png

1. Image Pyramid

应用于多尺寸输入,来自小尺寸的特征响应可以编码远距离的上下文信息。较大尺寸的输入图片可以包含更多的物体细节信息。将不同尺寸的图片输入DCNN,并融合所有尺寸的feature maps。这种结构的缺点是对于较深的DCNN由于GPU的限制并不能对输入图片进行很好的scale操作。

2. Encoder-Decoder

可以获得锋利的边界,主要包含两部分:

  1. 编码层feature map的空间维度降低很多,更长距离的信息在更深的编码层中更容易被捕捉到。
  2. 解码层的物体细节和空间维度逐渐恢复。应用反卷积将低分辨率的feature map进行上采样。SegNet重新利用编码层中max-pooling 的 indices 和添加的卷积层来细化得到的特征。UNet是将对应层的特征信息进行拼接,并重新构造了网络。

3. Context Module

此模块包含额外的级联的模型,用于编码长距离下的语义信息。比如 Dense CRF 接到 DCNN 的后面,在 DCNN 最后一层增加几层卷积,使 CRF 和 DCNN 可以联合训练。目前,有一种普适性与稀疏性的高卷积,结合高斯条件随机场来进行分割。

4. Spatial Pyramid Pooling:

空间金字塔池化,可以池化不同分辨率的特征图来捕获丰富的上下文信息。

五、DeepLab V1

1. 关键技术

  • dilation convolution
  • CRF

2. 网络结构


3.png

上图为 VGG16 网络,DeepLab v1 在此网络上修改。


4.png

  1. 全连接层替换为卷积层;

  2. 去除降采样:将 pool4 和 pool5 层的 stride 由 2 改为 1,使得 VGG16 网络总的 stride 由原来的 32 变成 8。

  3. 引入空洞卷积:保证感受野不变
    • pool4 stride 改变,后面的层感受野都会随之改变;
    • conv5_1,conv5_2,conv5_3,pool5 膨胀系数由 1 改为 2;
    • conv14 即 由第一个全连接层改的卷积层,膨胀系数由 1 改为 4;
  4. 将最后一层的类别 1000 的分类器替换为类别 21 的一个,损失函数是卷积 output map 上每个空间位置交叉熵的求和;

  5. 提升训练速度:
  • 减小kernel:第一个全连接层会有 4096 个大小为 7×7 的 filters,这大大增加了计算的难度。该文减少第一个全连接层 filter 的空间尺寸(3×3),但也相对应的减少了网络的感受野,减少了 2 到 3 倍的计算时间。

  • 减少channel:把 FC6 输出的 feature map 从 4096 减少到 1024

该文首先利用 DCNN 的识别能力,后接全连接的 CRF 来提高位置的准确性,通常,CRF 包含相邻节点的能量项,有利于将相同的标签分配到空间上相近的像素。本质上,short-range CRF 的作用是清除由基于局部手工设计分类器产生的错误预测。相比弱分类器,DCNN 得到的 score maps 更加平滑,此时,再使用 short-range CRF可能是有害的,因为目的不是为了平滑边界而是回复局部细节,因为经过 DCNN 后已经很平滑了。为了解决 short-range CRF 的弊端,引入了全连接CRF。

3. 实验 & 测试

  • 在 ImageNet 上预训练的VGG16权重上做 finetune
  • CRF 是后期处理,不参与训练
  • 测试时,对特征提取后得到的 feature map 进行双线性插值,恢复到原图尺寸,然后再进行 CRF 处理。

六、DeepLab V2

1. 关键技术

  • dilation convolution
  • ASPP
  • CRF
  • poly

2. 网络结构

本文对 VGG16,ResNe-101 进行改进:

  • 将全连接层变为卷积层;
  • 将DCNN最后几个maxpooling去掉;
  • 在后续的卷积层中添加更高 sample rate 的空洞卷积,增加特征图的分辨率;
  • 对一张图片平行的使用不同 sample rate 的空洞卷积层(ASPP),增强感受野;
  • 应用双线性插值将 score map 还原为原图大小;
  • 全连接的 CRF,改善模型对边界的分割;

虽然CRF作为后处理的手段,但该文将CRF的 mean-filed 推理步骤进行转化,并添加到end-to-end可训练的前向网络中。

DeepLab v2 相比 DeepLab v1 的改进:对多尺寸的图片分割效果更好,引入 ASPP,用 ResNet 作为 backbone,实现比 VGG16 更好的效果。

3. ASPP

为了解决分割中的多尺寸问题,该文实验了两种方法:

  1. 采用传统的方法,在训练和测试时,从 DCNN 中抽取多层(这里使三层)feature map,通过双线性插值恢复为原图尺寸,然后将其进行融合,这么做确实有效果,但是增加了DCNN的计算量。

  2. 对一张图片上通过平行的进行不同尺寸的空洞卷积操作,间接的得到多尺度特性,不同 sample rate 提取的特征经过单独的后处理和融合进而生成最终的结果。采用的即 ASPP 模型,如下图。


5.png

ASPP 各个空洞卷积分支采样后结果最后融合到一起(通道相同,做像素加)。

4. 实验 & 测试

将 VGG-16 和 ResNet-101 处理成分割网络。损失函数是 CNN 输出 feature map(缩小为8倍)后空间位置交叉熵的和,使用 SGD 优化算法,在 PASCAL VOC 2012, PASCAL-Context, PASCALPerson-Part,和 Cityscapes 上进行实验。

实验上的改进:

  • 训练时不同的学习策略。
  • ASPP
  • 加深网络和多尺度处理
  • 使用 poly 学习速率
  • 调整 ASPP 中的rate: r={2,4,8,12} r={6,12,18,24}
  • 将 VGG-16 换为 ResNet-101 使网络加深


6.png

七、DeepLab V3

1. 关键技术

  • dilation convolution
  • 新ASPP
  • poly

2. 网络结构

2.1 级联结构

作者首先以串联方式设计 artous convolution 模块。在 ResNet 的最后一个模块叫做 block4,在 block4 后复制 block4 3 次得到 block5,block6,block7,使网络加深进而可以获得更长距离的语义信息。但网络层数加深使物体的细节信息就会有损失,所以这里引入了空洞卷积。


7.png

  • output_stride:图像从原始分辨率到最终分辨率降低的倍数;
  • 每个 block 中都包含 3 个 3×3 的卷积,除了在最后一个 block stride 为 1,剩余 block stride 都为2;
  • Multi_Grid = {r1, r2, r3} 为 block4~block7 的三个 convolutional layers 的 unit rates;
  • rate 的最终大小等于 Multi_Grid 与相应 rate 值的乘积。例如,当 output_stride = 16, Multi_Grid = (1,2,4) 时,block4 中 three convolutions 的 rate 分别为:rates = 2 ∗ (1, 2, 4) = (2, 4, 8);

2.2 平行结构


8.png

ASPP的改进:

  • 无 CRF
  • 增加 BN 层:加速训练;
  • 增加 1×1 conv;
  • 增加 global avg pool:克服远距离下有效权重减少的问题且整合全局上下文信息;

新 ASPP 的组成(output_stride=16):

  • 一个 1×1 卷积和 3 个 3×3 的空洞卷积(采样率为(6, 12, 18)),每个卷积核都有 256 个且都有 BN 层
  • 图像级特征(即全局平均池化)

将所有得到的 feature map 送到,1x1x256 的卷积层中,后接 BN 层,并通过双线性插值上采样到理想分辨率。最后将所有分支得到的 feature map 进行拼接,然后送到 1×1 的卷积(自带 BN)中,最后还有一个 1×1 的卷积来产生最后的 logits。


9.png

两种方法的结构合并并不会带来提升,相比较来说,ASPP 的纵式结构要好一点。所以 deeplab v3 一般也是指 ASPP 的结构。

3. 实验 & 测试

  1. 学习率的更新策略和 deeplabV2 相同 —— poly;
  2. 裁剪:使空洞卷积的 rate 尽可能的有效,crop 的大小裁剪为 513;
  3. Batch Normalization;
  4. 数据增强 —— 随机左右翻转、随机缩放;
  5. Upsampling logits 保证 groundtruth 的完整性,将输出上采样 8 倍与完整的 ground Truth 进行比较;

八、DeepLab V3+

1. 关键技术

  • decode module
  • modify xception
  • dilation convolution
  • 新ASPP
  • poly

2. 网络结构

在 DeepLab V3+ 中采用了 encoder-decoder 结构,在 DeepLab V3 中加入了一个简单有效的 decoder 模块来改善物体边缘的分割结果:先上采样4倍,在与encoder中的特征图 concatenate,最后在上采样 4 倍恢复到原始图像大小。除此之外还尝试使用 Xception 作为 encoder,在 ASPP 和 decoder 中应用 depth-wise separable convolution 得到了更快精度更高的网络。


10.png
11.png

2.1 Encoder

encoder 就是 DeepLab V3,通过修改 ResNet101 最后两(一)个 block 的 stride,使得 output stride 为 8(16)。之后在 block4 后应用改进后的 ASPP,将所得的特征图 concatenate 用 1×1 的卷积得到 256 个通道的特征图。

2.2 Decoder

在 decoder 中,特征图首先上采样 4 倍,然后与 encoder 中对应分辨率低级特征 concatenate。在 concatenate 之前,由于低级特征图的通道数通常太多(256或512),而从 encoder 中得到的富含语义信息的特征图通道数只有 256,这样会淡化语义信息,因此在 concatenate 之前,需要将低级特征图通过 1×1 的卷积减少通道数。在 concatenate 之后用 3×3 的卷积改善特征,最后上采样 4 倍恢复到原始图像大小。

  1. 1×1 卷积的通道数为 48;
  2. 2 个 3×3 的卷积来获得更锋利的边界的 3×3 的卷积;
  3. 只使用 conv2 的低级特征;

2.3 将 Xception 作为 Encoder

使用深度可分离卷积可极大的减少计算量,原始的 Xception 结构如下:


12.png

采用的 Xception 模型为 MSRA team 提出的改进的Xception,叫做 Aligned Xception,并做了几点修改:

  1. Middle flow 由重复 8 次改为了 16 次,增加了网络深度;
  2. 所有的 max pooling 操作替换成带 stride 的 separable convolution,这能使得对任意分辨率的图像应用 atrous separable convolution 提取特征;
  3. 在每个 3×3 的 depath-wise convolution 后增加 BN 层和 ReLU;


13.png

3. 实验 & 测试

  1. learning rate policy: “poly”
  2. learning rate: 0.007
  3. crop size: 513×513
  4. output_stride = 16
  5. random scale data augmentation
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/128163.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 计算机网络协议汇总_帧中继是一种什么协议

    计算机网络协议汇总_帧中继是一种什么协议阅读目录1.网络层次划分2.OSI七层网络模型3.IP地址4.子网掩码及网络划分5.ARP/RARP协议6.路由选择协议7.TCP/IP协议8.UDP协议 9.DNS协议10.NAT协议11.DHCP协议12.HTTP协议13.一个举例  计算机网络学习的核心内容就是网络协议的学习。网络…

  • 电脑pin码忘了登录不进系统_做好这些优化,电脑5秒开机不是梦[通俗易懂]

    电脑pin码忘了登录不进系统_做好这些优化,电脑5秒开机不是梦[通俗易懂]为保证及时获取最新消息建议置顶公众号编辑:王富国审核:瓦彦文昨天公众号没有发文章,一是因为没有动力,毕竟写了文章没有回报,看不到任何的反馈,还有什么意思?二是因为我帮我一个朋友处理了一下她的电脑,也耗费了不少时间,也从中又得到了一些对电脑优化的经验,现在也给大家分享一下。本文较长,请耐心看完!昨天我这位朋友的电脑是全新的,对,刚买的,她自己看的,也是让我比较后,她自己选择购买的,配置大…

  • WebApp开发-Google官方教程

    WebApp开发-Google官方教程概览你可以使用viewport的元数据、CSS和Javascript来为不同分辨率的屏幕设置合适的页面本文档中的技术适用于Android 2.0及以上设备,针对默认的Android Browser中及在WebView中呈现的页面如果你在为Android开发Web应用或者在为移动设备重新设计一个Web应用,你需要仔细考虑在不同设备上你的页面看起来是怎样的。因为Android设备有不同款型

  • 移动磁盘显示无法访问拒绝访问,里面的数据如何寻回

    移动磁盘显示无法访问拒绝访问,里面的数据如何寻回

  • Zxing.jar下载

    Zxing.jar下载版本3.3.3

  • html5空白站位符号,空格代码(隐形空白符号)

    html5空白站位符号,空格代码(隐形空白符号)CSS的空间处理一、空格规则浏览器通常会忽略HTML代码中的空白。上面是一行HTML代码,文本的前面、里面和后面各有两个空格。为了便于识别,这里使用半圆形符号来表示空间。浏览器的输出如下。你好世界如您所见,文本前后的空格将被忽略,内部连续的空格将只被算作一个。这是浏览器处理空格的基本规则。如果希望空格按原样输出,可以使用前置标签。另一种方法是用HTML实体来代替表示空格。二、空格字符处理空格的HT…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号