DepthAI v2 has been superseded by DepthAI v3. You are viewing legacy documentation.
此页面由 AI 自动翻译。查看英文原版

本页目录

  • 理解性能指标
  • 硬件注意事项
  • RVC2 NN 性能
  • 模型优化技术
  • Luxonis 特有优化
  • 量化(仅适用于 RVC3 转换)
  • 性能分析和基准测试
  • DepthAI Pipeline Graph
  • 故障排除常见性能问题

性能优化

本节专门介绍在 Luxonis 设备(如 OAK-D 系列)上部署 AI 模型时的性能优化和评估。通过量化和硬件加速优化 AI 模型性能,对于功能强大但资源受限的 Luxonis 边缘设备至关重要。这可确保 AI 应用程序响应迅速且可扩展,适用于实际应用。

理解性能指标

延迟、吞吐量和准确性是用于评估系统中不同性能方面的三个不同指标。
  • 延迟:指输入(如图像或视频帧)与神经网络的相应输出或响应之间的延迟或滞后。
  • 吞吐量:指计算机视觉系统在给定时间内可以处理的数据量或任务数量。
  • 准确性:衡量系统或模型在正确性方面的表现。

硬件注意事项

目前,我们的设备构建在第二代或第三代机器人视觉核心(RVC2 和 RVC3)之上。您可以在 RVC2RVC3 的硬件部分找到更详细的信息。

RVC2 NN 性能

模型名称尺寸FPS延迟 [毫秒]
MobileOne S0224x224165.511.1
Resnet18224x22494.819.7
DeepLab V3256x25636.548.1
DeepLab V3513x5136.3253.1
YoloV6n R2416x41665.529.3
YoloV6n R2640x64029.366.4
YoloV6t R2416x41635.854.1
YoloV6t R2640x64014.2133.6
YoloV6m R2416x4168.6190.2
YoloV7t416x41646.737.6
YoloV7t640x64017.897.0
YoloV8n416x41631.356.9
YoloV8n640x64014.3123.6
YoloV8s416x41615.2111.9
YoloV8m416x4166.0273.8

模型优化技术

Luxonis 特有优化

SHAVES 数量

当使用我们的工具导出给定模型时,设置正确的 SHAVES 数量可以提高性能。SHAVES 是 DepthAI/OAK 中的矢量处理器。 这些 SHAVES 用于 NCE(神经网络计算引擎)未实现处理的操作,也用于设备中的其他功能,例如处理、重新格式化图像、执行某些 ISP 等。有关在工具中设置 SHAVES 数量的信息,请参阅 此处

降低摄像头 FPS 以匹配 NN FPS

将 FPS 降低到不超过 NN 功能的水平,通常可以提供最佳的延迟性能,因为一旦新帧可用,NN 就可以开始推理。

NN 输入队列大小和阻塞行为

默认情况下,DepthAI 中的队列是阻塞的,因此当队列大小(可以使用 setQueueSize() 方法设置)达到时,来自设备的任何其他消息都将被阻塞。库将等待直到它可以将新消息添加到队列中。 当队列是非阻塞的时,在上述情况下,库将丢弃最旧的消息,将新消息添加到队列,然后继续其处理循环。 如果您的网络延迟较高且无法处理这么多帧,则将神经网络的输入队列设置为非阻塞可能会提高性能。

量化(仅适用于 RVC3 转换)

为了加速模型,可以对模型进行量化。量化是指将模型中的权重和激活的精度从高精度(例如,32 位浮点数)降低到低精度(例如,8 位整数)。目标是在不显著影响模型性能的情况下,实现计算和内存效率。要了解有关量化模型的更多信息,请参阅 OpenVino 的文档要量化模型,可以使用训练后优化工具 (POT)。我们建议使用默认量化进行快速测试。 为此,您需要一些图像,例如 coco128.zip从此处下载)。但是,为了获得最佳量化效果和最低的准确度下降,我们建议使用来自训练或验证集的图像。要安装 POT,请在您的 Python 环境中使用以下命令:
Command Line
1python -m pip install --upgrade pip
2pip install openvino-dev==2022.1
接下来,定义一个 pot-config.json 文件:
JSON
1{
2    "model": {
3        "model_name": "yolov6n",
4        "model": "path/to/model.xml",
5        "weights": "path/to/model.bin"
6    },
7    "engine": {
8        "device": "CPU",
9        "type": "simplified",
10        "data_source" : "/path/to/coco128/images/train2017/"
11    },
12    "compression": {
13        "target_device" : "VPU",
14        "algorithms": [
15            {
16                "name": "DefaultQuantization",
17                "params": {
18                    "stat_subset_size": 300
19                 },
20            }
21        ]
22    }
23}
不要忘记为 XML、BIN 和数据集指定正确的路径。最后,调用:
Command Line
1pot -c pot-config.json -d
这将创建一个包含结果的目录,其中存储了您量化后的 XML 和 BIN 文件。

性能分析和基准测试

通过启用 info log 级别(或更低),depthai 将打印硬件资源的使用情况,特别是 CPU/RAM 消耗、温度、CMX 切片和 SHAVE 核心分配。您可以通过以下方式设置调试级别:
Command Line
1DEPTHAI_LEVEL=info python3 script.py

DepthAI Pipeline Graph

一个用于调试和深入了解 DepthAI pipeline 及其内部工作原理的出色工具是 DepthAI Pipeline Graph。这是一个可视化 DepthAI pipeline 并显示 FPS 输出的工具。
DepthAI Pipeline Graph 示例
要安装它,请运行以下命令:
Command Line
1pip install git+https://github.com/luxonis/depthai_pipeline_graph.git
接下来,要可视化 main.py 脚本中定义的 DepthAI pipeline,请使用此命令:
Command Line
1pipeline_graph "python main.py -cam"
有关更多示例,请访问 DepthAI Pipeline Graph 存储库

故障排除常见性能问题

如果将 depthai 级别设置为 trace,depthai 将记录每个节点/进程的操作时间。要可视化网络,您可以使用 netron.app。您可以调查哪个操作可能导致瓶颈,然后通过在此操作之前修剪模型来测试您的假设。要修剪模型,您应该将模型优化器 (mo) 的 --output 标志设置为给定的节点。要详细了解修剪,请参阅文档。修剪模型后,编译它,测量其延迟,并将其与原始(未修剪)模型的延迟进行比较,以查看您的假设是否正确。