单击图片解码+缩放+同步推理获取样例。
该样例主要是基于Caffe ResNet-50网络(单输入、单batch)实现图片分类的功能。
将Caffe ResNet-50网络的模型文件转换为适配昇腾AI处理器的离线模型(*.om文件),在样例中,加载该om文件,对2张*.jpg图片进行解码、缩放、推理,分别得到推理结果后,再对推理结果进行处理,输出最大置信度的类别标识。
转换模型时,需配置色域转换参数,用于将YUV420SP格式的图片转换为RGB格式的图片,才能符合模型的输入要求。
主要接口如表1所示。
功能 |
对应pyACL模块 |
pyACL 接口函数 |
功能说明 |
---|---|---|---|
资源初始化 |
初始化 |
acl.init |
初始化pyACL配置。 |
Device管理 |
acl.rt.set_device |
指定用于运算的Device。 |
|
Context管理 |
acl.rt.create_context |
创建Context。 |
|
Stream管理 |
acl.rt.create_stream |
创建Stream。 |
|
算子加载与执行 |
acl.op.set_model_dir |
加载模型文件的目录。 |
|
公共接口 |
acl.get_data_buffer_addr |
获取aclDataBuffer类型中的数据的内存地址。 |
|
模型初始化 |
模型加载与执行 |
acl.mdl.load_from_file |
从*.om文件加载模型到device侧。 |
数据类型及操作接口 |
acl.mdl.create_desc |
创建模型描述数据类型。 |
|
数据类型及操作接口 |
acl.mdl.get_desc |
获取模型描述数据类型。 |
|
数据类型及操作接口 |
acl.mdl.add_dataset_buffer |
向aclmdlDataset中增加aclDataBuffer。 |
|
数据类型及操作接口 |
acl.mdl.create_dataset |
创建aclmdlDataset类型的数据。 该数据类型用于描述模型推理时的输入数据、输出数据,模型可能存在多个输入、多个输出,每个输入/输出的内存地址、内存大小用aclDataBuffer类型的数据来描述。 如需销毁aclmdlDataset类型的数据,请参见函数:destroy_dataset。 |
|
数据类型及操作接口 |
acl.mdl.get_num_outputs |
根据aclmdlDesc类型的数据,获取模型的输出个数。 |
|
媒体数据处理 |
媒体数据模块 |
acl.media.dvpp_jpeg_decode_async |
图形解码接口。 |
数据类型及操作接口 |
acl.media.dvpp_vpc_resize_async |
将输入图片缩放到输出图片大小。 |
|
数据类型及操作接口 |
acl.media.dvpp_set_pic_desc系列接口 |
设置图片描述相关参数。 |
|
数据类型及操作接口 |
acl.media.dvpp_create_channel_desc |
创建acldvppChannelDesc类型的数据,表示创建图片数据处理通道时的通道描述信息。 |
|
数据类型及操作接口 |
acl.media.dvpp_create_channel |
创建图片数据处理的通道,同一个通道可以重复使用,销毁后不再可用。 |
|
数据类型及操作接口 |
acl.media.dvpp_create_pic_desc |
创建acldvppPicDesc类型的数据,表示图片描述信息。 如需销毁acldvppPicDesc类型的数据,请参见acl.media.dvpp_destroy_pic_desc。 |
|
数据类型及操作接口 |
acl.media.dvpp_get_pic_desc_width |
获取图片描述参数:原始图片宽。 |
|
数据释放 |
acl.media.dvpp_destroy_pic_desc |
销毁通过acl.media.dvpp_create_pic_desc接口创建的acldvppPicDesc类型的数据。 |
|
数据释放 |
acl.media.dvpp_destroy_resize_config |
销毁通过acl.media.dvpp_create_resize_config接口创建的缩放配置数据 |
|
数据释放 |
acl.media.dvpp_destroy_channel |
销毁图片数据处理的通道,只能销毁通过acl.media.dvpp_create_channel接口创建的通道。 |
|
数据释放 |
acl.media.dvpp_destroy_channel_desc |
销毁通过acl.media.dvpp_create_channel_desc接口创建的acldvppChannelDesc类型的数据。 |
|
模型推理 |
模型加载与执行 |
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.mdl.get_dataset_num_buffers |
获取aclmdlDataset中aclDataBuffer的个数。 |
|
数据类型及操作接口 |
acl.mdl.get_dataset_buffer |
获取aclmdlDataset中的第n个aclDataBuffer。 |
|
数据交互 |
内存管理 |
acl.rt.memcpy |
数据传输,Host->Device或Device->Host。 |
内存管理 |
acl.media.dvpp_malloc |
分配内存给Device侧媒体数据处理时使用。 |
|
内存管理 |
acl.rt.malloc |
申请Device上的内存。 |
|
内存管理 |
acl.media.dvpp_malloc |
分配内存给Device侧媒体数据处理时使用。 |
|
单算子推理 |
算子加载与执行 |
acl.op.execute_v2 |
异步加载并执行指定的算子。 |
算子加载与执行 |
acl.op.cast |
||
公共模块 |
-- |
acl.util.ptr_to_numpy |
将指针地址数据转换为numpy数组,可以使Python代码直接访问。 |
-- |
acl.util.numpy_to_ptr |
获取numpy.ndarry数组的内存数据指针地址。 |
|
C和Python的数据交互 |
acl.util.bytes_to_ptr |
将bytes对象转换成为void*数据,可以将转换好的数据传递给C函数直接使用。 |
|
公共接口 |
acl.data_type_size |
获取aclDataType数据的大小,单位Byte。 |
|
资源释放 |
内存管理 |
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 |
实现pyACL去初始化。 |
|
数据释放 |
acl.mdl.destroy_desc |
销毁通过acl.mdl.create_desc接口创建的aclmdlDesc类型的数据。 |
|
数据释放 |
acl.mdl.destroy_dataset |
销毁通过acl.mdl.create_dataset接口创建的aclmdlDataset类型的数据。 |
|
公共接口 |
acl.destroy_tensor_desc |
销毁aclTensorDesc类型的数据。 |
目录结构如下所示。
vpc_resnet50_imagenet_classification ├──scripts │ ├── host_version.conf //版本号配置文件。 │ └── testcase_300.sh //运行脚本。 ├──src │ ├── acl_dvpp.py //图片缩放实现文件。 │ ├── acl_model.py //模型推理实现文件。 │ ├── acl_op.py //单算子精度转换实现文件。 │ ├── acl_sample.py //运行文件。 │ ├── acl_util.py //工具类函数实现文件。 │ └── constant.py //常量定义。 ├── data //测试数据,需要用户部署。 │ ├── fusion_result.json //atc转化后生成,记录融合算子信息。 │ ├── dog1_1024_683.jpg │ └── dog2_1024_683.jpg ├── caffe_model //需要用户部署。 │ ├── aipp.cfg //模型的配置数据。 │ ├── resnet50.caffemodel //resnet50模型。 │ └── resnet50.prototxt // resnet50模型的网络文件。 ├── op_models //atc转换后生成后的目录。 │ ├── 0_Cast_0_2_1000_1_2_1000.om //精度转换自定义算子。 │ ├── 1_ArgMaxD_1_2_1000_3_2_1.om //精度转换自定义算子。 │ └── op_list.json //精度转换算子配置文件。 └── model //推理模型转换后生成的目录。 │ └── resnet50_aipp.om //转换后的模型文件。 └──README_CN.md