yolov5s.pt 部署流程經驗分享

edited December 2024 in AI Model migration

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 :


Comments

The discussion has been closed due to inactivity. To continue with the topic, please feel free to post a new discussion.