集智书童 | 炸裂 !轻量化YOLO | ShuffleNetv2与Transformer结合,重塑YOLOv7成就超轻超快YOLO

news2024/11/20 10:36:51

本文来源公众号“集智书童”,仅用于学术分享,侵权删,干货满满。

原文链接:炸裂 !轻量化YOLO | ShuffleNetv2与Transformer结合,重塑YOLOv7成就超轻超快YOLO

随着移动计算技术的迅速发展,在移动设备上部署高效的目标检测算法成为计算机视觉领域的一个关键研究点。本研究聚焦于优化YOLOv7算法,旨在提高其在移动平台上的操作效率和速度,同时确保高准确度。

通过结合高级技术,如组卷积、ShuffleNetV2和视觉 Transformer ,本研究有效减少了模型的参数数量和内存使用,简化了网络架构,并加强了在资源受限设备上的实时目标检测能力。

实验结果表明,改进后的YOLO模型表现出色,显著提升了处理速度同时保持了卓越的检测准确度。

1 Introduction

随着计算机视觉领域的迅速发展,目标检测在各种应用中变得至关重要,这些应用范围包括但不限于安全监控、自动驾驶和智慧医疗。尽管传统目标检测方法存在计算复杂度高和实时性能不足的问题,但基于深度学习算法已在准确性和实时性能方面取得了重大突破。其中,YOLO已成为一种经典的实时目标检测算法,它在计算速度和检测精度之间取得了平衡。然而,移动设备通常在计算能力、内存容量和能源消耗方面受限,这复杂化了深度学习模型的部署。

为了将这些YOLO模型适应到这些环境中,需要进一步的改进和优化。本文将深入探讨针对移动部署而优化的增强型YOLO模型的研究,重点关注网络结构优化、模型压缩与加速、鲁棒性增强以及在不同应用场景下的性能评估。

本研究的主要目标包括探索和理解YOLO算法及其变体在目标检测任务中的背景。本工作的重点将放在掌握YOLO算法的基本原理和核心机制,以及它在各种任务和场景下的表现。这包括但不限于对YOLO的网络架构、损失函数、训练策略的深入研究,以及与其他目标检测算法的比较分析。

考虑到移动设备的特性,本研究旨在设计和实施对YOLO模型的增强。针对移动设备的计算能力和内存限制,研究将努力优化YOLO模型的结构和算法。这可能涉及轻量级模型设计、高效算法实现和特定的硬件优化,所有这些都是旨在显著提高模型在移动设备上的性能和效率,同时保持检测精度。在标准数据集上验证和评估改进模型的表现,以及在真实移动设备上的操作效率,也将是重要的。

研究将进一步通过在标准数据集上的实验验证和在实际移动设备环境中的部署测试,来评估增强的YOLO模型的性能和效率。这一综合评估将有助于确保改进后的模型不仅在理论上取得进展,而且在实际应用中也能展示出可行性和有效性。

本文的主要贡献概括如下:

  1. 在增强的YOLO模型中,彻底借鉴并利用了ShuffleNet v2的设计理念。特别是,通道混洗与组卷积的结合有效地平衡了模型的复杂度与性能。这种设计不仅提升了模型的效率,还保持了强大的特征提取能力,使得在移动设备上能够实现实时目标检测。此外,通过融合如跳跃连接和深度可分离卷积等技术,进一步增强了模型的鲁棒性和准确度。

  2. 在针对YOLO模型的改进中,将视觉 Transformer (ViT)作为特征提取的核心组件,不仅增强了模型捕捉整体图像上下文信息的能力,而且显著提高了目标检测的准确性和效率。ViT的长距离依赖捕捉能力及其优秀的迁移学习特性,使该模型在处理复杂场景时更加高效,特别是在移动设备上的应用中,显示出显著的实时性能优势。

2 Related Work

2.1 ShuffleNet v2

ShuffleNet v2旨在实现高效的计算和减少模型复杂性的同时保持高性能,这是一项挑战性的任务,因为降低复杂性常常会冒着牺牲准确度的风险。然而,ShuffleNet v2通过几个关键创新成功地解决了这个问题。与前辈利用分组卷积来减少参数和计算量不同,ShuffleNet v2增强了每组内的特征交互,以提高模型的表示能力。

