询广西南宁网站运营,礼品定制,温州市网站制作公司,seo资料本文这次分享的是三重注意力机制Triplet Attention。现在注意力机制在计算机视觉任务中被广泛研究和应用#xff0c;如 Squeeze-and-Excitation Networks (SENet)、Convolutional Block Attention Module (CBAM) 等。然而#xff0c;这些方法存在一些局限性#xff0c;例如需… 本文这次分享的是三重注意力机制Triplet Attention。现在注意力机制在计算机视觉任务中被广泛研究和应用如 Squeeze-and-Excitation Networks (SENet)、Convolutional Block Attention Module (CBAM) 等。然而这些方法存在一些局限性例如需要大量可学习参数或者在计算通道注意力时没有考虑跨维度交互等。Triplet Attention可以有效的解决这些问题其强调在计算注意力权重时捕获跨维度交互的重要性以提供丰富的特征表示。 1. 三重注意力机制Triplet Attention 这张图展示了一个名为 “Triplet Attention” 的神经网络模块的结构。该模块的输入是一个形状为CxHxW的张量整个模块由三个并行的分支组成每个分支都执行相似的操作
Z - Pool 操作每个分支首先进行 Z - Pool 操作。Z - Pool 是一种池化操作它将输入张量在通道维度上进行平均池化和最大池化并将结果在通道维度上进行拼接。卷积操作Conv接着进行卷积操作卷积核的大小未在图中明确标出但卷积操作后张量的形状仍然保持为 。Sigmoid 激活函数卷积操作之后应用 Sigmoid 激活函数将输出值压缩到 0 到 1 之间。 2.Triplet Attention结构 1. 模块 (d) 首先对输入张量进行维度置换Permute改变张量的维度顺序。 2. 然后进行 Z - Pool 操作提取通道维度的特征。 Z - Pool 操作是一种在神经网络中用于特征提取的池化操作。它结合了平均池化Average Pooling和最大池化Maximum Pooling的优点。 在 Z - Pool 操作中对于输入张量的某一维度通常是通道维度会同时进行平均池化和最大池化操作然后将这两个池化结果在该维度上进行拼。 3. 利用 7x7 卷积、批归一化Batch Norm和 Sigmoid 函数生成注意力权重 。 4. 再次进行维度置换后通过 1x1 卷积将权重应用到原始输入张量达到对输入特征重新加权的目的。 3. 接下来我们将详细介绍如何将Triplet_Attention集成到 YOLOv8 模型中。
这是我的GitHub代码tgf123/YOLOv8_improve (github.com)
这是改进讲解YOLOv8模型改进 第二十讲 添加三重注意力机制Triplet Attention 提升小目标、遮挡目标_哔哩哔哩_bilibili
3.1 如何添加 1. 首先在我上传的代码中yolov8_improve中找到Triplet_Attention.py代码部分它包含两个部分一个是Triplet_Attention.py的核心代码一个是yolov8模型的配置文件。
2. 然后我们在ultralytics文件夹下面创建一个新的文件夹名字叫做change_models, 然后再这个文件夹下面创建Triplet_Attention.py文件然后将iRMB的核心代码放入其中
3. 在 task.py文件中导入Triplet_Attention
from ultralytics.change_models.triplet_attention import C2f_TripletAttention,TripletAttention 4. 然后将 Triplet_Attention添加到下面当中 第一个改进修改的地方 第二个改进修改的地方 5. 最后将配置文件复制到下面文件夹下 6. 运行代码跑通 from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorldif __name____main__:# 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型model YOLO(rD:\bilibili\model\YOLOV8_new\ultralytics-main\ultralytics\cfg\models\v8\yolov8_Triplet_Attention.yaml)\.load(rD:\bilibili\model\YOLOV8_new\ultralytics-main\yolov8n.pt) # build from YAML and transfer weightsresults model.train(datarD:\bilibili\model\ultralytics-main\ultralytics\cfg\datasets\VOC_my.yaml,epochs100,imgsz640,batch8,cache False,# single_cls False, # 是否是单类别检测# workers 0,# resume,# amp False) from ultralytics.models import NAS, RTDETR, SAM, YOLO, FastSAM, YOLOWorldif __name____main__:# 使用自己的YOLOv8.yamy文件搭建模型并加载预训练权重训练模型model YOLO(rD:\bilibili\model\YOLOV8_new\ultralytics-main\ultralytics\cfg\models\v8\yolov8_irmb.yaml)\.load(rD:\bilibili\model\YOLOV8_new\ultralytics-main\yolov8n.pt) # build from YAML and transfer weightsresults model.train(datarD:\bilibili\model\ultralytics-main\ultralytics\cfg\datasets\VOC_my.yaml,epochs100, imgsz640, batch8)