GAP全局平均池化详解

温故而知新,可以为师矣!

一、参考资料

论文:Network In Network
全局平均池化(Global Average Pooling)
【机器学习】一文带你深入全局平均池化

二、GAP相关介绍

1. 引言

一般情况下,卷积层用于提取二维数据如图片、视频等的特征,针对于具体任务(分类、回归、图像分割)等,卷积层后续会用到不同类型的网络,拿分类问题举例,最简单的方式就是将卷积层提取出的特征(feature map)输入到softmax全连接层对应不同的类别。首先,这里的feature map是二维多通道的数据结构,类似于三个通道(红黄绿)的彩色图片,也就是这里的feature map具有空间上的信息;其次,在GAP被提出之前,常用的方式是将feature map直接拉平成一维向量(下图a),但是GAP不同,是将每个通道的二维图像做平均,最后也就是每个通道对应一个均值(下图b)。
在这里插入图片描述

2. GAP简介

全局平均池化(Global Average Pooling, GAP)所谓的全局就是针对常用的平均池化而言,平均池化会有它的 filter_size,比如 2 * 2,全局平均池化就没有size,它针对的是整张feature map。GAP将特征图所有像素值相加求平局,得到一个数值,即用该数值表示对应特征图。

GAP的目的是代替全连接层。如果要预测K个类别,在卷积特征抽取部分的最后一层卷积层,就会生成K个特征图,然后通过全局平均池化就可以得到 K个1×1的特征图,将这些1×1的特征图输入到softmax layer之后,每一个输出结果代表着这K个类别的概率(或置信度 confidence)。
在这里插入图片描述

如上图所示。假设最终分成10类,则最后卷积层应该包含10个滤波器(即输出10个特征图),然后按照全局池化平均定义,分别对每个特征图,累加所有像素值并求平均,最后得到10个数值,将这10个数值输入到softmax层中,得到10个概率值,即这张图片属于每个类别的概率值。

GAP可以减少参数量,减少计算量,减少过拟合。如下图所示,一个feature map 全局平均池化后得到一个值,再进行全连接(softmax)就会少很多参数。
在这里插入图片描述

3. GAP优势

  • 和全连接层相比,使用全局平均池化技术,对于建立特征图和类别之间的关系,是一种更朴素的卷积结构选择。
  • 全局平均池化层不需要参数,避免在该层产生过拟合。
  • 全局平均池化对空间信息进行求和,对输入的空间变化的鲁棒性更强。

4. PyTorch实现

import torch


a = torch.rand([4,3,4,4])
print(a.size())

b = torch.nn.functional.adaptive_avg_pool2d(a, (1,1))  # 自适应池化,指定池化输出尺寸为 1 * 1
print(b.size())

输出结果

torch.Size([4, 3, 4, 4])
torch.Size([4, 3, 1, 1])

猜你喜欢

转载自blog.csdn.net/m0_37605642/article/details/134456183