YOLOBench,这是一个包含超过 550 个基于 YOLO 的嵌入式用途目标检测器的延迟-准确性基准测试。
背景
在 2023 年选择 YOLO 目标检测模型比看起来更加困难。自 2018 年 YOLOv3 架构推出以来,整个 YOLO 系列中引入了一系列改进的基于 YOLO 的目标检测架构,从 YOLOv4、YOLOR 和 Scaled-YOLOv4 到最近的 YOLOv8、YOLO-NAS 和 GoldYOLO。尽管这些模型不断推动 Pareto 前沿,实现在基准数据集(如 MSCOCO)上推断延迟和检测准确性的最佳平衡,但通常不清楚给定模型在特定目标领域数据上的性能如何,以及在目标硬件上每张图像的预测延迟将达到多少。查看以下用于相互比较 YOLO 系列体系结构的示例:
图 1
图 2 Ultralytics YOLOv8 库
或者可能是这样一个:
图 3 :arxiv.org/abs/2301.05586
从这些图表来看,不明显哪个 YOLO 模型最适合特定用例。所有上述基准都报告了 MS-COCO minival mAP@0.5:0.95 数值(在 640x640 图像上),但呈现的延迟数值在某种情况下来自 V100 GPU,而在另一种情况下来自 A100 GPU,最后是 Tesla T4 GPU。但是,如果用例是将模型部署到 Raspberry Pi 4 板上以 TFLite 运行,或者在带有专用加速器芯片(如 Orange Pi 或 Khadas VIM3)的板上运行,该怎么办?上述数字在运行在非常不同硬件上的嵌入式用例中并不转换良好。
此外,在 YOLO 系列内部的区别不仅仅是神经网络架构的变化。它们涵盖了训练过程的各个方面,从训练循环的不同实现、各种训练策略、损失函数和数据增强技术,到各种超参数配置。例如,一些 YOLO 模型,如 YOLOv5 和 YOLOv7,具有基于锚点的检测头,而其他模型如 YOLOv6 和 YOLOv8 是无锚点的。这对于任何试图解开实际架构进步(例如 YOLOv7 的 RepVGG 风格块和 ELAN 块)与最终均值平均精度得分中还起作用的许多其他因素之间的效果的人来说,构成了多维复杂性。加上我们仍然没有在嵌入式板上得到所有这些模型的延迟数值。我们要部署我们的模型的硬件!
总结一下,在考虑现有基准的泛化时,应考虑几个问题:
一些基准测试中使用的延迟的近似代理指标,如参数数量或 MAC 数,在某些基准测试中报告推断延迟,例如 V100 或 A100 等服务器级 GPU。这两种方法都无法直接转换为嵌入式设备上的实际延迟(在嵌入式 GPU、CPU、NPU 等上可以进行推断),
均值平均精度得分是在 COCO minival 或测试数据集上报告的,这可能不直接映射到特定生产领域的数据,
在基准测试期间,有些架构参数被视为固定的(例如输入图像分辨率通常在 COCO 上固定为 640x640),但已知它们作为有用的缩放“旋钮”在准确性-延迟空间中移动模型(有关此详细信息,请参阅 TinyNet 论文),
最后,正如我们上面提到的,即使在单个报告的基准测试内,许多事物在模型系列之间也是不同的,从训练循环实现开始,一直到使用额外数据(例如在较大的 Objects365 数据集上进行的预训练)或伪标记额外未标记的 COCO 数据集图像。
引入 YOLOBench
为了解决现代 YOLO 模型在嵌入式硬件上在公平和受控条件下相互比较的挑战,我们创建了 YOLOBench,这是一个基准测试数据集,包含了从 YOLOv3 到 YOLOv8 架构的 550 多个模型的延迟和准确性值,涵盖了 4 个数据集和 5 个初始硬件平台。我们关注了 YOLO 模型的不同主干和颈部拓
扑结构,同时固定了可能解空间中的所有其他维度,例如训练代码、超参数设置、检测头结构和损失函数。这使我们能够在所有其他训练流水线特征固定的情况下,分离 YOLO 主干和颈部在其他方面固定时的影响。为此,我们使用了 Ultralytics 为 YOLOv8 提供的最先进的训练流水线,结合该代码库中相同的检测头和损失函数。
虽然使用其他训练流水线或技巧可能会导致对于给定 YOLO 模型更好的结果,但我们的方法是在其他流水线组件固定时评估 YOLO 系列中引入的不同主干-颈结构在其他方面都固定的情况下相互比较。我们想要回答的问题是,与旧模型(如 YOLOv3 和 v4)相比,YOLOv6、v7 和 v8 中引入的 DNN 拓扑结构是否占据了准确性-延迟权衡中的大部分增益?
图 4 用于生成 YOLOBench 搜索空间的模型架构和超参数
每个新 YOLO 架构都带来了很多创新,涉及到建立体系结构的 DNN 块的使用,例如 YOLOv6 中使用的 RepVGG 风格块,以及 YOLOv7 和 YOLOv8 的更高效的 ELAN 和 C2f 瓶颈。在考虑到深度-宽度空间中的每个 YOLO 中通常只有几个模型变化,例如 YOLOv5 和 YOLOv8 发布中的 n、s、m 和 l 模型。通过 YOLOBench,我们通过查看 12 种深度-宽度变化,每种变化在 11 种不同的输入分辨率下,从 160x160 到 480x480,来扩展了覆盖范围。这导致了 YOLO 系列中每个架构的 132 个模型。
应用这种方法到所有考虑的不同 YOLO 系列,导致了搜索空间中约有 1000 种架构。我们通过从头在 VOC 数据集上训练整个搜索空间并仅包含接近延迟-准确性 Pareto 前沿的模型,过滤出其中一些模型。然后,选择的模型通常在 COCO 上进行预训练,然后在三个不同的下游数据集(VOC、WIDER FACE 和 SKU-110k)上进行微调,每个数据集都具有不同的输入分辨率。
推断延迟值是在以下 5 种不同的硬件平台上测量的:
NVIDIA Jetson Nano GPU(ONNX Runtime,FP32)
Khadas VIM3 NPU(AML NPU SDK,INT16)
Raspberry Pi 4 Model B CPU(TFLite with XNNPACK,FP32)
Intel® Core™i7–10875H CPU(OpenVINO,FP32)
OrangePi NPU(RKNN-Toolkit2,FP16)
结果
在我们的 YOLOBench 基准测试中,我们做出了一项引人入胜的发现。硬件的选择很重要!我们深入研究了 YOLO 模型的性能趋势,发现完美的选择不仅取决于您试图做什么,还取决于您计划在哪里运行它。与一刀切不同,基于 YOLO 的目标检测模型有许多甜蜜点。此外,调整深度、宽度和分辨率(以聪明的方式!)对准确性和速度都有很大影响。所以,让我们从 VOC 数据集的结果开始看起:
图 5 在不同硬件上的 VOC 数据集结果
这里涉及很多内容!上图中的每个点代表一个模型(一个架构在一个输入分辨率下)。为了更好地可视化,如果我们只绘制属于延迟-准确性空间 Pareto 前沿的那些点,会怎样?
Figure 6 Pareto Frontier, VOC on different hardware
现在我们可以在这些数据中看到一些特异之处。这里有一些有趣的部分:不同的硬件平台有自己的一组最佳模型。正如您所见,优化模型集中有很多事情发生!一些模式显示 YOLOv7 模型在除了 VIM3 NPU 之外的所有硬件上的更高 mAP 区域占主导地位!有趣的是,通过利用现代训练流水线和新的检测头,我们还看到 Pareto 前沿上一些 YOLOv3 和 YOLOv4 模型!现实情况是,这里没有单一的赢家。您选择的最佳模型取决于您的任务和您将要部署的硬件。
这里是另一个很好的例子。以下是 SKU-110k 数据集的结果。这是一个专为零售商品检测而设计的特定数据集。显然,这是一个与 VOC 和 MSCOCO 相当不同的领域:
图7 Pareto Frontier MS COCO on same hardware as Figure 6
相当大的差异!YOLOv7 模型的亮点较少,但在最佳集合中出现了更多 YOLOv5 模型。在 VIM3 NPU 上,YOLOv6 模型明显占主导地位,同时它们在 Pareto 前沿中在 ARM CPU 上保持着显著的存在。另一方面,GPU 和 Intel CPU 的图表显示了一个更加多样化的景观。令人惊讶的是,新的 V8 模型在这些场景中并未占主导地位。
· END ·
HAPPY LIFE
本文仅供学习交流使用,如有侵权请联系作者删除