具体来说,它放弃了逐点卷积中的分组限制,允许所有通道参与1x1卷积,简化了网络结构,降低了内存访问成本,并增强了信息流。此外,通过减少瓶颈结构中的通道分割,它避免了与分组卷积相关的潜在信息瓶颈,实现了更平衡的计算负载分布并提升了模型效率。

此外,ShuffleNet v2优化了在ShuffleNet v1中引入的通道混洗机制,采用未分组的逐点卷积、通道分割和改进的特征融合策略,以实现更有效的组间信息交换,通过重新组织输入特征图的通道顺序,从而丰富了特征表示。

2.2 Vision Transformer (ViT)

视觉 Transformer (ViT)是一种创新的深度学习架构,专为计算机视觉任务而设计,它通过将最初为自然语言处理开发的Transformer结构适应到视觉领域,标志着一次重大的转变。ViT首先将输入图像分割成一系列的斑块,将这些斑块转换成捕捉局部图像特征的高维嵌入向量。

为了弥补Transformer固有的序列处理能力的不足,在这些嵌入向量中加入了位置编码,使ViT内的自注意力机制能够捕捉不同图像段之间的长距离依赖关系。Transformer编码器处理这些嵌入,关注各种图像方面,为多样的视觉任务提供健壮的特征表示。经过转换的向量,特别是通过一个特殊的“分类”嵌入向量用于分类任务,然后被用来输出最终的特定任务结果,显示了ViT在处理复杂视觉信息方面的适应性和有效性。

2.3 You Only Look Once (YOLO)

多年来,YOLO系列一直是最佳的单一阶段实时目标检测类别之一。YOLO将目标检测任务转化为一个回归问题,在一次前向传播中预测多个目标的位置和类别,实现了高速度的目标检测。经过多年的发展,YOLO已经发展成为一系列具有良好性能的快速模型。

基于 Anchor 框的YOLO方法包括YOLOv4,YOLOv5,和YOLOv7,而 Anchor 框自由方法有YOLOX和YOLOv6。考虑到这些检测器的性能, Anchor 框自由方法与基于 Anchor 框的方法表现相当, Anchor 框不再是限制YOLO发展的主要因素。

然而,所有YOLO变体生成了许多冗余的边界框,在预测阶段必须通过NMS(非极大值抑制)过滤掉,这显著影响了检测器的准确性和速度,与实时目标检测器的设计理论相冲突。

3 YOLO Model Architecture

3.1 Model Overview

这一章节重点介绍两个关键模块——动态组卷积Shuffle模块(DGSM)和动态分组卷积Shuffle Transformer (DGST)。

DGSM模块用于优化主干网络,通过结合组卷积和通道Shuffle技术,显著提高计算效率同时保持卓越的性能。而DGST模块,用于优化 Neck 网络,进一步融合了视觉 Transformer 、组卷积和通道Shuffle技术,实现了更高的计算效率和适应性。该模块还简化了网络结构,提高了检测效率。

3.2 Dynamic Group Convolution Shuffle Module (DGSM)

在DGSM中,图1所示的引入组卷积减少了模型的参数数量和计算需求,同时防止了过拟合,从而保持了网络的鲁棒性和泛化能力。此外,来自ShuffleNetV2的通道混洗技术有助于有效的组间特征信息交换,这对于保持网络的综合性表达能力至关重要。值得注意的是,在减少参数数量的同时,这种交换机制有助于保持特征的多样性和丰富性。

正如表1所示,新的DGSM模块可以根据不同层次的需求精确调整堆叠块的数量和通道数,取代原有的ELAN模块,形成一个新的 Backbone 网络。这种精细调整的控制和优化方法使模型在保持计算效率的同时,更有效地处理各种尺度的特征,显著提高了模型在实际应用中的适用性和性能。

3.3 Dynamic Group Convolution Shuffle Transformer (DGST)

