赞
踩
快速代码调用YOLOv7
- !git clone https://github.com/WongKinYiu/yolov7
-
- %cd yolov7
-
- !wget https://github.com/WongKinYiu/yolov7/releases/download/v0.1/yolov7.pt
-
- !python detect.py --weights yolov7.pt --conf 0.25 --img-size 640 --source inference/images/horses.jpg
-
- def imShow(path):
- import cv2
- import matplotlib.pyplot as plt
- %matplotlib inline
-
- image = cv2.imread(path)
- height, width = image.shape[:2]
- resized_image = cv2.resize(image,(3*width, 3*height), interpolation = cv2.INTER_CUBIC)
-
- fig = plt.gcf()
- fig.set_size_inches(18, 10)
- plt.axis("off")
- plt.imshow(cv2.cvtColor(resized_image, cv2.COLOR_BGR2RGB))
- plt.show()
-
- if __name__ == "__main__":
- imShow("runs/detect/exp/horses.jpg")

文献地址:https://arxiv.org/abs/2207.02696
代码地址:https://github.com/WongKinYiu/yolov7
目录
5.1、Planned re-parameterized convolution
5.2、Coarse for auxiliary and fine for lead loss
(d)Lead head guided label assigner
(b)Coarse-to-fine lead head guided label assigner
5.3、Other trainable bag-of-freebies
6.3、Comparison with state-of-the-arts
YOLOv7比现有的物体检测器在速度和精度上都好,只在MS COCO数据集上训练,没有采用其他数据集或者预训练的权重。
从论文给的折线图可以看出,YOLOv7在速度和精度上表现更佳!
物体检测一直是计算机视觉领域研究的热点,并且近年来实时目标检测器旨在针对不同的边缘设备进行开发。有些方法专注于低功耗单芯片并提高边缘CPU的推理速度,而YOLO系列的专注于提高各种GPU的推理速度。同时还有一些实时物体检测器是集中在架构设计上。
YOLOv7则是除了架构设计外,还提出了一些专注于训练过程的优化。主要的重点集中在优化的模块和推理成本,可能会增加训练成本以提高目标检测的准确性,但是不会增加推理成本。本文将提出的模块和优化方法成为:trainable bag-of-freebies
模型重新参数化(re-parametrization)和动态标签分配(dynamic label assignment)作为目标检测的研究热点。
1、本文通过梯度传播路径的概念分析了适用于不同网络层的模型参数重参数化策略。
2、在使用动态标签分配时,具有多个输出层的模型的训练会产生新的问题,即:如何为不同分支的输出分配动态目标?针对这个问题,本文提出了一种从粗到细的引导式标签分配方法。
本文主要贡献:
(1)设计了几种可训练的bag-of-freebies方法,使得实时目标检测可以在不增加推理成本的情况下提高检测精度;
(2)提出了解决重新参数化的模块如何替换原始模块和动态标签分配策略如何处理分配给不同输出层的问题;
(3)提出了实时目标检测器的"扩展(extend)"和"复合缩放(compound scaling)"方法,可以有效地利用参数和计算;
(4)可以有效地减少最先进的实时目标检测器约40%的参数和50%的计算量,并且拥有更快的推理速度和更高的检测精度;
目前最先进的实时目标检测器拥有哪些特性:
(1)更快更强的网络架构;
(2)更有效的特征整合方法;
(3)更准确的检测方法;
(4)更稳健的损失函数;
(5)一种有效的标签分配方法;
(6)更有效的训练方法;
具体这些特性所对应的参考文献,可以通过文献搜索!
模型重新参数化在推理阶段将多个计算模块合并成一个,可以看成一种集成技术:
主要分为两类:模块级集成和模型级集成
一、模块级集成:在训练的时候将一个模块拆分为多个相同或者不同的模块分支,在推理的时候将多个分支模块整合为一个完全等效的模块。
二、模型级集成:也有两种:(1)用不同的训练数据训练多个相同的模型,然后对多个训练模型的权重进行平均。(2)对不同迭代次数的模型权重进行加权平均。
但是并不是所有的重新参数化方法都适用于不同的架构,本文开发了一种新的重新参数化模块,并为各种架构设计了相关的应用策略。
模型缩放是一种放大或者缩小已知设计模型并使其适合不同计算设备的方法。
通常采用的方法有:以实现表示网络参数的数量、计算量、推理速度和准确性。
(1)图像分辨率(输入图像的大小),(2)深度(网络的层数),(3)宽度(通道数),(4)阶段(特征金字塔的数量)。
NAS网络架构搜索方法是常用的模型搜索方法,自动从搜索空间中搜索到合适的缩放因子,无需定义复杂的搜索规则,缺点就是需要昂贵的计算完成对模型缩放因子的搜索。
研究人员分析了缩放因子与参数量和操作量之间的关系,试图估计一些规则,从而获得模型缩放所需的因子,几乎所有的模型缩放方法都独立分析优化缩放因子,主要原因在于大多数流行的NAS架构处理的比例因子不是很相关。
所有基于连接的模型,都会在缩放此类模型的深度时改变某些层的输入宽度,本文提出的架构也是基于串联的,因此本文设计了一种新的复合缩放方法。
上图d为本文提出的扩展的ELAN方法:没有改变原有架构的梯度传输路径,通过使用组卷积来增加特征的基数,同时采用shuffe和合并基数(merge cardinality)的方式组合不同组的特征,这种方式可以增强不同特征图学习到的特征,提高参数的使用和计算。
YOLOv7主要通过使用组卷积扩展计算块的通道和基数:对计算层的所有计算块应用相同的组参数和通道乘数,然后将每个计算块得到的特征图根据设置的组参数g通过shuffle打乱成对应的g个组,再将他们连接在一起,此时,每组特征图的通道数将与原始架构中的通道数相同,最后,将g组特征图通过执行merge cardinality,具体如图Figure 2d所示,除了保持原有的ELAN设计架构,E-ELAN还可以引导不同组的计算块学习更多样化的特征。
模型缩放的主要目的是调整模型的一些属性,生成不同尺度的模型,以满足不同推理速度的需求。 例如,EfficientNet 的缩放模型考虑了宽度、深度和分辨率。至于 scaled-YOLOv4 其缩放模型是调整阶段数。 Doll ar 等人分析了香草卷积和组卷积在进行宽度和深度缩放时对参数量和计算量的影响,并以此设计了相应的模型缩放方法。以上方法主要用在PlainNet或ResNet等架构中。
这些架构在进行扩大或缩小时,每一层的入度和出度都不会发生变化,因此可以独立分析每个缩放因子对参数量和计算量的影响。 但是,如果将这些方法应用于基于连接的架构,当对深度进行放大或缩小时,基于连接的计算块之后的平移层的入度会减小或 增加,如图3(a)和(b)所示
从 (a) 到 (b),在基于串联的模型上执行深度缩放时,计算块的输出宽度也会增加,由此导致后续传输层的输入宽度增大。
于是,本文提出,基于concatenation的模型进行模型缩放时,只需要对计算块中的深度进行缩放,其余传输层进行相应的宽度缩放。
本文使用梯度流传播路径来分析重新参数化的卷积应该如何与不同的网络相结合,并且设计了计划重参数卷积。
RepConv 实际上将 3×3 卷积、1×1 卷积和恒等连接组合在一个卷积层中。 在分析了 RepConv 和不同架构的组合和对应性能后,发现 RepConv 中的恒等连接破坏了 ResNet 中的残差和 DenseNet 中的连接,为不同的特征图提供了更多的梯度多样性。
基于上述情况,本文提出使用恒等连接的 RepConv (RepConvN) 来设计计划重参数化卷积的架构。 当一个带有残差或串联连接的卷积层被重新参数化的卷积代替时,应该没有恒等连接,可以被不包含恒等连接的RepConv替换。 图 4 显示本文设计的用于 PlainNet 和 ResNet 的“计划重新参数化卷积”的示例。
背景:
深度监督 是一种经常用于训练深度网络的技术。主要是在网络的中间层添加额外的辅助头,以辅助损失为指导的浅层网络权重。 对于 ResNet 和 DenseNet 等通常收敛良好的架构,深度监督都可以显著提高模型在许多任务上的性能 . 图 5 (a) 和 (b) 分别显示了“没有”和“有”深度监督的目标检测器架构。 在本文中,将负责最终输出的head称为lead head,用于辅助训练的head称为auxiliary head(辅助头)。
与正常模型(a)相比,(b)中的存在辅助头
标签分配: 过去在深度网络的训练中,标签分配通常直接指的是ground truth,并根据给定的规则生成硬标签。 然而,近年来,以物体检测为例,研究人员往往会利用网络预测输出的质量和分布,然后与ground truth一起考虑使用一些计算和优化方法来生成可靠的软标签 。 例如,YOLO 使用预测边界框回归和ground truth的 IoU 作为软标签。 在本文中,将网络预测结果与ground truth一起考虑,将这种分配软标签的机制称为“标签分配器”。
无论辅助头或引导头的情况如何,都需要对目标目标进行深度监督。 在开发软标签分配器相关技术的过程中,本文发现了一个新的衍生问题,即“如何将软标签分配给辅助头和前导头?” 到目前为止,相关文献还没有探讨过这个问题。 目前最流行的方法的结果如图5(c)所示,就是将辅助head和lead head分离出来,然后利用各自的预测结果和ground truth进行标签分配。
辅助头和引导头单独分别考虑
本文提出的方法是一种新的标签分配方法,通过前导头预测来指导辅助头和前导头。 换句话说,使用引导头预测作为指导来生成从粗到细的分层标签,这些标签分别用于辅助头部和引导头学习。 提出的两种深度监督标签分配策略分别如图 5 (d) 和 (e) 所示
(d)引导头引导标签分配,(e)从粗到细的引导头引导标签分配器。
提出的标签分配器通过引导头预测和ground truth进行优化,以同时获得训练引导头和辅助头的标签。
基于lead head和ground truth的预测结果进行计算,通过优化过程生成软标签。 这组软标签将用作辅助头和前导头的目标训练模型。 这样做的原因是因为lead head具有比较强的学习能力,所以从它生成的软标签应该更能代表源数据和目标之间的分布和相关性。 可以将这种学习视为一种广义残差学习。 通过让较浅的辅助头直接学习引导头已经学习的信息,引导头将更能专注于学习尚未学习的残差信息。
是不是有点类似于残差网络和特征金字塔?
从粗到细的铅头引导标签分配器也使用引导头的预测结果和groundtruth来生成软标签。 然而,在这个过程中,生成了两组不同的软标签,即粗标签和细标签,其中细标签与引导头标签分配器生成的软标签相同,而粗标签是通过允许更多的网格来生成的。 通过放宽正样本分配过程的约束,将其视为正目标。 原因是辅助头的学习能力不如前导头强,为了避免丢失需要学习的信息,将重点优化辅助头的召回率。 物体检测任务。 至于lead head的输出,我们可以从高recall结果中过滤出高精度结果作为最终输出。
如果粗标签的附加权重接近细标签,它可能会在最终预测时产生不好的先验。 因此,为了使那些超粗的正网格影响更小,本文在解码器中设置了限制,使超粗的正网格不能完美地产生软标签。 上述机制允许在学习过程中动态调整细标签和粗标签的重要性,使细标签的可优化上界始终高于粗标签。
从图 8 中发现,如果辅助头部学习引导头引导的软标签,它确实会帮助引导头从一致目标中提取残差信息。
其他可训练的方法:
(1)conv-bn-activation topology中的Batch normalization:这部分主要将batch normalization layer直接连接到convolutional layer。 这样做的目的是在推理阶段将批归一化的均值和方差整合到卷积层的偏差和权重中。
(2) YOLOR中的隐式信息与卷积特征图相结合的加法和乘法方式:YOLOR中的隐式知识可以在推理阶段通过预计算简化为向量。 该向量可以与前一个或后一个卷积层的偏差和权重相结合。
(3) EMA 模型:EMA 是一种在 mean teacher 中使用的技术,在本文中使用 EMA 模型作为最终的推理模型。
使用Microsoft COCO 数据集进行实验,并且所有的实验都没有使用预训练模型。 所有模型都是从头开始训练的。 我们使用train 2017进行训练,然后使用val 2017 进行验证和选择超参数。
设计了边缘 GPU、普通 GPU 和云 GPU 的基本模型,它们分别称为 YOLOv7tiny、YOLOv7 和 YOLOv7-W6。 同时针对不同的业务需求,使用基础模型进行模型缩放,得到不同类型的模型。
对于YOLOv7,对neck进行stack scaling,并使用提出的复合缩放方法对整个模型的深度和宽度进行缩放,并以此获得YOLOv7-X。
对于 YOLOv7-W6,使用提出的复合缩放方法得到 YOLOv7-E6 和 YOLOv7-D6。
此外,将提出的 EELAN 用于 YOLOv7-E6,从而完成了 YOLOv7E6E。 由于 YOLOv7-tiny 是一个面向边缘 GPU 的架构,它会使用leaky ReLU 作为激活函数。 至于其他模型,我们使用 SiLU 作为激活函数。
选择 YOLO 和最先进的目标检测器 YOLOR 作为基线。 表 1 显示了提出的 YOLOv7 模型与使用相同设置训练的基线的比较。 与 YOLOv4 相比,YOLOv7 的参数减少了 75%,计算量减少了 36%,AP 提高了 1.5%。 如果与YOLOR-CSP 相比,YOLOv7 的参数减少了 43%,计算量减少了 15%,AP 提高了 0.4%。 在tiny模型的性能上,与YOLOv4-tiny-31相比,YOLOv7tiny参数数量减少了39%,计算量减少了49%,但AP保持不变。 在云 GPU 模型上,YOLOv7仍然可以有更高的 AP,同时减少 19% 的参数数量和 33% 的计算量。
YOLOv7与用于通用 GPU 和移动 GPU 的最先进的目标检测器进行比较,结果如表 2 所示。将 YOLOv7-tiny-SiLU 与 YOLOv5-N (r6.1) 进行比较,在 AP 上的速度提高了 127 fps,准确率提高了 10.7%。 此外,YOLOv7 161 fps 的帧率有 51.4% AP,而相同 AP 的 PPYOLOE-L 只有 78 fps 的帧率。 在参数使用方面,YOLOv7 比 PPYOLOE-L 少 41%。 将推理速度为 114 fps 的 YOLOv7-X 与推理速度为 99 fps 的 YOLOv5-L (r6.1) 进行比较,YOLOv7-X 可以将 AP 提高 3.9%。 如果将 YOLOv7X 与类似规模的 YOLOv5-X (r6.1) 进行比较,YOLOv7-X 的推理速度快了 31 fps。 此外,在参数量和计算量方面,YOLOv7-X 相比 YOLOv5-X(r6.1)减少了 22% 的参数和 8% 的计算量,但 AP 提升了 2.2%。
如果使用输入分辨率 1280 比较 YOLOv7 和 YOLOR,YOLOv7-W6 的推理速度比 YOLOR-P6 快 8 fps,检测率也提高了 1% AP。 至于YOLOv7-E6和YOLOv5-X6(r6.1)的对比,前者AP增益比后者高0.9%,参数少45%,计算量少63%,推理速度提升47%。 YOLOv7-D6 的推理速度与 YOLOR-E6 接近,但 AP 提高了 0.8%。 YOLOv7-E6E 的推理速度与 YOLOR-D6 接近,但 AP 提高了 0.3%。
在本文中,提出了一种新的实时目标检测器架构和相应的模型缩放方法。 此外,本文发现了重新参数化模块的替换问题和动态标签分配的分配问题。 为了解决这个问题,我们提出了可训练的bag-of-freebies方法来提高目标检测的准确性。 基于上述,本文开发了 YOLOv7 系列目标检测系统,该系统获得了最先进的结果。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。