模型验证

在实际工程中,由于并非所有浮点模型均能够转为量化模型,因此在转换之前需要进行一次检查,这个check过程,会走一遍模型转换的过程,其运行的基本流程如下图所示。 但是对于比较耗时的步骤,进行了简化处理。该命令在完成模型的检查后,会输出检查结果和OP在设备上的部署情况。

model_checking

使用方法

注意

请先使用 HBRuntime 对您的浮点onnx模型进行推理,确保模型合法,再参考下方方法使用hb_compile对模型是否可转换为量化模型进行验证。

使用hb_compile验证模型时,参考指令如下:

hb_compile --march ${march} \ --proto ${caffe_proto} \ --model ${caffe_model/onnx_model} \ --input-shape ${input_node_name} ${input_shape}

如您的模型为多输入模型,可参考如下指令:

hb_compile --march ${march} \ --proto ${caffe_proto} \ --model ${caffe_model/onnx_model} \ --input-shape input.0 1x1x224x224 --input-shape input.1 1x1x224x224 --input-shape input.2 1x1x224x224

命令行参数

参数名称参数说明
-h, --help显示帮助信息并退出。
--marchBPU的微架构。使用S100处理器需设置为nash-e,使用S100P处理器需设置为nash-m
-m, --modelCaffe或ONNX浮点模型文件。
  • Caffe模型:取值为Caffe模型的caffemodel文件名称。
  • ONNX模型:取值为ONNX模型文件名称。
--proto用于指定Caffe模型的prototxt文件。
-i, --input-shape可选参数,输入模型的输入节点以及该节点的输入的shape,其shape以x分隔。
取值为{input_name} {NxHxWxC/NxCxHxW}input_name与shape之间以空格分隔。 例如模型输入节点名称为data,输入shape为[1,3,224,224],此时应设置为data 1x3x224x224。 如果此处配置shape与模型内shape信息不一致,会以此处配置为准。
注意,一个--input-shape只接受一个name和shape组合,如果您的模型有多个输入节点,在命令中多次配置--input-shape参数即可。
注解

如您在模型验证过程中发现 The converted model node information 提示结果和在模型转换过程中得到的 The converted model node information 提示结果不一致,可能是因为在做模型验证的过程中,实际上是有一个默认的yaml配置的,而如果您在进行转换前进行了yaml的配置,一些参数的不同可能会导致此种情况的发生,可能会导致此种情况发生的yaml配置参数包括:mean_valuescale_valuestd_valuequant_config