昇腾社区首页
中文
注册

VPC功能

昇腾310 AI处理器上,当前版本仅支持缩放功能。

昇腾910 AI处理器上,当前版本仅支持缩放功能。

功能说明

VPC(vision preprocessing core)功能包括:

  • 抠图,从输入图片中抠出需要用的图片区域。
  • 缩放
    • 从是否抠多张图的维度,可分为单图裁剪缩放、一图多框裁剪缩放。
    • 其它缩放方式,如:原图缩放。
  • 叠加,从输入图片中抠出来的图,对抠出的图进行缩放后,放在用户输出图片的指定区域,输出图片可以是空白图片(由用户申请的空输出内存产生的),也可以是已有图片(由用户申请输出内存后将已有图片读入输出内存),只有当输出图片是已有图片时,才表示叠加。
  • 拼接,从输入图片中抠多张图片,对抠出的图进行缩放后,放到输出图片的指定区域。
  • 图像金字塔,对原图进行多次高斯滤波之后向下采样产生不同尺寸的图像。
  • 直方图统计,统计图像每个通道(RGB/YUV)的像素值分布。
  • 重映射,根据配置信息将图片从原图映射为另一张图。
  • 边界填充,对图像进行边界填充。
  • 格式转换,对图像进行格式转换,目前支持的输入、输出图片格式请参见约束说明
  • 图像灰度化,在昇腾310 AI处理器上,在昇腾910 AI处理器上,从YUV420SP格式的输出图像数据中只取Y分量的数据。需要注意的是输入为灰度图像、输出只能为灰度图像。

实现以上功能的接口请参见VPC图像处理接口

表1 概念解释

概念

描述

宽stride(widthStride)

指一行图像步长,表示输入图片对齐后的宽,RGB格式或YUV格式的宽stride计算方式不一样。

宽stride的对齐要求,请参见约束说明

高stride(heightStride)

指图像在内存中的行数,表示输入图片对齐后的高。

高stride的对齐要求,请参见约束说明

抠图区域

指用户指定的需抠出的图片区域。抠图起始坐标无奇数、偶数限制。

抠图区域最小分辨率为10*6,acl.himpi.vpc_crop接口抠图最大分辨率为4096*4096,其余涉及抠图的接口,抠图最大分辨率为8192*8192。

抠图区域的约束请参见约束说明

贴图区域

指在输出图片中用户指定的区域。

贴图区域最小分辨率为10*6,最大分辨率为4096*4096。

贴图区域的约束请参见约束说明

上/左偏移

通过配置上偏移、左偏移、抠图/贴图区域的宽和高可以指定抠图区域或贴图区域的位置。
  • 左偏移:输入/输出图片中,抠图/贴图区域1、3两个点相对于0点水平向左偏移的值。
  • 上偏移:输入/输出图片中,抠图/贴图区域1、2两个点相对于0点垂直向上偏移的值。

功能示意图

图1 VPC功能示意图(抠图+缩放+叠加)
图2 VPC功能示意图(拼接)
图3 VPC功能示意图(等比例缩放,即缩放前后图片的宽高比例相同)

