样例介绍
编译及运行应用
单击gemm获取样例,查看该样例下的README。
父主题: 实现矩阵-矩阵乘运算
样例介绍
获取样例
单击vpc_jpeg_resnet50_imagenet_classification获取样例
功能描述
该样例主要是基于Caffe ResNet-50网络(单输入、单Batch)实现图片分类的功能。
根据运行应用的入参,该样例可实现以下功能:
- 将一张YUV420SP格式的图片编码为*.jpg格式的图片。
- 将两张*.jpg格式的解码成两张YUV420SP NV12格式的图片,缩放,再进行模型推理,分别得到两张图片的推理结果后,处理推理结果,输出最大置信度的类别标识以及top5置信度的总和。
- 将两张*.jpg格式的解码成两张YUV420SP NV12格式的图片,抠图,再进行模型推理,分别得到两张图片的推理结果后,处理推理结果,输出最大置信度的类别标识以及top5置信度的总和。
- 将两张*.jpg格式的解码成两张YUV420SP NV12格式的图片,抠图贴图,再进行模型推理,分别得到两张图片的推理结果后,处理推理结果,输出最大置信度的类别标识以及top5置信度的总和。
该样例中用于推理的模型文件是*.om文件(适配昇腾AI处理器的离线模型),转换模型时,需配置色域转换参数,用于将YUV420SP格式的图片转换为RGB格式的图片,才能符合模型的输入要求。
原理介绍
在该样例中,涉及的关键功能点,如下表所示。
| 初始化 | - 调用aclInit接口初始化AscendCL配置。 - 调用aclFinalize接口实现AscendCL去初始化。 |
|---|---|
| Device管理 | - 调用aclrtSetDevice接口指定用于运算的Device。 - 调用aclrtGetRunMode接口获取软件栈的运行模式,根据运行模式的不同,内部处理流程不同。 - 调用aclrtResetDevice接口复位当前运算的Device,回收Device上的资源。 |
| Context管理 | - 调用aclrtCreateContext接口创建Context。 - 调用aclrtDestroyContext接口销毁Context。 |
| Stream管理 | - 调用aclrtCreateStream接口创建Stream。 - 调用aclrtDestroyStream接口销毁Stream。 - 调用aclrtSynchronizeStream接口阻塞程序运行,直到指定Stream中的所有任务都完成。 |
| 内存管理 | - 调用aclrtMallocHost接口申请Host上内存。 - 调用aclrtFreeHost释放Host上的内存。 - 调用aclrtMalloc接口申请Device上的内存。 - 调用aclrtFree接口释放Device上的内存。 执行媒体数据处理时,若需要申请Device上的内存存放输入或输出数据,需调用acldvppMalloc申请内存、调用acldvppFree接口释放内存。 |
| 数据传输 | 如果在板端环境上运行应用,则无需进行数据传输。 |
| 媒体数据处理V1 | - 图片编码 调用acldvppJpegEncodeAsync接口将YUV420SP格式的图片编码为*.jpg格式的图片。 - 图片解码 调用acldvppJpegDecodeAsync接口将*.jpg图片解码成YUV420SP格式图片。 - 缩放 调用acldvppVpcResizeAsync接口对YUV420SP格式的输入图片进行缩放。 - 抠图 调用acldvppVpcCropResizeAsync接口按指定区域从输入图片中抠图,再将抠的图片存放到输出内存中,作为输出图片。 - 抠图贴图 调用acldvppVpcCropResizePasteAsync接口按指定区域从输入图片中抠图,再将抠的图片贴到目标图片的指定位置,作为输出图片。 |
| 模型推理 | - 调用aclmdlLoadFromFileWithMem接口从*.om文件加载模型。 - 调用aclmdlExecute接口执行模型推理。 推理前,通过*.om文件中的色域转换参数将YUV420SP格式的图片转换为RGB格式的图片。 - 调用aclmdlUnload接口卸载模型。 |
目录结构
样例代码结构如下所示。
├── 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文件
父主题: 基于Caffe ResNet-50网络实现图片分类(图片解码+抠图缩放+图片编码+同步推理)
编译及运行应用
单击vpc_jpeg_resnet50_imagenet_classification获取样例,查看该样例下的README。
父主题: 基于Caffe ResNet-50网络实现图片分类(图片解码+抠图缩放+图片编码+同步推理)
样例介绍
获取样例
单击vdec_resnet50_classification获取样例
功能描述
该样例主要是基于Caffe ResNet-50网络(单输入、单Batch)实现图片分类的功能。
将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型(*.om文件),在样例中,加载该om文件,将1个*.h265格式的视频码流(仅包含一帧)循环10次解码出10张YUV420SP NV12格式的图片,对该10张图片做缩放,再对10张YUV420SP NV12格式的图片进行推理,分别得到推理结果后,再对推理结果进行处理,输出最大置信度的类别标识以及top5置信度的总和。
转换模型时,需配置色域转换参数,用于将YUV420SP格式的图片转换为RGB格式的图片,才能符合模型的输入要求。
原理介绍
在该样例中,涉及的关键功能点,如下表所示。
| 初始化 | - 调用aclInit接口初始化AscendCL配置。 - 调用aclFinalize接口实现AscendCL去初始化。 |
|---|---|
| Device管理 | - 调用aclrtSetDevice接口指定用于运算的Device。 - 调用aclrtGetRunMode接口获取软件栈的运行模式,根据运行模式的不同,内部处理流程不同。 - 调用aclrtResetDevice接口复位当前运算的Device,回收Device上的资源。 |
| Context管理 | - 调用aclrtCreateContext接口创建Context。 - 调用aclrtDestroyContext接口销毁Context。 |
| Stream管理 | - 调用aclrtCreateStream接口创建Stream。 - 调用aclrtDestroyStream接口销毁Stream。 - 调用aclrtSynchronizeStream接口阻塞程序运行,直到指定Stream中的所有任务都完成。 |
| 内存管理 | 调用aclrtMallocHost接口申请Host上内存。 - 调用aclrtFreeHost释放Host上的内存。 - 调用aclrtMalloc接口申请Device上的内存。 - 调用aclrtFree接口释放Device上的内存。 执行媒体数据处理时,若需要申请Device上的内存存放输入或输出数据,需调用acldvppMalloc申请内存、调用acldvppFree接口释放内存。 |
| 数据传输 | 如果在板端环境上运行应用,则无需进行数据传输。 |
| 媒体数据处理V1 | - 视频解码 调用aclvdecSendFrame接口将视频码流解码成YUV420SP格式图片。 - 缩放 调用acldvppVpcResizeAsync接口将YUV420SP NV12格式图片缩小成分辨率为224*224的图片。 |
| 模型推理 | - 调用aclmdlLoadFromFileWithMem接口从*.om文件加载模型。 - 调用aclmdlExecute接口执行模型推理。 推理前,通过*.om文件中的色域转换参数将YUV420SP格式的图片转换为RGB格式的图片。 - 调用aclmdlUnload接口卸载模型。 |
目录结构
样例代码结构如下所示。
├── caffe_model
│ ├── aipp.cfg //带色域转换参数的配置文件,模型转换时使用
├── data
│ ├── vdec_h265_1frame_rabbit_1280x720.h265 //测试数据,需要按指导获取测试图片,放到data目录下
├── inc
│ ├── dvpp_process.h //声明媒体数据处理相关函数的头文件
│ ├── model_process.h //声明模型处理相关函数的头文件
│ ├── sample_process.h //声明资源初始化/销毁相关函数的头文件
│ ├── utils.h //声明公共函数(例如:文件读取函数)的头文件
│ ├── vdec_process.h //声明视频处理函数的头文件
├── src
│ ├── acl.json //系统初始化的配置文件
│ ├── CMakeLists.txt //编译脚本
│ ├── dvpp_process.cpp //媒体数据处理相关函数的实现文件
│ ├── main.cpp //主函数,图片分类功能的实现文件
│ ├── model_process.cpp //模型处理相关函数的实现文件
│ ├── sample_process.cpp //资源初始化/销毁相关函数的实现文件
│ ├── utils.cpp //公共函数(例如:文件读取函数)的实现文件
│ ├── vdec_process.cpp //声明视频处理函数的实现文件
├── .project //工程信息文件,包含工程类型、工程描述、运行目标设备类型等
├── CMakeLists.txt //编译脚本,调用src目录下的CMakeLists文件
父主题: 基于Caffe ResNet-50网络实现图片分类(视频解码+同步推理)
编译及运行应用
单击vdec_resnet50_classification获取样例,查看该样例下的README。
父主题: 基于Caffe ResNet-50网络实现图片分类(视频解码+同步推理)
样例介绍
获取样例
单击resnet50_imagenet_classification获取样例
功能描述
该样例主要是基于Caffe ResNet-50网络(单输入、单Batch)实现图片分类的功能。
将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型(*.om文件),在样例中,加载该om文件,对2张*.jpg图片进行同步推理,分别得到推理结果后,再对推理结果进行处理,输出top5置信度的类别标识。
图1 Sample示例

