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

2024-01-28 19:04

本文主要是介绍【DeepLearning-9】YOLOv5模型网络结构中加入MobileViT模块,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

一、神经网络的前中后期

在神经网络中,特别是在深度卷积神经网络(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)]

这篇关于【DeepLearning-9】YOLOv5模型网络结构中加入MobileViT模块的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/654518

相关文章

Python datetime 模块概述及应用场景

《Pythondatetime模块概述及应用场景》Python的datetime模块是标准库中用于处理日期和时间的核心模块,本文给大家介绍Pythondatetime模块概述及应用场景,感兴趣的朋... 目录一、python datetime 模块概述二、datetime 模块核心类解析三、日期时间格式化与

Python如何调用指定路径的模块

《Python如何调用指定路径的模块》要在Python中调用指定路径的模块,可以使用sys.path.append,importlib.util.spec_from_file_location和exe... 目录一、sys.path.append() 方法1. 方法简介2. 使用示例3. 注意事项二、imp

Python中模块graphviz使用入门

《Python中模块graphviz使用入门》graphviz是一个用于创建和操作图形的Python库,本文主要介绍了Python中模块graphviz使用入门,具有一定的参考价值,感兴趣的可以了解一... 目录1.安装2. 基本用法2.1 输出图像格式2.2 图像style设置2.3 属性2.4 子图和聚

Python的time模块一些常用功能(各种与时间相关的函数)

《Python的time模块一些常用功能(各种与时间相关的函数)》Python的time模块提供了各种与时间相关的函数,包括获取当前时间、处理时间间隔、执行时间测量等,:本文主要介绍Python的... 目录1. 获取当前时间2. 时间格式化3. 延时执行4. 时间戳运算5. 计算代码执行时间6. 转换为指

Python正则表达式语法及re模块中的常用函数详解

《Python正则表达式语法及re模块中的常用函数详解》这篇文章主要给大家介绍了关于Python正则表达式语法及re模块中常用函数的相关资料,正则表达式是一种强大的字符串处理工具,可以用于匹配、切分、... 目录概念、作用和步骤语法re模块中的常用函数总结 概念、作用和步骤概念: 本身也是一个字符串,其中

Python中的getopt模块用法小结

《Python中的getopt模块用法小结》getopt.getopt()函数是Python中用于解析命令行参数的标准库函数,该函数可以从命令行中提取选项和参数,并对它们进行处理,本文详细介绍了Pyt... 目录getopt模块介绍getopt.getopt函数的介绍getopt模块的常用用法getopt模

python logging模块详解及其日志定时清理方式

《pythonlogging模块详解及其日志定时清理方式》:本文主要介绍pythonlogging模块详解及其日志定时清理方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地... 目录python logging模块及日志定时清理1.创建logger对象2.logging.basicCo

Qt spdlog日志模块的使用详解

《Qtspdlog日志模块的使用详解》在Qt应用程序开发中,良好的日志系统至关重要,本文将介绍如何使用spdlog1.5.0创建满足以下要求的日志系统,感兴趣的朋友一起看看吧... 目录版本摘要例子logmanager.cpp文件main.cpp文件版本spdlog版本:1.5.0采用1.5.0版本主要

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI