6.2.7. hb_verifier 工具¶
hb_verifier 工具是用于对指定的定点模型和 runtime 模型进行结果验证的工具。
若您使用工具前指定了图片,则 hb_verifier 工具会使用指定图片进行定点模型推理、runtime 模型板端和 X86 端模拟器上的推理,并对结果进行两两比较,
给出是否通过的结论(此过程支持自选,您可以根据需要选择进行对比的内容)。
若您在使用工具前未指定图片,则 hb_verifier 工具会默认使用随机生成的 tensor 数据进行推理。
注意
在进行 runtime 模型在板端的推理时,需要确认给定 ip 可以 ping 通且板端已经安装
hrt_tools,若无则可以使用 OE 包中package/board下的install.sh脚本进行安装。bash install.sh {开发板 IP}
在进行 runtime 模型在 x86 端的推理时,需要确保 host 端已经安装
hrt_tools,若无则可以使用 OE 包中package/host/host_package/下的install_host_package.sh脚本进行安装。bash install_host_package.sh -y
在使用本工具前,以下内容需要请您注意:
注意
hb_verifier 工具不支持除 Dequantize 节点外,有其他节点变化的 bin 模型与 quanti.onnx 进行对比。
如果在使用本工具前,您使用 hb_model_modifier 工具删除了 bin 模型的输出前的最后一个节点且该节点为非 Dequantize 节点,或者 yaml 文件中配置了
remove_node_type参数, 从而删除了 bin 模型的输出前的最后一个节点且该节点为非 Dequantize 节点,那么 hb_verifier 工具将不再支持 quanti.onnx 和删除节点后的 bin 模型做对比。如您想解决上述问题,需要避免出现上述删除 bin 模型的输出前的最后一个节点且该节点为非 Dequantize 节点的情况。
由于 hb_verifier 工具与板端通过 SSH 进行交互,故如您在 OE Docker 容器内使用本工具,请勿使用
docker attach命令连接容器,使用此命令连接容器会导致与板端交互的 SSH 认证失败。建议您运行 OE 包内部提供的
run_docker.sh或使用docker exec -it {容器 ID} /bin/bash命令进入容器后再使用本工具。
6.2.7.1. 使用方式¶
hb_verifier -m ${quanti_model},${bin_model} \
-b ${board_ip} \
-s True / False \
-i ${input_img} \
-c ${digits} \
-r True / False
-u Board username
-p Board password
6.2.7.2. 命令行参数¶
- hb_verifier 的命令行参数:
- --version
显示版本并退出。
- -h, --help
显示帮助信息。
- -m, --model
定点模型名称和 bin 模型名称,多模型之间用”,”进行区分。
- -b, --board-ip
上板测试使用的 arm board ip 地址。
- -s, --run-sim
设置是否使用 X86 环境的 libdnn 做 bin 模型推理,默认为 False。
当该参数设置为
True时,工具将会使用 x86 环境的 libdnn 做 bin 模型推理。当该参数设置为
False时,工具不会使用 x86 环境的 libdnn 做 bin 模型推理。
- -i, --input-img
指定推理测试时使用的图片。
若不指定则会使用随机生成的 tensor 数据。
若指定图片为二进制形式的图片文件,其文件形式需要为后缀名为
.bin形式。多输入模型添加图片的方式有以下两种传参方式,多张图片之间用”,”分割:
input_name1:image1,input_name2:image2, …
image1,image2…
注意
在多 batch 模型场景下,hb_verifier 工具不支持输入配置为 binary 数据,建议直接指定为单 batch 图片,或者不指定输入使用随机数据进行一致性验证。
- -c, --compare_digits
设置比较推理结果的数值精确度(即比较数值小数点后的位数),若不进行指定则工具会默认比较至小数点后五位。
- -r, --dump-all-nodes-results
设置是否保存模型中各个算子的输出结果,并对算子输出名称相同的结果进行对比,默认为 False。
当该参数设置为
True时,工具将会获取模型中所有节点的输出,并根据节点输出的名字做匹配,从而进行对比。当该参数设置为
False时,工具将会只获取模型最终输出的结果,并进行对比。
注意
请您注意,目前基于性能考虑,暂不支持您在 X86 环境下使用 dump 功能。
- -u, --username
用于指定开发板用户名,默认为
root。- -p, --password
如您所使用的开发板带有密码,需键入板端密码。
注意
如所使用的开发板未设置密码,请勿主动输入此项。
6.2.7.3. 参考使用场景样例¶
1.quanti.onnx 模型推理、bin 模型在板端推理,bin 模型在 X86 环境下进行推理,并对三方推理结果做对比:
hb_verifier -m quanti.onnx,model.bin -b *.*.*.* -s True (-i 选填)
2.quanti.onnx 模型推理、bin 模型在板端推理,并对两方推理结果做对比:
hb_verifier -m quanti.onnx,model.bin -b *.*.*.* (-i 选填)
3.quanti.onnx 模型推理、bin 模型在板端推理,过程中会保存两方模型中各个算子的输出,并对算子输出名称相同的结果进行对比:
hb_verifier -m quanti.onnx,model.bin -b *.*.*.* -r True (-i 选填)
4.quanti.onnx 模型推理、bin 模型在 X86 环境下进行推理,并对两方推理结果做对比:
hb_verifier -m quanti.onnx,model.bin -s True (-i 选填)
6.2.7.4. 输出内容说明¶
结果对比最终会在终端展示,工具会对比多个模型在不同场景下的运行结果,若无问题应显示如下:
Comparison results of original output is model_infer_output_0
raw output 0 and raw output 0 result Strict check PASSED
Quanti.onnx and Arm result Strict check PASSED
在定点模型和 runtime 模型精度不一致时会输出不一致结果的具体信息,如下方 log 所示:
INFO ================== Sim infer log end ==========================
INFO ***************************************************************
INFO compare source: Quanti.onnx VS Arm
INFO compare model name: clr_320x800_bgr_quantized_model VS clr_320x800_bgr
Compare progress: 100%|###########################| 1/1 [00:00<00:00, 55.47it/s]
INFO =============== Original output comparison results =================
INFO Comparison results of original output is model_infer_output_0_output
INFO mismatch result num: 1000
INFO total result num: 1000
INFO mismatch rate: 1.0
INFO relative mismatch ratio: 0.9997149805034536
INFO max abs error: 8.36695
WARNING raw output output and raw output output result Strict check FAILED
WARNING Quanti.onnx and Arm result Strict check FAILED
INFO ***************************************************************
INFO ***************************************************************
INFO compare source: Quanti.onnx VS Sim
INFO compare model name: clr_320x800_bgr_quantized_model VS clr_320x800_bgr
Compare progress: 100%|##########################| 1/1 [00:00<00:00, 135.53it/s]
INFO =============== Original output comparison results =================
INFO Comparison results of original output is model_infer_output_0_output
INFO mismatch result num: 1000
INFO total result num: 1000
INFO mismatch rate: 1.0
INFO relative mismatch ratio: 0.9997149805034536
INFO max abs error: 8.36695
WARNING raw output output and raw output output result Strict check FAILED
WARNING Quanti.onnx and Sim result Strict check FAILED
INFO ***************************************************************
INFO ***************************************************************
INFO compare source: Arm VS Sim
INFO compare model name: clr_320x800_bgr VS clr_320x800_bgr
Compare progress: 100%|##########################| 1/1 [00:00<00:00, 150.69it/s]
INFO Arm and Sim result Strict check PASSED
INFO ***************************************************************
其中:
mismatch result num为两种模型精度不一致结果的个数,包括三种不一致情况:mismatch.line_miss num为输出结果数量不一致的个数。mismatch.line_diff num为输出结果差距过大的个数。mismatch.line_nan num为输出为 nan 的个数。
total result num为输出数据的总个数。mismatch rate为不一致数据个数占输出数据总个数的比例。relative mismatch ratio为相对误差比例,取误差比例最大的值进行展示。max abs error为最大绝对误差。