原理介绍
在该Sample中,涉及的关键功能点,如下表所示。
| 初始化 | - 调用aclInit接口初始化AscendCL配置。 - 调用aclFinalize接口实现AscendCL去初始化。 |
|---|---|
| Device管理 | - 调用aclrtSetDevice接口指定用于运算的Device。 - 调用aclrtGetRunMode接口获取软件栈的运行模式,根据运行模式的不同,内部处理流程不同。 - 调用aclrtResetDevice接口复位当前运算的Device,回收Device上的资源。 |
| Context管理 | - 调用aclrtCreateContext接口创建Context。 - 调用aclrtDestroyContext接口销毁Context。 |
| Stream管理 | - 调用aclrtCreateStream接口创建Stream。 - 调用aclrtDestroyStream接口销毁Stream。 |
| 内存管理 | - 调用aclrtMalloc接口申请Device上的内存。 - 调用aclrtFree接口释放Device上的内存。 |
| 数据传输 | 如果在板端环境上运行应用,则无需进行数据传输。 |
| 模型推理 | - 调用aclmdlLoadFromFileWithMem接口从*.om文件加载模型。 - 调用aclmdlExecute接口执行模型推理,同步接口。 - 调用aclmdlUnload接口卸载模型。 |
| 数据后处理 | 提供样例代码,处理模型推理的结果,直接在终端上显示top5置信度的类别编号。 另外,样例中提供了自定义接口DumpModelOutputResult,用于将模型推理的结果写入文件(运行可执行文件后,推理结果文件在运行环境上的应用可执行文件的同级目录下),默认未调用该接口,用户可在sample_process.cpp中,在调用OutputModelResult接口前,增加如下代码调用DumpModelOutputResult接口: text<br>// print the top 5 confidence values with indexes.use function DumpModelOutputResult<br>// if want to dump output result to file in the current directory<br>modelProcess.DumpModelOutputResult();<br>modelProcess.OutputModelResult();<br> |
目录结构
样例代码结构如下所示。
├── data
│ ├── dog1_1024_683.jpg //测试数据,需要按指导获取测试图片,放到data目录下
│ ├── dog2_1024_683.jpg //测试数据,需要按指导获取测试图片,放到data目录下
├── inc
│ ├── model_process.h //声明模型处理相关函数的头文件
│ ├── sample_process.h //声明资源初始化/销毁相关函数的头文件
│ ├── utils.h //声明公共函数(例如:文件读取函数)的头文件
├── script
│ ├── transferPic.py //将*.jpg转换为*.bin,同时将图片从1024*683的分辨率缩放为224*224
├── src
│ ├── acl.json //系统初始化的配置文件
│ ├── CMakeLists.txt //编译脚本
│ ├── main.cpp //主函数,图片分类功能的实现文件
│ ├── model_process.cpp //模型处理相关函数的实现文件
│ ├── sample_process.cpp //资源初始化/销毁相关函数的实现文件
│ ├── utils.cpp //公共函数(例如:文件读取函数)的实现文件
├── .project //工程信息文件,包含工程类型、工程描述、运行目标设备类型等
├── CMakeLists.txt //编译脚本,调用src目录下的CMakeLists文件
父主题: 基于Caffe ResNet-50网络实现图片分类(同步推理)
编译及运行应用
单击resnet50_imagenet_classification获取样例,查看该样例下的README。
父主题: 基于Caffe ResNet-50网络实现图片分类(同步推理)
在线提单