LoadImageToLocal
产品支持情况
功能说明
将图像数据从Global Memory搬运到Local Memory。 搬运过程中可以完成图像预处理操作:包括图像翻转,改变图像尺寸(抠图,裁边,缩放,伸展),以及色域转换,类型转换等。图像预处理的相关参数通过SetAippFunctions进行配置。
函数原型
template <typename T>
__aicore__ inline void LoadImageToLocal(const LocalTensor<T>& dst, const LoadImageToLocalParams& loadDataParams)
参数说明
表 1 参数说明
|
Ascend 950PR/Ascend 950DT,支持的数据类型为:uint8_t、int8_t、half;支持的TPosition为VECIN、VECCALC、VECOUT。 Atlas A3 训练系列产品/Atlas A3 推理系列产品,支持数据类型:int8_t、half;支持的TPosition为A1、B1。 Atlas A2 训练系列产品/Atlas A2 推理系列产品,支持数据类型:int8_t、half;支持的TPosition为A1、B1。 Atlas 200I/500 A2 推理产品 支持数据类型为:uint8_t、int8_t、half;支持的TPosition为A1、B1。 Atlas 推理系列产品AI Core,支持的数据类型为:uint8_t、int8_t、half;支持的TPosition为A1、B1。 |
||
LoadData参数结构体,类型为LoadImageToLocalParams。 具体定义请参考${INSTALL_DIR}/include/ascendc/basic_api/interface/kernel_struct_mm.h,${INSTALL_DIR}请替换为CANN软件安装后文件存储路径。 参数说明参考表2。 |
表 2 LoadImageToLocalParams结构体内参数说明
目的图像顶部填充的像素数 ,取值范围:topPadSize∈[0, 32] ,默认为0。进行数据填充时使用,需要先调用SetAippFunctions通过AippPaddingParams配置填充的数值,再通过topPadSize、botPadSize、leftPadSize、rightPadSize配置填充的大小范围。 |
||
约束说明
- 操作数地址对齐要求请参见通用地址对齐约束。
- 加载到dst的图片的大小加padding的大小必须小于等于所在存储空间的大小。
- 当通过SetAippFunctions配置padding模式为块填充模式或者镜像块填充模式时,因为padding的数据来自于抠出的图片,左右padding的长度(leftPadSize、rightPadSize)必须小于或等于抠图的水平长度(horizSize),上下padding的长度(topPadSize、botPadSize)必须小于或等于抠图的垂直的长度(vertSize)。
返回值说明
无
调用示例
该调用示例支持的运行平台为Atlas 推理系列产品AI Core,示例图片格式为YUV420SP。
uint16_t horizSize = 32, vertSize = 32, horizStartPos = 0, vertStartPos = 0, srcHorizSize = 32, srcVertSize = 32, leftPadSize = 0, rightPadSize = 0;
uint32_t dstHorizSize = 32, dstVertSize = 32, cSize = 32;
uint8_t topPadSize = 0, botPadSize = 0;
uint32_t gmSrc0Size = 0, gmSrc1Size = 0, dstSize = 0;
AscendC::AippInputFormat inputFormat = AscendC::AippInputFormat::YUV420SP_U8;
uint32_t cPadMode = 0;
int8_t cPaddingValue = 0;
AscendC::TPipe pipe;
AscendC::TQue<AscendC::TPosition::A1, 1> inQueueA1;
AscendC::TQue<AscendC::TPosition::VECOUT, 1> outQueueUB;
AscendC::LocalTensor<int8_t> featureMapA1 = inQueueA1.AllocTensor<int8_t>();
uint64_t fm_addr = static_cast<uint64_t>(reinterpret_cast<uintptr_t>(fmGlobal.GetPhyAddr()));
// aipp config
AscendC::AippParams<int8_t> aippConfig;
aippConfig.cPaddingParams.cPaddingMode = cPadMode;
aippConfig.cPaddingParams.cPaddingValue = cPaddingValue;
// fmGlobal为整张输入图片,src1参数处填入图片UV维度的起始地址
AscendC::SetAippFunctions(fmGlobal, fmGlobal[gmSrc0Size], inputFormat, aippConfig);
AscendC::LoadImageToLocal(featureMapA1, { horizSize, vertSize, horizStartPos, vertStartPos, srcHorizSize, topPadSize, botPadSize, leftPadSize, rightPadSize });