DepthAI v2 has been superseded by DepthAI v3. You are viewing legacy documentation.

本页目录

  • 理解性能指标
  • 硬件考量
  • RVC2 NN性能
  • 模型优化技术
  • Luxonis特定优化
  • 量化(仅适用于 RVC3 转换)
  • 性能分析与基准测试
  • DepthAI 管道图
  • 常见性能问题故障排除

性能优化

本节致力于优化和评估AI模型在Luxonis设备(如OAK-D系列)上部署时的性能。通过量化和硬件加速来优化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 日志级别(或更低),depthai 将打印硬件资源的使用情况,特别是 CPU/RAM 消耗、温度、CMX 切片和 SHAVE 核心分配。您可以像这样设置调试级别:
Command Line
1DEPTHAI_LEVEL=info python3 script.py

DepthAI 管道图

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

常见性能问题故障排除

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