【YOLOv11改进- 主干网络】YOLOv11+MobileNetV1(2017): Google推出的专为移动端和嵌入式设备设计的轻量级卷积神经网络;

 YOLOV11目标检测-主干网络改进实例与创新改进专栏

目录

 YOLOV11目标检测-主干网络改进实例与创新改进专栏

本文介绍

1.完整代码获取

2.MobileNetv1介绍

摘要

亮点优势

3. MobileNetv1网络结构图

4. yolov11-MobileNetv1 yaml文件

5.MobileNetv1代码实现

6.MobileNetv1添加方式


本文介绍

本文给大家带来的改进内容是将YOLOv11的主干网络部分替换为轻量级主干网络MobileNetV1其实这个主干网络算是比较老的了,是Google在2017年提出来的,但是很有借鉴意义,主要是他的轻量化思维,不只是简单的堆叠卷积层,而是设计出一种轻量化卷积结构,下面就看一下如何将MobileNetV1替换到YOLOv11上。

1.完整代码获取

此专栏提供完整的改进后的YOLOv11项目文件(有偿),更换数据集便可以直接使用,如果有需要的可以联系我。

+Qq:1921873112

2.MobileNetv1介绍

摘要

        我们针对移动端以及嵌入式视觉的应用提出了一类有效的模型叫MobileNets。MobileNets基于一种流线型结构使用深度可分离卷积来构造轻型权重深度神经网络。我们介绍两个能够有效权衡延迟和准确率的简单的全局超参数。这些超参数允许模型构造器能够根据特定问题选择合适大小的模型。我们在资源和准确率的权衡方面做了大量的实验并且相较于其他在ImageNet分类任务上著名的模型有很好的表现。然后,我们演示了MobileNets在广泛应用上的有效性,使用实例包含目标检测、细粒度分类、人脸属性以及大规模地理位置信息。

亮点优势

  1. 深度可分离卷积:由深度卷积和点卷积组成。深度卷积针对输入的每个通道单独应用滤波器,用于捕捉空间特征,减少了参数数量,使每个卷积核可专注于特定特征提取;点卷积即 1x1 卷积,在深度卷积之后,用于跨通道信息整合,以较低计算成本实现通道数调整和特征融合。
  2. 超参数:引入宽度乘数 α 和分辨率乘子 ρ 两个全局超参数。α 用于均匀地细化网络,通过调整每层的输入和输出通道数来控制模型宽度,从而调整模型复杂度和精度;ρ 作用于输入图像,降低每一层的内部表示,隐式地通过设置输入分辨率来实现,进一步减少计算量。

3. MobileNetv1网络结构图

      

图2其实就是MobileNet提出的深度可分离卷积,首先进行深度卷积操作,得出的特征图各通道之间是不关联的。接着进行逐点卷积把深度卷积输出的特征图各通道关联起来。深度可分离卷积使用了更小的空间代价(参数减少)和更少的时间代价(计算量更少)实现了标准卷积层一样的效果(提取特征)。

一般的设Df为输入特征图边长,Dk为卷积核边长,特征图和卷积核均为长宽一致,输入通道数为M,输出通道数为N,则:

  • 标准卷积计算量为:Df×Df×Dk×Dk×M×N
  • 深度卷积的计算量为:Df×Df×Dk×Dk×M
  • 逐点卷积的计算量为:Df×Df×M×N

这样看来,计算量由之前的Df×Df×Dk×Dk×M×N变为了Df×Df×Dk×Dk×M+Df×Df×M×N,很明显,降低了一个量级N,假设N为1024,那么就少了1023次Df×Df×Dk×Dk×M的计算量。

4. yolov11-MobileNetv1 yaml文件

nc: 80 # number of classes
scales: # model compound scaling constants, i.e. 'model=yolo11n.yaml' will call yolo11.yaml with scale 'n'
# [depth, width, max_channels]
  n: [0.50, 0.25, 1024] # summary: 319 layers, 2624080 parameters, 2624064 gradients, 6.6 GFLOPs
  s: [0.50, 0.50, 1024] # summary: 319 layers, 9458752 parameters, 9458736 gradients, 21.7 GFLOPs
  m: [0.50, 1.00, 512] # summary: 409 layers, 20114688 parameters, 20114672 gradients, 68.5 GFLOPs
  l: [1.00, 1.00, 512] # summary: 631 layers, 25372160 parameters, 25372144 gradients, 87.6 GFLOPs
  x: [1.00, 1.50, 512] # summary: 631 layers, 56966176 parameters, 56966160 gradients, 196.0 GFLOPs


# YOLO11n backbone
backbone:
  # [from, repeats, module, args]
  - [-1, 1, MobileNetV1, []]
  - [-1, 1, SPPF, [1024, 5]] # 5
  - [-1, 2, C2PSA, [1024]] # 6

# YOLO11n head
head:
  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 3], 1, Concat, [1]] # cat backbone P4
  - [-1, 2, C3k2, [512, False]] # 9

  - [-1, 1, nn.Upsample, [None, 2, "nearest"]]
  - [[-1, 2], 1, Concat, [1]] # cat backbone P3
  - [-1, 2, C3k2, [256, False]] # 12 (P3/8-small)

  - [-1, 1, Conv, [256, 3, 2]]
  - [[-1, 9], 1, Concat, [1]] # cat head P4
  - [-1, 2, C3k2, [512, False]] # 15 (P4/16-medium)

  - [-1, 1, Conv, [512, 3, 2]]
  - [[-1, 6], 1, Concat, [1]] # cat head P5
  - [-1, 2, C3k2, [1024, True]] # 18 (P5/32-large)

  - [[12, 15, 18], 1, Detect, [nc]] # Detect(P3, P4, P5)

5.MobileNetv1代码实现

此专栏提供完整的改进后的YOLOv11项目文件(有偿),更换数据集便可以直接使用,如果有需要的可以联系我。

+Qq:1921873112

6.MobileNetv1添加方式

step1:找到ultralytics/nn文件夹下建立一个目录名字呢就是'improved_modules'文件夹,ranhou在这个文件夹下新建一个py文件(你自己想起什么名字都可以),如下图所示:

 step2:把代码添加到MobileNetv1.py文件中;

step3:往创建的__init__.py函数中添加调用函数,如下所示;

step4:找到文件'ultralytics/nn/tasks.py'进行导入和注册新建的模块!

step5:找到'ultralytics/nn/tasks.py'文件中的'def parse_model(d, ch, verbose=True)方法,然后按照图片进行添加修改即可。

此篇博客到这里就告一段落了,后续我还会继续更新很多改进,大家感兴趣的可以关注我的专栏。 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值