最近更新: 2022-07
开发板:地平线 旭日 X3 PI
① 启动官方docker
#在horizon_xj3_open_explorer_v2.2.3_20220617主目录下使用脚本进入docker
sudo sh run_docker.sh ./data
#启动后主目录挂载到docker
② 进入detection目录
#首线进入到detection的案例下
cd ddk/samples/ai_toolchain/horizon_model_convert_sample/04_detection/
③ copy案例
本文采样onnx转换,这里copy下yolov5的案例,比较接近;caffe可以选择yolov2案例copy。
cp -rf ./03_yolov5s ./08_nanodet
④ 模型放入指定目录
#进入模型存放目录
cd ddk/samples/ai_toolchain/model_zoo/mapper/detection/
# 创建文件夹
mkdir nanodet
#放入模型
cp XXXX.onnx ./
⑤ 修改转换脚本
⑥ 配置yaml中转换参数(⭐重要参数)
- model_parameters
- onnx_model (⭐) —— 模型路径需要修改
- output_model_file_prefix —— 输出模型名称
- input_parameters
- input_name(⭐) —— 单输入模型可不填,多输入需要用“,”分隔。
- input_type_train —— 训练时输入的数据格式,常规是’rgb’或者’bgr’格式。
- input_shape(⭐) —— 可用Netron查看,例: input_shape:‘1x3x224x224’,可不填。
- input_layout_train —— 根据input_shape填写,常规:‘NHWC’/‘NCHW’
- norm_type —— 预处理策略。
- mean_value —— 预处理方法的图像减去的均值, 如果是通道均值,value之间必须用空格分隔,根据自己的数据计算得出。
- scale_value —— 预处理方法的图像缩放比例,如果是通道缩放比例,value之间必须用空格分隔,根据自己的数据计算得出。
- calibration_parameters
- compile_mode —— 编译策略,一般默认速度优先即可。
- core_num(⭐) —— 模型指定BPU个数,默认为1;常规开发板为双核,追求速度可填2。
- optimize_level (⭐)—— 优化等级,默认速度优先 ‘03’。
⑦ 执行转换
需要先修改 preprocess.py 下 calibration_transformers()函数中的预处理尺寸
#这里模型输入为320*320
transformers = [
PadResizeTransformer(target_size=(320, 320)),
HWC2CHWTransformer(),
BGR2RGBTransformer(data_format="CHW"), ]
执行 02_preprocess.sh
.
⑦ 板上开发
结果根据官方工具显示:
模型 | 转换差异 | 算子支持情况 |
---|---|---|
nanodet-plus | 尚可 | 大部分可在BPU上运行 |
yolox-nano | 差异大 | 大部分可在BPU上运行 |
fastestdet | 尚可 | 部分在CPU上运行 |
https://developer.horizon.ai/api/v1/fileData/doc/cn/source_doc/x3_ddk_docs.html
https://developer.horizon.ai/api/v1/fileData/doc/ddk_doc/navigation/ai_toolchain/docs_cn/horizon_ai_toolchain_user_guide/index.html
https://developer.horizon.ai/api/v1/fileData/doc/ddk_doc/navigation/ai_toolchain/docs_cn/hb_mapper_sample_doc/index.html
https://developer.horizon.ai/api/v1/fileData/doc/ddk_doc/navigation/ai_toolchain/docs_cn/hb_mapper_tools_guide/model_conversion_details.html#