ASPP全称:Atrous Spatial Pyramid Pooling,中文可以理解为空洞空间卷积池化金字塔或者多孔空间金字塔池化。在这其中,要理解两个概念:一个是SPP,池化金字塔结构或者叫空间金字塔池化层,都是一个东西;另一个是Atrous,空洞卷积,两个概念加在一起产生了ASPP。

首先说一下SPP:Spatial Pyramid Pooling。这个结构出自于论文《Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition》,原文连接:https://arxiv.org/pdf/1406.4729.pdf

一、SPP

1.问题的产生

这里问了让逻辑更通顺,多讲一些,大佬们请跳到2

通常在神经网络的训练过程中,我们都需要保证数据集图片大小的一致性,可这是为什么呢?我们知道一个神经网络通常包含三个部分:卷积、池化、全连接。

假设给定一个30*30大小的输入图片,通过一个3*3的卷积核得到大小为29*29的输出和给定一个40*40大小的输入图片,得到大小为39*39的输出之间有区别吗?其实是没有区别的,因为在这里我们要训练的是卷积核的参数,与输入的图片大小无关。

再来看池化层,池化层其实可以理解成一个压缩的过程,无论是AVE还是MAX其实也输入都没啥关系,输出大小直接变为输出一半就完了(参数为2)。

所以问题出现在全连接层上,假设同一个池化层的输出分别是32*32*1和64*64*1,这就出问题了,因为全连接层的权重矩阵W是一个固定值,池化层的不同尺寸的输出会导致全连接层无法进行训练。

针对这个问题,原有的解决思路是通过拉伸或者裁剪去统一图片的尺寸,但是会造成信息丢失,失真等等众多问题。

图1.图片变换后失去了原有的样子

所以大佬们就想了个办法,将原有的神经网络处理流程从图2改变为了图3,提出了SPP结构,也就是池化金字塔,利用多尺度解决这个问题。

图2.原有神经网络处理流程

图3.带有SPP结构的神经网络处理流程

2.解决方案-SPP

图4.SPP模块示意图

SPP的思想就是利用多个不同尺度的池化层进行特征的提取,融合成一个21维的向量输入至全连接层。

如图4所示,从下往上看,输入图片的大小可以是任意的,经过卷积层卷积之后获取特征图的channels数量为256,将其输入到SPP结构中。图中从左往右看,分别将特征图分成了16个格子,4个格子和1个格子。

假设特征图大小是:width*height,这里蓝色格子的大小就是width/4*height/4,绿色格子的大小就是width/2*height/2,灰色格子的大小就是width*height。对每个格子分别进行池化,一般是采用MAX pooling,这样子我们分别可以得到16*256、4*256、1*256的向量,将其叠加就是21维向量,这样子就保证了无论输入图片尺寸是多少,最终经过SPP输出的尺度都是一致的,也就可以顺利地输入到全连接层。

这就是SPP层的处理过程,思路和结构都很巧妙。

二、空洞卷积

再一个就是空洞卷积,这里直接丢个连接:https://blog.csdn.net/lipengfei0427/article/details/108968914

三、ASPP

ASPP一开始在DeepLabv2中提出,DeepLab系列也是语义分割效果很棒的一个系列,丢个原文链接:https://arxiv.org/pdf/1606.00915.pdf

其实在理解了SPP模块和空洞卷积之后再来看ASPP就十分简单了。

图5.ASPP模块示意图

图5就是ASPP模块示意,对于给定的输入以不同采样率的空洞卷积并行采样,将得到的结果concat到一起,扩大通道数,然后再通过1*1的卷积将通道数降低到预期的数值。相当于以多个比例捕捉图像的上下文。

图6.添加ASPP模块网络示意图

添加ASPP模块后的网络如图6所示,将Block4的输出输入到ASPP,经过多尺度的空洞卷积采样后经过池化操作,然后由1*1卷积将通道数降低至预期值。

在DeepLabv3中,在ASPP中加入了BN层,再丢一个DeepLabv3原文链接:https://arxiv.org/pdf/1706.05587.pdf

最后附一个没有BN层的ASPP代码(PyTorch)

#without bn version
class ASPP(nn.Module):def __init__(self, in_channel=512, depth=256):super(ASPP,self).__init__()self.mean = nn.AdaptiveAvgPool2d((1, 1)) #(1,1)means ouput_dimself.conv = nn.Conv2d(in_channel, depth, 1, 1)self.atrous_block1 = nn.Conv2d(in_channel, depth, 1, 1)self.atrous_block6 = nn.Conv2d(in_channel, depth, 3, 1, padding=6, dilation=6)self.atrous_block12 = nn.Conv2d(in_channel, depth, 3, 1, padding=12, dilation=12)self.atrous_block18 = nn.Conv2d(in_channel, depth, 3, 1, padding=18, dilation=18)self.conv_1x1_output = nn.Conv2d(depth * 5, depth, 1, 1)def forward(self, x):size = x.shape[2:]image_features = self.mean(x)image_features = self.conv(image_features)image_features = F.upsample(image_features, size=size, mode='bilinear')atrous_block1 = self.atrous_block1(x)atrous_block6 = self.atrous_block6(x)atrous_block12 = self.atrous_block12(x)atrous_block18 = self.atrous_block18(x)net = self.conv_1x1_output(torch.cat([image_features, atrous_block1, atrous_block6,atrous_block12, atrous_block18], dim=1))return net

