SetAippFunctions
产 品 支 持 情 况
功 能 说 明
设 置 图 片 预 处 理(AIPP,AI core pre-process)相 关 参 数。和LoadImageToLocal接 口 配 合 使 用。设 置 后,调 用LoadImageToLocal接 口 可 在 搬 运 过 程 中 完 成 图 像 预 处 理 操 作:包 括 数 据 填 充,通 道 交 换,单 行 读 取、数 据 类 型 转 换、通 道 填 充、色 域 转 换。调 用SetAippFunctions接 口 时 需 传 入 源 图 片 在Global Memory上 的 矩 阵、源 图 片 的 图 片 格 式。
数 据 填 充:在 图 片HW方 向 上padding。分 为 如 下 几 种 模 式:
模 式0:常 量 填 充 模 式,padding区 域 各 位 置 填 充 为 常 数,支 持 设 置 每 个 通 道 填 充 的 常 数。该 模 式 下 仅 支 持 左 右padding,不 支 持 上 下padding。
图 1 常 量 填 充 模 式(图 片 中 间 的 绿 色 区 域 表 示 原 始 数 据,其 他 为padding数 据)

模 式1:行 列 填 充 模 式,padding区 域 各 位 置 填 充 行/列 上 最 邻 近 源 图 片 位 置 的 数 据。
图 2 行 列 填 充 模 式(图 片 中 间 的 绿 色 区 域 表 示 原 始 数 据,其 他 为padding数 据)

模 式2:块 填 充 模 式,按 照padding的 宽 高,从 源 图 片 拷 贝 数 据 块 进 行padding区 域 填 充。
图 3 块 填 充 模 式(图 片 中 间 的 绿 色 区 域 表 示 原 始 数 据,其 他 为padding数 据)

模 式3:镜 像 块 填 充 模 式,按 照padding的 宽 高,从 源 图 片 拷 贝 数 据 块 的 镜 像 进 行padding区 域 填 充。
图 4 镜 像 块 填 充 模 式(图 片 中 间 的 绿 色 区 域 表 示 原 始 数 据,其 他 为padding数 据)

通 道 交 换:将 图 片 通 道 进 行 交 换。
对 于RGB888格 式,支 持 交 换R和B通 道。
对 于YUV420SP格 式,支 持 交 换U和V通 道。
对 于XRGB8888格 式,支 持X通 道 后 移(XRGB->RGBX)、支 持 交 换R和B通 道。
单 行 读 取:源 图 片 中 仅 读 取 一 行。
说 明
调 用 数 据 搬 运 接 口 时,开 启 单 行 读 取 后 设 置 的 目 的 图 片 高 度 参 数 无 效,如LoadImageToLocal接 口 的loadImageToLocalParams.vertSize。
数 据 类 型 转 换:转 换 像 素 的 数 据 类 型,支 持uint8_t转 换 为int8_t或half。当uint8_t转 换 成int8_t的 时 候,输 出 数 据 范 围 限 制 在[-128, 127]。
Text// 例1:实 现uint8_t ->int8_t 的 类 型 转 换,同 时 实 现 零 均 值 化:设 置 每 个 通 道mean值 为 该 通 道 所 有 数 据 的 平 均 值(min和var值 无 效,不 用 设 置)。 output[i][j][k] = input[i][j][k] - mean[k] // 例2:实 现uint8_t -> fp16 的 类 型 转 换,同 时 实 现 归 一 化:设 置 每 个 通 道mean值 为 该 通 道 所 有 数 据 的 平 均 值,min值 为 该 通 道 所 有 数 据 零 均 值 化 后 的 最 小 值,var值 为 该 通 道 所 有 数 据 的 最 大 值 减 最 小 值 的 倒 数。 uint8_t -> fp16: output[i][j][k] = (input[i][j][k] - mean[k] - min[k]) * var[k]说 明
转 换 后 的 数 据 类 型 是 由 模 板 参 数U配 置,U为uint8_t时 数 据 类 型 转 换 功 能 不 生 效。 调 用 数 据 搬 运 接 口 时,目 的Tensor的 数 据 类 型 需 要 与 本 接 口 输 出 数 据 类 型 保 持 一 致,如LoadImageToLocal的dstLocal参 数 的 数 据 类 型。
通 道 填 充:在 图 片 通 道 方 向 上padding。默 认 为 模 式0。
模 式0:将 通 道padding至32Bytes。即 输 出 数 据 类 型 为uint8_t/int8_t时,padding至32通 道;输 出 数 据 类 型 为fp16时,padding至16通 道。
模 式1:将 通 道padding至4通 道。
色 域 转 换:RGB格 式 转 换 为YUV格 式,或YUV模 式 转 换 为RGB格 式。


