【DeepLearning-9】YOLOv5模型网络结构中加入MobileViT模块

news/2024/7/11 1:35:06 标签: YOLO

一、神经网络的前中后期

在神经网络中,特别是在深度卷积神经网络(CNN)中,“网络早期(低层)”、“网络中期(中层)”和“网络后期(高层)”通常指的是网络结构中不同层级的部分,每个部分在特征提取和信息处理方面有其特定的作用和特性。

1. 网络早期(低层)

  • 在网络的早期阶段插入 MobileViTBv3 可能会对原始图像进行较深层次的处理,有助于捕捉更丰富的空间特征。但同时,Transformer可能无法充分利用其处理高级语义特征的能力。

2. 网络中期(中层)

  • 在网络的中间层插入 MobileViTBv3 可能是一个平衡点,可以在提取一定级别的特征后利用Transformer的长程依赖捕捉能力。

3. 网络后期(高层)

  • 在网络的后期阶段插入 MobileViTBv3 会使其处理更抽象的特征,有助于捕捉复杂的上下文信息,但可能会丢失一些细节信息。

二、插入 MobileViTBv3 模块

YOLOv5配置中插入 MobileViTBv3 模块需要考虑到模块的功能和网络的整体架构。MobileViTBv3 结合了卷积神经网络(CNN)和Transformer的特点,适合于复杂特征的提取和长程依赖的捕捉。基于这些考虑,以下是几个较为合适的的插入位置:

  1. 主干网络中的中期阶段

    • 例如,在 [-1, 1, Conv, [256, 3, 2]][-1, 6, C3, [256]] 之间。
    • 这里,MobileViTBv3 可以处理相对抽象的特征,并利用其Transformer部分捕捉更复杂的依赖关系。
  2. 主干网络后期

    • 在更深的层次,例如在 [-1, 1, Conv, [512, 3, 2]][-1, 9, C3, [512]] 之间。
    • 在这个位置,MobileViTBv3 将处理高级特征,并可能更好地利用Transformer结构处理复杂的场景。
  3. 检测头前期

    • 在检测头的初始阶段,例如在 [[17, 20, 23], 1, Detect, [nc, anchors]] 之前。
    • 这可以使 MobileViTBv3 直接对用于检测的特征进行最后的优化。

 三、各类型YOLOv5模型的前中后期划分

 以yolov5l.yaml为例

网络前期(低层)
  • 定位:主干网络(backbone)的开始部分。
  • 包含的层
    • [-1, 1, Conv, [64, 6, 2, 2]] # 0-P1/2
    • [-1, 1, Conv, [128, 3, 2]] # 1-P2/4
  • 作用:这些层主要负责捕获基础视觉特征,如边缘、纹理等。特征相对简单,更多关注细节。
网络中期(中层)
  • 定位:主干网络中的中间部分。
  • 包含的层
    • [-1, 3, C3, [128]]
    • [-1, 1, Conv, [256, 3, 2]] # 3-P3/8
    • [-1, 6, C3, [256]]
  • 作用:这些层处理更复杂的特征,例如特定的形状和模式。开始从细节特征过渡到更抽象的特征表示。
网络后期(高层)
  • 定位:主干网络的末尾以及检测头(head)。
  • 包含的层
    • [-1, 1, Conv, [512, 3, 2]] # 5-P4/16
    • [-1, 9, C3, [512]]
    • [-1, 1, Conv, [1024, 3, 2]] # 7-P5/32
    • [-1, 3, C3, [1024]]
    • [-1, 1, SPPF, [1024, 5]] # 9
    • 检测头(head)中的所有层
  • 作用:这些层负责处理高级别的特征,通常与目标检测任务直接相关。在这里,特征更加抽象,与目标的类别、位置等信息密切相关。

代码实现 MobileViTBv3 模块插入:

# YOLOv5 🚀 by Ultralytics, AGPL-3.0 license

# Parameters
nc: 80  # number of classes
depth_multiple: 1.0  # model depth multiple
width_multiple: 1.0  # layer channel multiple
anchors:
  - [10,13, 16,30, 33,23]  # P3/8
  - [30,61, 62,45, 59,119]  # P4/16
  - [116,90, 156,198, 373,326]  # P5/32

