请论坛大神帮忙分析分析,在使用官网自带的amct转换INT8量化模型的时候报错了!
错误信息:
root@ubuntu:/home/robot/Ascend/Code/samples-master/samples-master/python/level1_single_api/9_amct/amct_onnx/cmd# python3 src/eval_onnx.py
Traceback (most recent call last):
File "src/eval_onnx.py", line 12, in <module>
sess = rt.InferenceSession(model_path)
File "/usr/local/python3.7.5/lib/python3.7/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 206, in __init__
self._create_inference_session(providers, provider_options)
File "/usr/local/python3.7.5/lib/python3.7/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 226, in _create_inference_session
sess = C.InferenceSession(session_options, self._model_path, True, self._read_config_from_model)
onnxruntime.capi.onnxruntime_pybind11_state.InvalidGraph: [ONNXRuntimeError] : 10 : INVALID_GRAPH : Load model from /home/robot/Ascend/Code/samples-master/samples-master/python/level1_single_api/9_amct/amct_onnx/cmd/results/resnet101_v11_fake_quant_model.onnx failed:This is an invalid model. Error in Node:Conv_0.quant : No opset import for domain 'amct.customop'
转换后的模型见百度网盘链接: https://pan.baidu.com/s/1aZrWLWT_FbsYiL4MoRzGAw 提取码: yfij 复制这段内容后打开百度网盘手机App,操作更方便哦
转换的日志见附件
开发环境的系统环境都是按照官网推荐的版本(商用):
CANN:5.1.RC1
PYTHON:3.7.5
NUMPY:1.21.6
ONNX:1.8.0
ONNXRUNTIME:1.6.0
PROTOBUF:1.13.0

AMCT也使用官方匹配的版本安装:Ascend-cann-amct_5.1.RC1_linux-x86_64.tar.gz
自定义算子包按照https://www.hiascend.com/document/detail/zh/canncommercial/51RC1/devtools/auxiliarydevtool/atlasamctonnx_16_0015.html执行