参考连接:

https://www.cnblogs.com/zongfa/p/9076311.html

https://blog.csdn.net/qq_26898461/article/details/50424240

https://zhuanlan.zhihu.com/p/27485018

https://blog.csdn.net/qq_36530992/article/details/102628455

https://blog.csdn.net/qq_21997625/article/details/87080576

https://www.pianshen.com/article/5912309758/

[语义分割]SPP、空洞卷积与ASPP总结相关推荐

  1. 图像语义分割_图像语义分割(9)-DeepLabV3: 再次思考用于图像语义分割的空洞卷积...

    论文地址 :Rethinking Atrous Convolution for Semantic Image Segmentation 论文代码:Github链接 1. 摘要 文章主要的工作: 使用空 ...

  2. 深度学习(9)——无监督语义分割之全卷积域适应网络(译文)

    无监督语义分割之全卷积域适应网络 Fully Convolutional Adaptation Networks for Semantic Segmentation 摘要 深度神经网络的最新进展令人信 ...

  3. 【CV语义分割】全卷积神经网络FCN(更新ing)

    学习总结 (1)paper<Fully Convolutional Networks for Semantic Segmentation> (2)论文翻译可以参考:https://www. ...

  4. 【语义分割】全卷积网络(Fully Convolutional Networks, FCN)详解

    论文题目:<Fully Convolutional Networks for Semantic Segmentation> 论文地址:https://arxiv.org/abs/1411. ...

  5. 【深度学习】语义分割-综述(卷积)

    这里写目录标题 0.笔记参考 1. 目的 2. 困难点 3. 数据集及评价指标 3.1数据集 3.2评价指标 4.实现架构 5. 模型发展 5.1基于全卷积的对称语义分割模型 5.1.1FCN(201 ...

  6. DeepLab语义分割

    参考: DeepLab V1 V2 V3 V3+及pytorch实现 V1 DeepLab是针对语义分割任务提出的模型,主要使用了DCNN.CRF.空洞卷积做密集预测. DeepLab是结合了深度卷积 ...

  7. 一文总结图像语义分割模型

    作者:咫尺小厘米 链接:https://zhuanlan.zhihu.com/p/133268053 本文转载自知乎,作者已授权,未经许可请勿二次转载 语义分割是图像分割中的基本任务,是指对于图像将每 ...

  8. 语义分割丨DeepLab系列总结「v1、v2、v3、v3+」

    花了点时间梳理了一下DeepLab系列的工作,主要关注每篇工作的背景和贡献,理清它们之间的联系,而实验和部分细节并没有过多介绍,请见谅. DeepLabv1 Semantic image segmen ...

  9. 综述 | 语义分割经典网络及轻量化模型盘点

    点击上方"小白学视觉",选择加"星标"或"置顶" 重磅干货,第一时间送达 基于图像的语义分割又被理解为密集的像素预测,即将每个像素进行分类, ...

最新文章

  1. 求1+2+3+…+n
  2. 字节流 system.in
  3. 深度学习预训练模型可解释性概览
  4. Java并发编程实战————恢复中断
  5. Qt工作笔记-QGraphicsScene练习【Qt图形框架练习】
  6. centos编译安装python_CentOS编译安装Python3
  7. 最新可用的goole翻译接口
  8. 30 分钟带你学透快应用界面开发的最正确姿势
  9. 量子计算机 并行,核磁共振量子计算机与并行量子计算.pdf
  10. Codeforces Round #257 (Div. 2) C. Jzzhu and Chocolate
  11. 3x3矩阵怎么求逆矩阵_表象变换的幺正算符怎么定义的? 为何说算符与态可以看作矩阵?...
  12. java 根据身份证计算年龄(周岁)
  13. Riverbed助力富邦人寿在市场竞争和数字化进程中抢占先机
  14. 手机银行业务应用中的关键技术
  15. 基于SpringBoot的库存管理系统
  16. 微信公众号开发 (1) 微信接入认证成为开发者
  17. 国税总局增值税发票查验平台验证码识别深度学习实战
  18. 私募量化策略超额收益来源分析
  19. 一文读懂BLOB算法
  20. 支付宝小程序 中实现 验证码倒计时效果

热门文章

  1. 2021年高压电工新版试题及高压电工试题及解析
  2. 多文档程序 两个menu框架_汇总9款优秀的开源小程序UI框架
  3. python tensorflow2 deeplearning 音频处理 声学事件检测
  4. 电子工程师的自我修养 - 深度理解三极管datasheet
  5. 倍福BECKHOFF PLC:FileWirte/Puts,FileRead/Gets File Function Blocks文件操作功能块
  6. QQ小程序支付 调起微信支付
  7. 如何有效的解决文件锁定问题
  8. Xcode-关于切换窗口的快捷键
  9. 在哪里计算机的cpu显卡硬盘,电脑硬件升级攻略 CPU/内存/显卡/固态硬盘该如何选择?...
  10. csp2021-09-4 收集卡牌