ASPP

以下内容转自:
空洞空间卷积池化金字塔(atrous spatial pyramid pooling (ASPP))对所给定的输入以不同采样率的空洞卷积并行采样,相当于以多个比例捕捉图像的上下文。


上图为deeplab v2的ASPP模块,deeplabv3中向ASPP中添加了BN层,其中空洞卷积的rate的意思是在普通卷积的基础上,相邻权重之间的间隔为rate-1, 普通卷积的rate默认为1,所以空洞卷积的卷积核实际大小为k + (k − 1)(rate−1),其中k为原始卷积核大小。

卷积核为3时,不同的rate,对应的卷积核大小:

k rate k + (k − 1)(rate−1) 卷积核大小
3 1 3+2*0 3
3 2 3+2*1 5
3 3 3+2*2 7
3 4 3+2*3 9
3 5 3+2*4 11
3 6 3+2*5 13
3 7 3+2*6 15
3 8 3+2*7 17
3 9 3+2*8 19

输出大小如何计算?


问题:当rate接近feature map大小时,3×3滤波器不是捕获全图像上下文,而是退化为简单的1 × 1 滤波器,只有滤波器中心起作用。

改进:Concat( 1 × 1  卷积 , 3个 3 × 3  空洞卷积 +,pooled image feature)并且每个卷积核都有256个且都有BN层。

#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://blog.csdn.net/qq_36530992/article/details/102628455

刚看到这张结构图,很多同学可能和我一样懵(原谅我比较笨),别的博客里配的文字也都是比较简单,有些词汇不够通俗,直到我看到了下面这张图:

如图所示,最左边的图图形表示卷积得到的256维特征图,对于每个区域(厚度为256),通过三种方式进行池化:

(1)直接对整个特征图池化,每一维得到一个池化后的值,构成一个1x256的向量

(2)将特征图分成2x2共4份,每份单独进行池化,得到一个1x256的向量,最终得到2x2=4个1x256的向量

(3)将特征图分成4x4共16份,每份单独进行池化,得到一个1x256的向量,,最终得到4x4=16个1x256的向量

将三种划分方式池化得到的结果进行拼接,得到(1+4+16)256=21256的特征。

由图中可以看出,整个过程对于输入的尺寸大小完全无关,因此可以处理任意尺寸的候选框。

空间池化层实际就是一种自适应的层,这样无论你的输入是什么尺寸,输出都是固定的(21xchannel)

ASPP结构

在介绍ASPP之前,首先要介绍Atrous Convolution(空洞卷积),它是一种增加感受野的方法。空洞卷积是是为了解决基于FCN思想的语义分割中,输出图像的size要求和输入图像的size一致而需要upsample,但由于FCN中使用pooling操作来增大感受野同时降低分辨率,导致upsample无法还原由于pooling导致的一些细节信息的损失的问题而提出的。为了减小这种损失,自然需要移除pooling层,因此空洞卷积应运而生。
普通卷积这里就不介绍了,我们来看一下空洞卷积的动态图,就一目了然了:

空洞卷积从字面上很好理解,是在标准的卷积中注入空洞,以此来增加感受野,相比原来的正常卷积,空洞卷积多了一个称之为 dilation rate 的参数,指的是kernel的间隔数量(一般的卷积 dilation rate=1)。
但是,空洞卷积也有其潜在的一些问题:

潜在问题 1:The Gridding Effect

假设我们仅仅多次叠加 dilation rate 2 的 3 x 3 kernel 的话,则会出现这个问题:

我们发现 kernel 并不连续,也就是并不是所有的 pixel 都用来计算了,因此这里将信息看做 checker-board 的方式会损失信息的连续性。这对 pixel-level dense prediction 的任务来说是致命的。

潜在问题 2:Long-ranged information might be not relevant.

我们从 dilated convolution 的设计背景来看就能推测出这样的设计是用来获取 long-ranged information。然而光采用大 dilation rate 的信息或许只对一些大物体分割有效果,而对小物体来说可能则有弊无利了。如何同时处理不同大小的物体的关系,则是设计好 dilated convolution 网络的关键。

