跳到主要内容

合理选择VDEC视频解码输出格式和分辨率,性能更优

采用VPC多功能组合接口,减少系统调度压力,性能更优

背景说明

在对图像进行抠图、缩放、贴图、填充等处理时,AscendCL媒体数据处理部分提供了以下实现功能的接口:

单功能接口与多功能组合接口的对应关系如下。

单功能接口多功能组合接口
- acldvppVpcCropAsync(抠图)
- acldvppVpcResizeAsync(缩放)
- acldvppVpcCropResizeAsync(抠图缩放)或acldvppVpcBatchCropResizeAsync(批量抠图缩放)
- acldvppVpcCropAndPasteAsync(抠图贴图)或acldvppVpcBatchCropAndPasteAsync(批量抠图贴图)
- acldvppVpcCropResizePasteAsync(抠图缩放贴图)、acldvppVpcBatchCropResizePasteAsync(批量抠图缩放贴图)
- acldvppVpcCropAsync(抠图)
- acldvppVpcResizeAsync(缩放)
- acldvppVpcMakeBorderAsync(填充)
acldvppVpcBatchCropResizeMakeBorderAsync(批量抠图缩放填充)

基本原理

一个接口内部会有多次Host和Device的任务交互,每次交互有时延,若对于抠图、缩放等多个功能,调用多次接口,Host和Device的任务交互次数就会增加,时延自然也会随之增加。

采用多个功能组合接口,调用一个接口完成多个功能,虽然是多个功能,但对于Device来说都是一次处理(一个多功能组合接口和一个单功能接口的硬件执行时间相同),相对调用多个单功能接口,能够减少Host和Device的调度次数,减少Device的处理次数,对调度和性能有较多的提升,在性能优化时可以考虑。

使用示例

此处以批量抠图、缩放为例说明如何调用多功能组合接口acldvppVpcBatchCropResizeAsync,完整代码请单击Link获取。

父主题: 使用媒体数据处理V1版本接口

采用VPC批处理接口,降低时延,性能更优

背景说明

在对图像进行抠图、缩放等处理时,AscendCL媒体数据处理部分提供了以下两类接口:

以上两类接口的对应关系表如下。

单张图片处理接口批量图片处理接口
acldvppVpcCropAsync(抠图)acldvppVpcBatchCropAsync(批量抠图)
acldvppVpcCropResizeAsync(抠图缩放)acldvppVpcBatchCropResizeAsync(批量抠图缩放)
acldvppVpcCropAndPasteAsync(抠图贴图)acldvppVpcBatchCropAndPasteAsync(批量抠图贴图)
acldvppVpcCropResizePasteAsync(抠图缩放贴图)acldvppVpcBatchCropResizePasteAsync(批量抠图缩放贴图)
-acldvppVpcBatchCropResizeMakeBorderAsync(批量抠图缩放填充)

基本原理

昇腾AI处理器内置图像处理单元DVPP(Digital Video Pre-Processing),在DVPP中,有多个VPC(Vision Preprocessing Core)模块,处理图片的抠图、缩放、格式转换等任务。

在调用批处理接口时,批量任务会被均分到多个VPC模块、并行处理,批量接口的处理时延会降低,性能提升。

使用示例

此处以批量抠图、缩放为例说明如何调用批处理接口acldvppVpcBatchCropResizeAsync,完整代码请单击Link获取。

父主题: 使用媒体数据处理V1版本接口

合理选择VDEC视频解码输出格式和分辨率,性能更优

背景说明

如果用户需要借助DVPP进行视频解码,想要得到RGB格式图片,在Atlas 200/500 A2推理产品上,当前视频解码接口aclvdecSendFrame支持输出YUV420SP格式或RGB888格式,且支持在解码时对图片进行缩放,所以从提升性能的角度,可以优化代码逻辑,直接调用视频解码接口aclvdecSendFrame输出RGB888格式。

