onnx 檔案來源:onnx-yolov3
參考資料:
在 Windows 10 上,將 yolov3-tiny.onnx
轉換為 Kneron AI dongle (耐能AI加速棒)可用的格式。
使用的耐能 AI 加速棒版本為 KL520。
使用的 Kneron Toolchain Docker Image 版本為 v0.14.1,如下圖:
可參考:Kneron Linux Toolchain Manual
已備份到:archive.today
可參考:Install Docker Desktop on Windows
執行指令:
docker pull kneron/toolchain:latest
取得最新的 toolchain 映像檔。
參考指令:
docker run --rm -it -v /mnt/docker:/docker_mount kneron/toolchain:latest
記得把 /mnt/docker 換成 yolov3-tiny.onnx
模型檔案所在的資料夾,以方便轉檔時直接取用,建議額外創建一個資料夾,放置 yolov3-tiny.onnx
模型檔案。
在 win 10 ,掛載資料夾時,路徑要做一些修改。
例如:yolov3-tiny.onnx
模型檔案所在的資料夾為C:\Users\p2330\Desktop\yolov3_onnx
要改成 /c/Users/p2330/Desktop/yolov3_onnx
。C:
改成 /c
, \
改成 /
。
修改指令如下:
docker run --rm -it -v /c/Users/p2330/Desktop/yolov3_onnx:/docker_mount kneron/toolchain:latest
執行結果如下:
如下圖,切換到 /docker_mount 目錄,可以看到掛載的資料夾內有 yolov3-tiny.onnx
模型檔案:
可參考:6 ONNX to ONNX (ONNX optimization)
複製 yolov3-tiny.onnx
到 data1 資料夾。
執行指令:
python /workspace/libs/ONNX_Convertor/optimizer_scripts/onnx2onnx.py yolov3-tiny.onnx -o yolov3-tiny_opt.onnx --add-bn -t
會報錯:RuntimeError: Only support opset 11, but got 9
解決方式:因為目前支援的 onnx Opset version 為 11,但 yolov3-tiny.onnx
的 Opset version 為 9,所以需要更新 ONNX version。
可參考:8 ONNX Updater
執行指令:
python /workspace/libs/ONNX_Convertor/optimizer_scripts/onnx1_4to1_6.py yolov3-tiny.onnx yolov3-tiny_up.onnx
得到 yolov3-tiny_up.onnx
更新過的 onnx 檔案。
執行指令:
python /workspace/libs/ONNX_Convertor/optimizer_scripts/onnx2onnx.py yolov3-tiny_up.onnx -o yolov3-tiny_opt.onnx --add-bn -t
可以得到 yolov3-tiny_opt.onnx
優化過的 onnx 檔案。
可參考:3. Toolchain Scripts Usage 的 3.2 跟 3.6 小節
input_params.json
檔案input_params.json
設定如下:
{
"model_info": {
"input_onnx_file": "/data1/yolov3-tiny_opt.onnx",
"model_inputs": [
{
"model_input_name": "input",
"input_image_folder": "/data1/imgs"
}
]
},
"preprocess": {
"img_preprocess_method": "yolo",
"img_channel": "RGB",
"radix": 7,
"keep_aspect_ratio": true,
"pad_mode": 1,
"p_crop": {
"crop_x": 0,
"crop_y": 0,
"crop_w": 0,
"crop_h": 0
}
}
}
imgs 的圖片可以到 darknet/data/ 下載 .jpg 圖檔,作為轉檔時的圖片輸入。
記得把 imgs 放在 /data1 底下。
batch_input_params.json
檔案batch_input_params.json
設定如下:
{
"encryption": {
"whether_encryption": false,
"encryption mode": 1,
"encryption_key": "0x12345678",
"key_file": "",
"encryption_efuse_key": "0x12345678"
},
"models": [
{
"id": 123,
"version": "1",
"path": "/data1/yolov3-tiny_opt.onnx",
"input_params": "/data1/input_params.json"
}
]
}
models 裡面的 id 跟 version 可以依照使用情況自由調整。
做完以上操作後,目錄結構如下圖:
在 /data1 執行指令:
python /workspace/scripts/fpAnalyserBatchCompile_520.py -t 8
會產生 batch_compile 跟 fpAnalyser 資料夾。
轉換後的模型檔案為 batch_compile 資料夾內的 models_520.nef
。
可以將 models_520.nef
複製出來在 Kneron Host Lib 官方範例上使用。