4.1.2.7. hb_verifier 工具

hb_verifier 工具是用于对指定的定点模型和runtime模型进行结果验证的工具。

若您使用工具前指定了图片,则 hb_verifier 工具会使用指定图片进行定点模型推理、runtime模型板端和X86端模拟器上的推理,并对结果进行两两比较, 给出是否通过的结论(此过程支持自选,您可以根据需要选择进行对比的内容)。

若您在使用工具前未指定图片,则 hb_verifier 工具会默认使用随机生成的tensor数据进行推理。

注意

  • 在进行runtime模型在板端的推理时,需要确认给定ip可以ping通且板端已经安装 hrt_tools ,若无则可以使用OE包中 ddk/package/board 下的 install.sh 脚本进行安装。

  • 在进行runtime模型在x86端的推理时,需要确保host端已经安装 hrt_tools,若无则可以使用OE包中 ddk/package/host/host_package/ 下的 install_host_package.sh 脚本进行安装。

在使用本工具前,以下内容需要请您注意:

注意

hb_verifier工具不支持除Dequantize节点外,有其他节点变化的bin模型与quanti.onnx进行对比。

如果在使用本工具前,您使用hb_model_modifier工具删除了bin模型的输出前的最后一个节点且该节点为非Dequantize节点,或者yaml文件中配置了 remove_node_type 参数, 从而删除了bin模型的输出前的最后一个节点且该节点为非Dequantize节点,那么hb_verifier工具将不再支持quanti.onnx和删除节点后的bin模型做对比。

如您想解决上述问题,需要避免出现上述删除bin模型的输出前的最后一个节点且该节点为非Dequantize节点的情况。

4.1.2.7.1. 使用方式

hb_verifier -m   ${quanti_model},${bin_model} \
            -b   ${board_ip} \
            -s   True / False \
            -i   ${input_img} \
            -c   ${digits}  \
            -r   True / False

4.1.2.7.2. 命令行参数

hb_verifier的命令行参数:
--model, -m

定点模型名称和bin模型名称,多模型之间用”,”进行区分。

--board-ip, -b

上板测试使用的arm board ip地址。

--run-sim, -s

设置是否使用X86环境的libdnn做bin模型推理,默认为False。

  • 当该参数设置为 True 时,工具将会使用x86环境的libdnn做bin模型推理。

  • 当该参数设置为 False 时,工具不会使用x86环境的libdnn做bin模型推理。

--input-img, -i

指定推理测试时使用的图片。

若不指定则会使用随机生成的tensor数据。

若指定图片为二进制形式的图片文件,其文件形式需要为后缀名为 .bin 形式。

多输入模型添加图片的方式有以下两种传参方式,多张图片之间用”,”分割:

  • input_name1:image1,input_name2:image2, …

  • image1,image2…

--compare_digits, -c

设置比较推理结果的数值精确度(即比较数值小数点后的位数),若不进行指定则工具会默认比较至小数点后五位。

--dump-all-nodes-results, -r

设置是否保存模型中各个算子的输出结果,并对算子输出名称相同的结果进行对比,默认为False。

  • 当该参数设置为 True 时,工具将会获取模型中所有节点的输出,并根据节点输出的名字做匹配,从而进行对比。

  • 当该参数设置为 False 时,工具将会只获取模型最终输出的结果,并进行对比。

注意

请您注意,目前基于性能考虑,暂不支持您在X86环境下使用dump功能。

4.1.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 选填)

5.bin模型在板端、X86环境下进行推理,并对两方推理结果做对比:

hb_verifier -m model.bin -b *.*.*.* -s True (-i 选填)

4.1.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, 17.53it/s]
INFO =============== Original output comparison results =================
INFO Comparison results of original output is model_infer_output_0
INFO mismatch result num: 13824
INFO total result num: 14976
INFO mismatch rate: 0.923
INFO relative mismatch ratio: 1.0
WARNING raw output 0 and raw output 0 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, 18.51it/s]
INFO =============== Original output comparison results =================
INFO Comparison results of original output is model_infer_output_0
INFO mismatch result num: 13824
INFO total result num: 14976
INFO mismatch rate: 0.923
INFO relative mismatch ratio: 1.0
WARNING raw output 0 and raw output 0 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, 48.73it/s]
INFO =============== Original output comparison results =================
INFO Comparison results of original output is model_infer_output_0
INFO raw output 0 and raw output 0 result Strict check PASSED
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 为相对误差比例,取误差比例最大的值进行展示。