Rspress

# #模型验证

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

## #使用方法

注意

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

`Usage: hb_compile [OPTIONS] A tool that maps floating-point models to quantized models and provides some additional validation features Options: -h, --help Show this message and exit. -m, --model PATH Model to be compiled or modified --proto PATH Caffe prototxt file --march [nash-e|nash-m|nash-p] BPU's micro architectures -i, --input-shape <TEXT TEXT>... Specify the model input shape, e.g. --input- shape input1 1x3x224x224`

## #命令行参数

参数名称 | 参数说明
`-h, --help` | 显示帮助信息并退出。
`--march` | BPU的微架构。 使用S100处理器需设置为`nash-e`。 使用S100P处理器需设置为`nash-m`。 使用S600处理器需设置为`nash-p`。
`-m, --model` | Caffe或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_value` 、 `scale_value` 、 `std_value` 和 `quant_config`。

## #使用示例

### #单模型验证

使用hb_compile对单一输入模型进行验证时，参考指令如下：

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

### #多输入模型验证

使用hb_compile对多输入模型进行验证时，参考指令如下：

`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`
页面目录