# YOLOv5 v6.0 backbone
backbone:
  # [from, number, module, args]
  [[-1, 1, Conv, [64, 6, 2, 2]],  # 0-P1/2
   [-1, 1, Conv, [128, 3, 2]],  # 1-P2/4
   [-1, 3, C3, [128]],
   [-1, 1, Conv, [256, 3, 2]],  # 3-P3/8
   [-1, 6, MobileViTBv3, [256]],
   [-1, 6, C3, [256]],
   [-1, 1, Conv, [512, 3, 2]],  # 5-P4/16
   [-1, 6, MobileViTBv3, [256]],
   [-1, 9, C3, [512]],
   [-1, 1, Conv, [1024, 3, 2]],  # 7-P5/32
   [-1, 3, C3, [1024]],
   [-1, 1, SPPF, [1024, 5]],  # 9
  ]

# YOLOv5 v6.0 head
head:
  [[-1, 1, Conv, [512, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 6], 1, Concat, [1]],  # cat backbone P4
   [-1, 3, C3, [512, False]],  # 13

   [-1, 1, Conv, [256, 1, 1]],
   [-1, 1, nn.Upsample, [None, 2, 'nearest']],
   [[-1, 4], 1, Concat, [1]],  # cat backbone P3
   [-1, 3, C3, [256, False]],  # 17 (P3/8-small)

   [-1, 1, Conv, [256, 3, 2]],
   [[-1, 14], 1, Concat, [1]],  # cat head P4
   [-1, 3, C3, [512, False]],  # 20 (P4/16-medium)
   [-1, 3, MobileViTBv3, [512, False]],

   [-1, 1, Conv, [512, 3, 2]],
   [[-1, 10], 1, Concat, [1]],  # cat head P5 
   [-1, 3, C3, [1024, False]],  # 23 (P5/32-large)

   [[17, 20, 23], 1, Detect, [nc, anchors]],  # Detect(P3, P4, P5)
  ]


http://www.niftyadmin.cn/n/5350806.html

相关文章

解密人工智能:探索机器学习奥秘

🌈个人主页:聆风吟 🔥系列专栏:网络奇遇记、数据结构 🔖少年有梦不应止于心动,更要付诸行动。 文章目录 📋前言一. 机器学习的定义二. 机器学习的发展历程三. 机器学习的原理四. 机器学习的分类…

删除倒数第N个结点---链表Oj

https://leetcode.cn/problems/remove-nth-node-from-end-of-list/description/?envType=study-plan-v2&envId=top-100-liked 1、常规解法 删除倒数第N个结点,那就是删除整数第(len - N + 1)个结点,我们只需要找到第len-N个结点,让它的next指向倒数第N个结点…

FreeRTOS任务知识详解

前言 本篇文章旨在记录我学习FreeRTOS实时操作系统中,有关于Free RTOS的任务知识的记录。由于RTOS系统的核心就是任务管理,而且我们大多数人学习RTOS的初衷就是为了使用RTOS的多任务处理功能! 初步上手RTOS首先应该掌握的就是任务的创建、删除…

菜谱的未来:SpringBoot, Vue与MySQL的智能推荐系统设计

✍✍计算机编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java实战 |…

ASCII url html的编码

目录 ASCII的编码 url的编码 html的编码 ASCII的编码 ASCII(American Standard Code for Information Interchange)是一种用于在计算机中表示字符的编码标准。它使用7位二进制数(即128个组合)来表示128个常用的字符&#xff0…

FPGA 通过 UDP 以太网传输 JPEG 压缩图片

FPGA 通过 UDP 以太网传输 JPEG 压缩图片 简介 在 FPGA 上实现了 JPEG 压缩和 UDP 以太网传输。从摄像机的输入中获取单个灰度帧,使用 JPEG 标准对其进行压缩,然后通过UDP以太网将其传输到另一个设备(例如计算机),所有…

【GitHub项目推荐--建一个 ChatGPT 机器人】【转载】

建一个 ChatGPT 机器人 bot-on-anything 它可以将 ChatGPT 等算法模型应用于各类平台。目前,它已经可以接入到个人微信、公众号、QQ、Telegram、Gmail邮箱、Slack 等待,并计划接入Web、企业微信、钉钉等。 通过使用该开源项目,开发者可以通…

【驱动系列】C#获取电脑硬件显卡核心代号信息

欢迎来到《小5讲堂》,大家好,我是全栈小5。 这是《驱动系列》文章,每篇文章将以博主理解的角度展开讲解, 特别是针对知识点的概念进行叙说,大部分文章将会对这些概念进行实际例子验证,以此达到加深对知识点…