采用VPC多功能组合接口,减少系统调度压力,性能更优
合理选择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版本接口
采用VPC多功能组合接口,减少系统调度压力,性能更优
背景说明
在对图像进行抠图、缩放、贴图、填充等处理时,AscendCL媒体数据处理部分提供了以下实现功能的接口:
-
一个接口只做一次操作(即单功能接口),例如hi_mpi_vpc_crop、hi_mpi_vpc_resize、hi_mpi_vpc_copy_make_border接口
该方式下,如果想实现多个功能,例如抠图+缩放+填充,您需要调用以上3个接口。
-
一个接口做多个操作(即多功能组合接口),例如:hi_mpi_vpc_batch_crop_resize_paste、hi_mpi_vpc_batch_crop_resize_make_border接口
该方式下,如果想实现多个功能,例如抠图+缩放+填充,您仅需要调用1个接口hi_mpi_vpc_batch_crop_resize_make_border。
单功能接口与多功能组合接口的对应关系如下。
| 单功能接口 | 多功能组合接口 |
|---|---|
| - hi_mpi_vpc_crop(抠图) - hi_mpi_vpc_resize(缩放) | - hi_mpi_vpc_crop_resize(抠图缩放) - hi_mpi_vpc_crop_resize_paste(抠图缩放贴图)、hi_mpi_vpc_batch_crop_resize_paste(批量抠图缩放贴图) |
| - hi_mpi_vpc_crop(抠图) - hi_mpi_vpc_resize(缩放) - hi_mpi_vpc_copy_make_border(填充) | hi_mpi_vpc_crop_resize_make_border(抠图缩放填充)或hi_mpi_vpc_batch_crop_resize_make_border(批量抠图缩放填充) |
基本原理
一个接口内部会有多次Host和Device的任务交互,每次交互有时延,若对于抠图、缩放等多个功能,调用多次接口,Host和Device的任务交互次数就会增加,时延自然也会随之增加。
采用多个功能组合接口,调用一个接口完成多个功能,虽然是多个功能,但对于Device来说都是一次处理(一个多功能组合接口和一个单功能接口的硬件执行时间相同),相对调用多个单功能接口,能够减少Host和Device的调度次数,减少Device的处理次数,对调度和性能有较多的提升,在性能优化时可以考虑。
使用示例
此处以批量抠图、缩放、填充为例说明如何调用多功能组合接口hi_mpi_vpc_batch_crop_resize_make_border,完整代码请单击Link获取。
父主题: 使用媒体数据处理V2版本接口
采用VPC批处理接口,降低时延,性能更优
背景说明
在对图像进行抠图、缩放等处理时,AscendCL媒体数据处理部分提供了以下两类接口:
-
一次处理一张图片,例如hi_mpi_vpc_crop_resize_make_border接口
该方式下,如果存在多张输入图片,一般都采用for循环的方式,针对每张图片,都调用一次hi_mpi_vpc_crop_resize_make_border接口。
-
一次处理多张图片(即批处理接口),例如hi_mpi_vpc_batch_crop_resize_make_border接口
该方式,如果存在多张输入图片,只需调用一次hi_mpi_vpc_batch_crop_resize_make_border接口。
以上两类接口的对应关系表如下。
| 单张图片处理接口 | 批量图片处理接口 |
|---|---|
| hi_mpi_vpc_crop_resize_paste(抠图缩放贴图) | hi_mpi_vpc_batch_crop_resize_paste(批量抠图缩放贴图) |
| hi_mpi_vpc_crop_resize_make_border(抠图缩放填充) | hi_mpi_vpc_batch_crop_resize_make_border(批量抠图缩放填充) |
基本原理
昇腾AI处理器内置图像处理单元DVPP(Digital Video Pre-Processing),在DVPP中,有多个VPC(Vision Preprocessing Core)模块,处理图片的抠图、缩放、格式转换等任务。
在调用批处理接口时,批量任务会被均分到多个VPC模块、并行处理,批量接口的处理时延会降低,性能提升。
使用示例
此处以批量抠图、缩放、填充为例说明如何调用多功能组合接口hi_mpi_vpc_batch_crop_resize_make_border,完整代码请单击Link获取。
父主题: 使用媒体数据处理V2版本接口
合理选择VDEC视频解码输出格式和分辨率,性能更优
背景说明
如果用户需要借助DVPP进行视频解码,想要得到RGB格式图片,当前视频解码接口hi_mpi_vdec_send_stream支持输出YUV420SP格式或RGB888格式,且支持在解码时对图片进行缩放,所以从提升性能的角度,可以优化代码逻辑,直接调用视频解码接口hi_mpi_vdec_send_stream输出RGB888格式。
图1 VDEC解码输出的组合场景

基本原理
视频解码接口hi_mpi_vdec_send_stream支持输出YUV420SP格式或RGB888格式,可设置接口参数输出不同的格式,省去调用hi_mpi_vpc_convert_color进行格式转换的步骤,减少接口调用。
若视频码流分辨率与模型输入图片的分辨率不一致,需要对解码后的图片进行缩放处理,也可以在视频解码接口hi_mpi_vdec_send_stream中设置输出图片的分辨率,在解码的同时完成图片的缩放,省去单独调用缩放接口的步骤,减少接口调用。
总结下来,可以在视频解码接口hi_mpi_vdec_send_stream中完成解码+缩放+色域转换三个功能,减少调用接口的数量,提升性能。
使用示例
视频解码的示例代码请单击Link获取。
父主题: 使用媒体数据处理V2版本接口
合理使用VDEC解码跳帧,减少内存申请,减轻VPC压力,性能更优
背景说明
在视频解码+模型推理的场景下,若视频的帧数比较多,且不是每一帧都需要进行推理,对于不需要推理的帧,推荐用户在调用hi_mpi_vdec_send_stream接口解码时设置当前帧输出不显示,不输出解码结果。
基本原理
视频解码是需要连续的数据,解码后的数据需要输出YUV格式,则每帧数据解码后,VDEC内部还需要通过VPC进行解压缩、缩放、格式转换的流程。
如果不想获取某一帧的解码结果, 在调用hi_mpi_vdec_send_stream接口解码时设置当前帧输出不显示,这样,就不需要申请输出内存,且VDEC内部也不通过VPC模块进行解压缩、缩放、格式转换的流程。减少内存申请,也减轻了VPC的处理压力,达到提升性能的目标。
使用说明
请参见hi_mpi_vdec_send_stream接口的hi_vdec_stream结构体内的need_display参数说明。
父主题: 使用媒体数据处理V2版本接口
在线提单