"); //-->
# 1.引论:写在前面的
性能评估和精度评估在模型开发和部署过程中是至关重要的两个部分。对于精度评估,地平线算法工具链提供了两中路径进行算法的精度评估。一条为服务器端精度评估,该路径通过 PYTHON 脚本使用 PYTHON 推理接口进行板端推理仿真,运行。BC 或 quantized.onnx 量化量化模型以获取推理结果并进行后处理后与真值进行对比,最终计算出量化模型的精度;另一条另则是直接在板端推理量化后的 hbm 模型,获取推理结果,然后下载推理结果到服务器端并通过 PYTHON 评估脚本结合真值进行进行计算,最终计算出量化模型的精度。因为后者是在板端进行推理,可以充分利用硬件加速过程,在速度上相比服务器仿真要高效很多,不过,限于板端存储限制,评测所需要的大数据集还需要通过 NFS 在板端使用。
本文以 bevformer 精度评估为例,引到读者从评测环境构建到评测数据准备,最后到精度评测试试和最终结果计算的整个流程,以期给您一个进行板端精度评测的一个流程全貌。
# 2.环境准备和评测实施
整个评测过程涉及 评测所用的数据集文件准备、NFS 服务端安装和板端目录挂载、评测程序准备和相关文件配置、评测执行和结果收集 以及 评测结果计算 等 5 个小环节。其中评测所用的数据集文件准备、NFS 服务端安装、评测结果结算是在服务器端进行,而板端目录挂载、评测程序准备和相关文件配置、评测执行和结果收集为板端执行部分。下面为针对这写过程逐步为大家展开说明。因为测评过程是基于算法工具链进行的,所以在开始测评之前需要大家先配置好工具链的 docker 环境并关在 OE 示例包。我这里以征程 6 的 OE-3.0.22 为例进行说明,另外为了加速测试过程,这里仅以 mini 数据集加以阐述。
## 2.1 评测所用的数据集文件准备
1.下载的 nuScenes 的 v1.0-mini.tgz、nuScenes-lidarseg-all-v1.0.tar.bz2、nuScenes-map-expansion-v1.3.zip 和 can_bus.zip 后进行解压,解压后的目录如下所示:
```Plain
|--nuscenes
|-- can_bus #can_bus.zip解压后的目录
|-- lidarseg #nuScenes-lidarseg-all-v1.0.tar.bz2解压后的目录
|-- maps #nuScenes-map-expansion-v1.3.zip解压后的数据
|-- samples #v1.0-mini.tar解压后的目录
| |-- CAM_BACK
| |-- ...
| |-- CAM_FRONT_RIGHT
| |-- ...
| `-- RADAR_FRONT_RIGHT
|-- sweeps #v1.0-mini.tar解压后的目录
| |-- CAM_BACK
| |-- ...
| |-- CAM_FRONT_RIGHT
| |-- ...
| `-- RADAR_FRONT_RIGHT
|-- v1.0-mini #v1.0-mini.tgz解压后的目录
|-- attribute.json
|
`-- visibility.json
```
2.在 nuscenes 下创建 meta 文件夹,将解压后的 v1.0-mini 文件夹、maps 文件夹、lidarseg 文件夹拷贝到 meta 文件夹内,构建如下:
```Plain
meta/
├── lidarseg
│ └── v1.0-mini
├── maps
│ ├── 36092f0b03a857c6a3403e25b4b7aab3.png
│ ├── 37819e65e09e5547b8a3ceaefba56bb2.png
│ ├── 53992ee3023e5494b90c316c183be829.png
│ ├── 93406b464a165eaba6d9de76ca09f5da.png
│ ├── basemap
│ ├── expansion
│ └── prediction
└── v1.0-mini
├── attribute.json
├── calibrated_sensor.json
├── category.json
├── ego_pose.json
├── instance.json
├── log.json
├── map.json
├── sample.json
├── sample_annotation.json
├── sample_data.json
├── scene.json
├── sensor.json
└── visibility.json
```
3.进入工具链的/samples/ucp_tutorial/dnn/ai_benchmark/j6/qat/tools/eval_preprocess/目录修改 bev_preprocess.py、
4.修改 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 为上述准备的数据集的目录
1. 上述命令执行后生成 nuscenes_bev_mini 目录(其中包含 gt 信息 val_gt_infos.pkl)和 idx.txt,他们作为精度评测过程依赖文件,在 NFS server 构建之后可以拷贝到 NFS 分享目录中,将来在板端挂载后使用。
## 2.2 NFS 服务器安装、配置 以及 板端挂载使用
### 2.2.1 NFS 服务器安装和配置( *此处为 ubuntu2204 系统* )
1.安装和启动
```
# 安装nfs-server(安装后会自动启动)
sudo apt install nfs-kernel-server
# 查看nfs-server状态
sudo systemctl status nfs-server
# 开机自启
sudo systemctl enable nfs-server
```
2.创建共享目录
```
sudo mkdir -p /mnt/nfs_share
#修改权限
sudo chmod -R 777 /mnt/nfs_share
# !!!准备好的精度评测过程依赖文件可以拷贝到新建的目录中,板端挂载后即可使用
```
3.使用命令 sudo vi /etc/exports 编辑配置文件,末尾添加如下内容: `/mnt/nfs_share *(rw,sync,no_subtree_check,insecure,no_root_squash)`
4.使用命令`sudo systemctl restart nfs-server`重启 NFS 服务
### 2.2.2 NFS 板端挂载和可用性验证
```
#安装依赖包(默认Jx开发板系统已安装,此处仅为在其他板端或服务器挂载NFS做参考)
#sudo apt install nfs-common
#创建挂载目录
mkdir -p /userdata/nfs
#挂载NFS共享目录(这里假设服务器IP为:192.168.1.6)
sudo mount -t nfs 192.168.1.6:/mnt/nfs_share /userdata/nfs
```
## 2.3 评测程序准备和相关文件配置
1. 精度评测工具准备 该文章精度评测使用工具链自带的 ai_benchmarch 进行内容展开和测试实施,因此实在测评开始前需要先编译好 ai_benchmarch 的上板程序,并将编译结果打包后上传到用于实施精度评测的开发板上(一般来讲/map 目录空间较大,这里以将 ai_benchmarch 部署包上传至/map/tester 下,解压后为/map/tester/ai_benchmark)
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 评测结果计算
1. 精度计算在服务器端的 OE 开发环境中进行,执行脚本为/open_explorer/samples/ucp_tutorial/dnn/ai_benchmark/j6/qat/tools/python_tools/accuracy_tools/bev_eval.py。
2. 为了使用 mini 数据集,需要对脚本稍加修改如下:
3.将板端运行 accuracy.sh 后生成的 eval.log 传回服务器端 OE 开发环境中联合数据集的 meta(前面准备评测数据集时已备),以及准备评测数据集过程中生成的 val_gt_infos.pkl 执行下面的精度评估命令的到评估结果。
```
cd /open_explorer/samples/ucp_tutorial/dnn/ai_benchmark/j6/qat/tools/python_tools/accuracy_tools
#eval.log、val_gt_infos.pkl和meta的位置根据自身情况调整。
python3 bev_eval.py --det_eval_path=eval.log --gt_files_path=../../eval_preprocess/nuscenes_bev_mini/val_gt_infos.pkl --meta_dir=/data_set/nuScenes_mini/meta
eval.py --det_eval_path=eval.log --gt_files_path=../../eval_preprocess/nuscenes_bev_mini/val_gt_infos.pkl --meta_dir=/data_set/nuScenes_mini/meta
```
*博客内容为网友个人发布,仅代表博主个人观点,如有侵权请联系工作人员删除。