赞
踩
参考:
https://arxiv.org/abs/1807.06521
https://arxiv.org/abs/1709.01507
https://zhuanlan.zhihu.com/p/65529934
https://zhuanlan.zhihu.com/p/32702350
https://github.com/luuuyi/CBAM.PyTorch
https://github.com/moskomule/senet.pytorch
1.CBAM: Convolutional Block Attention Module
2.Squeeze-and-Excitation Networks
先来谈SEnet吧,站在2020年看SEnet感觉就是个很容易实现的模块了
利用pytorch提供的nn.AdaptiveAvgPool2d和全连接层完成
原理的话,自己理解,在SEnet网络之前,通道间的信息交流只有通过1*1的卷积,但是1*1的卷积,感受野只有1啊,不能获取全局的信息,无法将通道间的信息权重进行筛选,这个时候作者就想到了一招,对整个特征图做一次全局的采样,获取整张特征图最大值作为该通道的代表,于是我们便得到一个1*1*C通道的特征tensor,再将整个tensor经过两个linear层,最后再过一个sigmoid层,这样就可以得到通道权重系数了
from torch import nn
class SELayer(nn.Module):
def __init__(self, channel, reduction=16):
super(SELayer, self).__init__()
self.avg_pool = nn.AdaptiveAvgPool2d(1)
self.fc = nn.Sequential(
nn.Linear(channel, channel // reduction, bias=False),
nn.ReLU(inplace=True),
nn.Linear(channel // reduction, ch
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。