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