LoadImageToLocal
产 品 支 持 情 况
功 能 说 明
将 图 像 数 据 从Global Memory搬 运 到Local Memory。 搬 运 过 程 中 可 以 完 成 图 像 预 处 理 操 作:包 括 图 像 翻 转,改 变 图 像 尺 寸(抠 图,裁 边,缩 放,伸 展),以 及 色 域 转 换,类 型 转 换 等。图 像 预 处 理 的 相 关 参 数 通 过SetAippFunctions进 行 配 置。
函 数 原 型
template <typename T>
__aicore__ inline void LoadImageToLocal(const LocalTensor<T>& dst, const LoadImageToLocalParams& loadDataParams)
参 数 说 明
表 1 参 数 说 明
LocalTensor的 起 始 地 址需 要 保 证32字 节 对 齐。 Ascend 950PR/Ascend 950DT,支 持 的 数 据 类 型 为:uint8_t、int8_t、half;支 持 的TPosition为VECIN、VECCALC、VECOUT。 | ||
LoadData参 数 结 构 体,类 型 为LoadImageToLocalParams。 具 体 定 义 请 参 考${INSTALL_DIR}/include/ascendc/basic_api/interface/kernel_struct_mm.h,${INSTALL_DIR}请 替 换 为CANN软 件 安 装 后 文 件 存 储 路 径。 参 数 说 明 参 考表2。 |
表 2 LoadImageToLocalParams结 构 体 内 参 数 说 明
从 源 图 中 加 载 图 片 的 水 平 宽 度,单 位 为 像 素,取 值 范 围:horizSize∈[2, 4095] 。 | ||
从 源 图 中 加 载 图 片 的 垂 直 高 度,单 位 为 像 素,取 值 范 围:vertSize∈[2, 4095]。 | ||
加 载 图 片 在 源 图 片 上 的 水 平 起 始 地 址,单 位 为 像 素,取 值 范 围:horizStartPos∈[0, 4095] 。默 认 为0。 注 意:当 输 入 图 片 为YUV420SP、XRGB8888, RGB888和YUV400格 式 时,该 参 数 需 要 是 偶 数。 | ||
加 载 图 片 在 源 图 片 上 的 垂 直 起 始 地 址,单 位 为 像 素,取 值 范 围:vertStartPos∈[0, 4095] 。默 认 为0。 | ||
目 的 图 像 顶 部 填 充 的 像 素 数 ,取 值 范 围:topPadSize∈[0, 32] ,默 认 为0。进 行 数 据 填 充 时 使 用,需 要 先 调 用SetAippFunctions通 过AippPaddingParams配 置 填 充 的 数 值,再 通 过topPadSize、botPadSize、leftPadSize、rightPadSize配 置 填 充 的 大 小 范 围。 | ||
目 的 图 像 左 边 填 充 的 像 素 数,取 值 范 围:leftPadSize∈[0, 32] ,默 认 为0。 | ||
目 的 图 像 右 边 填 充 的 像 素 数,取 值 范 围:rightPadSize∈[0, 32] ,默 认 为0。 | ||
约 束 说 明
- 操 作 数 地 址 对 齐 要 求 请 参 见通 用 地 址 对 齐 约 束。
- 加 载 到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 });