1. 引论:写在前面的
性能评估和精度评估在模型开发和部署过程中是至关重要的两个部分。对于精度评估,地平线算法工具链提供了两中路径进行算法的精度评估。一条为服务器端精度评估,该路径通过PYTHON脚本使用PYTHON推理接口进行板端推理仿真,运行.BC或quantized.onnx量化量化模型以获取推理结果并进行后处理后与真值进行对比,最终计算出量化模型的精度;另一条另则是直接在板端推理量化后的hbm模型,获取推理结果,然后下载推理结果到服务器端并通过PYTHON评估脚本结合真值进行进行计算,最终计算出量化模型的精度。因为后者是在板端进行推理,可以充分利用硬件加速过程,在速度上相比服务器仿真要高效很多,不过,限于板端存储限制,评测所需要的大数据集还需要通过NFS在板端使用。
本文以bevformer精度评估为例,引到读者从评测环境构建到评测数据准备,最后到精度评测试试和最终结果计算的整个流程,以期给您一个进行板端精度评测的一个流程全貌。
2. 环境准备和评测实施
整个评测过程涉及 评测所用的数据集文件准备、NFS服务端安装和板端目录挂载、评测程序准备和相关文件配置、评测执行和结果收集 以及 评测结果计算 等5个小环节。其中评测所用的数据集文件准备、NFS服务端安装、评测结果结算是在服务器端进行,而板端目录挂载、评测程序准备和相关文件配置、评测执行和结果收集为板端执行部分。下面为针对这写过程逐步为大家展开说明。因为测评过程是基于算法工具链进行的,所以在开始测评之前需要大家先配置好工具链的docker环境并关在OE示例包。我这里以J6的OE-3.0.22为例进行说明,另外为了加速测试过程,这里仅以mini数据集加以阐述。
2.1 评测所用的数据集文件准备
下载的nuScenes的v1.0-mini.tgz、nuScenes-lidarseg-all-v1.0.tar.bz2、nuScenes-map-expansion-v1.3.zip和can_bus.zip后进行解压,解压后的目录如下所示:
在nuscenes下创建meta文件夹,将解压后的v1.0-mini文件夹、maps文件夹、lidarseg文件夹拷贝到meta文件夹内,构建如下:
进入工具链的/samples/ucp_tutorial/dnn/ai_benchmark/j6/qat/tools/eval_preprocess/目录修改bev_preprocess.py、
修改前 | 修改后 |
|---|---|
![]() | ![]() |
![]() | ![]() |
修改bev_preprocess.py后执行下列命令:
python3 bev_preprocess.py --model=bevformer_tiny_resnet50_detection_nuscenes --data-path=/data_set/nuScenes_mini --meta-path=/data_set/nuScenes_mini/meta --reference-path=../../script/config/reference_points --save-path=./nuscenes_bev_mini
注:/data_set/nuScenes_mini 为上述准备的数据集的目录
上述命令执行后生成nuscenes_bev_mini目录(其中包含gt信息val_gt_infos.pkl)和idx.txt,他们作为精度评测过程依赖文件,在NFS server构建之后可以拷贝到NFS分享目录中,将来在板端挂载后使用。
2.2 NFS服务器安装、配置 以及 板端挂载使用
2.2.1 NFS服务器安装和配置( 此处为ubuntu2204系统 )
安装和启动
创建共享目录
使用命令 sudo vi /etc/exports 编辑配置文件,末尾添加如下内容:
4. 使用命令sudo systemctl restart nfs-server重启NFS服务
2.2.2 NFS板端挂载和可用性验证
2.3 评测程序准备和相关文件配置
精度评测工具准备
2. 精度测试流程启动脚本
为/map/tester/ai_benchmark/qat/script/bev/bevformer_tiny_resnet50_detection_nuscenes/accuracy.sh,其配置文件为同级目录下的workflow_accuracy.json,从配置还可以看出其使用的数据位于../../../data/nuscenes_bev/(绝对路径为/map/tester/ai_benchmark/qat/data/nuscenes_bev)中。
3. 评测数据准备
/map/tester/ai_benchmark/qat/script/bev/bevformer_tiny_resnet50_detection_nuscenes/gen_file_list.sh用于生成workflow_accuracy.json中所使用的*.lst文件,为了适配mini数据集需要修改脚本如下(order_file指向回灌数据生成过程中的idx.txt):

脚本修改后运行便可在/map/tester/ai_benchmark/qat/data/nuscenes_bev目录生成mini数据集对应的lst文件.
/userdata/nfs为NFS挂载目录,其中存放有评测所需要的文件。
为了使得测试顺利进行,测试数据可以使用"ln -s /userdata/nfs/nuscenes_bev_mini/* ."加以引用(实际应用过程很多使用也是通过软链方式加以使用)
2.4 评测执行和结果收集
数据准备好之后就可以运行accuracy.sh进行测评实施,测试完成后生成eval.log,用于后面的最终结果评估。
2.5 评测结果计算
精度计算在服务器端的OE开发环境中进行,执行脚本为/open_explorer/samples/ucp_tutorial/dnn/ai_benchmark/j6/qat/tools/python_tools/accuracy_tools/bev_eval.py。
为了使用mini数据集,需要对脚本稍加修改如下:

3. 将板端运行accuracy.sh后生成的eval.log传回服务器端OE开发环境中联合数据集的meta(前面准备评测数据集时已备),以及准备评测数据集过程中生成的val_gt_infos.pkl 执行下面的精度评估命令的到评估结果。





