SoftPool:基于Softmax加权的池化操作 | 2021新文
SoftPool使用softmax进行加权池化,能够保持特征的表达性并且是可微操作。从性能和准确率来看,SoftPool是目前的常规池化方法的一个不错的替代品
来源:晓飞的算法工程笔记 公众号
论文: Refining activation downsampling with SoftPool

Introduction
池化层是当今卷积神经网络的基础算子,用于降低特征图的大小以及网络的计算量,能够达成平移不变性以及增大后续卷积的感受域。目前的池化方法大多基于最大池化或平均池化,虽然计算很快内存占用少,但其有很大的提升空间,主要在于更好地维持特征图的重要信息。

为此,论文提出了SoftPool,基于softmax加强进行特征图的池化操作。从实验结果来看,SoftPool在保持计算和内存高效的情况下,能够很好的保留特征图的重要信息,提升模型的准确率。
SoftPool Downsampling

定义大小为\(C\times H\times W\)的特征图\(a\)的局部区域\(R\),\(R\)为2D空间区域,大小等同于池化核大小\(|R|=k^2\),输出为\(\tilde{a}_R\),对应的梯度为\(\Delta \tilde{a}_i\)。
Exponential maximum kernels
SoftPool的核心思想在于softmax的利用,根据特征值非线性地计算区域\(R\)的特征值权重:

权重\(w_i\)能够保证重要特征的传递,区域\(R\)内的特征值在反向传递时都至少会有预设的最小梯度。在得到权重\(w_i\)后,通过加权区域\(R\)内的特征值得到输出:

SoftPool能够很好地参照区域内的激活值分布,服从一定的概率分布,而基于最大池化和平均池化的方法的输出则是无分布的。
Gradient calculation
SoftPool是可微的,在反向传播计算时,SoftPool梯度根据前向时的激活值比例进行计算,若梯度过小,将直接赋予预设的非零最小梯度值。
Feature preservation