空洞卷积aspp 学习笔记相关推荐

  1. CNN中卷积的学习笔记

    1 致谢 感谢赵老师的讲述~ 2 前言 今天在学习CNN~ 记得很久以前,小伙伴曾经问过我一个问题,为什么CNN网络要使用卷积运算作为神经元的输入, 那时候我还没怎么开始学深度学习,觉得这是一个很玄妙 ...

  2. 吴恩达 - 卷积神经网络 学习笔记(一)

    转载来源:http://www.cnblogs.com/marsggbo/p/8166487.html DeepLearning.ai学习笔记(四)卷积神经网络 – week1 卷积神经网络基础知识介 ...

  3. Pytorch二维卷积 conv2d 使用/源码/手写实现conv2d/手写向量内积实现conv2d/转置卷积实现——学习笔记

    这里是一份学习笔记- 学习视频点这里

  4. (pytorch-深度学习系列)CNN二维卷积层-学习笔记

    二维卷积层 在二维互相关运算中,卷积窗口从输入数组的最左上方开始,按从左往右.从上往下的顺序,依次在输入数组上滑动.当卷积窗口滑动到某一位置时,窗口中的输入子数组与核数组按元素相乘并求和,得到输出数组 ...

  5. 吴恩达卷积神经网络学习笔记(六)|CSDN创作打卡

    3.2 特征点检测 神经网络可以通过输出图片上特征点的(x,y)坐标,来实现对目标特征的识别. 我们来看几个例子,假设你正在构建一个人脸识别应用,出于某种原因,你希望算法可以给出眼角的具体位置,眼角坐 ...

  6. 吴恩达深度学习卷积神经网络学习笔记(2)——经典神经网络

    目录 1.经典网络 1.1 LeNet-5(1998) 1.2 AlexNet 1.3 VGG-16 2 ResNets(残差网络) 2.1残差块(Residual block) 2.2 残差网络为什 ...

  7. 卷积神经网络学习笔记与心得(4)池化

    图片经过卷积.激活后的结果一般带有大量原图信息. 上图中卷积核提取的是竖直方向上的连续像素,但是,被增强的像素只占了结果的1/3,对于多层网络,其余重要性较低的信息也被传入了下一层网络,造成了不必要的 ...

  8. 实例分割——转置卷积的学习笔记

    2 备注 2.1 转置卷积stride的参数如何设置? 一种已知的设置方法是设置成2N,其中N为上采样的放大倍数,这样的原因是为了使用双线性插值,即"用四个特征点插值一个下采样点" ...

  9. 卷积神经网络学习笔记

    一.卷积神经网络结构: 卷积层 conv作用: 卷积层是一个n*n*m的权重矩阵,下图一目了然: channel:一个卷积层的核数,对rgb图像channel = 3 kernel size:卷积核的 ...

最新文章

  1. 电网电压波形是否失真?
  2. App.Config 和 WebConfig 特殊字符的转义码对应关系
  3. 在Filter 无法跳转地址
  4. 小白的java学习之路 “ 选择结构(二)”
  5. 水晶底是什么材质_都是红酒杯,水晶的和玻璃的有什么区别?
  6. 计算机对环境的影响的案例,计算机环境下的呈现方式对学生样例学习的影响
  7. MATLAB中计算器的设立,怎样用MATLAB中的GUI做一个简单计算器
  8. android 广告设置秒数,Android动态显示具体到秒的相聚时间
  9. SAP License:企业高管眼中的信息化是“万能”的
  10. T-Sql(一)简单语法
  11. zynq文档阅读pg144-axi-gpio之AXI GPIO IP核
  12. 学英语专业后悔了_上大学一定不要读英语专业?当年志愿填报我选了英语专业...
  13. java项目获取系统信息
  14. x射线 相衬成像 matlab模拟,X射线相衬成像系统与成像方法
  15. 图解 Google V8 # 22 :关于内存泄漏、内存膨胀、频繁垃圾回收的解决策略(完结篇)
  16. 运筹学 —线性规划总结
  17. Html 所有触发事件
  18. 拜占庭容错(BFT)算法介绍
  19. 大数据培训课程数据清洗案例实操-简单解析版
  20. java环境变量设置.

热门文章

  1. linux 内核 编译详解
  2. golang 赋值错误 no new variables on left side of :=
  3. Native wifi API使用
  4. 编写 Debugging Tools for Windows 扩展,第 3 部分:客户端和回调 (windbg 插件 扩展)
  5. win32 debug api 原理
  6. Android中的意图匹配--IntentFilter的作用
  7. 71道Android开发面试题
  8. pymongo连接mongodb的replset
  9. python股票编程规范_Python 编程规范梳理
  10. java 502错误,Spring Boot连接超时导致502错误的实战案例