动态组Shuffle Transformer (DGST)是一种创新结构,如图2所示,它将视觉 Transformer 与DGSM模块相结合,旨在进一步提高模型的计算效率和性能。DGST模块的核心是一个3:1划分策略,其中一部分进行组卷积和通道Shuffle操作,而卷积操作取代了全连接的线性层以实现相同的效果,用这个模块替换原始的 Neck 模块。这种设计不仅减少了计算需求,而且更好地适应了卷积神经网络的特性,潜在地为模型提供更优越的性能。

为了进一步优化整体网络架构,作者对检测Head(detection heads)的配置进行了调整,将原有的三个检测Head减少到两个,如图3所示。这项修改不仅减轻了模型的计算负担,还提高了检测效率。检测Head数量的减少意味着在后处理阶段有更少的数据需要处理,从而加快了整个模型的推理速度。

4 Experiment

4.1 Setups

本次实验所使用的数据集包含了1919张个人图像,包括带口罩和不带口罩的人像。数据集的收集涵盖了多个来源:

谷歌图片:通过谷歌搜索引擎获取了与佩戴口罩相关的公共图片。

必应搜索:利用必应搜索引擎收集了各种场景和背景中的行人图像。

Kaggle 数据集:从Kaggle平台上现有的数据集中选择了一组适合本实验的相关图像子集。

所有图像都已采用YOLO格式进行标注,标签指明了行人是否佩戴口罩。这种标注风格使得图像适用于训练YOLO目标检测模型,为本次实验提供了一个方便的数据基础。

数据集划分的策略是确保模型有效训练和公平评估的关键步骤。本次实验的数据划分如下:

训练集:用于模型训练的图像,占数据集的70%。

验证集:用于模型调整和超参数选择的图像,占数据集的15%。

测试集:用于最终模型评估的图像,也代表了数据集的15%。

4.2 Analysis

从表2可以看出,YOLO7 Tiny模型在训练损失方面表现出最佳性能,但它的GPU消耗也最高。当综合考虑GPU消耗和损失时,DGST+DGSM组合模型提供了一个更加平衡的选择。

YOLOv7 Tiny模型作为轻量级选项,在实验中展示了其独特的性能特点。在训练期间,该模型的GPU消耗为3.79G,是四个模型中最高的。其参数大小也是最大的,为6.01M,表明模型复杂性更高。推理时间为283.4ms,总时间为284.7ms,均为模型中最高,这可能意味着在实现更复杂或更详细的功能时,计算速度有所折中。

DGSM模型在实验中表现出了一定的优势。训练期间的GPU消耗为2.63G,参数大小为4.45M,表明模型复杂性适中。其单一推理时间为242.1ms,显示了合理的计算效率。尽管总时间略长,为243.9ms,但这可能反映了它在处理复杂情况时的稳定性。

DGST模型在实验中展现了其独特的优势。在训练过程中的GPU消耗为3.52G,略高于DGSM,但其参数大小为3.58M,略小于DGSM,表明其参数效率更高。其单次推理时间为190.5ms,总时间为191.6ms,均低于DGSM,这表明DGST在保持较低的计算负担的同时,还能维持良好的推理速度。

DGSM+DGST组合模型在几个关键指标上表现出色。在训练期间的GPU消耗为2.33G,相对较低,并且参数大小最小,为2.02M,显示出优秀的参数效率。推理时间为136.8ms,总时间为137.9ms,是所有模型中最快的,凸显了其卓越的计算速度和效率。

在表3中进一步分析四种模型配置在目标检测性能时,包括了诸如精确度、召回率以及mAP等指标,DGST模型获得了最高的F1得分(0.8524),表明在精确度和召回率之间取得了最佳的平衡。DGST+DGSM组合模型紧随其后,F1得分为0.8493,也显示出良好的平衡。

全面的对比突显了DGST+DGSM组合模型在mAP@.5和mAP@.5:.95上的卓越表现,这意味着在不同IoU阈值下具有出色的检测能力(见表4)。虽然DGST模型在某些指标上显示出竞争性的结果,但在更严格的评估标准下,组合模型表现出更加平衡和卓越的性能。

