产品文档9.3. 基础示例包使用说明

9.3. 基础示例包使用说明

2026-02-02 17:19:26

9.3.1. 前言

基础示例包主要提供了三个方面的示例:

  1. dnn API教学示例。

  2. 自定义算子(custom OP)等特殊功能示例。

  3. 非NV12输入模型的杂项示例。

开发者可以体验并基于这些示例进行应用开发,降低开发门槛。

 

9.3.2. 交付物说明

​交付物主要包括以下内容:

名称

内容

horizon_runtime_sample

包含示例源代码和运行脚本。

9.3.2.1. 示例代码包

注解

上板模型需要先在OE包的 ddk/samples/ai_toolchain/model_zoo/runtime/horizon_runtime_sample 目录下执行 resolve_runtime_sample.sh 脚本进行获取。

​示例包结构如下所示:

  • code:该目录内是示例的源码。

  • code/00_quick_start:快速入门示例,基于 dnn API,用mobilenetv1进行单张图片模型推理和结果解析。

  • code/01_api_tutorialdnn API使用教学代码,包括 mem, model , roi_infer 和 tensor 四部分。

  • code/02_advanced_samples:特殊功能示例,包括 custom_identity, multi_input, multi_model_batch 和 nv12_batch 功能。

  • code/03_misc:非NV12输入模型的杂项示例。

  • code/build_j5.sh:程序一键编译脚本。

  • code/build_x86.sh:x86仿真环境一键编译脚本。

  • code/deps_gcc9.3:示例代码所需要的三方依赖, 用户在开发自己代码程序的时候可以根据实际情况替换或者裁剪。

  • j5:示例运行脚本,预置了数据和相关模型。

 

9.3.3. 环境构建

9.3.3.1. 开发板准备

1.拿到开发板后,按照 系统镜像升级 中的说明,升级系统镜像到示例包推荐的系统镜像版本。

2.确保本地开发机和开发板可以远程连接。

9.3.3.2. 编译

编译需要的步骤如下:

1.当前环境安装好交叉编译工具gcc-ubuntu-9.3.0-2020.03-x86_64-aarch64-linux-gnu。

2.然后执行 horizon_runtime_sample/code 目录下的build_j5.sh脚本即可一键编译真机环境下的可执行程序,可执行程序和对应依赖会自动复制到 j5/script 目录下的 aarch64 目录下。

x86仿真环境下使用 horizon_runtime_sample/code 目录下的build_x86.sh脚本即可一键编译x86环境下的可执行程序,可执行 程序和对应依赖会自动复制到 j5/script_x86 目录下的 x86 目录下。

注解

需要注意build_j5.sh脚本里指定的交叉编译工具链的位置是 /opt 目录下,用户如果安装在其他位置,可以手动修改下build_j5.sh。

 

9.3.4. 示例使用

9.3.4.1. basic_samples示例

​示例脚本主要在 j5/script 和 j5/script_x86 目录下,编译程序后目录结构如下:

注解

  • horizon_runtime_sample 示例包的模型发布物需要在OE包的 ddk/samples/ai_toolchain/model_zoo/runtime/horizon_runtime_sample 目录下执行 resolve_runtime_sample.sh 脚本进行获取。

  • model 文件夹包含模型所在的路径,x86运行环境下 runtime 文件夹为软链接,链接路径指向 ../../../model_zoo/runtime/horizon_runtime_sample ,可直接在OE环境中运行;板端运行环境下需要将模型发布物放至 model 文件夹下。

9.3.4.1.1. quick_start¶

00_quick_start 目录下的快速开始示例:

  • run_mobilenetV1.sh:该脚本实现使用mobilenetv1读取单张图片进行推理的示例功能。 使用的时候,进入 00_quick_start 目录, 然后直接执行 sh run_mobilenetV1.sh 即可,如下代码块所示:

9.3.4.1.2. api_tutorial¶

​该示例是指 01_api_tutorial 目录内的示例,旨在引导用户使用嵌入式API。其目录包含以下脚本:

  • model.sh:该脚本主要实现读取模型信息的功能。 使用的时候,直接进入 01_api_tutorial 目录,然后直接执行 sh model.sh 即可,如下代码块所示:

  • roi_infer.sh:该脚本主要引导如何使用 hbDNNRoiInfer 这个API,示例代码实现的功能是将一张图片转为nv12数据,给定roi框进行infer。 使用的时候,直接进入 01_api_tutorial 目录,然后直接执行 sh roi_infer.sh 即可。

  • sys_mem.sh:该脚本主要引导如何使用 hbSysAllocMemhbSysFlushMem 和 hbSysFreeMem 这几个API。使用的时候,直接进入 01_api_tutorial 目录,执行 sh sys_mem.sh 即可。

  • tensor.sh:该脚本主要引导如何准备模型输入和输出的tensor、打印Tensor的属性和数据排布,以及使用quantizeAxis参数进行反量化。 使用的时候,直接进入 01_api_tutorial 目录,执行 sh tensor.sh 即可,如下代码块所示:

9.3.4.1.3. advanced_samples

​该示例是指 02_advanced_samples 目录内的示例,介绍了自定义算子特殊功能的使用。其目录包含以下脚本:

  • custom_arm_op_custom_identity.sh:该脚本主要实现自定义算子模型推理功能, 使用的时候,进入 02_advanced_samples 目录, 然后直接执行 sh custom_arm_op_custom_identity.sh 即可,如下代码块所示:

    模型的第一个输出数据保存至 output0.txt 文件。

  • run_multi_input.sh:该脚本主要实现多输入模型推理功能, 使用的时候,进入 02_advanced_samples 目录, 然后直接执行 sh run_multi_input.sh 即可,如下代码块所示:

  • run_multi_model_batch.sh:该脚本主要实现多个小模型批量推理功能, 使用的时候,进入 02_advanced_samples 目录, 然后直接执行 sh run_multi_model_batch.sh 即可,如下代码块所示:

  • run_nv12_batch.sh:该脚本主要实现batch模型推理功能,Infer1是分开设置输入张量每个batch的地址,Infer2是只设置一个地址,包含所有的batch, 使用的时候,进入 02_advanced_samples 目录, 然后直接执行 sh run_nv12_batch.sh 即可,如下代码块所示:

9.3.4.1.4. misc¶

​该示例是指 03_misc 目录内的示例,介绍了非nv12输入模型的使用。其目录包含以下脚本:

  • run_lenet.sh:该脚本主要实现Y数据输入的lenet模型推理功能, 使用的时候,进入 03_misc 目录, 然后直接执行 sh run_lenet.sh 即可,如下代码块所示:

  • run_resnet50_feature.sh:该脚本主要实现feature数据输入的resnet50模型推理功能。示例代码对feature数据做了quantize和padding以满足模型的输入条件,然后输入到模型进行infer。 使用的时候,进入 03_misc 目录, 然后直接执行 sh run_resnet50_feature.sh 即可,如下代码块所示:

 

9.3.5. 辅助工具

9.3.5.1. 日志

日志主要包括 示例日志 和 dnn日志 两部分。 其中示例日志是指交付包示例代码中所应用的日志; dnn日志是指嵌入式dnn库中的日志。 用户根据不同的需求可以设置不同的日志。

9.3.5.1.1. 示例日志¶

示例日志主要采用glog中的vlog,basic_samples所涉及到的示例中,日志内容全部输出。

9.3.5.1.2. dnn 日志

关于 dnn 日志的配置,请阅读BPU SDK API手册章节中的 配置信息 一节内容。

文档内容对你是否有帮助?