如何测试mindir模型的精度
【摘要】 benchmark计算mindir模型精度
1、前言
本文主要介绍如何测试mindir模型的精度
2、原理说明
在相同的输入条件下,对比onnx和mindir模型的输出结果,计算出误差
3、模型转换
这里以yolox模型为例,说明对比过程
开源的yolox onnx模型:https://github.com/Megvii-BaseDetection/YOLOX/tree/main/demo/ONNXRuntime
因为onnx模型的输入是固定shape的,所以在配置好mindspore-lite的环境变量后,可以直接使用如下命令转换
converter_lite --modelFile=./yolox_x.onnx --outputFile=./yolox_x --inputShape="images:1,3,640,640" --fmk=ONNX --saveType=MINDIR --optimize=ascend_oriented
转换成功后就得到了mindir模型
4、保存onnx模型的输入和输出
这一步需要先使用onnx进行一次推理,样例代码如下
import onnxruntime
import numpy as np
import traceback
def save_output(outputs_name, outputs, output_path):
"""
outputs_name:输出名称列表
outputs:输出数据列表
output_path:输出文件路径
"""
print('outputs_name ', outputs_name)
out_shapes = [out.shape for out in outputs]
outputs = [out.flatten() for out in outputs]
try:
with open(output_path, 'w') as f:
for idx, name in enumerate(outputs_name):
shape_str = [str(dim) for dim in out_shapes[idx]]
shape_str = ' '.join(shape_str)
print(f'output {idx} is {outputs[idx].shape}')
f.write(f'{name} {len(out_shapes[idx])} {shape_str}\n')
for i in range(len(outputs[idx])):
f.write(str(outputs[idx][i]) + ' ')
f.write('\n')
except Exception:
traceback.print_exc()
def run_onnx_infer():
model_path = "./yolox_x.onnx"
onnx_session = onnxruntime.InferenceSession(model_path)
images = np.random.random(size=(1,3,640,640)).astype(np.float32)
# 将输入numpy数据保存为bin文件
images.tofile("./images.bin")
data_inputs = {onnx_session.get_inputs()[0].name:images}
outputs_data = onnx_session.run(None, data_inputs)
# 将输出保存到txt文件中
save_output(["output"], outputs_data, "./outputs.txt")
if __name__ == "__main__":
run_onnx_infer()
运行代码之后,会在当前目录下生成images.bin和outputs.txt文件
5、测试mindir模型精度
使用上一步生成的输入和输出文件,执行如下命令
benchmark --modelFile=./yolox_x.mindir --device=Ascend --inputShapes="1,3,640,640" --inDataFile=./images.bin --benchmarkDataFile=outputs.txt
执行结束后,会有如下误差结果返回
这里的结果是绝对值误差,数值越小代表误差越小,精度越高
说明:如果模型有多个输入,则会生成多个bin文件,benchmark命令中的--inDataFile后按照输入顺序放置保存的bin文件,以英文逗号隔开即可
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)