版权声明:本文为CSDN博主「qyhyzard」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/CVSvsvsvsvs/article/details/90495254
利用现有的pooling API实现全局平均池化的效果。
首先我们简单理解全局平均池化操作。
如果有一批特征图,其尺寸为 [ B, C, H, W], 我们经过全局平均池化之后,尺寸变为[B, C, 1, 1]。
也就是说,全局平均池化其实就是对每一个通道图所有像素值求平均值,然后得到一个新的1 * 1的通道图。
明白这个思路之后,我们就可以很容易实现全局平均池化了。
利用自适应平均池化就可以快速实现。或者自适应最大池化也可以,一样。
In [1]: import torch
In [2]: a = torch.rand([4,3,4,4])
In [3]: a.size()
Out[3]: torch.Size([4, 3, 4, 4])
In [4]: b = torch.nn.functional.adaptive_avg_pool2d(a, (1,1)) # 自适应池化,指定池化输出尺寸为 1 * 1
In [5]: b.size()
Out[5]: torch.Size([4, 3, 1, 1])
如果要预测K个类别,在卷积特征抽取部分的最后一层卷积层,就会生成K个特征图,
然后通过全局平均池化就可以得到 K个1×1的特征图,将这些1×1的特征图输入到softmax layer之后,每一个输出结果代表着这K个类别的概率(或置信度 confidence),起到取代全连接层的效果。
优点:
和全连接层相比,使用全局平均池化技术,对于建立特征图和类别之间的关系,是一种更朴素的卷积结构选择。
全局平均池化层不需要参数,避免在该层产生过拟合。
全局平均池化对空间信息进行求和,对输入的空间变化的鲁棒性更强。
用GAP替代FC全连接层
有两个有点:一是GAP在特征图与最终的分类间转换更加简单自然;
二是不像FC层需要大量训练调优的参数,降低了空间参数会使模型更加健壮,抗过拟合效果更佳。
https://www.cnblogs.com/hutao722/p/10008581.html