4.1.3.3. 其他算法模型示例

其他算法模型示例是指 05_miscellaneous/06_custom_op/ 文件夹中的示例。

其中:

  • 05_miscellaneous/ 是杂项示例,用于指导使用XJ3工具链提供的一些其他内容,比如:如何使用地平线模型转换工具使RGB数据训练的模型能在Runtime运行时接受YUV数据。

  • 06_custom_op/ 为用户自定义OP示例,帮助用户了解如何在模型含有工具链不支持的算子的情况下添加自定义算子的功能。

各示例用法、目录结构及内容请参照以下内容。

4.1.3.3.1. 如何使用

如上所示,在各子文件夹下,每个使用示例都按照顺序封装成了shell脚本,按照shell脚本顺序执行, 即可了解相应的工具的使用、API的功能以及用法等。

4.1.3.3.2. 杂项示例

4.1.3.3.2.1. lenet_gray

4.1.3.3.2.1.1. 目录结构

01_lenet_gray/
.
└── mapper
    ├── 00_init.sh                  // 获取当前示例所需的模型和校准数据集
    ├── 01_check.sh                 // 对模型进行预验证
    ├── 02_get_mnist.sh             // 获取校准数据
    ├── 03_build.sh                 // 转换debug模型
    ├── 04_inference.sh             // 使用onnx runtime进行推理
    ├── README.md
    ├── lenet_gray_config.yaml
    ├── postprocess.py
    ├── preprocess.py
    └── process_mnist.py

4.1.3.3.2.1.2. 示例内容

该示例为灰度图模型的模型转换、模拟器运行及上板运行示例。

4.1.3.3.2.2. resnet50_feature

4.1.3.3.2.2.1. 目录结构

02_resnet50_feature
.
└── mapper
    ├── 00_init.sh                  // 获取当前示例所需的模型和校准数据集
    ├── 01_check.sh                 // 对模型进行预验证
    ├── 02_build.sh                 // 转换debug模型
    ├── 03_inference.sh             // 使用onnx runtime进行推理
    ├── inference.py
    ├── README.md
    └── resnet50_feature_config.yaml

4.1.3.3.2.2.2. 示例内容

该示例为resnet50_feature的模型转换, 模拟器运行及上板运行示例。

4.1.3.3.2.3. vector-diff

4.1.3.3.2.3.1. 目录结构

03_vector_diff
.
└── mobilenet_mapper
    ├── 01_inference_rt.sh
    ├── 02_vec_diff.sh                  // 使用vec_diff工具进行输出数据分析
    ├── ILSVRC2012_val_00000001.bin
    └── README.md

4.1.3.3.2.3.2. 输出内容

vec_diff -o 指定的CSV文件,列表(表项为:左侧文件名,右侧文件名,余弦相似度、相对欧拉距、最大绝对误差、方差),参考如下:

Left Files

Right Files

Cosine Similarity

Relative Euclidean Distance

Max Absolute Error

Mean Square Error

Layerxxx-quanti-input.txt

Layerxxx-float-input.txt

xxx

xxx

xxx

xxx

Layerxxx-quanti-param.txt

Layerxxx-float-param.txt

xxx

xxx

xxx

xxx

4.1.3.3.2.4. multi_input_example

4.1.3.3.2.4.1. 目录结构

04_multi_input_example
.
└── mapper
    ├── 00_init.sh                  // 获取当前示例所需的模型和校准数据集
    ├── 01_check.sh                 // 对模型进行预验证
    ├── 02_preprocess.sh            // 对数据进行预处理
    ├── 03_build.sh                 // 转换debug模型
    ├── 04_inference.sh             // 使用onnx runtime进行推理
    ├── README.md
    ├── data_preprocess.py
    ├── data_transformer.py
    ├── inference.py
    └── mobilenet_multi_config.yaml

4.1.3.3.2.4.2. 示例内容

该示例为多输入模型的模型转换, 模拟器运行及上板运行示例。

4.1.3.3.2.5. model_verifier

4.1.3.3.2.5.1. 目录结构

07_model_verifier
.
├── 00_init.sh                      // 获取当前示例所需的模型和校准数据集
├── 01_preprocess.sh                // 对数据进行预处理
├── 02_build.sh                     // 转换debug模型
├── 03_model_verify.sh              // 执行模型验证
├── calibration_data_feature
├── data_preprocess.py
├── data_transformer.py
├── README.md
├── mobilenet_config_bgr.yaml
├── mobilenet_config_yuv444.yaml
└── resnet50_featuremap_config.yaml

4.1.3.3.2.5.2. 示例内容

该示例为模型验证工具的验证示例。

4.1.3.3.2.6. model_info

4.1.3.3.2.6.1. 目录结构

08_model_info
.
├── 00_init.sh                      // 获取当前示例所需的模型和校准数据集
├── 01_preprocess.sh                // 对数据进行预处理
├── 02_build.sh                     // 转换debug模型
├── 03_model_info_check.sh          // 执行模型信息检测并打印
├── README.md
├── mobilenet_config.yaml
└── preprocess.py

4.1.3.3.2.6.2. 示例内容

该示例为模型信息输出工具的验证示例。

4.1.3.3.2.7. mobilenet_bgr

4.1.3.3.2.7.1. 目录结构

09_mobilenet_bgr
.
└── mapper
    ├── 00_init.sh                // 获取当前示例所需的模型和校准数据集
    ├── 01_check.sh               // 对数据模型做校验
    ├── 02_preprocess.sh          // 对数据进行预处理
    ├── 03_build.sh               // 模型转换
    ├── 04_inference.sh           // 单张图片进行推理
    ├── README.md
    ├── mobilenet_config.yaml
    ├── postprocess.py
    └── preprocess.py

4.1.3.3.2.7.2. 示例内容

该示例为MobileNetv1模型, input_type_rtbgr 的示例。

4.1.3.3.2.8. mobilenet_yuv444

4.1.3.3.2.8.1. 目录结构

10_mobilenet_yuv444
.
└── mapper
    ├── 00_init.sh                // 获取当前示例所需的模型和校准数据集
    ├── 01_check.sh               // 对数据模型做校验
    ├── 02_preprocess.sh          // 对数据进行预处理
    ├── 03_build.sh               // 模型转换
    ├── 04_inference.sh           // 单张图片进行推理
    ├── README.md
    ├── mobilenet_config.yaml
    ├── postprocess.py
    └── preprocess.py

4.1.3.3.2.8.2. 示例内容

该示例为MobileNetv1模型, input_type_rtyuv444 的示例。

4.1.3.3.3. 用户自定义OP示例

4.1.3.3.3.1. 目录结构

06_custom_op
.
└── mapper
    ├── 00_init.sh
    ├── 03_build.sh
    ├── 04_inference.sh
    ├── README.md
    ├── create_onnx.py
    ├── custom_op_config.yaml
    ├── custom_op_inference.py
    └── horizon_ops.py

4.1.3.3.3.2. 示例介绍

开发者使用地平线工具链将各开源框架训练得到的浮点模型转换为定点模型时, 如果浮点模型中包含了工具链不支持的算子(以下简称为OP),则会转换失败。 在此情况下,开发者可以使用工具链的自定义OP功能自行添加不支持的OP,完成模型转换。

mapper文件夹中包含了执行本示例所需要的脚本和配置文件。