YOLOv10模型改进-Backbone改进-第58篇:YOLOv10改进策略【Backbone】| MobileNetV3 Backbone替换
一、本文介绍
本文记录的是利用MobileNetV3作为Backbone改进YOLOv10的特征提取部分。MobileNetV3通过深度可分离卷积和倒残差结构,实现轻量级高效特征提取。
二、MobileNetV3模块介绍
2.1 设计出发点
深度可分离卷积将标准卷积分解为深度卷积和逐点卷积,大幅减少计算量。
2.2 模块结构
MobileNetV3块:
- 逐点卷积:升维
- 深度卷积:空间特征提取
- SE注意力:通道注意力
- 逐点卷积:降维
三、MobileNetV3的实现代码
importtorchimporttorch.nnasnnclassInvertedResidual(nn.Module):def__init__(self,c1,c2,k=3,s=1,expand_ratio=6,act=True):super().__init__()c_=c1*expand_ratio self.conv1=nn.Conv2d(c1,c_,1,1,bias=False)self.bn1=nn.BatchNorm2d(c_)self.conv2=nn.Conv2d(c_,c_,k,s,k//2,groups=c_,bias=False)self.bn2=nn.BatchNorm2d(c_)self.se=nn.Sequential(nn.AdaptiveAvgPool2d(1),nn.Conv2d(c_,c1//4,1,bias=False),nn.SiLU(),nn.Conv2d(c1//4,c_,1,bias=False),nn.Sigmoid())self.conv3=nn.Conv2d(c_,c2,1,1,bias=False)self.bn3=nn.BatchNorm2d(c2)self.act=nn.SiLU()ifactisTrueelse(actifisinstance(act,nn.Module)elsenn.Identity())self.shortcut=s==1andc1==c2defforward(self,x):out=self.act(self.bn1(self.conv1(x)))out=self.act(self.bn2(self.conv2(out)))out=out*self.se(out)out=self.bn3(self.conv3(out))returnout+xifself.shortcutelseoutclassMobileNetV3(nn.Module):def__init__(self,c1=3,c2=1024):super().__init__()self.stem=nn.Sequential(nn.Conv2d(c1,16,3,2,1,bias=False),nn.BatchNorm2d(16),nn.SiLU())cfg=[{'k':3,'c':16,'s':1,'e':1},{'k':3,'c':24,'s':2,'e':4},{'k':3,'c':24,'s':1,'e':3},{'k':5,'c':40,'s':2,'e':3},{'k':5,'c':40,'s':1,'e':3},{'k':5,'c':40,'s':1,'e':3},{'k':3,'c':80,'s':2,'e':6},{'k':3,'c':80,'s':1,'e':2.5},{'k':3,'c':80,'s':1,'e':2.3},{'k':3,'c':80,'s':1,'e':2.3},{'k':3,'c':112,'s':1,'e':6},{'k':3,'c':112,'s':1,'e':6},{'k':5,'c':160,'s':2,'e':6},{'k':5,'c':160,'s':1,'e':6},{'k':5,'c':160,'s':1,'e':6},]self.blocks=nn.ModuleList()c=16forlayerincfg:self.blocks.append(InvertedResidual(c,layer['c'],layer['k'],layer['s'],layer['e']))c=layer['c']self.final_conv=nn.Conv2d(c,c2,1,bias=False)defforward(self,x):x=self.stem(x)forblockinself.blocks:x=block(x)x=self.final_conv(x)returnx四、创新模块
将MobileNetV3作为Backbone集成到YOLOv10中:
# yolov10n_mobilenetv3.yamlbackbone:-[-1,1,MobileNetV3,[3,1024]]-[-1,1,SPPF,[1024,5]]五、预期结果
| 模型 | mAP@0.5 | mAP@0.5:0.95 | 参数量 |
|---|---|---|---|
| YOLOv10n | 52.3% | 27.9% | 2.7M |
| YOLOv10n-MobileNetV3 | 51.5% | 27.2% | 1.5M |
📌项目环境配置:
- Python:3.8.10+
- PyTorch:2.0.0+
- CUDA:11.8+
- Ultralytics:8.3.13+
