功能描述
该样例主要是基于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格式的输入图片,进行批量抠图粘贴。
主要接口
主要接口如下表所示。
初始化
|
- 调用acl.init接口初始化pyACL配置。
- 调用aclFinalize接口实现pyACL去初始化。
|
Device管理
|
- 调用acl.rt.set_device接口指定用于运算的Device。
- 调用acl.rt.get_run_mode接口获取软件栈的运行模式,根据运行模式的不同,内部处理流程不同。
- 调用acl.rt.reset_device接口复位当前运算的Device,回收Device上的资源。
|
Stream管理
|
- 调用acl.rt.create_stream接口创建Stream。
- 调用acl.rt.destroy_stream接口销毁Stream。
- 调用acl.rt.synchronize_stream接口阻塞程序运行,直到指定Stream中的所有任务都完成。
|
内存管理
|
- 调用acl.rt.malloc_host接口申请Host上内存。
- 调用acl.rt.free_host释放Host上的内存。
- 调用acl.rt.malloc接口申请Device上的内存。
- 调用acl.rt.free接口释放Device上的内存。
执行媒体数据处理时,若需要申请Device上的内存存放输入或输出数据,需调用acl.media.dvpp_malloc申请内存、调用acl.media.dvpp_free接口释放内存。
|
数据传输
|
如果在Host上运行应用,则需调用acl.rt.memcpy接口:
- 将数据从Host传输到Device上,作为解码的输入数据。
- 模型推理结束后,将推理结果从Device传输到Host。
如果在板端环境上运行应用,则无需进行数据传输。
|
媒体数据处理V1
|
- 图片编码
调用acl.media.dvpp_jpeg_encode_async接口将YUV420SP格式的图片编码为*.jpg格式的图片。
- 图片解码
调用acl.media.dvpp_jpeg_decode_async接口将*.jpg图片解码成YUV420SP格式图片。
- 缩放
调用acl.media.dvpp_vpc_resize_async接口对YUV420SP格式的输入图片进行缩放。
- 抠图
调用acl.media.dvpp_vpc_crop_resize_async接口按指定区域从输入图片中抠图,再将抠的图片存放到输出内存中,作为输出图片。
- 抠图贴图
调用acl.media.dvpp_vpc_crop_resize_paste_async接口按指定区域从输入图片中抠图,再将抠的图片贴到目标图片的指定位置,作为输出图片。
|
模型推理
|
|
目录结构
目录结构如下所示。
vpc_jpeg_resnet50_imagenet_classification
├──scripts
│ ├── host_version.conf //版本号配置文件。
│ └── testcase_300.sh //运行脚本。
├──src
│ ├── acl_dvpp_process.py //媒体数据处理。
│ ├── acl_model_process.py //模型运行文件。
│ ├── constant.py //常量定义。
│ └── main.py //运行文件,流程逻辑控制。
├── data
│ ├── fusion_result.json //atc转化后生成,记录融合算子信息。
│ └── vdec_h265_1frame_rabbit_1280x720.h265 //用户待处理的视频文件,由用户自行获取。
├── caffe_model //需要用户部署。
│ ├── aipp.cfg //模型的配置数据。
│ ├── resnet50.caffemodel //ResNet-50模型。
│ └── resnet50.prototxt // ResNet-50模型的网络文件。
└── model //推理模型转换后生成的目录。
└── resnet50_aipp.om //转换后的模型文件。