5 Conclusion

在将目标检测模型部署在移动设备上时,主要挑战包括有限的计算能力、内存限制和能源消耗问题。本研究进行了彻底的分析和讨论,确定了提高轻量级模型性能的关键方向。

6 参考

[1].Lightweight Object Detection: A Study Based on YOLOv7 Integrated with ShuffleNetv2 and Vision Transformer.

THE END!

文章结束,感谢阅读。您的点赞,收藏,评论是我继续更新的动力。大家有推荐的公众号可以评论区留言,共同学习,一起进步。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1514204.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

flutter入门

本文真对 Flutter 的技术特性,做了一些略全面的入门级的介绍,如果你听说过Flutter,想去了解它,但是又不想去翻厚厚的API,那么本文就是为你准备的。 随着纯客户端到Hybrid技术,到RN&Weex,再…

【OpenGL手册13】 光照贴图

目录 一、说明二、漫反射贴图三、镜面光贴图四、采样镜面光贴图练习 一、说明 在上一节中,我们讨论了让每个物体都拥有自己独特的材质从而对光照做出不同的反应的方法。这样子能够很容易在一个光照的场景中给每个物体一个独特的外观,但是这仍不能对一个…

C#重新认识笔记_ FixUpdate + Update

C#重新认识笔记_ FixUpdate Update Update: 刷新频率不一致,非物理对象的移动,简单的刷新可用, FixedUpdate: 刷新频率一致,按照固定频率刷新,一般调用FixedUpdate之后,会立即进入必要的物理计算中,因此,任何影响刚…

层次式架构设计

本博客地址:https://security.blog.csdn.net/article/details/136660435 一. 概述 1、软件体系结构为软件系统提供了结构、行为和属性的高级抽象,由构成系统的元素描述这些元素的相互作用、指导元素集成的模式以及这些模式的约束组成。层次式体系结构设…

王庆:当下股市过于悲观,A股、港股基本完成补跌和普跌过程,逆向布局时机已到

核心观点: 1、房地产对中国经济增长拖累最严重的时期正在过去...密切关注真正拐点的出现。 2、当前资本市场从价格表现上来讲,表现的远远超过了基本面所决定的悲观程度。 由于当前资本市场过于悲观,那么反过来就是孕育着机会。 3、我们判…

leetcode刷题(javaScript)——分治思想(二分查找、快速排序)相关场景题总结

分治思想是一种将问题分解成更小的子问题,然后解决子问题并将结果合并的算法设计策略。二分查找、快速排序和折半查找都属于分治思想的经典算法。在leetcode里,分治思想一般结合其他场景出现,构成复合型题目。但是在看题时一定要了解能否用分…

Docker入门二(应用部署、迁移与备份)

文章目录 一、应用部署1.MySQL部署2.Redis部署3.Nginx部署 二、迁移与备份1.容器做成镜像2.把镜像被分成压缩包 一、应用部署 1.MySQL部署 在dokcer中部署mysql,以后不需要在宿主机上装mysql1.做端口映射docker run -id --namemysql5.7 -p 3306:3306 -e MYSQL_ROOT…

九数分三组

枚举三位数时,不用写三个循环,写出最小和最大数循环就行。在这题里要求三个数中不能有重复的数字,先转换为字符串,再转换为字符数组进行排序,最后比较字符串就可以得出结果。这题把结果和原因调换了一下

每日OJ题_牛客HJ37 统计每个月兔子的总数(IO型OJ)

目录 牛客HJ37 统计每个月兔子的总数 解析代码 牛客HJ37 统计每个月兔子的总数 统计每个月兔子的总数_牛客题霸_牛客网 解析代码 #include <iostream> #include <vector>using namespace std; int main() {int n 0;cin >> n;vector<int> arr(n 1…

牛客Highway

题目大意 在ICPCCamp中&#xff0c;有n个方便编号的城镇&#xff0c;编号为1,2,...,n&#xff0c;它们之间通过&#xff08;n-1&#xff09;条道路相连。连接第i个城镇a_i和b_i的道路的长度为c_i。保证任意两座城市之间只能通过道路到达。 Bobo希望修建&#xff08;n-1&#…

