YOLOv8改进 - 注意力机制 | Triplet Attention (三重注意力) 通过跨维度交互捕捉增强多尺度目标特征表征

前言

本文介绍了三重注意力机制(Triplet Attention),这是一种通过三分支结构捕获跨维度交互以计算注意力权重的轻量化方法。该方法利用旋转操作构建通道与空间维度间的依赖关系,有效编码通道间和空间信息,且计算开销极低。我们将 Triplet Attention 模块集成进 YOLOv8 的 Neck 部分,插入于特征融合后的 C2f 模块之后,增强了模型对关键特征的提取能力。实验结果表明,引入 Triplet Attention 的 YOLOv8 模型在目标检测任务中能够以可忽略的额外计算成本显著提升检测精度。

文章目录: YOLOv8改进大全:卷积层、轻量化、注意力机制、损失函数、Backbone、SPPF、Neck、检测头全方位优化汇总

专栏链接: YOLOv8改进专栏

文章目录

  • 前言
  • 介绍
    • 摘要
  • 文章链接
  • 基本原理
  • 核心代码
  • 引入代码
  • 注册
    • 步骤1:
    • 步骤2
  • 配置yolov8_TripletAttention.yaml
  • 实验
    • 脚本
    • 结果

介绍

摘要

得益于在通道或空间位置之间构建相互依赖关系的能力,注意力机制在最近被广泛研究并广泛应用于各种计算机视觉任务中。在本文中,我们研究了轻量但有效的注意力机制,并提出了三重注意力,这是一种通过使用三分支结构捕获跨维度交互来计算注意力权重的新方法。对于输入张量,三重注意力通过旋转操作及后续的残差变换构建维度间依赖关系,并以可忽略的计算开销编码通道间和空间信息。我们的方法简单且高效,可以作为附加模块轻松插入经典骨干网络中。我们在各种具有挑战性的任务中证明了我们方法的有效性,包括 ImageNet-1k 上的图像分类以及 MSCOCO 和 PASCAL VOC 数据集上的目标检测。此外,我们通过可视化检查 GradCAM 和 GradCAM++ 结果,提供了对三重注意力性能的广泛见解。我们方法的实证评估支持了在计算注意力权重时捕捉跨维度依赖关系的重要性。本文的代码可在 https://github.com/LandskapeAI/triplet-attention 公开获取。

文章链接

论文地址:论文地址

代码地址:代码地址

基本原理

核心代码

