iT邦幫忙

2021 iThome 鐵人賽

DAY 15
0
自我挑戰組

實驗室助理的技術文章自我整理系列 第 15

Kneron - Kneron Toolchain 轉檔操作參考筆記

Kneron - Kneron Toolchain 轉檔操作參考筆記

參考資料

onnx 檔案來源:onnx-yolov3

參考資料:

簡介

在 Windows 10 上,將 yolov3-tiny.onnx 轉換為 Kneron AI dongle (耐能AI加速棒)可用的格式。

使用的耐能 AI 加速棒版本為 KL520。

使用的 Kneron Toolchain Docker Image 版本為 v0.14.1,如下圖:

操作流程條列

  1. 安裝 docker
  2. 取得最新的 toolchain 映像檔
  3. 啟動 toolchain 容器 Container
  4. 做 ONNX to ONNX (ONNX optimization) 轉換(優化 onnx 檔案)
  5. 執行 FpAnalyser and Batch-Compile 取得轉換後的模型檔案

操作步驟

可參考:Kneron Linux Toolchain Manual
已備份到:archive.today

安裝 docker

可參考:Install Docker Desktop on Windows

取得最新的 toolchain 映像檔

執行指令:

docker pull kneron/toolchain:latest

取得最新的 toolchain 映像檔。

啟動 toolchain 容器 Container

參考指令:

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 模型檔案:

做 ONNX to ONNX (ONNX optimization) 轉換

可參考: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 檔案。

執行 FpAnalyser and Batch-Compile

可參考: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 官方範例上使用。


上一篇
Kneron - 在Raspberry Pi 4(Raspbian Buster)上安裝 OpenCV 參考筆記
下一篇
Python - Python3 虛擬環境參考筆記
系列文
實驗室助理的技術文章自我整理30

尚未有邦友留言

立即登入留言