基于ResNet-50网络实现图片分类(异步推理)
功能描述
该样例主要是基于Caffe ResNet-50网络(单输入、单Batch)实现图片分类的功能。
将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型(*.om文件),在样例中,加载该om文件,对2张*.jpg图片进行n次异步推理(n作为运行应用的参数,由用户配置),分别得到n次推理结果后,再对推理结果进行处理,输出top1置信度的类别标识。
图1 Sample示例
原理介绍
在该Sample中,涉及的关键功能点,如下表所示。
初始化 |
|
---|---|
Device管理 |
|
Stream管理 |
|
内存管理 |
|
数据传输 |
如果在Host上运行应用,则需调用aclrtMemcpy接口:
如果在板端环境上运行应用,则无需进行数据传输。 |
模型推理 |
|
数据后处理 |
提供样例代码,处理模型推理的结果,直接在终端上显示top1置信度的类别编号。 另外,样例中提供了自定义接口DumpModelOutputResult,用于将模型推理的结果写入文件(运行可执行文件后,推理结果文件在运行环境上的应用可执行文件的同级目录下),默认未调用该接口,用户可在model_process.cpp中,在调用OutputModelResult接口前,增加如下代码调用DumpModelOutputResult接口: // OutputModelResult prints the top 1 confidence value with index. // If want to dump output result to file in the current directory, // use function DumpModelOutputResult. ModelProcess::DumpModelOutputResult(data.second); ModelProcess::OutputModelResult(data.second); |
目录结构
样例代码结构如下所示。
├── data │ ├── dog1_1024_683.jpg //测试数据,需要按指导获取测试图片,放到data目录下 │ ├── dog2_1024_683.jpg //测试数据,需要按指导获取测试图片,放到data目录下 ├── inc │ ├── memory_pool.h //声明内存池处理相关函数的头文件 │ ├── model_process.h //声明模型处理相关函数的头文件 │ ├── sample_process.h //声明资源初始化/销毁相关函数的头文件 │ ├── utils.h //声明公共函数(例如:文件读取函数)的头文件 ├── script │ ├── transferPic.py //将*.jpg转换为*.bin,同时将图片从1024*683的分辨率缩放为224*224 ├── src │ ├── acl.json //系统初始化的配置文件 │ ├── CMakeLists.txt //编译脚本 │ ├── main.cpp //主函数,图片分类功能的实现文件 │ ├── memory_pool.cpp //内存池处理相关函数的实现文件 │ ├── model_process.cpp //模型处理相关函数的实现文件 │ ├── sample_process.cpp //资源初始化/销毁相关函数的实现文件 │ ├── utils.cpp //公共函数(例如:文件读取函数)的实现文件 ├── .project //工程信息文件,包含工程类型、工程描述、运行目标设备类型等 ├── CMakeLists.txt //编译脚本,调用src目录下的CMakeLists文件
父主题: 应用样例参考