Microsoft에서 개발된 모든 딥러닝 프레임워크에들에서 교환 가능하도록 개발된 모델 포멧이다. onnxruntime을 이용해서 직접 inference가 가능하다. pytorch 공식홈페이지 기준 onnxruntime을 이용한 추론 Shape Inference 중간 Tensor들의 shape을 알기위한 shae inference의 기능 기본 ONNX에 중간 Intermidiate Node를 삽입해서 중간결과값이 저장되도록 한다. 기존 노드를 변경함 수정된 test를 실행하면 결과값을 두 개 얻을 수 있고, 그 중 하나가 중간 결과 값이 저장된 것이다.ONNX
ONNX 모델 로딩 및 검증
import onnx
from onnx import numpy_helper
from onnx import helper
# Load the ONNX model
model = onnx.load("onnx/stc_yolo2.onnx")
# Print a human readable representation of the graph
print(onnx.helper.printable_graph(model.graph))
# Check the model
onnx.checker.check_model(onnx_model)
print('The model is checked!')
ONNX 모델 실행
onnxruntime 이용
import numpy as np
import onnxruntime as ort
img = np.load("./assets/image.npz").reshape([1, 784])
sess_ort = ort.InferenceSession("./output/mnist1.onnx")
res = sess_ort.run(output_names=[output_tensor.name], input_feed={input_tensor.name: img})
print("the expected result is \"7\"")
print("the digit is classified as \"%s\" in ONNXRruntime"%np.argmax(res))
Torch로 저장 TensorFlow로 실행
Shape inference
Shape Inference API
아래 처럼 실행 하면 실제 shape모양을 알 수 있다.from onnx import helper, shape_inference
model = onnx.load("reshape.onnx")
onnx.checker.check_model(inferred_model)
inferred_model = shape_inference.infer_shapes(model)
ONNX 모델의 중간 결과값 추출
intermediate_layer_value_info = onnx.helper.ValueInfoProto()
intermediate_layer_value_info.name = "_defaultpreprocess0_broadcast_minus0"
model.graph.output.append(intermediate_layer_value_info)
onnx.save(model, "./test.onnx")
model = onnx.load(onnx_path)
# Load the ONNX model
ort_session = ort.InferenceSession(onnx_path)
print("onnx output\n")
input_name = ort_session.get_inputs()[0].name
label_name_1 = ort_session.get_outputs()[0].name
label_name_2 = ort_session.get_outputs()[1].name
print(label_name_1, label_name_2)
outputs = ort_session.run(None, {onnx_input_name: intput_txt.astype(np.float32)})
print(outputs[0])
print(outputs[1])
참고 자료
'AI > Embedded Deep learning' 카테고리의 다른 글
AI 컴파일러 NXP elQ (Glow 컴파일러 파생) (2) | 2020.09.13 |
---|---|
MLPerf (0) | 2020.07.01 |
Glow 설치법 (1) | 2019.11.19 |
Coral Dev Board (Google Edge TPU) 설정 및 사용후기 (2) | 2019.08.13 |
Glow: graph lowering compiler for hardware accelerators (0) | 2019.02.07 |