yolov5s.pt 部署流程經驗分享
0. 前置說明
由於目前只支援 LeakyReLU (2024/11/29),所以 yolov5 的模型得用 v2.0 (含)以下的。
建議先閱讀過以下兩篇 :
https://doc.kneron.com/docs/#toolchain/manual_1_overview/
https://doc.kneron.com/docs/#toolchain/appendix/yolo_example/
1. pt 轉 onnx
參見此文件 :
https://doc.kneron.com/docs/#model_training/object_detection_yolov5/
按照其中「Exporting ONNX model ...」小節,進到 Docker 的 /workspace/ai_training/detection/yolov5/yolov5/ 中,啟動虛擬環境 conda activate base
,然後使用 ../exporting/yolov5_export.py
(下方「Converting onnx by toolchain ...」小節,我沒有使用😂)
2. onnx 轉 nef
進到 Docker 的 /data1/ 中,一樣啟動虛擬環境 conda activate base
,然後執行以下程式 :
import ktc, os, onnx from PIL import Image import numpy as np exported_m = onnx.load('/data1/models/yolov5s-v2.onnx') # 取得onnx的ModelProto格式物件 result_m = ktc.onnx_optimizer.torch_exported_onnx_flow(exported_m) # 一定要有這行 m = ktc.onnx_optimizer.onnx2onnx_flow(result_m) # onnx.save(m, '/data1/models/your_model.opt.onnx') # ⬐ 關於ktc.ModelConfig(…)的參數:model ID可隨意輸入一個int,但儘量用32769以上,因為32768以內的models是Kneron內部ID;version可隨意輸入。 # 可參考Kneron Document Center網站Toolchain 3.2節函式說明 km = ktc.ModelConfig(52001, "0001", "630", onnx_model=m) eval_result = km.evaluate() img_list = [] # TODO: 這邊可以用更多的資料集照片 for (dir_path, _, file_names) in os.walk("/data1/test_images"): for f_n in file_names: fullpath = os.path.join(dir_path, f_n) print("processing image: " + fullpath) # 前處理每張圖片 image = Image.open(fullpath) image = image.convert("RGB") image = Image.fromarray(np.array(image)[...,::-1]) img_data = np.array(image.resize((640, 640), Image.BILINEAR)) / 255 img_data = img_data.transpose(2, 0 ,1)[None] print(fullpath) img_list.append(img_data) # ⬐ Fix point analysis. The generated BIE model will be in /data1/kneron_flow/ bie_model_path = km.analysis({"images": img_list}) print("\nFixed-point analysis done. Saved bie model to '" + str(bie_model_path) + "'") # compile nef_model_path = ktc.compile([km]) print("\nCompile done. Saved Nef file to '" + str(nef_model_path) + "'")
程式碼參考出處 https://www.kneron.com/forum/discussion/comment/1647/#Comment_1647
完整說明可參考此PDF :
The discussion has been closed due to inactivity. To continue with the topic, please feel free to post a new discussion.
Comments
您好,
不好意思這麼晚回覆,感謝您的分享!
另外,我們的toolchain版本有更新,可以支持Opset 18: Kneronnxopt - Document Center
也可以參考我們支持的operators/nodes: Hardware Supported Operators - Document Center