PostGIS 中的 K-Means 聚类操作及应用

K-Means算法&#xff1a; K-means 是数据科学和商业的基本算法。让我们深入了解一下。 1. K-means是一种流行的用于聚类的无监督机器学习算法。它是用于客户细分、库存分类、市场细分甚至异常检测的核心算法。 2. 无监督&#xff1a;K-means 是一种无监督算法&#xff0c;用于…

记录一下C++的学习之旅吧--C++基础

文章目录 前言using namespace std; 使用标准命名空间一、helloworld-输出表示1.1代码1.2 运行结果 二、变量2.1.1 普通变量代码2.1.2 运行结果2.2.1 常量和变量代码2.2.2 运行结果 三、sizeof---统计数据类型所占的内存大小3.1 代码3.2 运行结果 四、小数表示4.2 运行结果 五、…

C语言分析基础排序算法——计数排序

目录 计数排序 计数排序基本思路 计数排序改进思路 计数排序 计数排序又称为鸽巢原理&#xff0c;是对哈希直接定址法的变形应用。具体思路为&#xff1a; 统计相同元素出现次数根据统计的结果将序列回收到原来的序列中 计数排序基本思路 基本思路分析&#xff1a; //以…

2024春秋蓝桥杯reverse——crackme01

尝试了下输入没有任何反应 查看——32位——IDA打开 我之前没怎么写过win32&#xff0c;所以我开始在string里面找flag,wrong,right什么的字符&#xff0c;都不行 然后我又在函数里面找main&#xff0c;也什么收获的没有,OK废话完了 在win32里面 关于弹窗的函数&#xff1a;…

EPSON X2A0003510033 XV7081BB介绍

X2A0003510033 XV7081BB是一款具有SPI接口&#xff0c;这款传感器主要用于商业类应用&#xff0c;具体可以应用于抗震和姿态控制领域&#xff0c;以及人机接口的运动检测中&#xff0c;这表明它在工业应用、机器人技术、自动驾驶车辆以及任何需要精确角度测量和姿态控制的场合都…

Codeforces Round 933 (Div. 3) A~D

比赛链接 : codeforces.com/contest/1941 A . Rudolf and the Ticket 直接暴力即可 ; #include<bits/stdc.h> #define IOS ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); #define endl \n #define lowbit(x) (x&(-x)) #define sz(a) (int)a.size() #define p…

手搭手RocketMQ发送消息

消息中间件的对比 消息中间件 ActiveMQ RabbitMQ RocketMQ kafka 开发语言 java erlang java scala 单击吞吐量 万级 万级 10万级 10万级 时效性 ms us ms ms 可用性 高(主从架构) 高(主从架构) 非常高(主从架构) 非常高(主从架构) 消息中间件: acti…

mybatisplus使用基本步骤

1.设计实体类&#xff0c;给实体类加一些需要的注解 2.创建Service接口继承mybatisplus提供的 IService<实体类>接口 3.实现Service接口&#xff0c;并继承mybatisplus提供的 ServiceImpl<mapper接口&#xff0c;实体类>类 4.mapper接口继承mybatisplus提供的 B…

java020 - Java集合进阶

1、集合知识回顾 1.1 集合特点 提供了一种储存空间可变的储存模型&#xff0c;储存的数据容量随时可以发生改变。 1.2 集合类体系结构 单列集合和双列集合&#xff1a; 单列集合中&#xff1a;list和set区别&#xff08;数据是否重复&#xff09; 区分接口和实现类&#…

【零基础学习04】嵌入式linux驱动中信号量功能基本实现

大家好,为了进一步提升大家对实验的认识程度,每个控制实验将加入详细控制思路与流程,欢迎交流学习。 今天给大家分享一下,linux系统里面信号量操作的具体实现,操作硬件为I.MX6ULL开发板。 第一:信号量基本简介 信号量是同步的一种方式,linux内核也提供了信号量…