当前位置: 首页 > news >正文

YOLOv10模型改进-Backbone改进-第60篇: YOLOv10改进策略【Backbone】| PVT Backbone替换

一、本文介绍

本文记录的是利用PVT(Pyramid Vision Transformer)作为Backbone改进YOLOv10的特征提取部分。PVT通过金字塔结构和空间缩减注意力,实现高效的多尺度特征提取。

二、PVT模块介绍

2.1 设计出发点

ViT缺乏多尺度特征提取能力,PVT通过金字塔结构和空间缩减注意力,同时兼顾全局建模和多尺度特征。

2.2 模块结构

PVT块:

  1. 空间缩减注意力:减少注意力计算复杂度
  2. 前馈网络:非线性变换
  3. 层次化设计:多尺度特征输出

三、PVT的实现代码

importtorchimporttorch.nnasnnclassSpatialReductionAttention(nn.Module):def__init__(self,dim,num_heads=4,sr_ratio=1):super().__init__()self.num_heads=num_heads self.scale=(dim//num_heads)**-0.5self.q=nn.Linear(dim,dim)self.kv=nn.Linear(dim,dim*2)self.proj=nn.Linear(dim,dim)self.sr_ratio=sr_ratioifsr_ratio>1:self.sr=nn.Conv2d(dim,dim,sr_ratio,sr_ratio)self.norm=nn.LayerNorm(dim)defforward(self,x,H,W):B,N,C=x.shape q=self.q(x).reshape(B,N,self.num_heads,C//self.num_heads).permute(0,2,1,3)ifself.sr_ratio>1:x_=x.transpose(1,2).view(B,C,H,W)x_=self.sr(x_).reshape(B,C,-1).transpose(1,2)x_=self.norm(x_)kv=self.kv(x_).reshape(B,-1,2,self.num_heads,C//self.num_heads).permute(2,0,3,1,4)else:kv=self.kv(x).reshape(B,N,2,self.num_heads,C//self.num_heads).permute(2,0,3,1,4)k,v=kv[0],kv[1]attn=(q @ k.transpose(-2,-1))*self.scale attn=attn.softmax(dim=-1)x=(attn @ v).transpose(1,2).reshape(B,N,C)returnself.proj(x)classPVTBasicLayer(nn.Module):def__init__(self,dim,num_heads,sr_ratio=1):super().__init__()self.norm1=nn.LayerNorm(dim)self.attn=SpatialReductionAttention(dim,num_heads,sr_ratio)self.norm2=nn.LayerNorm(dim)self.mlp=nn.Sequential(nn.Linear(dim,dim*4),nn.GELU(),nn.Linear(dim*4,dim))defforward(self,x,H,W):x=x+self.attn(self.norm1(x),H,W)x=x+self.mlp(self.norm2(x))returnxclassPVT(nn.Module):def__init__(self,c1=3,c2=1024,embed_dims=[64,128,256,512],num_heads=[1,2,4,8],sr_ratios=[8,4,2,1]):super().__init__()self.patch_embeds=nn.ModuleList()self.patch_embeds.append(nn.Sequential(nn.Conv2d(c1,embed_dims[0],7,4,3),nn.LayerNorm(embed_dims[0])))foriinrange(1,4):self.patch_embeds.append(nn.Sequential(nn.Conv2d(embed_dims[i-1],embed_dims[i],3,2,1),nn.LayerNorm(embed_dims[i])))self.layers=nn.ModuleList()foriinrange(4):self.layers.append(PVTBasicLayer(embed_dims[i],num_heads[i],sr_ratios[i]))self.final_conv=nn.Conv2d(embed_dims[-1],c2,1,bias=False)defforward(self,x):B=x.shape[0]fori,embedinenumerate(self.patch_embeds):x=embed(x)H,W=x.shape[2:]x=x.flatten(2).transpose(1,2)x=self.layers[i](x,H,W)ifi<3:x=x.transpose(1,2).reshape(B,-1,H,W)x=x.transpose(1,2).reshape(B,-1,H,W)x=self.final_conv(x)returnx

四、创新模块

将PVT作为Backbone集成到YOLOv10中:

# yolov10n_pvt.yamlbackbone:-[-1,1,PVT,[3,1024]]-[-1,1,SPPF,[1024,5]]

五、预期结果

模型mAP@0.5mAP@0.5:0.95参数量
YOLOv10n52.3%27.9%2.7M
YOLOv10n-PVT53.2%28.8%13.0M

📌项目环境配置

  • Python:3.8.10+
  • PyTorch:2.0.0+
  • CUDA:11.8+
  • Ultralytics:8.3.13+
http://www.jsqmd.com/news/1108626/

相关文章:

  • 分布式事务2PC_TSO详解_阿里云PolarDB-X如何实现高性能分布式事务
  • OrCAD 位号管理 重排位号与限定位号
  • 106、数据库连接池设计:DBUtils、SQLAlchemy pooling、连接泄漏检测
  • 3步掌握AMD Ryzen处理器深度调试:从新手到硬件专家的完整指南
  • 3分钟解锁音乐自由:用ncmdumpGUI轻松解密网易云NCM文件
  • 车辆速度估计 车速识别 车速估计 车辆速度计算
  • 110、unittest 标准库:TestCase、TestSuite、TestRunner 的共存与迁移
  • rust语言学习笔记(指针七)Arc<T>(线程安全引用计数)
  • 13DOF传感器与PIC18F86K22微控制器的定位系统设计
  • 让小爱音箱秒变AI助手:MiGPT完整配置指南
  • 便携医疗PCB小型化HDI高密度集成制造核心难点解析
  • 【VMware 3D加速终极指南】:20年虚拟化专家亲授显卡直通、OpenGL/DirectX优化与性能翻倍实操秘籍
  • 武汉塔子湖儿科诊所哪家靠谱
  • KKManager:告别模组混乱,14款游戏模组一键智能管理
  • 抖音批量下载技术方案:从零构建高效内容管理工具
  • BLDC电机FOC控制:硬件设计与算法实现
  • 3PEAK思瑞浦 TPA158B3-S5TR-S SOT23-5 电流信号检测放大器
  • 如何用TPFanCtrl2实现ThinkPad风扇智能控制:完整静音散热指南
  • 终极Steam创意工坊下载器:跨平台免费获取海量游戏模组的完整指南
  • Gemma 4本地AI部署指南:从硬件配置到性能优化
  • ThinkPad风扇控制终极指南:如何用TPFanCtrl2实现智能散热与极致静音
  • 5分钟掌握NCM文件解密:用ncmdumpGUI释放你的网易云音乐收藏
  • SMUDebugTool完整指南:5步掌握AMD处理器性能调优的终极免费工具
  • 【Claude】迁移升级与版本兼容性排错 — 已解决
  • JUnit 5在IDEA里总报ClassNotFoundException,你还在手动Add Library?——Maven+Gradle双模式自动依赖注入实战手册
  • 如何将小爱音箱快速升级为AI语音助手:MiGPT完整配置教程
  • 【Claude】IDE 集成与编辑器配置全攻略 — 已解决
  • Linux 【02- ip命令超详细教程】
  • 5分钟为Unity游戏添加自动翻译:XUnity.AutoTranslator终极指南
  • 终于有一款 Cron 工具,不用背符号、不用猜下次执行时间