python 关于池化的一些思考-2022

引言

神经网络中的池化 (pooling):对输入数据进行降采样,减小输入数据的分辨率。
除了batch size,数据本身的分辨率和特征通道数是影响网络计算量和参数量的重要指标。池化会降低数据分辨率,从而减少计算量。从另一个角度来看,低分辨率的数据可以使用更少的特征通道数 (网络参数) 来拟合特征,从而减少了网络参数量。
本文对主流池化方法进行总结,并提出一些猜想:

  • 池化的效果往往在高分辨率的输入上有很好的体现,低分辨率的数据可能并不需要池化
  • 池化的有效性也许并不归功于池化的方法,反而只要是数据分辨率的降低往往都能得到很好的效果

池化的方法 – 结构化 or 非结构化? :是否依赖输入数据的结构

一、结构化(平均池化、最大池化?)

  • 我将以矩阵形式的池化方法称之为结构化的池化。

1.1 平均池化、最大池化等

目前用的最广泛的池化方法:平均池化、最大池化 – 简单 有效1
在这里插入图片描述
还有很多池化的方法:随机池化、组合池化、金字塔池化等等2

1.2 Strip Pooling

论文地址3:Strip Pooling: Rethinking Spatial Pooling for Scene Parsing

条状池化是一种很新颖、大胆的池化方法,之前提到的池化方法大多是基于一个 n × n n \times n n×n的矩阵,还算比较规则,没想到基于某一行或者某一列 ( 1 × n 1 \times n 1×n) 的池化也能取得这么好的效果:
在这里插入图片描述
其与之前池化的方式对比如下图:
在这里插入图片描述

1.3 塌边 (面) 池化 - 三角网格

之前提到的都是标准矩阵形式的池化,这种池化方法并不适用于三维的数据。单以三角网格来说,将网格传统简化方式推广到网络的池化是一个不错的方向。

论文地址4:MeshCNN: A Network with an Edge

MeshCNN将塌边作为池化方法,推广到三角网格上:
在这里插入图片描述
测试了一下,没有塌边池化的话,只使用论文里边的卷积:在SHREC (500个面) 分类上性能差不多,COSEG 分割准确率会降低2 - 3%。

论文地址5:Subdivision-Based Mesh Convolution Networks

直接将塌面引入到网格池化是很复杂的,SubdivNet另辟蹊径先Remesh再池化:
在这里插入图片描述
Subdivision使三角网格也具有类似图像的一些规则结构
以上需要构造一个矩阵 - 池化之前到池化之后的特征映射矩阵


二、非结构化(聚类、Top_k?)

  • 我将以聚类或者排序等形式的池化方法称之为非结构化的池化。

2.1 三维点云

先以点云举例,它是离散、杂乱无章、毫无结构可言的,目前主流的池化或者降采样的方法是最远点采样 (Farthest Point Sampling)

论文地址6:PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space

在这里插入图片描述
主要使用的就是根据距离排序的方法对点云下采样,使用最大池化处理点云无序问题 存疑:仅仅是最大池化是否忽略了很多潜在的信息

2.2 Graph - 图

有很多基于聚类或者Top_k的池化方法7:图池化之Topk

论文地址8:Primal-Dual Mesh Convolutional Neural Networks

PDMesh将三角网格转换成了图,引入了图顶点合并作为池化的方法
在这里插入图片描述

2.3 Transformer - 图像

从二维到三维的规则池化,然后再从三维回到二维
近些年2D图像上的Transformer不光引入了图像的位置编码、自注意力,还有Token的池化…

论文地址9:PSViT: Better Vision Transformer via Token Pooling and Attention Sharing
论文地址10:Token Pooling in Vision Transformers
论文地址11:MetaFormer Is Actually What You Need for Vision

印象最深刻的还是MetaFormer这篇论文,没有华丽的池化,只有简单的平均池化就有非常好的效果:
在这里插入图片描述
展示了网络架构的力量…


三、讨论

关于池化其实还是有很多争议:

CNN真的需要下采样(上采样)吗?
CNN一定需要池化层吗?
假如算力无限制,设计卷积神经网络(CNN)的过程中还需要池化(pooling)吗?

就目前的情况,池化应该是不可或缺的,因为不管是最新的研究还是很多神经网络的落地,都用到了池化
但是如果网络的输入只是低分辨率的数据,私以为去掉池化也无妨:

  • 有没有这样一种可能的解决方案:预处理 (下采样) -> 网络 (无池化) -> 后处理 (上采样 or 其他)

  1. 池化 ↩︎

  2. 卷积神经网络中的各种池化操作 ↩︎

  3. Strip Pooling: Rethinking Spatial Pooling for Scene Parsing ↩︎

  4. MeshCNN: A Network with an Edge ↩︎

  5. Subdivision-Based Mesh Convolution Networks ↩︎

  6. PointNet++: Deep Hierarchical Feature Learning on Point Sets in a Metric Space ↩︎

  7. 图池化之Topk ↩︎

  8. Primal-Dual Mesh Convolutional Neural Networks ↩︎

  9. PSViT: Better Vision Transformer via Token Pooling and Attention Sharing ↩︎

  10. Token Pooling in Vision Transformers ↩︎

  11. Token Pooling in Vision Transformers ↩︎

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大米粥哥哥

感谢认可!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值