计算机系统应用教程网站

网站首页 > 技术文章 正文

「网络结构比较」 基于Resnet两个注意力:BAM与CBAM

btikc 2024-10-20 05:02:02 技术文章 6 ℃ 0 评论

BAM:论文链接:http://bmvc2018.org/contents/papers/0092.pdf

CBAM论文链接:http://openaccess.thecvf.com/content_ECCV_2018/html/Sanghyun_Woo_Convolutional_Block_Attention_ECCV_2018_paper.html

这两个模型都是把注意力与resnet结合的模型。注意力思路可以与任何模型结合,但是怎样结合做好,这个就需要我们广大调参同学一起人肉搜索出来了。

没错,目前更好网络结构的研发和搜索,基本上靠实验结果说话,理论依据只是佯攻,和事后诸葛亮的角色。


先从名字上认识一下这两个模型:

CBAM: Convolutional Block Attention Module

卷积块的注意力模块

BAM: Bottleneck Attention Module

瓶颈注意力模块

都是注意力,一个将注意力用在了Bottleneck 内部,一个将注意力用在了卷积Block之间。


详细看一下CBAM:




注意力筛选后的信息作为输出。


详细看一下BAM:





这里在公式(2)中,先将Mc(F)+Ms(F)得到M(F).但是Mc(F)是C的,Ms(F)是HxW的,两者怎么相加呢?

图7的最后一句话说了,先将Mc(F)和Ms(f) 放大到CxHxW的。

也就是说:

将长度为C的Mc(F)放大到CxHxW的,这个就是把Mc(F)复制HxW份。

将HxW的Ms(F)放大到CxHxW的,这个就是把Ms(F)复制C份。

公式(2)的M(F)就是F中每个神经元的注意力权重了,得到这个M(F)后,使用公式(1)实现注意力和残差结构。

对比分析:

相同点:两者都实现了Mc(F),Ms(F),由都是在resnet的基础上实现的。

不同点:

Mc(F)的不同:

CBAM的Mc(F):先 maxpooling 和 avgpooling 然后分别跟两层全连接,最后激活函数sigma

BAM的Mc(F):先avgpooling,然后两层全链接,然后BN,无激活函数

Ms(F)的不同:

CBAM的Ms(F):先将maxpooing和avgpooling 连接在一起,然后一个7x7的卷积,最后激活函数sigma.

BAM的Ms(F):直接经过4个卷积一个BN,4个卷积中的第1个,第4个是1x1的卷积,进行通道变换,类似bottolneck中的结构。4个卷积中的第2,3个,是3x3的膨胀卷积,注意膨胀卷积在Deeplabv3中被首次采用,取得了不错的效果。Deeplabv3是做图像分割的。意味着膨胀卷积可以加强模型对图像每个像素与周围关系的理解。


两者与resnet结合的不同:

CBAM直接对resnet提取到的特征进行注意力加权,没有shortcut。

BAM 参考了resnet中的重要结构bottolneck block,将注意力权重的求取模块融合代替 了bottolneck的中的残差路的几个卷积[如图9,两个1x1,和1个3x3],也保留了shortcut.



综上,两者虽然都是在resnet上进行的注意力改进,两者思路非常相似,但是细节上还是不同。由于BAM保留了shortcut,以及采用了BN,因此训练效率理论上应该更高。BAM还采用了一定的膨胀卷积,对细节应该建模更好。从膨胀卷积这一点来看,BAM似乎更适合做需要对细节更多理解的任务:比如图像分割与目标检测。

但是,对于不同数据集,不同任务,我们还是应该对CBAM,BAM都一样重视,要做消融实验。

比如可以将CBAM加上shortcut再跑跑实验。

比如可以将BAM的膨胀卷积换成普通卷积,再跑跑分类模型。

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表