基础示例包提供了基于resnet50模型的快速入门示例。您可以体验并基于这个示例进行应用开发,降低开发门槛。
基础示例包位于 horizon_j6_open_explorer 发布物的 samples/ucp_tutorial/dnn/basic_samples/ 路径下,主要包括以下内容:
| 名称 | 内容 |
|---|---|
| basic_samples | 包含示例源代码和运行脚本。 |
上板模型需要先在OE包的 samples/ai_toolchain/model_zoo/runtime/basic_samples 目录下执行resolve_runtime_sample.sh 脚本进行获取。
示例包结构如下所示:
code:该目录内是示例的源码。
code/00_quick_start:快速入门示例,基于 dnn API,用resnet50进行单张图片模型推理和结果解析。
code/build.sh:程序编译脚本,需要指定编译参数,被build_aarch64.sh和build_x86.sh调用。
code/build_aarch64.sh:程序一键编译脚本,编译产生的示例在aarch64环境下运行。
code/build_x86.sh:程序一键编译脚本,编译产生的示例在x86环境下运行。
code/resolve.sh:程序运行依赖获取脚本,用户编译模型前需执行。
runtime:示例运行脚本,预置了数据和相关模型。
拿到开发板后,升级系统镜像到示例包推荐的系统镜像版本。
确保本地开发机和开发板可以远程连接。
编译需要的步骤如下:
当前环境安装好交叉编译工具gcc-11-aarch64-linux-gnu和g++-11-aarch64-linux-gnu。
在 ucp_tutorial/tools/basic_samples 目录下有预先配置好的编译脚本 build.sh ,选项 -a x86 和 -a aarch64 分别支持两种编译方式,
直接执行 build.sh 脚本即可完成一键编译,生成的文件会被保存到 ucp_tutorial/vp/vp_samples 目录下。
此外,目录中也包含了 build_aarch64.sh 和 build_x86.sh 两个编译脚本,分别对应了两个编译选项,
使用这两个脚本进行编译与使用 build.sh 脚本等效。
执行编译脚本后,可执行程序和对应依赖会自动复制到 runtime/script 或者 runtime/script_x86目录下。
build.sh脚本里指定的交叉编译工具链的位置是 /usr/bin 目录下,您如果安装在其他位置,可以手动修改下build.sh。
下方log及命令行中的version仅为示例,实际打印的log中version以OE包中的version为准。
若在x86环境下运行示例,请使用 runtime/script_x86 下的脚本。
示例脚本主要在 runtime/script 目录下,编译程序后目录结构如下:
运行前,把runtime目录部署到板端,执行对应脚本即可。
basic_samples 示例包的模型发布物需要在OE包的 samples/ai_toolchain/model_zoo/runtime/basic_samples 目录下执行 resolve_runtime_sample.sh 脚本进行获取。
basic_samples 示例包的其他依赖需要在OE包的 samples/ucp_tutorial/dnn/basic_samples/code 目录下执行 resolve.sh 脚本进行获取。
model 文件夹包含模型所在的路径, runtime 文件夹为软链接,链接路径指向 ../../../model_zoo/runtime/basic_samples 。
00_quick_start 目录下,我们提供了一个快速上手的示例,旨在介绍模型推理的使用流程。以resnet50模型为例,包含了模型从准备数据到模型推理,再到执行后处理,生成分类结果的完整流程代码。
run_resnet.sh:该脚本实现使用resnet50读取单张图片进行推理的示例功能。使用的时候,进入 00_quick_start 目录,然后直接执行sh run_resnet.sh 即可,如下代码块所示:
该示例是指 01_api_tutorial 目录内的示例,旨在介绍模型推理API的使用。其目录包含以下脚本:
model.sh:该示例主要实现读取模型信息的功能。 使用的时候,直接进入 01_api_tutorial 目录,然后直接执行 sh model.sh 即可,如下代码块所示:
roi_infer.sh:该示例帮助理解存在roi输入的模型推理方式,示例代码实现的功能是将一张图片转为nv12数据,给定roi框进行infer。使用的时候,直接进入 01_api_tutorial 目录,然后直接执行 sh roi_infer.sh 即可。
sys_mem.sh:该示例主要引导如何使用 hbUCPMalloc、 hbUCPMallocCached、hbUCPMemFlush 和 hbUCPFree 这几个API。使用的时候,直接进入 01_api_tutorial 目录,执行 sh sys_mem.sh 即可。
日志主要包括 示例日志 和 dnn日志 两部分。其中示例日志是指交付包示例代码中所应用的日志,dnn日志是指嵌入式dnn库中的日志。您可以根据不同的需求设置不同的日志。
示例日志主要采用hlog,hlog的日志主要分为7个等级:
log等级可设置为0、1、2、3、4、5、6,分别对应trace、debug、info、warn、error、critical、never,默认为info。
关于 dnn 日志的配置,请阅读模型推理API手册章节中的 配置信息 一节内容。