YOLOV8改进:在C2f模块不同位置添加注意力机制

本文以CBAM注意力机制为例,在c2f模块的不同位置添加注意力机制,没有用v8自带的CBAM模块,而是自己之前用过的代码。

CBAM简单介绍:

CBAM这是一种用于前馈卷积神经网络的简单而有效的注意模块。 给定一个中间特征图,我们的模块会沿着两个独立的维度(通道和空间)依次推断注意力图,然后将注意力图乘以输入特征图以进行自适应特征修饰。 由于CBAM是轻量级的通用模块,因此可以以可忽略的开销将其无缝集成到任何CNN架构中,并且可以与基础CNN一起进行端到端训练。

1.第一步,在ultralytics/nn/modules.py文件中添加CBAM注意力机制

########CBAM
class ChannelAttentionModule(nn.Module):
    def __init__(self, c1, reduction=16):
        super(ChannelAttentionModule, self).__init__()
        mid_channel = c1 // reduction
        self.avg_pool = nn.AdaptiveAvgPool2d(1)
        self.max_pool = nn.AdaptiveMaxPool2d(1)

        self.shared_MLP = nn.Sequential(
            nn.Linear(in_features=c1, out_features=mid_channel),
            nn.LeakyReLU(0.1, inplace=True),
            nn.Linear(in_features=mid_channel, out_features=c1)
        )
        self.act = nn.Sigmoid()
        # 

猜你喜欢

转载自blog.csdn.net/m0_51530640/article/details/129458744