importtorchimporttorch.nnasnnclassBasicConv(nn.Module):def__init__(self,in_planes,out_planes,kernel_size,stride=1,padding=0,dilation=1,groups=1,relu=True,bn=True,bias=False,):super(BasicConv,self).__init__()self.out_channels=out_planes self.conv=nn.Conv2d(in_planes,out_planes,kernel_size=kernel_size,stride=stride,padding=padding,dilation=dilation,groups=groups,bias=bias,)self.bn=(nn.BatchNorm2d(out_planes,eps=1e-5,momentum=0.01,affine=True)ifbnelseNone)self.relu=nn.ReLU()ifreluelseNonedefforward(self,x):x=self.conv(x)ifself.bnisnotNone:x=self.bn(x)ifself.reluisnotNone:x=self.relu(x)returnxclassChannelPool(nn.Module):defforward(self,x):returntorch.cat((torch.max(x,1)[0].unsqueeze(1),torch.mean(x,1).unsqueeze(1)),dim=1)classSpatialGate(nn.Module):def__init__(self):super(SpatialGate,self).__init__()kernel_size=7self.compress=ChannelPool()self.spatial=BasicConv(2,1,kernel_size,stride=1,padding=(kernel_size-1)//2,relu=False)defforward(self,x):x_compress=self.compress(x)x_out=self.spatial(x_compress)scale=torch.sigmoid_(x_out)returnx*scaleclassTripletAttention(nn.Module):def__init__(self,gate_channels,reduction_ratio=16,pool_types=["avg","max"],no_spatial=False,):super(TripletAttention,self).__init__()self.ChannelGateH=SpatialGate()self.ChannelGateW=SpatialGate()self.no_spatial=no_spatialifnotno_spatial:self.SpatialGate=SpatialGate()defforward(self,x):x_perm1=x.permute(0,2,1,3).contiguous()x_out1=self.ChannelGateH(x_perm1)x_out11=x_out1.permute(0,2,1,3).contiguous()x_perm2=x.permute(0,3,2,1).contiguous()x_out2=self.ChannelGateW(x_perm2)x_out21=x_out2.permute(0,3,2,1).contiguous()ifnotself.no_spatial:x_out=self.SpatialGate(x)x_out=(1/3)*(x_out+x_out11+x_out21)else:x_out=(1/2)*(x_out11+x_out21)returnx_out

引入代码

在根目录下的ultralytics/nn/目录,新建一个attention目录,然后新建一个以TripletAttention为文件名的py文件, 把代码拷贝进去。

importtorchimporttorch.nnasnnclassBasicConv(nn.Module):def__init__(self,in_planes,out_planes,kernel_size,stride=1,padding=0,dilation=1,groups=1,relu=True,bn=True,bias=False):super(BasicConv,self).__init__()self.out_channels=out_planes self.conv=nn.Conv2d(in_planes,out_planes,kernel_size=kernel_size,stride=stride,padding=padding,dilation=dilation,groups=groups,bias=bias)self.bn=nn.BatchNorm2d(out_planes,eps=1e-5,momentum=0.01,affine=True)ifbnelseNoneself.relu=nn.ReLU()ifreluelseNonedefforward(self,x):x=self.conv(x)ifself.bnisnotNone:x=self.bn(x)ifself.reluisnotNone:x=self.relu(x)returnxclassZPool(nn.Module):defforward(self,x):returntorch.cat((torch.max(x,1)[0].unsqueeze(1),torch.mean(x,1).unsqueeze(1)),dim=1)classAttentionGate(nn.Module):def__init__(self):super(AttentionGate,self).__init__()kernel_size=7self.compress=ZPool()self.conv=BasicConv(2,1,kernel_size,stride=1,padding=(kernel_size-1)//2,relu=False)defforward(self,x):x_compress=self.compress(x)x_out=self.conv(x_compress)scale=torch.sigmoid_(x_out)returnx*scaleclassTripletAttention(nn.Module):def__init__(self,no_spatial=False):super(TripletAttention,self).__init__()self.cw=AttentionGate()self.hc=AttentionGate()self.no_spatial=no_spatialifnotno_spatial:self.hw=AttentionGate()defforward(self,x):x_perm1=x.permute(0,2,1,3).contiguous()x_out1=self.cw(x_perm1)x_out11=x_out1.permute(0,2,1,3).contiguous()x_perm2=x.permute(0,3,2,1).contiguous()x_out2=self.hc(x_perm2)x_out21=x_out2.permute(0,3,2,1).contiguous()ifnotself.no_spatial:x_out=self.hw(x)x_out=1/3*(x_out+x_out11+x_out21)else:x_out=1/2*(x_out11+x_out21)returnx_out

注册

ultralytics/nn/tasks.py中进行如下操作:

步骤1:

fromultralytics.nn.attention.TripletAttentionimportTripletAttention

步骤2

修改def parse_model(d, ch, verbose=True):

elifmin{TripletAttention}:c2=ch[f]args=[c2,*args]

配置yolov8_TripletAttention.yaml

ultralytics/cfg/models/v8/yolov8_TripletAttention.yaml

# Ultralytics YOLO 🚀, AGPL-3.0 license# YOLOv8 object detection model with P3-P5 outputs. For Usage examples see https://docs.ultralytics.com/tasks/detect# Parametersnc:2# number of classesscales:# model compound scaling constants, i.e. 'model=yolov8n.yaml' will call yolov8.yaml with scale 'n'# [depth, width, max_channels]n:[0.33,0.25,1024]# YOLOv8n summary: 225 layers, 3157200 parameters, 3157184 gradients, 8.9 GFLOPss:[0.33,0.50,1024]# YOLOv8s summary: 225 layers, 11166560 parameters, 11166544 gradients, 28.8 GFLOPsm:[0.67,0.75,768]# YOLOv8m summary: 295 layers, 25902640 parameters, 25902624 gradients, 79.3 GFLOPsl:[1.00,1.00,512]# YOLOv8l summary: 365 layers, 43691520 parameters, 43691504 gradients, 165.7 GFLOPsx:[1.00,1.25,512]# YOLOv8x summary: 365 layers, 68229648 parameters, 68229632 gradients, 258.5 GFLOPs# YOLOv8.0n backbonebackbone:# [from, repeats, module, args]-[-1,1,Conv,[64,3,2]]# 0-P1/2-[-1,1,Conv,[128,3,2]]# 1-P2/4-[-1,3,C2f,[128,True]]-[-1,1,Conv,[256,3,2]]# 3-P3/8-[-1,6,C2f,[256,True]]-[-1,1,Conv,[512,3,2]]# 5-P4/16-[-1,6,C2f,[512,True]]-[-1,1,Conv,[1024,3,2]]# 7-P5/32-[-1,3,C2f,[1024,True]]-[-1,1,SPPF,[1024,5]]# 9# YOLOv8.0n headhead:-[-1,1,nn.Upsample,[None,2,'nearest']]-[[-1,6],1,Concat,[1]]# cat backbone P4-[-1,3,C2f,[512]]# 12-[-1,1,nn.Upsample,[None,2,'nearest']]-[[-1,4],1,Concat,[1]]# cat backbone P3-[-1,3,C2f,[256]]# 15 (P3/8-small)-[-1,1,TripletAttention,[]]# 16-[-1,1,Conv,[256,3,2]]-[[-1,12],1,Concat,[1]]# cat head P4-[-1,3,C2f,[512]]# 19 (P4/16-medium)-[-1,1,TripletAttention,[]]# 20-[-1,1,Conv,[512,3,2]]-[[-1,9],1,Concat,[1]]# cat head P5-[-1,3,C2f,[1024]]# 23 (P5/32-large)-[-1,1,TripletAttention,[]]# 24-[[16,20,24],1,Detect,[nc]]# Detect(P3, P4, P5)

实验

脚本

importosfromultralyticsimportYOLO# Define the configuration options directlyyaml='ultralytics/cfg/models/v8/yolov8_TripletAttention.yaml'# Initialize the YOLO model with the specified YAML filemodel=YOLO(yaml)# Print model informationmodel.info()if__name__=="__main__":# Train the model with the specified parametersresults=model.train(data='ultralytics/datasets/original-license-plates.yaml',name='yolov8_TripletAttention',epochs=10,workers=8,batch=1)

结果

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1196589.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

计算机Java毕设实战-基于Java Web的虚拟实验室设备租赁管理系基于springboot的实验设备借用平台的设计与实现 实验室设备租赁系统【完整源码+LW+部署说明+演示视频,全bao一条龙等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

springboot_ssm800公司重大停管理系统--论文

目录 具体实现截图摘要 系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式! 具体实现截图 摘要 随着企业规模的扩大和业务复杂度的提升,重大停管理成为保障企业稳定运营的关键环节。传统管理方式依赖…

springboot_ssm801二手商品交易系统 积分兑换ntkgh--论文

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 摘要 随着互联网技术的快速发展,二手商品交易平台逐渐成为资源循环利用的重要途径。本研究基于SpringBoot和SSM…

YOLOv8改进 - 注意力机制 | SKAttention:选择性核注意力通过多分支融合与自适应感受野调整优化多尺度目标检测

前言 本文介绍了SKAttention(选择性核注意力)机制,这是一种受生物视觉皮层启发的动态多尺度特征提取方法。该技术通过Split、Fuse和Select三个算子,使神经元能根据输入自适应调整感受野大小,通过不同卷积核分支的软注…

Java毕设项目推荐-基于springboot vue的实验室设备借用管理系统【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

Java计算机毕设之基于vue设备租赁报修借用管理系统基于springboot的实验设备借用平台的设计与实现 实验室设备租赁系统(完整前后端代码+说明文档+LW,调试定制等)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

springboot_ssm802二手车估值与销售网络平台--论文

目录具体实现截图摘要系统所用技术介绍写作提纲源码文档获取/同行可拿货,招校园代理 :文章底部获取博主联系方式!具体实现截图 摘要 随着二手车市场的快速发展,准确估值与高效交易成为行业痛点。传统估值方法依赖人工经验,存在主…

想转行大模型?先了解算法与应用工程师的真实门槛与学习路径

文章分析了大模型领域两类岗位:门槛极高的算法工程师和相对较低的应用工程师。建议没有技术或业务壁垒的从业者可考虑大模型应用方向,但需警惕盲目跟风。推荐利用业余时间先尝试研究,确认适合后再转行。文章还介绍了大模型在各行业的应用场景…

Qwen Code Skills实战:构建数据分析智能体,轻松实现数据问答与报表生成

文章详细介绍了如何使用Qwen Code Skills功能构建数据库查询智能体。通过COVID-19数据分析案例,展示了创建自定义Skill的完整流程,包括编写SKILL.md配置文件和Python脚本,实现数据查询、分析和自动生成报表页面。开发者可借此将专业知识打包成…

程序员转行AI大模型全攻略:后端开发轻松转型大模型应用开发,非常详细收藏我这一篇就够了

文章为Java程序员提供转行大模型开发的完整指南,包括基础知识学习、工具框架掌握、编程能力提升、数学知识储备和项目实践等步骤。分析了Java程序员的转型优势,介绍了AI大模型时代的新型技术岗位及所需知识体系,并提供七阶段学习路径&#xf…

【课程设计/毕业设计】基于springboot的高校实验设备借用平台的设计与实现 实验室设备租赁系统【附源码、数据库、万字文档】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

鸿蒙 RTL 适配踩坑记录:为什么你的布局在阿拉伯语下一定会翻车

摘要 随着鸿蒙应用逐步走向国际化,应用不再只面对中文和英文用户。 在 中东、北非 等地区,阿拉伯语、希伯来语 这类 从右到左(RTL)语言 是主流,如果应用在这些语言环境下: 布局顺序是反的返回按钮方向不对…

详细介绍:SQL时间函数全解析从基础日期处理到高级时间序列分析

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

Java毕设项目推荐-基于springboot的婚庆公司服务平台婚礼司仪主持婚车租赁的设计与实现【附源码+文档,调试定制服务】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

深入解析:Flink SQL Window Deduplication按窗口“保留第一条/最后一条”记录(Streaming)

深入解析:Flink SQL Window Deduplication按窗口“保留第一条/最后一条”记录(Streaming)pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !impor…

Windows系统优化工具RyTuneX1.6.0 完全安装配置指南,Win10 Win11优化指南

平时用Windows系统的时候,是不是经常遇到系统卡顿、占空间,甚至担心隐私被泄露?别担心!今天我给大家挖到一款超好用的Windows优化神器,完美适配Win10和Win11,功能强大到超乎想象! RyTuneX是一款…

MemOS记忆图谱实战:从零构建LangChain智能体的长期记忆系统(含完整代码)

文章详细介绍了MemOS开源框架的Graph记忆图谱能力及其在LangChain智能体中的应用。首先通过TreeTextMemory实现基于图结构的记忆存储与检索,构建带记忆的ChatBot;其次介绍了异步记忆重组机制,自动将孤立记忆节点组织成知识图谱;最…

【计算机毕业设计案例】基于springboot的婚庆公司相亲主持服务平台的设计与实现(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

【计算机毕业设计案例】基于Java springboot实验室预约系统实验室设备租赁设备报修维修报废(程序+文档+讲解+定制)

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

大模型未来已来:从ChatGPT到Agentic AI的收藏级进阶指南

本文探讨了AI从被动的大语言模型向主动的代理式人工智能(Agentic AI)的转变。Agentic AI系统通过感知、推理、行动和记忆形成闭环控制,采用ReAct范式解决复杂问题,并正从单智能体向多智能体协作演进。尽管面临幻觉、对齐危机和可靠性挑战,Age…