图1 VDEC解码输出的组合场景

基本原理

视频解码接口aclvdecSendFrame支持输出YUV420SP格式或RGB888格式,可设置接口参数输出不同的格式,省去调用acldvppVpcConvertColorAsync进行格式转换的步骤,减少接口调用。

若视频码流分辨率与模型输入图片的分辨率不一致,需要对解码后的图片进行缩放处理,也可以在视频解码接口aclvdecSendFrame中设置输出图片的分辨率,在解码的同时完成图片的缩放,省去单独调用缩放接口的步骤,减少接口调用。

总结下来,可以在视频解码接口aclvdecSendFrame中完成解码+缩放+色域转换三个功能,减少调用接口的数量,提升性能。

使用示例

视频解码+推理的完整代码请单击Link获取。

如果视频解码需要输出RGB888格式,并且同时实现缩放功能,您需要设置aclvdecSendFrame接口的output参数(表示输出图片描述信息)中的图片格式、宽、高、宽Stride、高Stride,例如:

//创建输出图片描述信息
acldvppPicDesc picOutputDesc = acldvppCreatePicDesc();

//定义输出图片格式、宽、高、宽Stride、高Stride以及存放输出图片数据的内存
uint32_t width = 224;
uint32_t height = 224;
uint32_t widthStride = 224 * 3;
uint32_t heightStride = 224;
uint32_t size = widthStride * heightStride;
void *picOutBufferDev = nullptr;
acldvppMalloc(&picOutBufferDev, size);

//设置输出图片格式、宽、高、宽Stride、高Stride以及存放输出图片数据的内存
acldvppSetPicDescData(picOutputDesc, picOutBufferDev);
acldvppSetPicDescSize(picOutputDesc, size);
acldvppSetPicDescFormat(picOutputDesc, PIXEL_FORMAT_RGB_888);
acldvppSetPicDescWidth(picOutputDesc, width);
acldvppSetPicDescHeight(picOutputDesc, height);
acldvppSetPicDescWidthStride(picOutputDesc, widthStride);
acldvppSetPicDescHeightStride(picOutputDesc, heightStride);

//调用解码接口
aclvdecSendFrame(channelDesc, picInputDesc, picOutputDesc, nullptr, nullptr);

父主题: 使用媒体数据处理V1版本接口

合理使用VDEC解码跳帧,减少内存申请,减轻VPC压力,性能更优

背景说明

在视频解码+模型推理的场景下,若视频的帧数比较多,且不是每一帧都需要进行推理,对于不需要推理的帧,推荐用户使用aclvdecSendSkippedFrame接口进行解码,不输出解码结果。

基本原理

视频解码是需要连续的数据,解码后的数据需要输出YUV格式,则每帧数据解码后,VDEC内部还需要通过VPC进行解压缩、缩放、格式转换的流程。

如果不想获取某一帧的解码结果, 可以调用aclvdecSendSkippedFrame接口,不需要申请输出内存,且VDEC内部也不通过VPC模块进行解压缩、缩放、格式转换的流程。减少内存申请,也减轻了VPC的处理压力,达到提升性能的目标。

使用说明

请参见aclvdecSendSkippedFrame处的说明。

父主题: 使用媒体数据处理V1版本接口

VPC处理时合理选择输出格式,降低内存申请,性能更优

背景说明

在Atlas 200/500 A2推理产品上,VPC图像处理功能支持输出YUV400格式(灰度图像),如果模型推理的输入图像是灰度图像,就直接使用VPC功能,无需再使用AIPP色域转换功能。

基本原理

在Atlas 200/500 A2推理产品上,直接使用VPC功能输出YUV400格式(灰度图像),省去使用AIPP色域转换功能,降低AI Core单元的负载,从硬件上提升性能。

使用说明

关于VPC功能的示例代码,请参见VPC图像处理典型功能

父主题: 使用媒体数据处理V1版本接口

在线提单