约束说明

  • VPC输入的约束
    • 输入图片分辨率:

      10*6~8192*8192(包括8192),在调用接口实现VPC功能时,各接口对分辨率的要求可能不同,详细接口的要求请参见VPC图像处理接口

      昇腾310 AI处理器上,在昇腾910 AI处理器上,输入图片的宽高都要求2对齐。

    • 输入图片格式:
      支持hi_pixel_format的如下项:
      HI_PIXEL_FORMAT_YUV_400 = 0,              // YUV400 8bit
      HI_PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1,   // YUV420SP NV12 8bit
      HI_PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2,   // YUV420SP NV21 8bit
      HI_PIXEL_FORMAT_YUV_SEMIPLANAR_422 = 3,   // YUV422SP NV12 8bit
      HI_PIXEL_FORMAT_YVU_SEMIPLANAR_422 = 4,   // YUV422SP NV21 8bit
      HI_PIXEL_FORMAT_YUV_SEMIPLANAR_444 = 5,   // YUV444SP NV12 8bit
      HI_PIXEL_FORMAT_YVU_SEMIPLANAR_444 = 6,   // YUV444SP NV21 8bit
      HI_PIXEL_FORMAT_YUYV_PACKED_422 = 7,      // YUV422Packed YUYV 8bit
      HI_PIXEL_FORMAT_UYVY_PACKED_422 = 8,      // YUV422Packed UYVY 8bit
      HI_PIXEL_FORMAT_YVYU_PACKED_422 = 9,      // YUV422Packed YVYU 8bit
      HI_PIXEL_FORMAT_VYUY_PACKED_422 = 10,     // YUV422Packed VYUY 8bit
      HI_PIXEL_FORMAT_YUV_PACKED_444 = 11,      // YUV444Packed 8bit
      HI_PIXEL_FORMAT_RGB_888 = 12,             // RGB888
      HI_PIXEL_FORMAT_BGR_888 = 13,             // BGR888
      HI_PIXEL_FORMAT_ARGB_8888 = 14,           // ARGB8888       
      HI_PIXEL_FORMAT_ABGR_8888 = 15,           // ABGR8888
      HI_PIXEL_FORMAT_RGBA_8888 = 16,           // RGBA8888
      HI_PIXEL_FORMAT_BGRA_8888 = 17,           // BGRA8888
      HI_PIXEL_FORMAT_YUV_SEMI_PLANNER_420_10BIT = 18,    // YUV420SP 10bit 
      HI_PIXEL_FORMAT_YVU_SEMI_PLANNER_420_10BIT = 19,    // YVU420sp 10bit  
        
    • 输入内存:
      • 内存地址起始要求16Byte对齐,其中128Byte对齐性能最高。Device的内存,调用acl.himpi.dvpp_malloc接口/acl.himpi.dvpp_free接口申请或释放内存。
      • 输入内存大小与图片数据的格式相关,计算公式如下:
        • YUV400:在昇腾310 AI处理器上,在昇腾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
        • XRGB8888:widthStride*heightStride
    • 输入图片的widthStride、heightStride对齐要求:
      • widthStride最小值为32。widthStride的值与图片数据的格式有关,widthStride的计算公式如下:
        • YUV400、YUV420SP、YUV422SP、YUV444SP:输入图片的宽(width)对齐到16。
        • YUV422Packed:输入图片的宽(width)对齐到16后,再乘以2(宽16对齐,每个像素占2个字节)。
        • YUV444Packed、RGB888:输入图片的宽(width)对齐到16,再乘以3(宽16对齐,每个像素占3个字节)。
        • XRGB8888:输入图片的宽(width)对齐到16后,再乘以4(宽16对齐,每个像素占4个字节)。
      • heightStride:在昇腾310 AI处理器上,在昇腾910 AI处理器上,最小为6,且要求2对齐。
  • VPC输出的约束
    • 输出图片分辨率:

      10*6~4096*4096

    • 输出图片格式:
      支持hi_pixel_format值中的如下项:
       
      HI_PIXEL_FORMAT_YUV_SEMIPLANAR_420 = 1,   // YUV420SP NV12 8bit
      HI_PIXEL_FORMAT_YVU_SEMIPLANAR_420 = 2,   // YUV420SP NV21 8bit
    • 输出内存:
    • 输出图片的宽stride、高stride对齐要求:
      • 宽stride:最小值为32。widthStride的值与图片数据的格式有关,widthStride的计算公式请参见▪输入图片的宽stridewidthStride...
      • heightStride:

        昇腾310 AI处理器,heightStride最小6、最大16384,且要求2对齐。

        昇腾910 AI处理器,heightStride最小6、最大16384,且要求2对齐。

  • VPC抠图、贴图约束
    • 抠图区域不超出输入图片,贴图区域不超出输出图片。
    • 最大贴图个数256个。
    • 昇腾310 AI处理器上,在昇腾910 AI处理器上,贴图区域奇数、偶数限制为:左偏移和上偏移为偶数、右偏移和下偏移为奇数。
    • 贴图区域相对输出图片的左偏移16对齐。

      贴图时可直接放置在输出图片的最左侧,即相对输出图片的左偏移为0,0也满足16对齐的要求。

    • 输出图片的贴图宽度建议16对齐,如果不是16对齐,会多写一段无效数据使其16对齐。见图3,贴图区域旁边的绿色框就表示无效数据。
    • 昇腾310 AI处理器上,在昇腾910 AI处理器上,针对缩放功能,贴图/抠图的宽高缩放比例范围:[1/32, 16]。
    • 昇腾310 AI处理器上,在昇腾910 AI处理器上,等比例缩放场景下,当输出图片格式为YUV420SP格式时,贴图左偏移满足16对齐、上偏移2对齐的要求即可。
  • 昇腾310 AI处理器上,在昇腾910 AI处理器上,VPC的输出作为模型推理的输入时

    由于经过VPC处理的输出图片中的贴图区域的宽*高有16*2对齐的约束,因此输出图片中的贴图区域的宽、高有一些补边的无效数据,所以在VPC贴图前,应首先使用VPC的缩放功能将贴图区域的分辨率缩放成16*2对齐,否则无效数据会影响模型推理的精度。

参考说明

RGB、YUV格式图像的各分量排布示意图。示例:SP图像以YUV420SP为例,Packed和RGB图像以ARGB图像为例。