PPM-Pyramid pooling module
Pyramid pooling 方法出自 2017CVPR,原文地址https://arxiv.org/pdf/1612.01105.pdf
一、PPM的结构
原文中采用4种不同金字塔尺度,金字塔池化模块的层数和每层的size是可以修改的。论文中金字塔池化模块是4层,每层的size分别是1×1,2×2,3×3,6×6。
首先,对特征图分别池化到目标size,然后对池化后的结果进行1×1卷积将channel减少到原来的1/N,这里N就为4。接着,对上一步的每一个特征图利用双线性插值上采样得到原特征图相同的size,然后将原特征图和上采样得到的特征图按channel维进行concatenate。得到的channel是原特征图的channel的两倍,最后再用1×1卷积将channel缩小到原来的channel。最终的特征图和原来的特征图size和channel是一样的。
二、PPM代码
class conv2DBatchNormRelu(nn.Module):def __init__(self, in_channels, n_filters, k_size, stride, padding, bias=True, dilation=1):super(conv2DBatchNormRelu, self).__init__()if dilation > 1:conv_mod = nn.Conv2d(int(in_channels), int(n_filters), kernel_size=k_size, padding=padding, stride=stride, bias=bias, dilation=dilation)else:conv_mod = nn.Conv2d(int(in_channels), int(n_filters), kernel_size=k_size, padding=padding, stride=stride, bias=bias, dilation=1)self.cbr_unit = nn.Sequential(conv_mod,nn.BatchNorm2d(int(n_filters)),nn.ReLU(inplace=True),)def forward(self, inputs):outputs = self.cbr_unit(inputs)return outputsclass pyramidPooling(nn.Module):def __init__(self, in_channels, pool_sizes):super(pyramidPooling, self).__init__()self.paths = []for i in range(len(pool_sizes)):self.paths.append(conv2DBatchNormRelu(in_channels, int(in_channels / len(pool_sizes)), 1, 1, 0, bias=False))self.path_module_list = nn.ModuleList(self.paths)self.pool_sizes = pool_sizesdef forward(self, x):output_slices = [x]h, w = x.shape[2:]for module, pool_size in zip(self.path_module_list, self.pool_sizes): out = F.avg_pool2d(x, int(h/pool_size), int(h/pool_size), 0)out = module(out)out = F.upsample(out, size=(h,w), mode='bilinear')output_slices.append(out)return torch.cat(output_slices, dim=1)
我们可以通过下列代码进行引入:
self.pyramid_pooling = pyramidPooling(2048, [6, 3, 2, 1])
PPM-Pyramid pooling module相关推荐
- Pyramid pooling module
Pyramid pooling 方法出自 2017CVPR,原文地址https://arxiv.org/pdf/1612.01105.pdf 该文的一大贡献就是Pyramid pooling modu ...
- 金字塔池化模型PPM-Pyramid pooling module
总结:ppm是以一种特殊的池化模型.通过由多到少的池化,可以有效增大感受野,增大全局信息的利用效率. 原文链接:https://blog.csdn.net/wd18508423052/article/ ...
- 空间金字塔池化(Spatial Pyramid Pooling, SPP)原理和代码实现(Pytorch)
想直接看公式的可跳至第三节 3.公式修正 一.为什么需要SPP 首先需要知道为什么会需要SPP. 我们都知道卷积神经网络(CNN)由卷积层和全连接层组成,其中卷积层对于输入数据的大小并没有要求,唯一对 ...
- Paper8:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 还未读
- [SPP-NET]Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
基于空间金字塔池化的卷积神经网络物体检测 原文地址:http://blog.csdn.net/hjimce/article/details/50187655 作者:hjimce 一.相关理论 本篇博文 ...
- Spatial Pyramid Pooling(空间金字塔池化)-变尺度CNN训练
1. 需求创造好的产品,产品拓宽原始的需求 当前的深度神经网络一般都需要固定的输入图像尺寸(如224*224). 这种需求很明显是人为的,潜在性的弊端会降低识别精度(为了使图像尺寸相同,一定会涉及到图 ...
- 目标检测--Spatial pyramid pooling in deep convolutional networks for visual recognition(PAMI, 2015)
Spatial pyramid pooling in deep convolutional networks for visual recognition 作者: Kaiming He, Xiangy ...
- 语义分割——Spatial Pyramid Pooling (SPP)的作用
1 前言 我们在DeepLabV3+中学习到了ASPP算法,ASPP就是使用了膨胀卷积的Spatial Pyramid Pooling (SPP)- 2 SPP的作用 --多尺度特征融合: --将不同 ...
- SPP(Spatial Pyramid Pooling)解读
1.为什么会出现SPP结构,其作用是什么? 通过Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognitio ...
最新文章
- android中获取图片、获取图片像素、处理像素等基础知识
- 2017西南计算机数学基础,[0838]《计算机数学基础》西南大学 2017 秋学期 计算机专业 作业题目及参考答案资料讲解.docx...
- AI业务强劲增长,百度迎来了“推卒过河”的纵横时刻
- idea打开提示没有安装java_Java全栈程序员之05:Ubuntu下安装TOMCAT、集成到IDEA
- 牛客多校10 - Tournament(找规律)
- session、cookie、隐藏域、url参数传递四种会话及跟踪方式
- 红盟云卡v1.6.2源码
- cacti的安装和配置
- python的实例类方法、修饰器类方法、修饰器保护方法、修饰器静态方法中私有属性的区别和自定义property的读写方法
- caffe绘制训练过程的loss和accuracy曲线
- 手机型号大全_2000-2500元智能手机最全导购推荐(学生党手机必看)-2020年12月更新...
- 计算机机房不允许开窗么,机房新风系统的设计要求及规范 你了解多少?
- 深度学习对抗样本的防御方法
- python 分析泰坦尼克号生还率_如何用Python分析泰坦尼克号生还率?
- python抓取豆瓣电影
- vue 登录注册模板
- 【Android】kotlin语法学习
- 【ROM制作工具】小白如何进行ROM解包,精简,修改,授权,打包详细图文教程
- python 操作word 修改页眉与页脚
- 计算机毕业设计ssm 曲沃县农产品销售系统(附源码)