本文旨在介绍一种全新的改进机制 —— 卷积和注意力融合模块(CAFM),并详细阐述其在 YOLOv8 中的应用,以显著提升模型性能。首先,CAFM 的设计目的是融合卷积神经网络(CNNs)和 Transformer 的优势,从而能够对全局和局部特征进行有效建模。随后,我们将深入探讨该模块的模型结构,以及如何将 CAFM 模块与 YOLOv8 完美结合,进而提升目标检测的性能。
1. CAFM 结构介绍
CAFM 旨在融合卷积神经网络(CNNs)和 Transformer 的优势,通过结合局部特征捕捉能力(卷积操作)和全局特征提取能力(注意力机制),对图像的全局和局部特征进行有效建模,以提升检测效果。
1.1 局部分支
1. 通道调整:首先使用卷积调整通道维度。卷积可以在不改变特征图的宽和高的情况下,对通道数进行灵活调整,这有助于后续操作更好地处理特征信息。
2. 通道混洗操作:接着进行通道混洗操作。通道混洗将输入张量沿着通道维度划分为多个组,在每个组内采用深度可分离卷积来诱导通道混洗,然后将每个组的输出张量沿着通道维度进行拼接,生成一个新的输出张量。这个操作可以进一步混合和融合通道信息,增强跨通道的交互和信息整合。
3. 特征提取:最后利用卷积提取特征。这种卷积操作能够在空间和光谱维度上综合捕捉局部特征信息。
1.2. 全局分支
1. 生成查询、键和值:首先通过卷积和深度 - 宽度卷积生成查询(Q)、键(K)和值(V),这三个张量具有特定的形状。
2. 计算注意力图:将 Q 重塑为,K 重塑为,然后通过 Q 和 K 的交互计算注意力图。通过这种方式计算注意力图,而不是计算庞大的常规注意力图(尺寸为),可以降低计算负担。
3. 计算全局分支输出:全局分支的输出定义为,其中,是一个可学习的缩放参数,用于控制在应用 Softmax 函数之前和矩阵乘法的大小。
2. 接下来,我们将详细介绍如何将CAFM 集成到 YOLOv8 模型中。
这是我的GitHub代码:tgf123/YOLOv8_improve (github.com)
这是改进讲解:YOLOv8模型改进 第十三讲 添加卷积和注意力融合模块(CAFM) 提升小目标和遮挡检测_哔哩哔哩_bilibili
2.1 如何添加
1. 首先,在我上传的代码中yolov8_improve中找到CAFM .py代码部分,它包含两个部分一个是CAFM .py的核心代码,一个是yolov8模型的配置文件。
2. 然后我们在modules文件夹下面创建CAFM .py文件,然后将CAFM 的核心代码放入其中
3. 在 task.py文件中导入C2f_AT
from ultralytics.nn.modules.CAFM import C2f_AT
4. 然后将 C2f_EMA添加到下面当中
5. 最后将配置文件复制到下面文件夹下
6. 运行代码跑通
from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorld
if __name__=="__main__":
# 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型
model = YOLO(r"D:\bilibili\model\ultralytics-main\ultralytics\cfg\models\v8\yolov8_CAFM.yaml")\
.load(r'D:\bilibili\model\ultralytics-main\tests\yolov8n.pt') # build from YAML and transfer weights
results = model.train(data=r'D:\bilibili\model\ultralytics-main\ultralytics\cfg\datasets\VOC_my.yaml',
标签:卷积,ultralytics,YOLOv8,CAFM,注意力,通道
From: https://blog.csdn.net/qq_64693987/article/details/143129346