公司动态
CANN/asc-devkit图像加载API文档
# LoadImageToLocal【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit产品支持情况Ascend 950PR/Ascend 950DT支持Atlas A3 训练系列产品/Atlas A3 推理系列产品支持Atlas A2 训练系列产品/Atlas A2 推理系列产品支持Atlas 200I/500 A2 推理产品支持Atlas 推理系列产品AI Core支持Atlas 推理系列产品Vector Core不支持Atlas 训练系列产品不支持功能说明将图像数据从Global Memory搬运到Local Memory。搬运过程中可以完成图像预处理操作包括图像翻转改变图像尺寸抠图裁边缩放伸展以及色域转换类型转换等。图像预处理的相关参数通过SetAippFunctions进行配置。函数原型template typename T __aicore__ inline void LoadImageToLocal(const LocalTensorT dst, const LoadImageToLocalParams loadDataParams)参数说明表1参数说明参数名称输入/输出含义dst输出目的操作数类型为LocalTensor。LocalTensor的起始地址需要保证32字节对齐。loadDataParams输入LoadData参数结构体类型为LoadImageToLocalParams。具体定义请参考${INSTALL_DIR}/asc/include/basic_api/interface/kernel_struct_mm.h${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。参数说明参考表2。表2LoadImageToLocalParams结构体内参数说明参数名称输入/输出含义horizSize输入从源图中加载图片的水平宽度单位为像素取值范围horizSize∈[2, 4095]。vertSize输入从源图中加载图片的垂直高度单位为像素取值范围vertSize∈[2, 4095]。horizStartPos输入加载图片在源图片上的水平起始地址单位为像素取值范围horizStartPos∈[0, 4095]。默认为0。注意当输入图片为YUV420SP、XRGB8888、RGB888、YUV400格式时该参数需要是偶数。vertStartPos输入加载图片在源图片上的垂直起始地址单位为像素取值范围vertStartPos∈[0, 4095]。默认为0。注意当输入图片为YUV420SP格式时该参数需要是偶数。srcHorizSize输入源图像水平宽度单位为像素取值范围srcHorizSize∈[2, 4095]。注意当输入图片为YUV420SP格式时该参数需要是偶数。topPadSize输入目的图像顶部填充的像素数取值范围topPadSize∈[0, 32]默认为0。进行数据填充时使用需要先调用SetAippFunctions通过AippPaddingParams配置填充的数值再通过topPadSize、botPadSize、leftPadSize、rightPadSize配置填充的大小范围。botPadSize输入目的图像底部填充的像素数取值范围botPadSize∈[0, 32]默认为0。leftPadSize输入目的图像左边填充的像素数取值范围leftPadSize∈[0, 32]默认为0。rightPadSize输入目的图像右边填充的像素数取值范围rightPadSize∈[0, 32]默认为0。sid输入预留参数。为后续的功能做保留开发者暂时无需关注使用默认值即可。数据类型Ascend 950PR/Ascend 950DT支持的数据类型为int8_t、uint8_t、half。Atlas A3训练系列产品/Atlas A3推理系列产品支持数据类型int8_t、half。Atlas A2训练系列产品/Atlas A2推理系列产品支持数据类型int8_t、half。Atlas 200I/500 A2 推理产品支持数据类型为int8_t、uint8_t、half。Atlas 推理系列产品AI Core支持的数据类型为int8_t、uint8_t、half。返回值说明无约束说明操作数地址对齐要求请参见通用地址对齐约束。加载到dst的图片的大小加padding的大小必须小于等于所在存储空间的大小。当通过SetAippFunctions配置padding模式为块填充模式或者镜像块填充模式时因为padding的数据来自于抠出的图片左右padding的长度leftPadSize、rightPadSize必须小于或等于抠图的水平长度horizSize上下padding的长度topPadSize、botPadSize必须小于或等于抠图的垂直的长度vertSize。支持的物理存储位置为L1 BufferTPosition: A1/B1。特别针对Ascend 950PR/Ascend 950DT支持物理存储位置为VECIN、VECCALC、VECOUT。调用示例该调用示例支持的运行平台为Atlas 推理系列产品AI Core示例图片格式为YUV420SP。constexpr uint16_t imageWidth 32; constexpr uint16_t imageHeight 32; constexpr uint32_t yPlaneSize imageWidth * imageHeight; constexpr uint32_t inputSize yPlaneSize * 3 / 2; constexpr uint32_t outputChannels 32; constexpr uint32_t dstElemCount imageWidth * imageHeight * outputChannels; // 源操作数GM上一张32x32 YUV420SP图片前1024B为Y平面后512B为UV平面。 AscendC::GlobalTensoruint8_t fmGlobal; fmGlobal.SetGlobalBuffer((__gm__ uint8_t *)src, inputSize); // 目的操作数L1 Buffer。 AscendC::LocalTensorint8_t featureMapA1(AscendC::TPosition::A1, a1Addr, dstElemCount); // format YUV420SP_U8表示输入为uint8_t类型的YUV420 Semi-Planar图片。 AscendC::AippInputFormat inputFormat AscendC::AippInputFormat::YUV420SP_U8; AscendC::AippParamsint8_t aippConfig; // 本示例不做HW padding、通道交换、单行读取、均值/缩放和色域转换这些子参数使用结构体默认值。 // 输出U int8_t时将通道padding到32通道即每个像素输出32B。 aippConfig.cPaddingParams.cPaddingMode 0; // 通道padding补0目的Tensor额外通道写入0。 aippConfig.cPaddingParams.cPaddingValue static_castint8_t(0); // src0为Y平面起始地址src1为UV平面起始地址YUV420SP 32x32的UV偏移为32 * 32 1024个uint8_t。 AscendC::SetAippFunctions(fmGlobal, fmGlobal[yPlaneSize], inputFormat, aippConfig); AscendC::LoadImageToLocalParams loadParams; // 从源图加载32像素宽等于整张32x32示例图的宽度。 loadParams.horizSize 32; // 从源图加载32像素高等于整张32x32示例图的高度。 loadParams.vertSize 32; // 水平起始位置为第0个像素YUV420SP场景要求为偶数0满足约束。 loadParams.horizStartPos 0; // 垂直起始位置为第0行YUV420SP场景要求为偶数0满足约束。 loadParams.vertStartPos 0; // 源图每行宽度为32像素YUV420SP场景要求为偶数32满足约束。 loadParams.srcHorizSize 32; // 顶部不做HW方向padding。 loadParams.topPadSize 0; // 底部不做HW方向padding。 loadParams.botPadSize 0; // 左侧不做HW方向padding。 loadParams.leftPadSize 0; // 右侧不做HW方向padding。 loadParams.rightPadSize 0; // 预留参数固定配置为0。 loadParams.sid 0; AscendC::LoadImageToLocal(featureMapA1, loadParams);【免费下载链接】asc-devkit本项目是CANN 推出的昇腾AI处理器专用的算子程序开发语言原生支持C和C标准规范主要由类库和语言扩展层构成提供多层级API满足多维场景算子开发诉求。项目地址: https://gitcode.com/cann/asc-devkit创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考