深度学习论文: ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks及其PyTorch实现

网友投稿 272 2022-09-16

深度学习论文: ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks及其PyTorch实现

CBNet: ECA-Net: Efficient Channel Attention for Deep Convolutional Neural Networks PDF:​​​PyTorch: ​​概述

作者通过比对试验分别比较了降维和通道信息交流对SE Block的影响,分别得出两个结论,不降维的SE具有更好性能,通道信息交流有助于SE性能提升。因此在SE Block的基础上提出了更轻量化的ECA Block

2 Efficient Channel Attention (ECA) Module

SE (Global pooling-FC[r]-ReLu-FC-sigmoid),FC[r]就是使用压缩比(降维)为 r 的FC层。

SE-Var1(0参数的SE,Global pooling-sigmoid) SE-Var2 (Global pooling-[·]-sigmoid),[·]为点积操作。 SE-Var3 (Global pooling-FC-sigmoid)

2-1 Avoiding Dimensionality Reduction

SE-Var2和SE-Var3表明,不用降维操作的FC具有更好性能。SE-Var3结果更出色因为考虑了通道间信息交流(cross-channel interaction)。SE-GC1、SE-GC2 和 SE-GC3分别表示在SE-Var3基础上使用不同数量的 group的Group convolution操作。

2-2 Local Cross-Channel Interaction

同时作者可视化通道特征发现它具有一定的局部周期性,因此作者只考虑当前通道和其 k 个邻域通道的信息交流。然后参数数量为 k ,再共享所有通道的参数,则最终的参数数量为 k 。实现上使用卷积核为 k 的1D卷积来实现通道交换,即

3 与其他注意力模块对比

PyTorch代码:

class ECA_Module(nn.Module): def __init__(self, channel,gamma=2, b=1): super(ECA_Module, self).__init__() self.gamma = gamma self.b = b t = int(abs(log(channel, 2) + self.b) / self.gamma) k = t if t % 2 else t + 1 self.avg_pool = nn.AdaptiveAvgPool2d(1) self.conv = nn.Conv1d(1, 1, kernel_size=k, padding=k//2, bias=False) self.sigmoid = nn.Sigmoid() def forward(self, x): b, c, _, _ = x.size() y = self.avg_pool(x) y = self.conv(y.squeeze(-1).transpose(-1,-2)) y = y.transpose(-1,-2).unsqueeze(-1) y = self.sigmoid(y) return x * y.expand_as(x)

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:企业做好私域流量的5个底层逻辑!
下一篇:视频号逆势崛起,短视频三国杀局面到来!
相关文章

 发表评论

暂时没有评论,来抢沙发吧~