函 数 原 型
输 入 图 片 格 式 为YUV400、RGB888、XRGB8888
Texttemplate<typename T, typename U> __aicore__ inline void SetAippFunctions(const GlobalTensor<T>& src0, AippInputFormat format, AippParams<U> config)输 入 图 片 格 式 为YUV420 Semi-Planar
Texttemplate<typename T, typename U> __aicore__ inline void SetAippFunctions(const GlobalTensor<T>& src0, const GlobalTensor<T>& src1, AippInputFormat format, AippParams<U> config)
参 数 说 明
表 1 模 板 参 数 说 明
输 出 的 数 据 类 型,需 要 在 搬 运 接 口 配 置 同 样 的 数 据 类 型,如LoadImageToLocal的dstLocal参 数 数 据 类 型。
|
表 2 参 数 说 明
源 图 片 的 图 片 格 式。AippInputFormat为 枚 举 类 型,取 值 为: AippInputFormat::YUV420SP_U8:图 片 格 式 为YUV420 Semi-Planar,数 据 类 型 为uint8_t AippInputFormat::XRGB8888_U8:图 片 格 式 为XRGB8888,数 据 类 型 为uint8_t AippInputFormat::RGB888_U8:图 片 格 式 为RGB888,数 据 类 型 为uint8_t AippInputFormat::YUV400_U8:图 片 格 式 为YUV400,数 据 类 型 为uint8_t enum class AippInputFormat : uint8_t { YUV420SP_U8 = 0, XRGB8888_U8 = 1, RGB888_U8 = 4, YUV400_U8 = 9, }; | ||
图 片 预 处 理 的 相 关 参 数,类 型 为AippParams,结 构 体 具 体 定 义 为: template <typename T>
struct AippParams {
AippPaddingParams<T> paddingParams;
AippSwapParams swapParams;
AippSingleLineParams singleLineParams;
AippDataTypeConvParams dtcParams;
AippChannelPaddingParams<T> cPaddingParams;
AippColorSpaceConvParams cscParams;
};AippParams结 构 体 内 各 子 结 构 体 定 义 如 下:
|
表 3 AippPaddingParams结 构 体 内 参 数 说 明
表 4 AippSwapParams结 构 体 内 参 数 说 明
表 5 AippSingleLineParams结 构 体 内 参 数 说 明
表 6 AippDataTypeConvParams结 构 体 内 参 数 说 明
控 制dtc做 数 据 类 型 转 换 的 模 式,数 据 类 型 为uint32_t,默 认 值 为0。 0:四 舍 五 入 到 最 接 近 的整 数 值(C语 言round)。 |
表 7 AippChannelPaddingParams结 构 体 内 参 数 说 明
channel padding的 类 型,取 值 范 围 为[0, 1],默 认 值 为0。 0:填 充 到32B。即 输 出 数 据 类 型U为uint8_t/int8_t时 填 充 到32通 道,为half时 填 充 到16通 道。 | ||
表 8 AippColorSpaceConvParams结 构 体 内 参 数 说 明
约 束 说 明
src0、src1在Global Memory上 的 地 址 对 齐 要 求 如 下:
对 于XRGB输 入 格 式 的 数 据,芯 片 在 处 理 的 时 候 会 默 认 丢 弃 掉 第 四 个 通 道 的 数 据 输 出RGB格 式 的 数 据,所 以 如 果 是X在channel0的 场 景 下,为 了 达 成 上 述 目 的,X通 道 后 移 的 功 能 必 须 开 启,将 输 入 的 通 道 转 换 为RGBX;反 之 如 果 是X在channel3的 场 景 下,X通 道 后 移 的 功 能 必 须 不 开 启 以 输 出RGB格 式 的 数 据。
返 回 值 说 明
无
调 用 示 例
该 调 用 示 例 支 持 的 运 行 平 台 为Atlas 推 理 系 列 产 品AI Core,示 例 图 片 格 式 为YUV420SP。
Textuint16_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 });