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
为最大绝对误差。