样例介绍
获取样例
单击Gitee,进入Ascend samples开源仓,详细参见README中的“版本说明”下载配套版本的sample包,从“python/level2_simple_inference/1_classification/vpc_jpeg_resnet50_imagenet_classification”目录下获取vpc_jpeg_resnet50_imagenet_classification样例。
功能描述
该样例主要是基于Caffe ResNet-50网络(单输入、单Batch)实现图片分类的功能。
根据运行应用的入参,该样例可实现以下功能:
- 将*.jpg格式的解码成YUV420SP NV12格式的输入图片,缩放,再进行模型推理,得到推理结果后,处理推理结果,输出top5置信度。
- 将YUV420SP NV12格式的输入图片,抠图,再进行模型推理,得到推理结果后,处理推理结果,输出top5置信度。
- 将YUV420SP NV12格式的输入图片,抠图贴图,再进行模型推理,得到推理结果后,处理推理结果,输出top5置信度。
- 将YUV420SP NV12格式的输入图片,编码为jpg格式的图片。
- 将YUV420SP NV12格式的输入图片(分辨率8192*8192)缩放,得到4000*4000。
- 将YUV420SP NV12格式的输入图片,进行批量抠图。
- 将YUV420SP NV12格式的输入图片,进行批量抠图粘贴。
主要接口
主要接口如表1所示。
功能 |
对应ACL模块 |
ACL 接口函数 |
功能说明 |
---|---|---|---|
资源初始化 |
初始化 |
acl.init |
初始化ACL配置。 |
Device管理 |
acl.rt.set_device |
指定用于运算的Device。 |
|
Context管理 |
acl.rt.create_context |
创建Context。 |
|
Stream管理 |
acl.rt.create_stream |
创建Stream。 |
|
算子加载与执行 |
acl.op.set_model_dir |
加载模型文件的目录。 |
|
模型初始化 |
模型加载与执行 |
acl.mdl.load_from_file |
从*.om文件加载模型到device侧。 |
数据类型及操作接口 |
acl.mdl.create_desc |
创建模型描述数据类型。 |
|
数据类型及操作接口 |
acl.mdl.get_desc |
获取模型描述数据类型。 |
|
数据预处理 |
媒体数据模块-JPEG |
acl.media.dvpp_jpeg_decode_async |
图形解码。 |
acl.media.dvpp_jpeg_encode_async |
图形编码。 |
||
媒体数据模块-VPC |
acl.media.dvpp_vpc_crop_async |
抠一张子图。 |
|
acl.media.dvpp_vpc_resize_async |
将输入图片缩放到输出图片大小。 |
||
acl.media.dvpp_vpc_crop_and_paste_async |
抠图并粘贴到输出图片。 |
||
acl.media.dvpp_vpc_batch_crop_async |
抠多张子图。 |
||
acl.media.dvpp_vpc_batch_crop_and_paste_async |
抠多张子图并粘贴到输出图片。 |
||
数据类型及操作接口 |
acl.media.dvpp_create_roi_config |
创建图片框区域配置。 |
|
acl.media.dvpp_set_roi_config系列接口 |
设置图片框区域配置参数。 |
||
acl.media.dvpp_set_pic_desc系列接口 |
设置图片描述相关参数。 |
||
模型推理 |
模型加载与执行 |
acl.mdl.execute |
执行模型同步推理。 |
数据后处理 |
数据类型及操作接口 |
acl.op.create_attr |
创建aclopAttr类型的数据。 |
acl.create_tensor_desc |
创建aclTensorDesc类型的数据。 |
||
acl.get_tensor_desc_size |
获取Tensor描述占用的空间大小。 |
||
acl.create_data_buffer |
创建aclDataBuffer类型的数据。 |
||
数据交互 |
内存管理 |
acl.rt.memcpy |
数据传输,Host->Device或Device->Host。 |
内存管理 |
acl.media.dvpp_malloc |
分配内存给Device侧媒体数据处理时使用。 |
|
内存管理 |
acl.rt.maclloc |
申请Device上的内存。 |
|
内存管理 |
acl.rt.malloc_host |
申请Host上的内存。 |
|
单算子推理 |
算子加载与执行 |
acl.op.execute |
异步加载并执行指定的算子。 |
公共模块 |
-- |
acl.util.ptr_to_numpy |
通过指针地址获取numpy.ndarray对象。 |
-- |
acl.util.numpy_to_ptr |
获取numpy.ndarray对象的内存数据的指针地址。 |
|
资源释放 |
内存管理 |
acl.rt.free |
释放Device上的内存。 |
内存管理 |
acl.media.dvpp_free |
通过acl.media.dvpp_malloc接口申请的内存。 |
|
内存管理 |
acl.rt.free_host |
释放Host上的内存。 |
|
模型加载与执行 |
acl.mdl.unload |
卸载模型。 |
|
Stream管理 |
acl.rt.destroy_stream |
销毁Stream。 |
|
Context管理 |
acl.rt.destroy_context |
销毁Context。 |
|
Device管理 |
acl.rt.reset_device |
复位当前运算的Device,回收Device上的资源。 |
|
去初始化 |
acl.finalize |
实现ACL去初始化。 |
目录结构
目录结构如下所示。
resnet50_imagenet_classification ├──src │ ├── acl_dvpp.py //图片缩放实现文件。 │ ├── acl_model.py //模型推理实现文件。 │ ├── acl_sample.py //运行文件。 │ ├── acl_util.py //工具类函数实现文件。 │ ├── acl_vdec.py //视频解码实现文件。 │ └── constant.py //常量定义。 ├── data │ └── vdec_h265_1frame_rabbit_1280x720.h265 //用户待处理的视频文件,由用户自行获取。 ├── caffe_model │ ├── aipp.cfg │ ├── resnet50.caffemodel //ResNet-50模型。 │ └── resnet50.prototxt // ResNet-50模型的网络文件。 └── model └── resnet50_aipp.om //推理模型。