样例介绍
获取样例
您可以从开发环境上的“ACLlib组件的安装目录/acllib/sample/acl_execute_model”目录下获取样例acl_dvpp_resnet50的代码。
功能描述
该样例主要是基于Caffe ResNet-50网络(单输入、单batch)实现图片分类的功能。
将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型(*.om文件),在样例中,加载该om文件,对2张*.jpg图片进行解码、缩放、推理,分别得到推理结果后,再对推理结果进行处理,输出最大置信度的类别标识。
转换模型时,需配置色域转换参数,用于将YUV420SP格式的图片转换为RGB格式的图片,才能符合模型的输入要求。

原理介绍
在该样例中,涉及的关键功能点,如下表所示。API接口的详细介绍请参见《应用软件开发指南》中的“AscendCL API参考”。
初始化 |
|
---|---|
Device管理 |
|
Context管理 |
|
Stream管理 |
|
内存管理 |
执行数据预处理时,若需要申请Device上的内存存放输入或输出数据,需调用acldvppMalloc申请内存、调用acldvppFree接口释放内存。 |
数据传输 |
如果在开发者板上运行应用,则无需进行数据传输。 |
数据预处理 |
|
模型推理 |
|
数据后处理(单算子调用) |
处理模型推理的结果,通过调用算子Cast将推理结果的数据类型从float32转成float16,再调用ArgMaxD算子从推理结果中查找最大置信度的类别标识。 通过aclopExecute接口加载与执行算子。 |
目录结构
acl_dvpp_resnet50样例代码结构如下所示。
├acl_dvpp_resnet50 ├── caffe_model │ ├── aipp.cfg //带色域转换参数的配置文件,模型转换时使用 │ ├── resnet50.prototxt //resnet50网络的模型文件 ├── data │ ├── dog1_1024_683.jpg //测试数据 │ ├── dog2_1024_683.jpg //测试数据 ├── inc │ ├── dvpp_process.h //声明数据预处理相关函数的头文件 │ ├── model_process.h //声明模型处理相关函数的头文件 │ ├── sample_process.h //声明资源初始化/销毁相关函数的头文件 │ ├── singleOp_process.h //声明单算子执行相关函数的头文件 │ ├── utils.h //声明公共函数(例如:文件读取函数)的头文件 ├── out │ ├── op_models │ ├──├──op_list.json //Cast算子和ArgMaxD算子的算子描述信息 ├── src │ ├── acl.json //系统初始化的配置文件 │ ├── CMakeLists.txt //编译脚本 │ ├── dvpp_process.cpp //数据预处理相关函数的实现文件 │ ├── main.cpp //主函数,图片分类功能的实现文件 │ ├── model_process.cpp //模型处理相关函数的实现文件 │ ├── sample_process.cpp //资源初始化/销毁相关函数的实现文件 │ ├── singleOp_process.cpp //单算子执行相关函数的实现文件 │ ├── utils.cpp //公共函数(例如:文件读取函数)的实现文件 ├── .project //工程信息文件,包含工程类型、工程描述、运行目标设备类型等 ├── CMakeLists.txt //编译脚本,调用src目录下的CMakeLists文件
