基于ResNet-50网络实现图片分类(图片解码+抠图缩放+图片编码+同步推理)
功能描述
该样例主要是基于Caffe ResNet-50网络(单输入、单Batch)实现图片分类的功能。
根据运行应用的入参,该样例可实现以下功能:
- 将一张YUV420SP格式的图片编码为*.jpg格式的图片。
- 将两张*.jpg格式的解码成两张YUV420SP NV12格式的图片,缩放,再进行模型推理,分别得到两张图片的推理结果后,处理推理结果,输出最大置信度的类别标识以及top5置信度的总和。
- 将两张*.jpg格式的解码成两张YUV420SP NV12格式的图片,抠图,再进行模型推理,分别得到两张图片的推理结果后,处理推理结果,输出最大置信度的类别标识以及top5置信度的总和。
- 将两张*.jpg格式的解码成两张YUV420SP NV12格式的图片,抠图贴图,再进行模型推理,分别得到两张图片的推理结果后,处理推理结果,输出最大置信度的类别标识以及top5置信度的总和。
- 将YUV420SP NV12格式的图片(分辨率8192*8192)缩放,得到4000*4000。
该样例中用于推理的模型文件是*.om文件(适配昇腾AI处理器的离线模型),转换模型时,需配置色域转换参数,用于将YUV420SP格式的图片转换为RGB格式的图片,才能符合模型的输入要求。
原理介绍
在该样例中,涉及的关键功能点,如下表所示。
初始化 |
|
---|---|
Device管理 |
|
Stream管理 |
|
内存管理 |
执行媒体数据处理时,若需要申请Device上的内存存放输入或输出数据,需调用acldvppMalloc申请内存、调用acldvppFree接口释放内存。 |
数据传输 |
如果在Host上运行应用,则需调用aclrtMemcpy接口:
如果在板端环境上运行应用,则无需进行数据传输。 |
媒体数据处理V1 |
|
模型推理 |
目录结构
样例代码结构如下所示。
├── caffe_model │ ├── aipp.cfg //带色域转换参数的配置文件,模型转换时使用 ├── data │ ├── persian_cat_1024_1536_283.jpg //测试数据,需要按指导获取测试图片,放到data目录下 │ ├── wood_rabbit_1024_1061_330.jpg //测试数据,需要按指导获取测试图片,放到data目录下 │ ├── wood_rabbit_1024_1068_nv12.yuv //测试数据,需要按指导获取测试图片,放到data目录下 │ ├── dvpp_vpc_8192x8192_nv12.yuv //测试数据,需要按指导获取测试图片,放到data目录下 ├── inc │ ├── dvpp_process.h //声明媒体数据处理相关函数的头文件 │ ├── model_process.h //声明模型处理相关函数的头文件 │ ├── sample_process.h //声明资源初始化/销毁相关函数的头文件 │ ├── utils.h //声明公共函数(例如:文件读取函数)的头文件 ├── src │ ├── acl.json //系统初始化的配置文件 │ ├── CMakeLists.txt //编译脚本 │ ├── dvpp_process.cpp //媒体数据处理相关函数的实现文件 │ ├── main.cpp //主函数,图片分类功能的实现文件 │ ├── model_process.cpp //模型处理相关函数的实现文件 │ ├── sample_process.cpp //资源初始化/销毁相关函数的实现文件 │ ├── utils.cpp //公共函数(例如:文件读取函数)的实现文件 ├── .project //工程信息文件,包含工程类型、工程描述、运行目标设备类型等 ├── CMakeLists.txt //编译脚本,调用src目录下的CMakeLists文件
父主题: 应用样例参考