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

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

一、本文介绍

本文记录的是利用ShuffleNetV2作为Backbone改进YOLOv10的特征提取部分。ShuffleNetV2通过通道混洗和分组卷积,实现高效的特征提取。

二、ShuffleNetV2模块介绍

2.1 设计出发点

分组卷积会导致通道间信息隔离,通道混洗通过打乱通道顺序解决这个问题。

2.2 模块结构

ShuffleNetV2块:

  1. 通道分割:将输入通道分为两组
  2. 深度可分离卷积:对其中一组进行处理
  3. 通道混洗:打乱通道顺序

三、ShuffleNetV2的实现代码

importtorchimporttorch.nnasnnclassShuffleNetV2Block(nn.Module):def__init__(self,c1,c2,s=1):super().__init__()ifs==1:c_=c1//2self.conv1=nn.Conv2d(c_,c_,1,1,bias=False)self.bn1=nn.BatchNorm2d(c_)self.conv2=nn.Conv2d(c_,c_,3,s,1,groups=c_,bias=False)self.bn2=nn.BatchNorm2d(c_)self.conv3=nn.Conv2d(c_,c_,1,1,bias=False)self.bn3=nn.BatchNorm2d(c_)self.act=nn.SiLU()self.shortcut=Trueelse:self.conv1=nn.Conv2d(c1,c1,3,s,1,groups=c1,bias=False)self.bn1=nn.BatchNorm2d(c1)self.conv2=nn.Conv2d(c1,c2,1,1,bias=False)self.bn2=nn.BatchNorm2d(c2)self.conv3=nn.Conv2d(c2,c2,3,1,1,groups=c2,bias=False)self.bn3=nn.BatchNorm2d(c2)self.conv4=nn.Conv2d(c2,c2,1,1,bias=False)self.bn4=nn.BatchNorm2d(c2)self.act=nn.SiLU()self.shortcut=Falsedefforward(self,x):ifself.shortcut:x1,x2=x.chunk(2,dim=1)out=self.act(self.bn1(self.conv1(x1)))out=self.act(self.bn2(self.conv2(out)))out=self.bn3(self.conv3(out))out=torch.cat([out,x2],dim=1)else:out=self.act(self.bn1(self.conv1(x)))out=self.bn2(self.conv2(out))x=self.act(self.bn3(self.conv3(out)))x=self.bn4(self.conv4(x))out=torch.cat([out,x],dim=1)returnself.channel_shuffle(out)defchannel_shuffle(self,x):b,c,h,w=x.size()c_=c//2x=x.view(b,2,c_,h,w)x=x.permute(0,2,1,3,4).contiguous()x=x.view(b,c,h,w)returnxclassShuffleNetV2(nn.Module):def__init__(self,c1=3,c2=1024,stages_repeats=[4,8,4],stages_out_channels=[24,116,232,464]):super().__init__()self.stem=nn.Sequential(nn.Conv2d(c1,stages_out_channels[0],3,2,1,bias=False),nn.BatchNorm2d(stages_out_channels[0]),nn.SiLU())self.maxpool=nn.MaxPool2d(3,2,1)self.stages=nn.ModuleList()c=stages_out_channels[0]foriinrange(len(stages_repeats)):stage=nn.Sequential()forjinrange(stages_repeats[i]):ifj==0:stage.add_module(f'block{j}',ShuffleNetV2Block(c,stages_out_channels[i+1],2))c=stages_out_channels[i+1]else:stage.add_module(f'block{j}',ShuffleNetV2Block(c,c,1))self.stages.append(stage)self.final_conv=nn.Conv2d(c,c2,1,bias=False)defforward(self,x):x=self.stem(x)x=self.maxpool(x)forstageinself.stages:x=stage(x)x=self.final_conv(x)returnx

四、创新模块

将ShuffleNetV2作为Backbone集成到YOLOv10中:

# yolov10n_shufflenetv2.yamlbackbone:-[-1,1,ShuffleNetV2,[3,1024]]-[-1,1,SPPF,[1024,5]]

五、预期结果

模型mAP@0.5mAP@0.5:0.95参数量
YOLOv10n52.3%27.9%2.7M
YOLOv10n-ShuffleNetV251.2%26.8%1.2M

📌项目环境配置

  • Python:3.8.10+
  • PyTorch:2.0.0+
  • CUDA:11.8+
  • Ultralytics:8.3.13+
http://www.gsyq.cn/news/1620608.html

相关文章:

  • 分布式事务2PC_TSO详解_阿里云PolarDB-X如何实现高性能分布式事务
  • 池州彩钢瓦
  • 内网隐蔽扫描实战:Nmap参数组合与流量伪装技术详解
  • 让小爱音箱秒变AI助手:MiGPT完整配置指南
  • 3步掌握AMD Ryzen处理器深度调试:从新手到硬件专家的完整指南
  • 13DOF传感器与PIC18F86K22微控制器的定位系统设计
  • rust语言学习笔记(指针七)Arc<T>(线程安全引用计数)
  • 【VMware 3D加速终极指南】:20年虚拟化专家亲授显卡直通、OpenGL/DirectX优化与性能翻倍实操秘籍
  • 110、unittest 标准库:TestCase、TestSuite、TestRunner 的共存与迁移
  • 车辆速度估计 车速识别 车速估计 车辆速度计算
  • KKManager:告别模组混乱,14款游戏模组一键智能管理
  • 3PEAK思瑞浦 TPA158B3-S5TR-S SOT23-5 电流信号检测放大器
  • 抖音批量下载技术方案:从零构建高效内容管理工具
  • Gemma 4本地AI部署指南:从硬件配置到性能优化
  • 终极Steam创意工坊下载器:跨平台免费获取海量游戏模组的完整指南
  • 如何将小爱音箱快速升级为AI语音助手:MiGPT完整配置教程
  • 防御者视角下的SMBGhost漏洞:从检测、修复到验证的完整实战指南
  • Vue2与SpringBoot集成SM2国密算法实现前后端双向加密通信
  • 解锁AMD Ryzen隐藏性能:3步掌握SMUDebugTool硬件调优神器
  • 三步高效修复损坏MP4视频:UnTrunc实用指南
  • 告别视频硬字幕困扰:3分钟掌握AI智能字幕去除神器
  • codex多agent协作新手项目落地实践
  • MQ 选型最难的不是比吞吐,而是先判断你要的是事件日志、任务队列,还是业务消息
  • VMware虚拟机固定IP配置全攻略:5步实现永久生效,附实测Shell脚本与network-scripts深度调优
  • 如何免费解锁WeMod Pro功能?Wand-Enhancer完整指南
  • 手机号查QQ号终极指南:3步实现快速精准查询
  • 收藏!程序员转行AI:轻松入门大模型应用开发,高薪就业不是梦!
  • HsMod:55项功能扩展全方位重塑你的炉石传说游戏体验
  • AI时代生存指南:小白程序员必备的收藏级学习攻略!
  • VMware虚拟机USB设备失联?3步诊断法+4个隐藏配置项,95%问题当场解决