| |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
-> 人工智能 -> YOLO系列目标检测算法-YOLOv7 -> 正文阅读 |
|
[人工智能]YOLO系列目标检测算法-YOLOv7 |
YOLO系列目标检测算法目录
专栏链接: 本章目录9. YOLO系列目标检测算法-YOLOv7论文题目《YOLOv7: Trainable bag-of-freebies sets new state-of-the-art for real-time object detectors》2022.7.6。 9.1 YOLOv7取得的成绩YOLOv7在速度和精度方面都超过了所有已知的物体检测器,从5 FPS到160 FPS,在GPU V100上的所有已知实时物体检测器中,具有最高的精度56.8%AP,30 FPS或更高。YOLOv7-E6目标检测器(56 FPS V100,55.9% AP)比基于transformer的检测器SWIN-L Cascade-Mask R-CNN(9.2fps A100、53.9%AP)在速度和精度上分别都高出509%和2%,与基于卷积的检测器ConvNeXt-XL Cascade-Mask R-CNN(8.6fps A100、55.2%AP)相比,速度和精度分别提高了551%和0.7%AP,此外,YOLOv7在速度和精度上优于:YOLOR、YOLOX、Scaled-YOLOv4、YOLOv5、DETR、Deformable DETR、DINO-5scale-R50、ViT-Adapter-B和许多其他的目标检测器。此外,只需在MS COCO数据集上从头开始训练YOLOv7,而不使用任何其他数据集或预训练权重。代码地址:https://github.com/WongKinYiu/yolov7 9.2 本文要点目前,目标检测在机器视觉中占据着特别重要的地位,应用十分广泛,包括多目标追踪、自动驾驶、机器人、医学图像分析等等。执行实时目标检测的计算设备通常是一些移动CPU或GPU,以及各种神经处理单元(NPU),例如苹果神经引擎(Apple)、神经计算stick(Intel)、Jetson AI边缘设备(Nvidia)、边缘TPU(谷歌)、神经处理引擎(高通)、AI处理单元(联发科)和AI SoC(Kneron)都是NPU。上述边缘设备中的一些侧重于加速不同的操作,例如卷积、深度卷积或MLP操作。在本文中,提出的实时目标检测器能够支持从边缘到云端的移动CPU和GPU设备。 近年来,针对不同边缘设备的实时目标检测器仍在开发中。例如MCUNet和NanoDet专注于生产低功耗单片机,提高边缘CPU的推理速度。YOLOX和YOLOR专注于提高各种GPU的推理速度。最近,实时目标检测器的开发集中于高效架构的设计。对于可在CPU上使用的实时目标检测器,他们的设计主要基于MobileNet、ShuffleNet、GhostNet。另一种主流的实时目标检测器是为GPU开发的,大多使用ResNet、DarkNet或者DLA,然后使用CSPNet策略优化架构。本文提出的方法的发展方向不同于当前主流的实时目标检测器。除了架构优化之外,本文提出的方法将重点关注训练过程的优化。本文的重点将是一些优化模块和优化方法,这些模块和方法虽然会增加训练成本,但会提高目标检测的准确性,缺不增加推理成本。 将提出的模块和优化方法称为"可训练的免费包"(bag-of-freebies)。 最近,模型重参数化(re-parameterization,指的是首先构造一系列结构(一般用于训练),并将其参数等价转换为另一组参数(一般用于推理),从而将这一系列结构等价转换为另一系列结构。)和动态标签分配(dynamic label assignment)已成为网络训练和目标检测中的重要课题。主要是在上述新概念提出之后,目标检测器的训练出现了许多新问题。在本文中,将介绍发现的一些新问题,并设计解决这些问题的有效方法。对于模型重参数化,本文使用梯度传播路径的概念分析了适用于不同网络中的层的模型重参数化策略,并提出了有计划的重参数化模型。 此外,发现当使用动态标签分配技术时,具有多个输出层的模型的训练将产生新的问题,即:“如何为不同分支的输出分配动态目标?”针对这个问题,本文提出了一种新的标签分配方法,称为由粗到细引导标签分配(coarse-to-fine lead guided label assignment)。 本文的贡献总结如下:
9.3 相关算法回顾9.3.1 实时的目标检测器目前,最先进的实时目标检测器主要基于YOLO(YOLO、YOLO9000、YOLOv3)和FCOS,例如YOLOv4、Scaled-YoLOv4、YOLOR、YOLOX、NanoDet-Plus、PP-YOLOE、YOLOv5等。要成为最先进的实时目标检测测器,通常需要以下特征:
在本文中,不打算探索需要额外数据或大型模型的自监督学习或知识蒸馏方法。相反,本文将针对与上述(4)、(5)和(6)相关的最新方法产生的问题,设计一种新的可训练的bag-of-freei=bies方法。 9.3.2 模型重参数化模型重参数化方法(GoogLeNet,Snapshot ensembles,75,19,33,11,4,24,13,12,10,29,14,78),在推理阶段将多个计算模块合并为一个。模型重参数化技术可以被视为一种集成技术,可以将其分为两类,即模块级集成和模型级集成。有两种用于模型级重参数化以获得最终推理模型的常见用法:一种是用不同的训练数据训练多个相同的模型,然后对多个训练模型的权重进行平均。另一种方法是对不同迭代次数下的模型权重进行加权平均。 模块级重参数化是最近比较流行的研究问题。这种类型的方法在训练期间将模块拆分为多个相同或不同的模块分支,并在推理期间将多个分支模块集成为完全等效的模块。 9.3.3 Model scaling模型缩放(EfficientNet,RegNet,EfficientDet,EfficientNetv2,Fast Scaling, 神经网络搜索(NAS)是常用的模型缩放方法之一。NAS可以从搜索空间中自动搜索合适的缩放因子,而无需定义太复杂的规则。NAS的缺点是需要非常昂贵的计算资源来完成模型缩放因子的搜索。在MnasNet中,研究人员分析了缩放因子与参数量和运算量之间的关系,试图直接估计一些规则,从而获得模型缩放所需的缩放因子。通过查阅文献,发现几乎所有模型缩放方法都独立分析单个缩放因子,甚至复合缩放中的方法也独立地优化缩放因子。这是因为大多数流行的NAS体系结构处理的缩放因子不是很相关。观察了解到,所有基于级联的模型,如DensNet或VoVNet,在缩放这些模型的深度时,将改变某些层的输入宽度。由于所提出的架构是基于级联的,因此必须为该模型设计一种新的复合缩放方法。 9.4 结构设计9.4.1 Extended efficient layer aggregation networks<扩展高效层聚合网络。> 论文《Fast and accurate model scaling》在执行模型缩放时额外还考虑了激活,即更多地考虑卷积层输出张量中的元素数量。CSPVoVNet(图2(b))的设计是VovNet的一种变体,除了考虑上述基本设计问题外,CSPVoVNet的架构还分析了梯度路径,以使不同层的权重能够学习更多不同的特征。上述梯度分析方法使推断更快更准确。ELAN(图2(c))考虑了以下设计策略——“如何设计高效网络?”。他们得出了一个结论:通过控制最短最长的梯度路径,更深的网络可以有效地学习和收敛。 在本文中,提出了 基于ELAN的Extended-ELAN(E-ELAN),其主要架构如图2(d)所示。 本文提出的E-ELAN使用expand、shuffle、合并 来实现在不破坏原始梯度路径的情况下持续增强网络学习的能力。在网络结构方面,E-ELAN只改变了计算块的结构,而过渡层的结构完全不变。策略是使用群卷积来扩展通道和计算块的基数(通道数),将对计算层的所有计算块应用相同的组参数和通道乘数。然后,每个计算块计算的特征映射将根据设置的组参数g被shuffled为g组,然后将它们连接在一起。此时,每组特征图中的通道数量将与原始架构中的通道数相同。最后,添加g组特征映射以执行合并。除了保持原始ELAN设计架构之外,E-ELAN还可以引导不同的计算块组学习更多的不同特征。 9.4.2 基于级联的模型的模型缩放模型缩放的主要目的是调整模型的某些属性,并生成不同比例的模型,以满足不同推理速度的需要。例如,EfficientNet的缩放模型考虑了宽度、深度和分辨率。对于scaled-YOLOv4,其缩放模型是调整阶段数。在《Fast and accurate model scaling》中,分析了在进行宽度和深度缩放时,卷积和群卷积对参数和计算量的影响,并以此设计了相应的模型缩放方法。 上述方法主要用于诸如PlainNet或ResNet的架构中。当这些架构正在执行放大或缩小时,各层的入度in-degree(可以理解成输入通道数)和出度out-degree(可以理解成输出通道数)不会改变,因此,我们可以独立分析每个比例因子对参数和计算量的影响。但是如果这些方法应用于基于级联的架构,我们将发现当对深度执行放大或缩小时,紧接在基于级联的计算块之后的转换层的in-degree将增加或减少,如图3(a)和(b)所示。 9.5 可训练的bag-of-freebies9.5.1 Planned re-parameterized convolution尽管RepConv在VGG上取得了优异的性能,但当我们直接将其应用于ResNet和DensNet以及其他架构时,其精度会显著降低。本文使用梯度流传播路径来分析如何将重参数化卷积与不同的网络相结合,还相应地设计和规划了重参数化卷积。 RepConv实际上在一个卷积层中结合了3×3卷积、1×1卷积和identity连接。在分析了RepConv和不同架构的组合和相应性能之后,发现RepConv中的identity连接破坏了ResNet中的残差和Denset中的级联,这为不同的特征映射提供了更多的梯度多样性。基于上述原因, 本文使用无indentity连接的RepConv(RepConvN)来设计planned重参数化卷积的架构。在我们的思想中,当具有残差或级联的卷积层被重参数化的卷积代替时,应该不使用indentity连接。图4显示了设计的“planned re-paramenterized convolution”示例用于PlainNet和ResNet。
9.5.2 Coarse for auxiliary and fine for lead loss<辅助用粗,lead loss用细> 无论辅助head或lead head的情况如何,都需要针对目标进行深度监督训练。在soft标签分配器相关技术的开发过程中,意外发现了一个新的衍生问题,即“如何为辅助head和lead head分配soft标签?”。据了解所知,到目前为止,相关文献尚未探讨这一问题。目前最流行的方法的结果如图5(c)所示,其用于分离辅助head和lead head,然后使用他们各自的预测结果和GT来执行标签分配。 本文提出的方法是一种新的标签分配方法,通过lead head预测来引导辅助head和lead head。换句话说,使用lead head预测作为指导来生成从粗到细的分层标签,分别用于辅助head和lead head学习。图5(d)和(e)分别展示了这两种提出的深度监督标签分配策略。 (Lead head guided label assigner) lead head导向标签分配器 主要基于lead head的预测结果和GT来计算,并通过优化过程生成soft标签。这组soft标签将用作辅助head和lead head的训练。这样做的原因是因为lead head具有相对较强的学习能力,因此由其生成的soft标签应更能代表源数据和目标之间的分布和相关性。此外,我们可以将这种学习视为一种广义残差学习。通过让较浅的辅助head直接学习lead head已经学习的信息,lead head将更能够专注于学习尚未学习的剩余(residual )信息。 (Coarse-to-fine lead head guided label assigner)由粗至细的lead head引导标签分配器 ,也使用lead head的预测结果和GT生成soft标签。然而,在此过程中,生成了两组不同的soft标签,即粗标签 和 细标签,其中细标签与lead head引导标签分配器生成的soft标签相同,并且通过放松正样本分配过程的约束,允许更多grid被视为正目标来生成粗标签。其原因是辅助head的学习能力不如lead head强,为了避免丢失需要学习的信息,将重点优化目标检测任务中辅助head的召回。对于lead head的输出,可以从高召回率结果中过滤出高精度结果作为最终输出。但是,必须注意,如果粗标签的附加权重与细标签很接近,它可能在最终预测时产生不良先验。因此为了使这些超粗正网格具有较小的影响,在解码器中设置了限制,使得超粗正grid不能完美地产生soft标签。上述机制允许在学习过程中动态调整细标签和粗标签的重要性,并且使得细标签的优化上界总是高于粗标签。 由于所提出的YOLOv7使用多个金字塔来联合预测目标检测结果,所以可以直接将辅助head连接到中间层的金字塔上进行训练。这种类型的训练可以弥补在下一级金字塔预测中可能丢失的信息。基于上述原因,本文在提出的E-ELAN架构中设计了部分辅助head。方法是在合并基数(通道)之前将辅助head连接到一组特征映射之后,这种连接可以使新生成的特征映射集的权重不直接由辅助损失更新。这样的设计允许lead head的每个金字塔仍然从不同大小的物体获取信息。表8展示了使用两种不同方法获得的结果,例如粗至细lead导向和部分由粗至细lead导向方法。显然,部分粗到细lead引导方法具有更好的辅助效果。 9.5.3 其他可训练的bag-of-freebies本节介绍一些可用于训练的freebies,这些freebies是在训练中使用的一些技巧,但最初的概念不是本文中提出的。这些freebies包括:
9.6 实验9.6.1 Experimental setup本文只使用COCO数据集来进行目标检测的实验,所有的实验中都没有加载预训练模型,完全从0开始训练。在开发过程中,使用train 2017 set进行训练,然后使用val 2017 set进行验证和选择超参数。最后,在test 2017 set上统计目标检测的性能,并将其与最先进的目标检测算法进行了比较。 本文分别为边缘GPU、普通GPU和云GPU 设计了基本模型,分别称为YOLOv7-tiny 、YOLOv7 和YOLOV-W6 。同时,针对不同的需求,对三个基本模型进行模型扩展,得到不同类型的模型。对于YOLOv7,在neck部进行stack缩放,并使用提出的复合缩放方法对整个模型的深度和宽度进行缩放,利用这些方法得到YOLOV 7-X 。对于YOLOv7-W6,使用新提出的复合缩放方法得到YOLOV 7-E6和YOLOv7-D6。此外,将提出的 E-ELAN用于YOLOv7-E6,从而得到了YOLOV7-E6E 。由于YOLOv7-tiny是一个面向边缘GPU的架构,它将使用leaky ReLU作为激活函数。对于其他模型,使用SiLU作为激活函数。 9.6.2 Baselines选择以前版本的YOLO[YOLOv4,Scaled-YOLOv4]和最先进的目标检测器YOLOR作为基线。表1展示了本文提出的YOLOv7模型与使用相同设置训练的基线模型的比较。 9.6.3 与最新技术对比将所提出的方法与用于通用GPU和移动GPU的最先进的目标检测器进行了比较,结果如表2所示。 9.7 结论本文提出了一种新的实时目标检测器体系结构 和 相应的模型缩放方法。此外还发现,目标检测方法的发展过程产生了新的研究课题。在研究过程中,发现了 重参数化模块的替换问题和动态标签分配的分配问题 。为了解决这个问题,本文提出了一种可训练的bag-of-freebies ,以提高目标检测的准确性。在此基础上,开发了YOLOv7系列目标检测系统 ,该系统获得了最优秀的结果. |
|
|
上一篇文章 下一篇文章 查看所有文章 |
|
开发:
C++知识库
Java知识库
JavaScript
Python
PHP知识库
人工智能
区块链
大数据
移动开发
嵌入式
开发工具
数据结构与算法
开发测试
游戏开发
网络协议
系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程 数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁 |
360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年12日历 | -2024/12/28 17:39:09- |
|
网站联系: qq:121756557 email:121756557@qq.com IT数码 |
数据统计 |