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 官方范例上使用。


<<:  D10 doc系统、首页

>>:  [机派X] Day4 - Bash 指令原来如此容易

虹语岚访仲夏夜-3(专业的小四篇)

『不是不是,你啥意思啊,不知道细节,找我参加什麽啊? 』 「我主管说,如果找你的话,我明年有机会加薪...

【Day 6】make x Makefile x 任贤齐的救星

tags: 铁人赛 Makefile make 概述 碎念时间 昨天我们使用一条长长的指令,把网页跑...

LeetCode 双刀流:53. Maximum Subarray

53. Maximum Subarray 接下来我们挑 53. Maximum Subarray ...

威胁建模(Threat modeling)

“从概念上讲,大多数人在日常生活中都采用了某种形式的威胁建模,甚至没有意识到这一点。” (维基百科)...

Day 19 UItableView的练习 (3/3)

接下来我们可以对我们每笔资料向左滑动後,让他可以被删除 func tableView(_ table...