下采样的目的是在保持特征表达的同时降低分辨率,如果损失了特征的表达,势必会降低整体网络的性能。而论文通过可视化发现,相对于其它池化操作,SoftPool能够很好的保留特征表达,算是最大池化和平均池化的折中。
Spatio-temporal kernels
论文提到,CNN网络可以扩展处理3D输入,SoftPool也可以进行对应的适配。假设输入的特征维度为\(C\times H\times W\times T\),\(T\)为时间维度,SoftPool的处理区域则从原来的2D区域加上时间维度。
Experiment
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uvngvuyN-1651209067982)(https://upload-images.jianshu.io/upload_images/20428708-9a069801e6686a6c.png?imageMogr2/auto-orient/strip|imageView2/2/w/1240)]
SSI、Pix Sim和EMD为3种不同的相似度度量方法,这里主要对比特征的丢失以及计算性能。SoftPool虽然加入了softmax加权,但其速度依然很快。在实现时,先对整图计算\(e^x\),然后将得到的图特征图与原图进行element-wise相乘,然后进行平均池化。

多种池化方法的对比。

多个主干网络上的分类准确率对比。
Discussion

论文列举了许多池化操作的示意图,从图中可以看到,其实SoftPool和早前提出的LIP很像,都是用到了softmax加权,只是LIP额外加了一个小网络对激活值进行线性变换,这么看来,SoftPool可以算是LIP的一个特例。感觉整体论文的内容以及亮点不够多,另外实验部分的baseline的准确率有点低,不知道作者是怎么得来的。
Conclusion
SoftPool使用softmax进行加权池化,能够保持特征的表达性并且是可微操作。从性能和准确率来看,SoftPool是目前的常规池化方法的一个不错的替代品。
如果本文对你有帮助,麻烦点个赞或在看呗~
更多内容请关注 微信公众号【晓飞的算法工程笔记】

SoftPool:基于Softmax加权的池化操作 | 2021新文的更多相关文章
- 深度学习原理与框架-Tensorflow卷积神经网络-卷积神经网络mnist分类 1.tf.nn.conv2d(卷积操作) 2.tf.nn.max_pool(最大池化操作) 3.tf.nn.dropout(执行dropout操作) 4.tf.nn.softmax_cross_entropy_with_logits(交叉熵损失) 5.tf.truncated_normal(两个标准差内的正态分布)
1. tf.nn.conv2d(x, w, strides=[1, 1, 1, 1], padding='SAME') # 对数据进行卷积操作 参数说明:x表示输入数据,w表示卷积核, stride ...
- 第十四节,TensorFlow中的反卷积,反池化操作以及gradients的使用
反卷积是指,通过测量输出和已知输入重构未知输入的过程.在神经网络中,反卷积过程并不具备学习的能力,仅仅是用于可视化一个已经训练好的卷积神经网络,没有学习训练的过程.反卷积有着许多特别的应用,一般可以用 ...
- 【TensorFlow】tf.nn.max_pool实现池化操作
max pooling是CNN当中的最大值池化操作,其实用法和卷积很类似 有些地方可以从卷积去参考[TensorFlow]tf.nn.conv2d是怎样实现卷积的? tf.nn.max_pool(va ...
- 深度学习原理与框架-卷积神经网络基本原理 1.卷积层的前向传播 2.卷积参数共享 3. 卷积后的维度计算 4. max池化操作 5.卷积流程图 6.卷积层的反向传播 7.池化层的反向传播
卷积神经网络的应用:卷积神经网络使用卷积提取图像的特征来进行图像的分类和识别 分类 相似图像搜索 ...
- tensorflow 卷积/反卷积-池化/反池化操作详解
Plese see this answer for a detailed example of how tf.nn.conv2d_backprop_input and tf.nn.conv2d_bac ...
- day-16 CNN卷积神经网络算法之Max pooling池化操作学习
利用CNN卷积神经网络进行训练时,进行完卷积运算,还需要接着进行Max pooling池化操作,目的是在尽量不丢失图像特征前期下,对图像进行downsampling. 首先看下max pooling的 ...
- TensorFlow:tf.nn.max_pool实现池化操作
tf.nn.max_pool(value, ksize, strides, padding, name=None) 参数是四个,和卷积很类似: 第一个参数value:需要池化的输入,一般池化层接在卷积 ...
- Python3 卷积神经网络卷积层,池化层,全连接层前馈实现
# -*- coding: utf-8 -*- """ Created on Sun Mar 4 09:21:41 2018 @author: markli " ...
- CNN-卷积层和池化层学习
卷积神经网络(CNN)由输入层.卷积层.激活函数.池化层.全连接层组成,即INPUT-CONV-RELU-POOL-FC (1)卷积层:用它来进行特征提取,如下: 输入图像是32*32*3,3是它的深 ...
随机推荐
- 手撕代码:leetcode70爬楼梯
装载于:https://blog.csdn.net/qq_35091252/article/details/90576779 题目描述 假设你正在爬楼梯.需要n阶你才能到达楼顶. 每次你可以爬1或2个 ...
- final, finally, finalize的区别?
final 用于声明属性,方法和类,分别表示属性不可变,方法不可覆盖,类不可继承.内部类要访问局部变量,局部变量必须定义成final类型.finally是异常处理语句结构的一部分,表示总是执行.fin ...
- NetCore微服务实现事务一致性masstransit之saga使用
demo如下,一个订单处理的小例子: 首先看看结果很简单: 核心代码如下: using MassTransit; using Microsoft.Extensions.DependencyInject ...
- 遇到的错误之"Exception in thread “main“ java.lang.NoClassDefFoundError: org/apache/velocity/context/Context at"
问题 Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/velocity/context/ ...
- C# Coding Conventions, Coding Standards & Best Practices
C# Coding Conventions, Coding Standards & Best Practices Cui, Chikun Overview Introduction This ...
- 【静态页面架构】CSS之链接和图像
CSS架构 一.链接: 链接元素:通过使用a元素的href属性设置跳转到指定页面地址 <style> a{ color: blue; text-decoration: none; } a: ...
- 如何使用vue-cli搭建好的项目
本人是一枚前端小白,也是从零开始学习vue.js.由于闲着蛋疼,写一点自己的经验,可能有点low.是新手想上道的话,可以看看,如果有大神,也可以给我指导一下,小生感激不尽. 关于如何使用vue-cli ...
- 主线程中的Looper.loop()为什么不会造成ANR
引子: 正如我们所知,在android中如果主线程中进行耗时操作会引发ANR(Application Not Responding)异常. 造成ANR的原因一般有两种: 当前的事件没有机会得到处理(即 ...
- 安卓性能优化之计算apk启动时间
之前有人在知乎提问:"怎么计算apk的启动时间?" : 利用Python或者直接用adb命令怎么计算apk的启动时间呢?就是计算从点击图标到apk完全启动所花费的时间.比如,对游戏 ...
- spring security简介与使用
目录 spring security 新建一个springboot项目 添加spring security 登录 使用默认用户和随机生成的密码登录 使用yaml文件定义的用户名.密码登录 使用代码中指 ...