模型部署 | 使用ONNXRuntime部署DAMO-YOLO目標檢測
01
ONNXRuntime是微軟推出的一款推理框架,用戶可以非常便利的用其運行一個onnx模型。ONNXRuntime支持多種運行后端包括CPU,GPU,TensorRT,DML等。可以說ONNXRuntime是對ONNX模型最原生的支持。
雖然大家用ONNX時更多的是作為一個中間表示,從pytorch轉到onnx后直接喂到TensorRT或MNN等各種后端框架了= =,但這并不能否認ONNXRuntime是一款非常優(yōu)秀的推理框架(微軟出品,必屬精品)。而且由于其自身只包含推理功能(1.2版本,最新的ONNXRuntime甚至已經(jīng)可以訓練,可見微軟在其上面的野心還是有的),對比主流框架源碼看起來沒有那么復雜難懂,通過閱讀其源碼可以非常清晰的理解深度學習框架的一些核心功能原理(op注冊,內(nèi)存管理,運行邏輯等)。接下來的一系列文章嘗試對ONNXRuntime的源碼進行閱讀學習,對理解深度學習框架的工作原理還是很有幫助的。
下面是使用ONNXRuntime的一個簡單例子:
import numpy as npimport onnximport onnxruntime as ortimage = cv2.imread("image.jpg")image = np.expand_dims(image, axis=0)onnx_model = onnx.load_model("resnet18.onnx")sess = ort.InferenceSession(onnx_model.SerializeToString())sess.set_providers(['CPUExecutionProvider'])input_name = sess.get_inputs()[0].nameoutput_name = sess.get_outputs()[0].nameoutput = sess.run([output_name], {input_name : image_data})prob = np.squeeze(output[0])print("predicting label:", np.argmax(prob))
總體來看,整個ONNXRuntime的運行可以分為三個階段,Session構造,模型加載與初始化和運行。和其他所有主流框架相同,ONNXRuntime最常用的語言是python,而實際負責執(zhí)行框架運行的則是C++。
——轉自知乎-黑羽
現(xiàn)在我們基于“hpcboka”貢獻的onnxweight,我們一起來學習實踐部署的能力。
使用ONNXRuntime部署DAMO-YOLO目標檢測,包含C++和Python兩個版本的程序。起初,我想使用opencv做部署的,但是opencv的dnn模塊讀取onnx文件出錯, 無賴只能使用onnxruntime做部署了。

本套程序一共提供了27個onnx模型, onnx文件需要從百度云盤下載。
鏈接:https://pan.baidu.com/s/10-5ke_fs2omqUMSgKTJV0Q 提取碼:w9kp
其中在百度云盤里一共有30個onnx模型文件,但是逐個讀取onnx文件做推理時, 發(fā)現(xiàn)有3個onnx文件在onnxruntime讀取時出錯了,在程序里的choices參數(shù)里聲明了 27個模型文件的名稱。