量化模型转换过程按照官网https://www.hiascend.com/document/detail/zh/canncommercial/51RC1/devtools/auxiliarydevtool/atlasamctonnx_16_0020.html进行的.
测试代码:
import onnx
import numpy as np
import onnxruntime as rt
import cv2
import time
# model_path = '/home/robot/Ascend/Code/samples-master/samples-master/python/level1_single_api/9_amct/amct_onnx/cmd/model/resnet101_v11.onnx'
model_path = '/home/robot/Ascend/Code/samples-master/samples-master/python/level1_single_api/9_amct/amct_onnx/cmd/results/resnet101_v11_fake_quant_model.onnx'
onnx_model = onnx.load(model_path)
# onnx.checker.check_model(onnx_model)
sess = rt.InferenceSession(model_path)
# sess.set_providers(["TensorrtExecutionProvider"])
sess.set_providers(["CPUExecutionProvider"])
# sess.set_providers(["CUDAExecutionProvider"])
image = cv2.imread("/home/robot/Ascend/Code/samples-master/samples-master/python/level1_single_api/9_amct/amct_onnx/cmd/data/imagenet_calibration/images/african-grey-parrot-4424746__340.jpg")
image = cv2.resize(image, (224,224))
image = image.astype(np.float32)/255.0
#BGR->RGB
image = image.transpose(2,1,0)
image = np.array(image)[np.newaxis, :, :, :]
print(image.shape)
input_name_1 = sess.get_inputs()[0].name
output_name_1 = sess.get_outputs()[0].name
print("input_name_1:",input_name_1)
print("output_name_1:",output_name_1)
# print("output_name_2:",output_name_2)
i=0
while i<10:
start = time.time()
output = sess.run([output_name_1], {(input_name_1): image})
print(type(output))
print(len(output))
print(len(output[0]))
print(len(output[0][0]))
print("max output",max(output[0][0]))
print('spend time:',(time.time()-start)*1000.0,"ms")
i+=1
请论坛大神帮忙分析分析,在使用官网自带的amct转换INT8量化模型的时候报错了!
错误信息:
root@ubuntu:/home/robot/Ascend/Code/samples-master/samples-master/python/level1_single_api/9_amct/amct_onnx/cmd# python3 src/eval_onnx.py
Traceback (most recent call last):
File "src/eval_onnx.py", line 12, in <module>
sess = rt.InferenceSession(model_path)
File "/usr/local/python3.7.5/lib/python3.7/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 206, in __init__
self._create_inference_session(providers, provider_options)
File "/usr/local/python3.7.5/lib/python3.7/site-packages/onnxruntime/capi/onnxruntime_inference_collection.py", line 226, in _create_inference_session
sess = C.InferenceSession(session_options, self._model_path, True, self._read_config_from_model)
onnxruntime.capi.onnxruntime_pybind11_state.InvalidGraph: [ONNXRuntimeError] : 10 : INVALID_GRAPH : Load model from /home/robot/Ascend/Code/samples-master/samples-master/python/level1_single_api/9_amct/amct_onnx/cmd/results/resnet101_v11_fake_quant_model.onnx failed:This is an invalid model. Error in Node:Conv_0.quant : No opset import for domain 'amct.customop'
转换后的模型见百度网盘链接: https://pan.baidu.com/s/1aZrWLWT_FbsYiL4MoRzGAw 提取码: yfij 复制这段内容后打开百度网盘手机App,操作更方便哦
转换的日志见附件
开发环境的系统环境都是按照官网推荐的版本(商用):
CANN:5.1.RC1
PYTHON:3.7.5
NUMPY:1.21.6
ONNX:1.8.0
ONNXRUNTIME:1.6.0
PROTOBUF:1.13.0
AMCT也使用官方匹配的版本安装:Ascend-cann-amct_5.1.RC1_linux-x86_64.tar.gz
自定义算子包按照https://www.hiascend.com/document/detail/zh/canncommercial/51RC1/devtools/auxiliarydevtool/atlasamctonnx_16_0015.html执行
量化模型转换过程按照官网https://www.hiascend.com/document/detail/zh/canncommercial/51RC1/devtools/auxiliarydevtool/atlasamctonnx_16_0020.html进行的.
测试代码:
import onnx
import numpy as np
import onnxruntime as rt
import cv2
import time
# model_path = '/home/robot/Ascend/Code/samples-master/samples-master/python/level1_single_api/9_amct/amct_onnx/cmd/model/resnet101_v11.onnx'
model_path = '/home/robot/Ascend/Code/samples-master/samples-master/python/level1_single_api/9_amct/amct_onnx/cmd/results/resnet101_v11_fake_quant_model.onnx'
onnx_model = onnx.load(model_path)
# onnx.checker.check_model(onnx_model)
sess = rt.InferenceSession(model_path)
# sess.set_providers(["TensorrtExecutionProvider"])
sess.set_providers(["CPUExecutionProvider"])
# sess.set_providers(["CUDAExecutionProvider"])
image = cv2.imread("/home/robot/Ascend/Code/samples-master/samples-master/python/level1_single_api/9_amct/amct_onnx/cmd/data/imagenet_calibration/images/african-grey-parrot-4424746__340.jpg")
image = cv2.resize(image, (224,224))
image = image.astype(np.float32)/255.0
#BGR->RGB
image = image.transpose(2,1,0)
image = np.array(image)[np.newaxis, :, :, :]
print(image.shape)
input_name_1 = sess.get_inputs()[0].name
output_name_1 = sess.get_outputs()[0].name
print("input_name_1:",input_name_1)
print("output_name_1:",output_name_1)
# print("output_name_2:",output_name_2)
i=0
while i<10:
start = time.time()
output = sess.run([output_name_1], {(input_name_1): image})
print(type(output))
print(len(output))
print(len(output[0]))
print(len(output[0][0]))
print("max output",max(output[0][0]))
print('spend time:',(time.time()-start)*1000.0,"ms")
i+=1