9.4.1. 前言
AI Benchmark示例包提供了嵌入式应用开发常见分类、检测、分割、光流、追踪估计,雷达多任务,bev和深度估计模型的性能和精度评测示例。 其中性能评测示例包括单帧延迟评测和多线程评测示例,充分利用调用BPU双核的速度评测。 示例包中预置了源码、可执行程序和评测脚本,开发者可以在地平线开发板上进行体验,并基于这些示例直接进行应用开发,降低开发门槛。
9.4.2. 发布物说明
AI Benchmark示例包位于 horizon_j5_open_explorer 发布物的 ddk/samples/ai_benchmark/ 路径下,主要包括以下内容:
编号 | 名称 | 内容 |
|---|---|---|
1 | code | 包含示例源代码和编译脚本。 |
2 | j5 | 示例包上板运行环境。 |
9.4.2.1. 示例包结构
注解
上板模型需要先在OE包的 ddk/samples/ai_toolchain/model_zoo/runtime/ai_benchmark 目录下的 resolve_ai_benchmark_ptq.sh 和 resolve_ai_benchmark_qat.sh 脚本进行获取。
示例包结构如下所示:
code:该目录内是评测程序的源码,用来进行模型性能和精度评测。
j5:该目录内提供了已经编译好的应用程序,以及各种评测脚本,用来测试多种模型在地平线BPU上运行的性能和精度等。
build_ptq_j5.sh:PTQ真机程序一键编译脚本。
build_qat_j5.sh:QAT真机程序一键编译脚本。
deps_gcc9.3:示例代码所需要的依赖,主要如下所示:
9.4.2.2. 示例模型¶
AI Benchmark示例包的模型发布物包括PTQ模型和QAT模型发布物:
PTQ模型model_zoo需要通过执行 ddk/samples/ai_toolchain/model_zoo/runtime/ai_benchmark/ 路径下的 resolve_ai_benchmark_ptq.sh 脚本进行获取。
QAT模型model_zoo需要通过执行 ddk/samples/ai_toolchain/model_zoo/runtime/ai_benchmark/ 路径下的 resolve_ai_benchmark_qat.sh 脚本进行获取。
其中包含常用的分类、检测、分割和光流预测等模型,模型命名规则为 {model_name}_{backbone}_{input_size}_{input_type}。
注解
model_zoo中的PTQ和QAT模型通过原始模型编译而得到的,PTQ原始模型的详细信息可以参考 PTQ转换示例 章节进行了解, QAT原始模型的详细信息可以参考 示例说明 章节进行了解。
AI Benchmark示例包内包含的PTQ和QAT模型发布物的性能数据可参考 模型性能Benchmark 章节。
9.4.2.3. 公共数据集¶
示例中会使用到数据集,对应数据集的下载您可参考 数据集下载 章节,数据准备过程中如遇问题请联系地平线。
9.4.3. 环境构建
使用AI Benchmark示例包之前,您需要保证开发板环境和编译环境可用:
开发板准备
1.拿到开发板后,按照 系统镜像升级 中的说明,升级系统镜像到示例包推荐的系统镜像版本。
2.确保本地开发机和开发板可以远程连接。
编译环境准备
编译需要当前环境安装好交叉编译工具gcc-ubuntu-9.3.0-2020.03-x86_64-aarch64-linux-gnu。 然后执行 code 目录下的build_ptq_j5.sh和build_qat_j5.sh脚本即可一键编译真机环境下的可执行程序, 可执行程序和对应依赖会自动复制到 j5/ptq/script 和 j5/qat/script 目录下的 aarch64 目录下。
注解
需要注意 build_ptq_j5.sh 和 build_qat_j5.sh 脚本里指定的交叉编译工具链的位置是 /opt 目录下,用户如果安装在其他位置,需要手动修改下脚本中的如下内容。
9.4.4. 示例使用
9.4.4.1. 评测示例
评测示例脚本主要在 script 和 tools 目录下。
script 目录下是板上运行的评测脚本,包括常见分类、检测、分割、光流、追踪等模型。每个模型下面有以下三个脚本:
fps.sh:实现多线程fps统计(多线程调度,用户可以根据需求自由设置线程数)。
latency.sh:实现单帧延迟性能统计(一个线程,单帧)。
accuracy.sh:用于精度评测。
ptq/tools 目录下主要包括 python_tools 下的精度计算脚本,用于PTQ模型的精度评测。
qat/tools 目录下主要包括前处理脚本及精度计算脚本,用于QAT模型的精度评测。
注意
评测前需要执行以下命令,将 ptq (或者 qat ) 目录拷贝到开发板上。
9.4.4.2. json配置文件参数信息¶
本小节按照输入配置项(input_config)、输出配置项(output_config)及workflow配置项的维度, 分别对workflow_fps.json、workflow_latency.json及workflow_accuracy.json中的配置项进行简单说明。
注解
下方给出的配置项参数信息为通用配置项信息,一些示例模型由于模型特殊性,还会有额外的配置项,具体请您参考示例模型json文件。
9.4.4.2.1. 输入配置项(input_config)
参数名称 | 参数说明 | 涉及json文件 |
|---|---|---|
input_type | 设置输入数据格式,支持图像或者bin文件。 | fps.json、latency.json、accuracy.json |
height | 设置输入数据高度。 | fps.json、latency.json、accuracy.json |
width | 设置输入数据宽度。 | fps.json、latency.json、accuracy.json |
data_type | 设置输入数据类型,支持类型可参考 hbDNNDataType 小节。 对应数据类型由上到下排序,分别对应数字0,1,2… 如HB_DNN_IMG_TYPE_Y对应数字0, HB_DNN_IMG_TYPE_NV12对应数字1, HB_DNN_IMG_TYPE_NV12_SEPARATE对应数字2… | fps.json、latency.json、accuracy.json |
image_list_file | 设置预处理数据集lst文件所在路径。 | fps.json、latency.json、accuracy.json |
need_pre_load | 设置是否使用预加载方式对数据集读取。 | fps.json、latency.json、accuracy.json |
limit | 设置处理中和处理完的输入数据量间差值的阈值, 用于控制输入数据的处理线程。 | fps.json、latency.json、accuracy.json |
need_loop | 设置是否循环读取数据进行评测。 | fps.json、latency.json、accuracy.json |
max_cache | 设置预加载的数据个数。 请注意: 此参数生效时会预处理图片并读取到内存中, 为保障您的程序稳定运行,请不要设置过大的值, 建议您的数值设置不超过30。 | fps.json、latency.json、accuracy.json |
9.4.4.2.2. 输出配置项(output_config)
参数名称 | 参数说明 | 涉及json文件 |
|---|---|---|
output_type | 设置输出数据类型。 | fps.json、latency.json、accuracy.json |
in_order | 设置是否按顺序进行输出。 | fps.json、latency.json、accuracy.json |
enable_view_output | 设置是否将输出结果可视化。 | fps.json、latency.json |
image_list_enable | 可视化时,设置为true,则可将输出结果保存为图像类型。 | fps.json、latency.json |
view_output_dir | 设置可视化结果输出文件路径。 | fps.json、latency.json |
eval_enable | 设置是否对精度进行评估。 | accuracy.json |
output_file | 设置模型输出结果文件。 | accuracy.json |
9.4.4.2.3. workflow配置项¶
模型推理配置项:
参数名称 | 参数说明 | 涉及json文件 |
|---|---|---|
method_type | 设置模型推理方法,此处需配置为 InferMethod。 | fps.json、latency.json、accuracy.json |
method_config | 设置模型推理参数。
| fps.json、latency.json、accuracy.json |
后处理配置项:
参数名称 | 参数说明 | 涉及json文件 |
|---|---|---|
thread_count | 设置后处理线程数,取值范围为 1-8。 | fps.json、latency.json、accuracy.json |
method_type | 设置后处理方法。 | fps.json、latency.json、accuracy.json |
method_config | 设置后处理参数。 | fps.json、latency.json、accuracy.json |
9.4.4.3. 性能评测
性能评测分为latency和fps两方面。
9.4.4.3.1. 使用说明¶
latency:
进入到需要评测的模型目录下,执行 sh latency.sh 即可测试出单帧延迟。如下所示:
注解
infer 表示模型推理耗时。
Post process 表示后处理耗时。
fps:
该功能采用多线程并发方式,旨在让模型可以在BPU上达到极致的性能。由于多线程并发及数据采样的原因,在程序启动阶段帧率值会较低,之后帧率会上升并逐渐趋于稳定,帧率的浮动范围控制在0.5%之内。 进入到需要评测的模型目录下执行 sh fps.sh 即可测试出帧率。如下所示:
9.4.4.3.2. 命令行参数说明¶
fps.sh脚本内容如下:
latency.sh脚本内容如下:
9.4.4.3.3. 结果可视化
如果您希望可以看到模型单次推理出来效果,可以修改workflow_latency.json,重新运行latency.sh脚本,即可在output_dir目录下生成展示效果。
注意
生成展示效果时,由于dump效果的原因,脚本运行会变慢。仅支持运行latency.sh脚本dump。
可视化操作步骤 参考如下:
1.修改workflow_latency.json配置文件
2.执行latency.sh脚本
注意
bev模型可视化需要指定场景信息和homography矩阵路径,homography矩阵用于相机视角和鸟瞰图的转换,不同场景有各自的homography矩阵。
bev模型的workflow_latency.json配置文件建议修改成如下形式:
不同类别的模型可以实现的 可视化效果 也不相同,参考下表:
模型类别 | 可视化效果 |
|---|---|
分类 |
|
2d检测 |
|
3d检测 |
|
分割 |
|
关键点 |
|
车道线 |
|
光流 |
|
雷达 |
|
雷达多任务 |
|
bev |
|
轨迹预测 |
|
深度估计 |
|
注意
轨迹预测可视化时如果需要可视化minidata以外的图片,需要额外配置道路信息、轨迹信息文件到 minidata/argoverse1/visualization 中,生成配置文件可使用 densetnt_process.py 预处理脚本,将 –is-gen-visual-config 参数设为 true。
9.4.4.4. 精度评测
模型评测分为五步:
1.数据预处理。
2.数据挂载。
3.生成lst文件。
4.模型推理。
5.精度计算。
9.4.4.4.1. 数据预处理
下文将分别对PTQ和QAT模型数据预处理方式进行介绍。
PTQ模型数据预处理:
PTQ模型数据预处理需要在x86仿真环境下运行 hb_eval_preprocess 工具,对数据集进行预处理。 所谓预处理是指数据在送入模型之前的特定处理操作,比如:图片resize、crop和padding等操作。 该工具集成于 horizon_tc_ui 工具内,安装对应的install脚本即可使用该工具。 原始数据集经过工具预处理之后,会生成模型对应的前处理二进制文件.bin文件集。
小技巧
关于 hb_eval_preprocess 工具命令行参数及使用方法,可键入 hb_eval_preprocess -h, 或查看PTQ工具文档中的 hb_eval_preprocess工具 一节内容。
下面将详细介绍示例包中每一个模型对应的数据集,以及对应数据集的预处理操作。
PTQ模型使用到的数据集包括以下几种:
数据集 | 说明 |
|---|---|
VOC 数据集 | 用于ssd_mobilenetv1检测模型的评测。 1.下载及参考下载结构可参考 如何准备数据集 章节。 示例中主要用到 Main 文件下的val.txt文件, JPEGImages 中的源图片和 Annotations 中的标注数据。 2.数据集预处理方式: |
COCO 数据集 | 用于centernet_resnet101、detr_efficientnetb3_mscoco、detr_resnet50_mscoco、yolov2_darknet19、yolov3_darknet53、yolov3_vargdarknet、yolov5x、 preq_qat_fcos_efficientnetb0、preq_qat_fcos_efficientnetb2和preq_qat_fcos_efficientnetb3检测模型的评测。 1.下载及参考下载结构可参考 如何准备数据集 章节。 示例中主要用到 annotations 文件夹下的instances_val2017.json标注文件和 images 中的图片。 2.数据集预处理方式: |
ImageNet 数据集 | 用于efficientnasnet_m、efficientnasnet_s、efficientnet_lite0、efficientnet_lite1、efficientnet_lite2、efficientnet_lite3、 efficientnet_lite4、googlenet、mobilenetv1、mobilenetv2、resnet18和vargconvnet分类模型的评测。 1.下载及参考下载结构可参考 如何准备数据集 章节。示例中主要用到标注文件val.txt 和 val 目录中的源图片。 2.数据集预处理方式: |
Cityscapes 数据集 | 用于deeplabv3plus_efficientnetb0、deeplabv3plus_efficientnetm1、deeplabv3plus_efficientnetm2和fastscnn_efficientnetb0模型的评测。 1.下载及参考下载结构可参考 如何准备数据集 章节。 示例中主要用到 ./gtFine/val 中的标注文件和 ./leftImg8bit/val 中的源图片。 2.数据集预处理方式: |
QAT模型数据预处理:
QAT模型数据预处理需要在x86仿真环境下执行 ai_benchmark_j5/j5/qat/tools/eval_preprocess 中对应模型的前处理脚本。 下面将详细介绍示例包中模型对应的数据集,以及其预处理操作。
小技巧
使用前请修改脚本中的数据集路径及保存路径使脚本正常运行。
数据集 | 说明 |
|---|---|
ImageNet 数据集 | 用于QAT分类模型mixvargenet_imagenet、mobilenetv1_imagenet、mobilenetv2_imagenet、resnet50_imagenet、horizon_swin_transformer_imagenet 和vargnetv2_imagenet的评测。 数据集预处理方式: |
VOC 数据集 | 用于检测模型yolo_mobilenetv1_voc的评测。 数据集预处理方式: |
COCO 数据集 | 用于QAT检测模型fcos_efficientnetb0_mscoco和retinanet_vargnetv2_fpn_mscoco的评测。 数据集预处理方式:
|
Cityscapes 数据集 | 用于QAT分割模型unet_mobilenetv1_cityscapes的评测,不需要前处理直接使用验证集数据即可。 |
FlyingChairs 数据集 | 用于QAT光流模型pwcnet_pwcnetneck_flyingchairs的评测。 1.本数据集您可以于 FlyingChairs数据集官网下载地址 下载, 示例中主要用到了 FlyingChairs_release/data 中的数据和 ./FlyingChairs_train_val.txt 标注文件。 我们建议您将下载的数据集解压成如下结构,数据准备过程中如遇问题请联系地平线。 其中:
2.数据集预处理方式: |
Kitti3D 数据集 | 用于QAT检测模型pointpillars_kitti_car的评测。 1.本数据集您可以于 Kitti3D数据集官网下载地址 下载, 我们建议您下载以下压缩包,数据准备过程中如遇问题请联系地平线。 建议您将下载的数据集解压成如下结构: 2.数据集预处理方式: |
Culane 数据集 | 用于QAT检测模型ganet_mixvargenet_culane的评测。 1.本数据集您可以于 Culane数据集官网下载地址 下载, 我们建议您下载以下压缩包,数据准备过程中如遇问题请联系地平线。 其中 annotations_new.tar.gz 需要最后解压,以对原始的注释文件进行更正,建议您将下载的数据集解压成如下结构: 2.数据集预处理方式: |
Nuscenes 数据集 | 用于QAT检测模型fcos3d_efficientnetb0_nuscenes,centerpoint_pointpillar_nuscenes,lidar多任务模型centerpoint_mixvargnet_multitask_nuscenes和 bev模型bev_gkt_mixvargenet_multitask_nuscenes,bev_lss_efficientnetb0_multitask_nuscenes,bev_ipm_efficientnetb0_multitask_nuscenes, bev_ipm_4d_efficientnetb0_multitask_nuscenes,detr3d_efficientnetb3_nuscenes,petr_efficientnetb3_nuscenes的评测。 1.本数据集您可以于 Nuscenes数据集官网下载地址 下载, 我们建议您下载以下压缩包,数据准备过程中如遇问题请联系地平线。 对于lidar多任务模型,还需从官网下载lidar分割标签lidarseg,并按照nuscenes官网教程更新v1.0-trainval,建议您将下载的数据集解压成如下结构: 2.数据集预处理方式: 请注意:
参考命令如下:
|
Mot17 数据集 | 用于QAT追踪模型motr_efficientnetb3_mot17的评测。 1.本数据集您可以于 Mot17数据集官网下载地址 下载, 我们建议您将下载的数据集解压成如下结构,数据准备过程中如遇问题请联系地平线。 2.数据集预处理方式: |
Carfusion 数据集 | 用于QAT检测模型keypoint_efficientnetb0_carfusion的评测。 1.本数据集您可以于 Carfusion数据集官网下载地址 下载, 我们建议您将下载的数据集解压成如下结构,数据准备过程中如遇问题请联系地平线。 2.数据集预处理方式: 执行第一个脚本后的目录如下: 保证data-root指定的地址与cropped_data同一级,然后运行下方指令: |
Argoverse1 数据集 | 用于QAT检测模型densetnt_vectornet_argoverse1的评测。 1.本数据集您可以于 Argoverse1数据集官网下载地址 下载, 我们建议您将下载的数据集解压成如下结构,数据准备过程中如遇问题请联系地平线。 2.数据集预处理方式: densetnt_process.py除了生成预处理输入外,还会在src-path下生成相应的评测meta文件。 评测仅需使用 --src-path 和 --dst-path 两个参数即可,无需关注其他参数。 |
SceneFlow 数据集 | 用于QAT深度估计模型stereonetplus_mixvargenet_sceneflow的评测。 1.本数据集您可以于 SceneFlow数据集官网下载地址 下载,我们建议您将下载的数据集解压成如下结构,数据准备过程中如遇问题请联系地平线。 2.数据集预处理方式: stereonet_preprocess.py除了生成预处理数据外,还会在预处理数据路径下生成一个 val_gt_infos.pkl 文件用于精度计算。 |
9.4.4.4.2. 数据挂载¶
由于数据集相对较大,不适合直接放在开发板上,可以采用挂载的方式供开发板读取,需要在服务器PC端和板端进行如下操作:
服务器PC端:
注意
请注意,执行下方操作需要服务器PC端root权限。
1.编辑 /etc/exports,增加一行: /nfs *(insecure,rw,sync,all_squash,anonuid=1000,anongid=1000,no_subtree_check)。 /nfs 表示本机挂载路径,可替换为用户指定目录。
2.执行命令 exportfs -a -r,使/etc/exports生效。
板端:
1.创建需要挂载的目录: mkdir -p /mnt。
2.挂载: mount -t nfs {PC端IP}:/nfs /mnt -o nolock。
完成将PC端的 /nfs 文件夹挂载至板端 /mnt 文件夹。 按照此方式,将包含预处理数据的文件夹挂载至板端, 并将 /data 目录软链接至板端 /ptq 或 /qat 目录下,与 /script 同级目录。
9.4.4.4.3. 生成lst文件
示例中精度计算脚本的运行流程是:
1.根据 workflow_accurary.json 中的 image_list_file 参数值,去寻找对应数据集的 lst 文件。
2.根据 lst 文件存储的前处理文件路径信息,去加载每一个前处理文件,然后进行推理。
因此生成预处理文件之后,需要生成对应的lst文件,将每一张前处理文件的路径写入到lst文件中,而这个路径与数据集在板端的存放位置有关。 这里我们推荐其存放位置与 ./data/dataset_name/pre_model_name 预处理数据文件夹同级目录。
PTQ预处理数据集结构如下:
QAT预处理数据集结构如下:
对应的lst文件,参考生成方式如下:
除Densetnt_vectornet_argoverse1、Bev、Motr_efficientnetb3_mot17和Stereonetplus_mixvargenet_sceneflow模型外,其余模型的lst文件参考生成方式:
注解
-name后的参数需要根据预处理后的数据集格式进行对应调整,如bin、png。
这样生成的lst文件中存储的路径为一个相对路径: ../../../data/coco/pre_centernet_resnet101/ , 可以与 workflow_accuracy.json 默认的配置路径吻合。 如果需要更改前处理数据集的存放位置,则需要确保对应的 lst 文件可以被 workflow_accuracy.json 读取到。 其次需要确保程序根据 lst 中的路径信息,能读取到对应的前处理文件。
argoverse1:
这样生成的lst文件中存储的路径为一个相对路径: ../../../data/argoverse1/densetnt/ , 可以与 workflow_accuracy.json 默认的配置路径吻合。
对于Densetnt_vectornet_argoverse1、Bev、Motr_efficientnetb3_mot17和Stereonetplus_mixvargenet_sceneflow模型,lst文件参考生成方式:
模型名 | lst文件参考生成方式及说明 |
|---|---|
Densetnt | 参考生成方式: 这样生成的lst文件中存储的路径为一个相对路径: ../../../data/argoverse1/densetnt/ ,可以与 workflow_accuracy.json 默认的配置路径吻合。 |
Bev | 以bev_ipm_efficientnetb0_multitask模型为例,该模型有图像和参考点两种输入,同一帧输入的图片和参考点名称相同。 为了保证输入相对应,在执行 find 命令时需要添加 sort 按名称进行排序。参考生成方式: detr3d_efficientnetb3_nuscenes和petr_efficientnetb3_nuscenes 除了图像和参考点还有coords,masks和position embedding输入,生成lst方式如下:
请注意: bev模型中,detr3d_efficientnetb3_nuscenes,petr_efficientnetb3_nuscenes的 reference_points 用于模型后处理, 需要在 workflow_accuracy.json 配置正确的路径,确保程序能够读到对应的参考点文件。 此外,bev_ipm_4d_efficientnetb0_multitask是时序模型,该模型对输入顺序有要求。因此,我们提供了专门的脚本 gen_file_list.sh 用于生成lst文件,使用方式如下: 这样生成的lst文件中存储的路径为一个相对路径: ../../../data/nuscenes_bev/ ,可以与 workflow_accuracy.json 默认的配置路径吻合。 如果需要更改前处理数据集的存放位置,则需要确保对应的 lst 文件可以被 workflow_accuracy.json 读取到。 其次需要确保程序根据 lst 中的路径信息,能读取到对应的前处理文件。 |
Motr | 参考生成方式: 这样生成的lst文件中存储的路径为一个相对路径: ../../../data/mot17/motr/ ,可以与 workflow_accuracy.json 默认的配置路径吻合。 如果需要更改前处理数据集的存放位置,则需要确保对应的 lst 文件可以被 workflow_accuracy.json 读取到。 其次需要确保程序根据 lst 中的路径信息,能读取到对应的前处理文件。 |
Stereonetplus | 以stereonetplus_mixvargenet_sceneflow模型为例,为了保证同一帧输入的左右视图相对应,在执行 find 命令时需要添加 sort 按名称进行排序, 参考生成方式如下: |
9.4.4.4.4. 模型推理
accuracy.sh脚本内容中各参数说明如下:
挂载完数据后,登录开发板,执行 centernet_resnet101/ 目录下的accuracy.sh脚本,如下所示:
板端程序会在当前目录生成eval.log文件,该文件就是预测结果文件。
9.4.4.4.5. 精度计算
注意
请注意,精度计算部分需在docker环境或linux环境下进行操作。
精度计算我们按照PTQ模型精度和QAT模型精度计算两种情况为您展开介绍。
PTQ模型精度计算:
PTQ模型精度计算的脚本在 ptq/tools/python_tools/accuracy_tools 目录下,其中:
cls_eval.py用于计算分类模型的精度。
coco_det_eval.py用于计算使用COCO数据集评测的检测模型的精度。
parsing_eval.py用于计算使用Cityscapes数据集评测的分割模型的精度。
voc_det_eval.py用于计算使用VOC数据集评测的检测模型的精度。
以下为您说明不同类型的PTQ模型精度计算方式:
模型类型 | 精度计算方式说明 |
|---|---|
分类模型 | 使用CIFAR-10数据集和ImageNet数据集的分类模型计算方式如下: 其中:
|
检测模型 | 1.使用COCO数据集的检测模型精度计算方式如下: 其中:
2.使用VOC数据集的检测模型精度计算方式如下: 其中:
|
分割模型 | 使用Cityscapes数据集的分割模型精度计算方式如下: 其中:
|
QAT模型精度计算:
QAT模型的精度计算脚本在 qat/tools/python_tools/accuracy_tools 目录下,其中:
bev_eval.py用于计算bev模型的精度。
centerpoint_eval.py用于计算雷达3D模型centerpoint_pointpillar_nuscenes的精度。
cls_eval.py用于计算分类模型的精度。
densetnt_eval.py用于计算densetnt轨迹预测模型densetnt_vectornet_argoverse1的精度。
detr_eval.py用于计算detr检测模型的精度。
fcos3d_eval.py用于计算检测模型fcos3d_efficientnetb0_nuscenes的精度。
fcos_eval.py用于计算fcos检测模型的精度。
ganet_eval.py用于计算检测模型ganet_mixvargenet_culane的精度。
keypoints_eval.py用于计算检测模型keypoint_efficientnetb0_carfusion的精度。
lidar_multitask_eval.py用于计算lidar多任务模型centerpoint_mixvargnet_multitask_nuscenes的精度。
motr_eval.py用于计算motr检测模型motr_efficientnetb3_mot17的精度。
parsing_eval.py用于计算使用Cityscapes数据集评测的分割模型的精度。
pointpillars_eval.py用于计算检测模型pointpillars_kitti_car的精度。
pwcnet_eval.py用于计算使用FlyingChairs数据集评测的光流模型pwcnet_pwcnetneck_flyingchairs的精度。
retinanet_eval.py用于计算检测模型retinanet_vargnetv2_fpn_mscoco的精度。
yolov3_eval.py用于计算yolov3检测模型的精度。
stereonet_eval.py用于计算深度估计模型stereonetplus_mixvargenet_sceneflow的精度。
以下为您说明不同类型的QAT模型精度计算方式:
模型类型 | 精度计算方式说明 |
|---|---|
Bev模型 | 使用nuscenes数据集的bev模型精度计算方式如下: 其中:
|
分类模型 | 使用CIFAR-10数据集和ImageNet数据集的分类模型计算方式如下: 其中:
|
检测模型 | 1.使用COCO数据集的检测模型精度计算方式示例如下: 其中:
其中:
其中:
2.使用VOC数据集的检测模型精度计算方式示例如下: 其中:
3.使用Kitti数据集的检测模型精度计算方式如下: 其中:
4.使用Culane数据集的检测模型精度计算方式如下: 其中:
5.使用Nuscenes数据集的检测模型精度计算方式如下: 其中:
其中:
6.使用Carfusion数据集的检测模型精度计算方式如下: 其中:
|
分割模型 | 使用Cityscapes数据集的分割模型精度计算方式如下: 其中:
|
光流模型 | 使用FlyingChairs数据集的光流模型精度计算方式如下: 其中:
|
追踪模型 | 使用mot17数据集的追踪模型计算方式如下: 其中:
|
多任务模型 | 使用nuscenes数据集的lidar多任务模型精度计算方式如下: 其中:
|
轨迹预测模型 | 使用argoverse1数据集的追踪模型计算方式如下: 其中:
|
深度估计模型 | 使用Sceneflow数据集的深度估计模型精度计算方式如下: 其中:
|
9.4.5. 模型集成
9.4.5.1. 前处理¶
您可根据需要自行添加模型前处理 将其部署到 CPU 或 DSP 上,以centerpoint_pointpillar_nuscenes为例:
1.增加前处理文件qat_centerpoint_preprocess_method.cc,以及头文件qat_centerpoint_preprocess_method.h。
2.增加模型前处理配置文件。
9.4.5.1.1. 前处理文件及头文件添加¶
前处理文件 qat_centerpoint_preprocess_method.cc 放置于 ai_benchmark/code/src/method/ 路径下, 头文件 qat_centerpoint_preprocess_method.h 放置于 ai_benchmark/code/include/method/ 路径下:
9.4.5.1.2. 模型前处理配置文件添加
centerpoint_pointpillar_nuscenes的前处理可以部署到 CPU 或 DSP 上,这取决于配置文件centerpoint_pointpillar_5dim.json中是否配置对应参数 run_on_dsp。 如果配置文件中的 run_on_dsp 设置为 true ,那么前处理将在 DSP 上运行,否则它在 CPU 上运行。
9.4.5.1.3. 前处理单帧延时评测
执行 sh latency.sh 脚本可对前处理的单帧延迟情况进行测试。如下所示:
其中:
Pre process 表示前处理耗时。
Infer 表示模型推理耗时。
Post process 表示后处理耗时。
9.4.5.2. 后处理
后处理集成主要有2个步骤,以CenterNet模型集成为例:
1.增加后处理文件ptq_centernet_post_process_method.cc,以及头文件ptq_centernet_post_process_method.h。
2.增加模型运行脚本及配置文件。
9.4.5.2.1. 后处理文件及头文件添加
后处理代码文件可直接复用src/method目录下任意后处理文件,主要修改 InitFromJsonString 函数,以及 PostProcess 函数即可。
InitFromJsonString 函数主要是读取workflow.json中的后处理相关的参数配置,用户可自定义设置相应的输入参数。 PostProcess 函数主要完成后处理的逻辑。
后处理文件 ptq_centernet_post_process_method.cc 放置于 ai_benchmark/code/src/method/ 路径下, 头文件 ptq_centernet_post_process_method.h 放置于 ai_benchmark/code/include/method/ 路径下:
9.4.5.2.2. 模型运行脚本及配置文件添加¶
模型运行脚本及配置文件完成添加后的目录结构参考如下:
centerpoint_pointpillar_nuscenes模型:
如需在 DSP 上部署,需要执行 dsp_deploy.sh 脚本部署 DSP 环境,详细介绍请参考该示例文件夹下的 README.md 中的介绍。
motr_efficientnetb3_mot17模型:
除centerpoint_pointpillar_nuscenes模型及motr_efficientnetb3_mot17外其他模型:
9.4.6. 辅助工具
9.4.6.1. 日志
日志主要包括 示例日志 和 DNN日志 两部分。 其中示例日志是指交付包示例代码中所应用的日志, DNN日志是指嵌入式runtime库中的日志。 用户根据不同的需求可以设置不同的日志。
9.4.6.1.1. 示例日志
1.日志级别
示例日志主要采用glog中的vlog,主要分为四个自定义级别:
0:SYSTEM级别,该级别日志主要用于输出报错信息。
1:REPORT级别,该级别日志在示例代码中主要用于输出性能数据。
2:DETAIL级别,该级别日志在示例代码中主要用于输出系统当前状态信息。
3:DEBUG级别,该级别日志在示例代码中主要用于输出调试信息。
2.日志级别设置
日志处理机制说明:日志级别等级由高到低默认顺序为DEBUG>DETAIL>REPORT>SYSTEM,级别越高,输出日志越多。 即设置高等级,则会输出自身及低于自身等级的日志。
在运行示例时,日志级别需要通过 log_level 参数来进行设置。 例如,指定 log_level=0,则会输出SYSTEM级别日志。指定 log_level=3,则会输出DEBUG、DETAIL、REPORT及SYSTEM级别日志。
9.4.6.1.2. dnn 日志
关于 dnn 日志的配置,请阅读BPU SDK API手册中的 配置信息 一节内容。
9.4.6.2. 算子耗时
9.4.6.2.1. 概述
对OP性能的统计是通过设置 HB_DNN_PROFILER_LOG_PATH 环境变量实现的。 对该变量的类型和取值说明如下:
HB_DNN_PROFILER_LOG_PATH=${path}:表示OP节点dump的输出路径,程序正常运行完退出后,产生profiler.log文件。
9.4.6.2.2. 示例
以mobilenetv1模型为例,开启单线程同时RunModel,设置 export HB_DNN_PROFILER_LOG_PATH=./,则profiler.log文件中会输出OP的性能数据。 其中包含 model_latency 和 task_latency,model_latency中输出了模型每个OP运行所需要的耗时情况,task_latency中输出了模型运行中各个task模块的耗时情况。
9.4.6.3. dump工具
通过开启 HB_DNN_DUMP_PATH 这个环境变量可以dump出模型推理过程中每个节点的输入和输出。 通过dump工具,可以排查模拟器和真机是否存在一致性问题:即相同模型,相同输入,真机和模拟器的输出结果是否完全相同。



















