导读
本文主要介绍简化的YOLOv7论文解读和推理测试以及YOLOv7与 YOLO系列的其他目标检测器的比较。(公众号:OpenCV与AI深度学习)
本文主要介绍简化的YOLOv7论文解读和推理测试以及YOLOv7与 YOLO系列的其他目标检测器的比较。
YOLOv7通过将性能提升一个档次建立了重要的基准。从YOLOv4开始在极短的时间内,我们看到YOLO家族的新成员接踵而至。每个版本都引入了一些新的东西来提高性能。早些时候,我们已经详细讨论了以前的 YOLO 版本。在下面查看YOLO 系列介绍:https://learnopencv.com/category/yolo/
Backbone主要提取图像的基本特征,并通过Neck将它们馈送到Head。Neck收集由Backbone提取的特征图并创建特征金字塔。最后,头部由具有最终检测的输出层组成。下表显示了YOLOv3、YOLOv4和YOLOv5 的总体架构。
提出的E-ELAN使用expand、shuffle、merge cardinality来实现在不破坏原有梯度路径的情况下不断增强网络学习能力的能力。
简单来说,E-ELAN 架构使框架能够更好地学习。它基于 ELAN 计算块。在撰写本文时,ELAN 论文尚未发表。我们将通过添加 ELAN 的详细信息来更新帖子(https://github.com/WongKinYiu/yolov7/issues/17#issuecomment-1179831969)
NAS(Network Architecture Search)是一种常用的模型缩放方法。研究人员使用它来迭代参数以找到最佳比例因子。但是,像 NAS 这样的方法会进行参数特定的缩放。在这种情况下,比例因子是独立的。 YOLOv7论文的作者表明,它可以通过复合模型缩放方法进一步优化。在这里,对于基于连接的模型,宽度和深度是连贯地缩放的。
最近,模块级别的重新参数化在研究中获得了很大的关注。在这种方法中,模型训练过程被分成多个模块。输出被集成以获得最终模型。YOLOv7 论文中的作者展示了执行模块级集成的最佳方法(如下所示)。
在上图中,E-ELAN 计算块的 3×3 卷积层被替换为 RepConv 层。我们通过切换或替换 RepConv、3×3 Conv 和 Identity 连接的位置来进行实验。上面显示的残余旁路箭头是一个身份连接。它只不过是一个 1×1 的卷积层。我们可以看到有效的配置和无效的配置。在RepVGG 论文中查看有关 RepConv 的更多信息。 包括 RepConv,YOLOv7 还对 Conv-BN(Convolution Batch Normalization)、OREPA(Online Convolutional Re-parameterization)和 YOLO-R 进行了重新参数化,以获得最佳结果。
YOLOv7 网络中的 Lead Head 预测最终结果。基于这些最终结果生成软标签。重要的部分是基于生成的相同软标签计算前导头和辅助头的损失。最终,两个头部都使用软标签进行训练。如上图左图所示。 有人可能会问,“为什么要使用软标签?”。作者在论文中说得很好: “之所以这样做,是因为lead head具有比较强的学习能力,所以由它生成的软标签应该更能代表源数据和目标之间的分布和相关性。……通过让较浅的辅助头直接学习领头人学习过的信息,领头人将更能专注于学习尚未学习的残留信息。” 现在,进入从粗到细的标签,如上图右图所示。实际上,在上述过程中,生成了两组不同的软标签。
精细标签与直接生成的软标签相同。然而,为了生成粗略的标签,更多的网格被视为正目标。这是通过放宽正样本分配过程的约束来完成的。
注意:我们进一步讨论的结果来自YOLOv7 论文,其中所有推理实验都是在 Tesla V100 GPU 上完成的。所有 AP 结果都是在 COCO 验证或测试集上完成的。
上述结果大多根据一组特定模型的一系列参数组合在一起。
现在,YOLOv7超越的不仅仅是YOLOv4和YOLOR模型。将验证 AP 与具有相同范围内参数的YOLOv5和 YOLOv7 模型进行比较,很明显 YOLOv7 也击败了所有 YOLOv5 模型。
YOLOv7 论文中的表 2提供了 YOLOv7 与其他模型的 FPS 的全面比较,以及尽可能在 COCO 测试集上的 AP 比较。
已经确定 YOLOv7 在 5 FPS 到 160 FPS 的范围内具有最高的 FPS 和 mAP。所有 FPS 比较均在 Tesla V100 GPU 上完成。
YOLOv7-E6 模型(上面突出显示)在 V100 GPU 上以 56 FPS 运行,测试 AP 为 56%。这超过了基于变压器的SWIN_L Cascade-Mask R-CNN模型(9.2 FPS,53.9% AP)和基于卷积的ConvNeXt-XL(8.6 FPS,55.2% AP)。这很重要,因为其他两种型号即使在 A100 GPU 上也提供更少的 FPS,与 V100 GPU 相比,A100 GPU 更强大。
值得注意的是,没有一个 YOLOv7 模型适用于移动设备/移动 CPU(如作者在论文中所述)。
YOLOv7-Tiny、YOLOv7 和 YOLOv7-W6 分别用于边缘 GPU、普通(消费者)GPU 和云 GPU。这意味着 YOLOv7-E6 和 YOLOv7-D6 以及 YOLOv7-E6E 也仅适用于高端云 GPU。尽管如此,所有 YOLOv7 模型在 Tesla V100 GPU 上的运行速度都超过了 30 FPS,超过了实时 FPS。
上述实验结果表明,YOLOv7 模型在速度和准确度上确实优于目标检测器。
注意:此处显示的所有推理结果均在具有6 GB GTX 1060(笔记本 GPU)、第 8 代 i7 CPU 和 16 GB RAM 的机器上运行。
如果您打算在自己的视频上运行对象检测推理实验,则必须使用以下命令克隆 YOLOv7 GitHub 存储库。
git clone https://github.com/WongKinYiu/yolov7.git
然后,您可以使用 detect.py 脚本对您选择的视频进行推理。您还需要从此处下载yolov7-tiny.pt和yolov7.pt预训练模型。
在这里,我们将对描述以下三种不同场景的三个视频进行推理。
此处的 YOLOv7 结果针对所有三个视频的Tiny和Normal模型一起显示。这将帮助我们以简单的方式比较每个结果的结果。
让我们看看使用 YOLOv7-Tiny(顶部)和 YOLOv7(底部)模型对第一个视频的检测推理结果。以下命令分别用于使用 Tiny 和 Normal 模型运行推理。
python detect.py --source ../inference_data/video_1.mp4 --weights yolov7-tiny.pt --name video_tiny_1 --view-img
python detect.py --source ../inference_data/video_1.mp4 --weights yolov7.pt --name video_1 --view-img
我们可以立即看到 YOLOv7-Tiny 模型的局限性。它无法检测到非常遥远和小的汽车、摩托车和人。YOLOv7 模型能够更好地检测这些物体。但这不是故事的全部。虽然 YOLO7-Tiny 的表现不是那么好,但它比 YOLOv7 快得多。虽然 YOLOv7 提供大约 19 FPS 的速度,但 YOLOv7-Tiny 能够以大约 42 FPS 的速度运行它,这远高于实时速度。
现在,让我们看看描述拥挤场景的第二个视频的结果。我们使用与上面相同的命令,但根据视频路径和名称更改 –source 和 –name 标志的值。
与 YOLOv7-Tiny 模型相比,YOLOv7 模型能够以更少的波动和更高的信心检测到人。不仅如此,YOLOv7-Tiny 还错过了一些红绿灯和远处的人。
现在让我们对最终视频进行推理,该视频显示了所有 YOLOv7 模型中的一些一般故障案例。
我们可以看到两个模型中的一些普遍错误:
正如我们稍后将看到的,上述两个错误在 YOLOv4 和 YOLOv5 中很常见。
尽管 YOLO7-Tiny 比 YOLOv7 模型犯的错误更多,但它的速度要快得多。平均而言,YOLOv7-Tiny 的运行速度超过 40 FPS,而 YOLOv7 模型的运行速度略高于 20 FPS。
下表显示了三个视频中三个模型的不同变体的 FPS 和运行时间。
参考链接:
1. https://learnopencv.com/yolov7-object-detection-paper-explanation-and-inference/
2. YOLOv7论文:https://arxiv.org/pdf/2207.02696.pdf
3. YOLOv7 GitHub:https://github.com/WongKinYiu/yolov7
本文分享自 OpenCV与AI深度学习 微信公众号,前往查看
如有侵权,请联系 cloudcommunity@tencent.com 删除。
本文参与 腾讯云自媒体同步曝光计划 ,欢迎热爱写作的你一起参与!