功能及约束说明
功能说明
VPC(Vision Preprocessing Core)功能包括:
- 抠图,从输入图片中抠出需要用的图片区域,支持一图多框和多图多框。
- 缩放
- 针对不同分辨率的图像,VPC的处理方式可分为:
- 非8K缩放:
用于处理“(widthStride/系数)在32~4096(包括4096)范围内,heightStride在6~4096”的输入图片,不同格式的输入图片,系数不同,详细描述参见约束说明。
- 8K缩放:
昇腾310 AI处理器,8K缩放用于处理“widthStride在4096~8192范围内或heightStride在4096~8192范围内(不包括4096)”的输入图片,支持的输入图片格式,请参见约束说明。
昇腾910 AI处理器,8K缩放用于处理“widthStride在4096~8192范围内或heightStride在4096~8192范围内(不包括4096)”的输入图片,支持的输入图片格式,请参见约束说明。
- 非8K缩放:
- 从是否抠多张图的维度,可分为单图裁剪缩放(支持非压缩格式)、一图多框裁剪缩放(支持非压缩格式)。
- 其它缩放方式,如:原图缩放、等比例缩放(缩放前后图片的宽高比例相同)。
- 针对不同分辨率的图像,VPC的处理方式可分为:
- 叠加,从输入图片中抠出来的图,对抠出的图进行缩放后,放在用户输出图片的指定区域,输出图片可以是空白图片(由用户申请的空输出内存产生的),也可以是已有图片(由用户申请输出内存后将已有图片读入输出内存),只有当输出图片是已有图片时,才表示叠加。
- 拼接,从输入图片中抠多张图片,对抠出的图进行缩放后,放到输出图片的指定区域。
- 格式转换,支持RGB格式、YUV格式之间的格式转换,目前的输入图片格式、输出图片格式,请参见约束说明。
- 图像灰度化,将彩色图像转化为灰度图像。需注意,输入为灰度图像、输出只能为灰度图像。
昇腾310 AI处理器,实现图像灰度化的操作是从YUV420SP格式的输出图像数据中只取Y分量的数据。
昇腾910 AI处理器,实现图像灰度化的操作是从YUV420SP格式的输出图像数据中只取Y分量的数据。
概念 |
描述 |
---|---|
宽stride(widthStride) |
指一行图像跨距,表示输入/输出图片对齐后的宽,RGB格式或YUV格式的宽stride计算方式不一样。宽stride最小为32,最大为4096*4(宽是4096的argb格式的图像,1个像素占用4个字节,一行像素就占用4096*4,即宽stride)。 宽stride的对齐要求,请参见约束说明中的“VPC输入的约束”、“VPC输出的约束”。 |
高stride(heightStride) |
指图像在内存中的行数,表示输入/输出图片对齐后的高。 高stride的对齐要求,请参见约束说明中的“VPC输入的约束”、“VPC输出的约束”。 |
上/下/左/右偏移 |
通过配置上偏移、下偏移、左偏移、右偏移可以实现两个功能:指定抠图区域或贴图区域的位置;控制抠图或贴图区域的宽、高,右偏移-左偏移+1=宽,下偏移-上偏移+1=高。参见功能示意图。 |
抠图区域 |
指用户指定的需抠出的图片区域。 抠图区域最小分辨率为10*6,最大分辨率为4096*4096。 抠图区域的约束,请参见约束说明中的“VPC抠图、贴图约束”。 |
贴图区域 |
指在输出图片中用户指定的区域,贴图区域最小分辨率为10*6,最大分辨率为4096*4096。 贴图区域的约束,请参见约束说明中的“VPC抠图、贴图约束”。 |
约束说明
- VPC输入的约束:
- 输入图片分辨率:
- 非8K缩放:
- YUV400/YUV420SP/YUV422SP/YUV444sp:widthStride在32~4096(包括4096)范围内,heightStride在6~4096。
- YUV422packed:widthStride/2在32~4096(包括4096)范围内,heightStride在6~4096。
- YUV444packed/RGB888:widthStride/3在32~4096(包括4096)范围内,heightStride在6~4096。
- XRGB8888:widthStride/4在32~4096(包括4096)范围内,heightStride在6~4096。
- 8K缩放:
昇腾310 AI处理器,8K缩放用于处理“widthStride在4096~8192范围内或heightStride在4096~8192范围内(不包括4096)”的输入图片。
昇腾910 AI处理器,8K缩放用于处理“widthStride在4096~8192范围内或heightStride在4096~8192范围内(不包括4096)”的输入图片。
输入图片的宽高限制跟输入图片格式有关,在VPC支持的输入图片格式中,对于YUV420SP格式,宽高均需要2对齐;对于YUV422SP或者YUV422Packed格式,宽度需要2对齐,高度无限制;对于YUV440SP格式,宽度无限制,高度需要2对齐;其它格式宽高没有限制。
- 非8K缩放:
- 输入图片格式:
- 非8K缩放:
支持acldvppPixelFormat枚举值中的如下枚举项:
PIXEL_FORMAT_YUV_400 = 0, PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1, PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2, PIXEL_FORMAT_YUV_SEMIPLANAR_422 = 3, PIXEL_FORMAT_YVU_SEMIPLANAR_422 = 4, PIXEL_FORMAT_YUV_SEMIPLANAR_444 = 5, PIXEL_FORMAT_YVU_SEMIPLANAR_444 = 6, PIXEL_FORMAT_YUYV_PACKED_422 = 7, PIXEL_FORMAT_UYVY_PACKED_422 = 8, PIXEL_FORMAT_YVYU_PACKED_422 = 9, PIXEL_FORMAT_VYUY_PACKED_422 = 10, PIXEL_FORMAT_YUV_PACKED_444 = 11, PIXEL_FORMAT_RGB_888 = 12, PIXEL_FORMAT_BGR_888 = 13, PIXEL_FORMAT_ARGB_8888 = 14, PIXEL_FORMAT_ABGR_8888 = 15, PIXEL_FORMAT_RGBA_8888 = 16, PIXEL_FORMAT_BGRA_8888 = 17, PIXEL_FORMAT_YUV_SEMIPLANAR_440 = 1000, PIXEL_FORMAT_YVU_SEMIPLANAR_440,
在昇腾310 AI处理器上,不支持以上枚举值中的PIXEL_FORMAT_YUV_SEMIPLANAR_440、PIXEL_FORMAT_YVU_SEMIPLANAR_440。
在昇腾910 AI处理器上,不支持以上枚举值中的PIXEL_FORMAT_YUV_SEMIPLANAR_440、PIXEL_FORMAT_YVU_SEMIPLANAR_440。
- 8K缩放:
昇腾310 AI处理器支持acldvppPixelFormat枚举值中的如下枚举项:
PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1, PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2,
昇腾910 AI处理器支持acldvppPixelFormat枚举值中的如下枚举项:PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1, PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2,
- 非8K缩放:
- 输入内存:
- 内存地址起始要求16对齐。其中128对齐性能最高。调用acldvppMalloc接口/acldvppFree接口申请或释放内存,这部分内存的生命周期由用户自行管理。
- 内存大小(单位Byte)与图片数据的格式相关,计算公式如下:
- YUV400:
昇腾310 AI处理器,计算公式:widthStride*heightStride*3/2
昇腾910 AI处理器,计算公式:widthStride*heightStride*3/2
- YUV420SP:widthStride*heightStride*3/2
- YUV422SP:widthStride*heightStride*2
- YUV444SP:widthStride*heightStride*3
- YUV422packed:widthStride*heightStride
- YUV444packed、RGB888:widthStride*heightStride
- ARGB8888:widthStride*heightStride
- YUV400:
- 输入图片的widthStride、heightStride:
- 对于不同图像格式,widthStride的计算公式不同:
- YUV400、YUV420SP、YUV422SP、YUV444SP:输入图片的宽(width)对齐到16。
- YUV422packed:输入图片的宽(width)对齐到16后,再乘以2(宽16对齐,每个像素占2个字节)。
- YUV444packed、RGB888:输入图片的宽(width)对齐到16,再乘以3(宽16对齐,每个像素占3个字节)。
- ARGB8888:输入图片的宽(width)对齐到16后,再乘以4(宽16对齐,每个像素占4个字节)。
- heightStride:
昇腾910 AI处理器,需要2对齐。
- 对于不同图像格式,widthStride的计算公式不同:
- 输入图片分辨率:
- VPC输出的约束:
- 输出图片分辨率:
输出图片的宽高限制跟输出图片格式有关,在VPC支持的输出图片格式中,对于YUV420SP格式,宽高均需要2对齐;对于YUV422SP格式,宽度需要2对齐,高度无限制;其它格式宽高没有限制。
- 输出图片格式:
昇腾310 AI处理器支持acldvppPixelFormat枚举值中的如下枚举项:
PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1, PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2,
昇腾910 AI处理器支持acldvppPixelFormat枚举值中的如下枚举项:PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1, PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2,
- 输出内存:
- 内存地址起始要求16对齐。其中128对齐性能最高。调用acldvppMalloc接口/acldvppFree接口申请或释放内存,这部分内存的生命周期由用户自行管理。
- 内存大小与图片数据的格式相关,计算公式请参见输入内存计算公式。
- 输出图片的widthStride、heightStride:
- 输出图片分辨率:
- VPC抠图、贴图约束:
- 抠图区域不超出输入图片区域。
- 贴图区域不超出输出图片区域,最大贴图个数256个,贴图区域相对输出图片的左偏移16对齐。
- 输出图片的贴图宽度建议16对齐,如果不是16对齐,会多写一段无效数据使其16对齐。见图4、图5,贴图区域旁边的绿色框就表示无效数据。
- 抠图、贴图区域的奇数、偶数限制为:
版本
约束
昇腾310 AI处理器
输出图片格式为YUV420SP,贴图区域奇数、偶数限制为:左偏移和上偏移为偶数、右偏移和下偏移为奇数。
昇腾910 AI处理器
输出图片格式为YUV420SP,贴图区域奇数、偶数限制为:左偏移和上偏移为偶数、右偏移和下偏移为奇数。
- 缩放场景下,贴图/抠图的宽高缩放比例范围:
昇腾310 AI处理器,贴图/抠图的宽高缩放比例范围:[1/32, 16]。
昇腾910 AI处理器,贴图/抠图的宽高缩放比例范围:[1/32, 16]。
等比例缩放场景下,由于贴图左偏移16对齐的限制,如果直接调用acldvppVpcCropResizePasteAsync接口实现缩放功能,贴图的位置可能不在输出图片的正中心位置,此时可通过抠图、缩放、填充几个功能配合使用(调用acldvppVpcBatchCropResizeMakeBorderAsync接口),实现等比例缩放。
- VPC的输出作为模型推理的输入时:
昇腾310 AI处理器,VPC功能中,贴图区域的宽*高有16*2对齐的约束,贴图有效区域的宽*高不满足16*2对齐时,贴图区域中会存在一些补边的无效数据,为保证推理精度,贴图有效区域的宽*高不满足16*2对齐时,用户需借助AIPP抠出有效区域,去除无效数据。
昇腾910 AI处理器,VPC功能中,贴图区域的宽*高有16*2对齐的约束,贴图有效区域的宽*高不满足16*2对齐时,贴图区域中会存在一些补边的无效数据,为保证推理精度,贴图有效区域的宽*高不满足16*2对齐时,用户需借助AIPP抠出有效区域,去除无效数据。
性能指标说明(昇腾310 AI处理器)
- 对于非8K缩放,单个Device的基本场景性能指标参考如下:
对于1080p的图像,若存在Host->Device的图片数据拷贝,由于拷贝带宽限制,最大总帧率约为1000fps。
对于4K的图像,若存在Host->Device的图片数据拷贝,由于拷贝带宽限制,最大总帧率约为250fps。场景举例
总帧率
- 输入图像分辨率:1080p(1920*1080)
- 输出图像分辨率:1080p(1920*1080)
- 输入/输出图片格式:YUV420SP
- n路(n<4,1路对应一个线程)
n*360fps
- 输入图像分辨率:1080p(1920*1080)
- 输出图像分辨率:1080p(1920*1080)
- 输入/输出图片格式:YUV420SP
- n路(n≥4,1路对应一个线程)
1440fps
- 输入图像分辨率:4K图像(3840*2160)
- 输出图像分辨率:4K图像(3840*2160)
- 输入/输出图片格式:YUV420SP
- n路(n<4,1路对应一个线程)
n*90fps
- 输入图像分辨率:4K图像(3840*2160)
- 输出图像分辨率:4K图像(3840*2160)
- 输入/输出图片格式:YUV420SP
- n路(n≥4,1路对应一个线程)
360fps
- 对于8K缩放,单个Device的典型场景性能指标参考如下:
场景举例
总帧率
- 输入图像分辨率:8K图像(7680*4320)
- 输出图像分辨率:1080p(1920*1080)
- 输入/输出图片格式:YUV420SP
- n路(n<4,1路对应一个线程)
n*25fps
- 输入图像分辨率:8K图像(7680*4320)
- 输出图像分辨率:1080p(1920*1080)
- 输入/输出图片格式:YUV420SP
- n路(n≥4,1路对应一个线程)
100fps
- 输入图像分辨率:8K图像(7680*4320)
- 输出图像分辨率:4K图像(3840*2160)
- 输入/输出图片格式:YUV420SP
- n路(n<4,1路对应一个线程)
n*25fps
- 输入图像分辨率:8K图像(7680*4320)
- 输出图像分辨率:4K图像(3840*2160)
- 输入/输出图片格式:YUV420SP
- n路(n≥4,1路对应一个线程)
100fps
上述性能数据,基于以下基本要求:
- 一个stream上下发10个异步媒体数据处理任务后,执行一次aclrtSynchronizeStream接口。
- CtrlCPU与AI CPU的配比是4:4
性能指标说明(昇腾910 AI处理器)
- 对于非8K缩放,单个Device的基本场景性能指标参考如下:
场景举例
总帧率
- 输入图像分辨率:1080p(1920*1080)
- 输出图像分辨率:1080p(1920*1080)
- 输入/输出图片格式:YUV420SP
- n路(n<16,1路对应一个线程)
n*360fps
- 输入图像分辨率:1080p(1920*1080)
- 输出图像分辨率:1080p(1920*1080)
- 输入/输出图片格式:YUV420SP
- n路(n≥16,1路对应一个线程)
5760fps
- 输入图像分辨率:4K图像(3840*2160)
- 输出图像分辨率:4K图像(3840*2160)
- 输入/输出图片格式:YUV420SP
- n路(n<16,1路对应一个线程)
n*90fps
- 输入图像分辨率:4K图像(3840*2160)
- 输出图像分辨率:4K图像(3840*2160)
- 输入/输出图片格式:YUV420SP
- n路(n≥16,1路对应一个线程)
1440fps
- 对于8K缩放,单个Device的典型场景性能指标参考如下:
场景举例
总帧率
- 输入图像分辨率:8K图像(7680*4320)
- 输出图像分辨率:1080p(1920*1080)
- 输入/输出图片格式:YUV420SP
- n路(n<16,1路对应一个线程)
n*25fps
- 输入图像分辨率:8K图像(7680*4320)
- 输出图像分辨率:1080p(1920*1080)
- 输入/输出图片格式:YUV420SP
- n路(n≥16,1路对应一个线程)
400fps
- 输入图像分辨率:8K图像(7680*4320)
- 输出图像分辨率:4K图像(3840*2160)
- 输入/输出图片格式:YUV420SP
- n路(n<16,1路对应一个线程)
n*25fps
- 输入图像分辨率:8K图像(7680*4320)
- 输出图像分辨率:4K图像(3840*2160)
- 输入/输出图片格式:YUV420SP
- n路(n≥16,1路对应一个线程)
400fps
上述性能数据,基于以下基本要求:
- 一个stream上下发10个异步媒体数据处理任务后,执行一次aclrtSynchronizeStream接口。
- CtrlCPU与AI CPU的配比是1:15
参考资源
RGB、YUV格式图像的各分量排布示意图。示例:SP图像以YUV420SP为例,Packed和RGB图像以ARGB图像为例。