Skip to content
版 本

SetAippFunctions

产 品 支 持 情 况

产 品

是 否 支 持

Ascend 950PR/Ascend 950DT

Atlas A3 训 练 系 列 产 品/Atlas A3 推 理 系 列 产 品

Atlas A2 训 练 系 列 产 品/Atlas A2 推 理 系 列 产 品

Atlas 200I/500 A2 推 理 产 品

Atlas 推 理 系 列 产 品AI Core

Atlas 推 理 系 列 产 品Vector Core

x

Atlas 训 练 系 列 产 品

x

功 能 说 明

设 置 图 片 预 处 理(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

    Text
    template<typename T, typename U>
    __aicore__ inline void SetAippFunctions(const GlobalTensor<T>& src0, AippInputFormat format, AippParams<U> config)
    
  • 输 入 图 片 格 式 为YUV420 Semi-Planar

    Text
    template<typename T, typename U>
    __aicore__ inline void SetAippFunctions(const GlobalTensor<T>& src0, const GlobalTensor<T>& src1, AippInputFormat format, AippParams<U> config)
    

参 数 说 明

表 1 模 板 参 数 说 明

参 数 名 称

含 义

T

输 入 的 数 据 类 型,需 要 与format中 设 置 的 数 据 类 型 保 持 一 致。

U

输 出 的 数 据 类 型,需 要 在 搬 运 接 口 配 置 同 样 的 数 据 类 型,如LoadImageToLocal的dstLocal参 数 数 据 类 型。

  • 如 果 不 开 启 数 据 类 型 转 换 功 能,需 要 与 输 入 类 型 保 持 一 致;
  • 如 果 开 启 数 据 类 型 转 换 功 能,需 要 与 期 望 转 换 后 的 类 型 保 持 一 致。

表 2 参 数 说 明

参 数 名 称

输 入/输 出

含 义

src0

输 入

源 图 片 在Global Memory上 的 矩 阵。

源 图 片 格 式 为YUV420SP时,表 示Y维 度 在Global Memory上 的 矩 阵。

src1

输 入

源 图 片 格 式 为YUV420SP时,表 示UV维 度 在Global Memory上 的 矩 阵。

源 图 片 格 式 为 其 他 格 式 时,该 参 数 无 效。

format

输 入

源 图 片 的 图 片 格 式。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,
};

config

输 入

图 片 预 处 理 的 相 关 参 数,类 型 为AippParams,结 构 体 具 体 定 义 为:

template <typename T>
struct AippParams {
    AippPaddingParams<T> paddingParams;
    AippSwapParams swapParams;
    AippSingleLineParams singleLineParams;
    AippDataTypeConvParams dtcParams;
    AippChannelPaddingParams<T> cPaddingParams;
    AippColorSpaceConvParams cscParams;
};

AippParams结 构 体 内 各 子 结 构 体 定 义 如 下:

  • 数 据 填 充 功 能 相 关 参 数,说 明 见表3
    template <typename T>
    struct AippPaddingParams {
        uint32_t paddingMode;
        T paddingValueCh0;
        T paddingValueCh1;
        T paddingValueCh2;
        T paddingValueCh3;
    };
  • 通 道 交 换 功 能 相 关 参 数,说 明 见表4
    struct AippSwapParams {
        bool isSwapRB;
        bool isSwapUV;
        bool isSwapAX;
    };
  • 单 行 读 取 功 能 相 关 参 数,说 明 见表5
    struct AippSingleLineParams {
        bool isSingleLineCopy;
    };
  • 数 据 类 型 转 换 功 能 相 关 参 数,说 明 见表6
    struct AippDataTypeConvParams {
        uint8_t dtcMeanCh0{ 0 };
        uint8_t dtcMeanCh1{ 0 };
        uint8_t dtcMeanCh2{ 0 };
        half dtcMinCh0{ 0 };
        half dtcMinCh1{ 0 };
        half dtcMinCh2{ 0 };
        half dtcVarCh0{ 1.0 };
        half dtcVarCh1{ 1.0 };
        half dtcVarCh2{ 1.0 };
        uint32_t dtcRoundMode{ 0 };
    };
  • 通 道 填 充 功 能 相 关 参 数,说 明 见表7
    template <typename T>
    struct AippChannelPaddingParams {
        uint32_t cPaddingMode;
        T cPaddingValue;
    };
  • 色 域 转 换 功 能 相 关 参 数,说 明 见表8
    struct AippColorSpaceConvParams {
        bool isEnableCsc;
        int16_t cscMatrixR0C0;
        int16_t cscMatrixR0C1;
        int16_t cscMatrixR0C2;
        int16_t cscMatrixR1C0;
        int16_t cscMatrixR1C1;
        int16_t cscMatrixR1C2;
        int16_t cscMatrixR2C0;
        int16_t cscMatrixR2C1;
        int16_t cscMatrixR2C2;
        uint8_t cscBiasIn0;
        uint8_t cscBiasIn1;
        uint8_t cscBiasIn2;
        uint8_t cscBiasOut0;
        uint8_t cscBiasOut1;
        uint8_t cscBiasOut2;
    };

表 3 AippPaddingParams结 构 体 内 参 数 说 明

参 数 名 称

输 入/输 出

含 义

paddingMode

输 入

padding的 模 式,取 值 范 围[0, 3],默 认 值 为0。

0:常 数 填 充 模 式,此 模 式 仅 支 持 左 右 填 充。

1:行 列 拷 贝 模 式。

2:块 拷 贝 模 式。

3:镜 像 块 拷 贝 模 式。

paddingValueCh0

输 入

padding区 域 中channel0填 充 的 数 据,仅 常 数 填 充 模 式 有 效,数 据 类 型 为T,默 认 值 为0。

paddingValueCh1

输 入

padding区 域 中channel1填 充 的 数 据,仅 常 数 填 充 模 式 有 效,数 据 类 型 为T,默 认 值 为0。

paddingValueCh2

输 入

padding区 域 中channel2填 充 的 数 据,仅 常 数 填 充 模 式 有 效,数 据 类 型 为T,默 认 值 为0。

paddingValueCh3

输 入

padding区 域 中channel3填 充 的 数 据,仅 常 数 填 充 模 式 有 效,数 据 类 型 为T,默 认 值 为0。

表 4 AippSwapParams结 构 体 内 参 数 说 明

参 数 名 称

输 入/输 出

含 义

isSwapRB

输 入

对 于RGB888、XRGB8888格 式,是 否 交 换R和B通 道。默 认 值 为false。

isSwapUV

输 入

对 于YUV420SP格 式,是 否 交 换U和V通 道。默 认 值 为false。

isSwapAX

输 入

对 于XRGB8888格 式,是 否 将X通 道 后 移,即XRGB->RGBX。默 认 值 为false。

表 5 AippSingleLineParams结 构 体 内 参 数 说 明

参 数 名 称

输 入/输 出

含 义

isSingleLineCopy

输 入

是 否 开 启 单 行 读 取 模 式。开 启 后,仅 从 源 图 片 读 取 一 行。默 认 值 为false。

表 6 AippDataTypeConvParams结 构 体 内 参 数 说 明

参 数 名 称

输 入/输 出

含 义

dtcMeanCh0

输 入

计 算 公 式 内 的mean值,channel0,数 据 类 型 为uint8_t,默 认 值 为0。

dtcMeanCh1

输 入

计 算 公 式 内 的mean值,channel1,数 据 类 型 为uint8_t,默 认 值 为0。

dtcMeanCh2

输 入

计 算 公 式 内 的mean值,channel2,数 据 类 型 为uint8_t,默 认 值 为0。

dtcMinCh0

输 入

计 算 公 式 内 的min值,channel0,数 据 类 型 为half,默 认 值 为0。

Atlas 200I/500 A2 推 理 产 品不 支 持 配 置 该 参 数。

dtcMinCh1

输 入

计 算 公 式 内 的min值,channel1,数 据 类 型 为half,默 认 值 为0。

Atlas 200I/500 A2 推 理 产 品不 支 持 配 置 该 参 数。

dtcMinCh2

输 入

计 算 公 式 内 的min值,channel2,数 据 类 型 为half,默 认 值 为0。

Atlas 200I/500 A2 推 理 产 品不 支 持 配 置 该 参 数。

dtcVarCh0

输 入

计 算 公 式 内 的var值,channel0,数 据 类 型 为half,默 认 值 为1.0。

dtcVarCh1

输 入

计 算 公 式 内 的var值,channel1,数 据 类 型 为half,默 认 值 为1.0。

dtcVarCh2

输 入

计 算 公 式 内 的var值,channel2,数 据 类 型 为half,默 认 值 为1.0。

dtcRoundMode

输 入

控 制dtc做 数 据 类 型 转 换 的 模 式,数 据 类 型 为uint32_t,默 认 值 为0。

0:四 舍 五 入 到 最 接 近 的整 数 值(C语 言round)。

1:四 舍 五 入 到 最 接 近 的 偶 数(C语 言rint)。

Atlas 200I/500 A2 推 理 产 品支 持 配 置 该 参 数。

表 7 AippChannelPaddingParams结 构 体 内 参 数 说 明

参 数 名 称

输 入/输 出

含 义

cPaddingMode

输 入

channel padding的 类 型,取 值 范 围 为[0, 1],默 认 值 为0。

0:填 充 到32B。即 输 出 数 据 类 型U为uint8_t/int8_t时 填 充 到32通 道,为half时 填 充 到16通 道。

1:填 充 到4通 道。

cPaddingValue

输 入

channel padding填 充 的 值,数 据 类 型 为T,默 认 值 为0。

表 8 AippColorSpaceConvParams结 构 体 内 参 数 说 明

参 数 名 称

输 入/输 出

含 义

isEnableCsc

输 入

是 否 开 启 色 域 转 换 功 能,默 认 值 为false。

cscMatrixR0C0

输 入

色 域 转 换 矩 阵cscMatrix[0][0]。

cscMatrixR0C1

输 入

色 域 转 换 矩 阵cscMatrix[0][1]。

cscMatrixR0C2

输 入

色 域 转 换 矩 阵cscMatrix[0][2]。

cscMatrixR1C0

输 入

色 域 转 换 矩 阵cscMatrix[1][0]。

cscMatrixR1C1

输 入

色 域 转 换 矩 阵cscMatrix[1][1]。

cscMatrixR1C2

输 入

色 域 转 换 矩 阵cscMatrix[1][2]。

cscMatrixR2C0

输 入

色 域 转 换 矩 阵cscMatrix[2][0]。

cscMatrixR2C1

输 入

色 域 转 换 矩 阵cscMatrix[2][1]。

cscMatrixR2C2

输 入

色 域 转 换 矩 阵cscMatrix[2][2]。

cscBiasIn0

输 入

RGB转YUV偏 置cscBiasIn[0]。YUV转RGB时 无 效。

cscBiasIn1

输 入

RGB转YUV偏 置cscBiasIn[1]。YUV转RGB时 无 效。

cscBiasIn2

输 入

RGB转YUV偏 置cscBiasIn[2]。YUV转RGB时 无 效。

cscBiasOut0

输 入

YUV转RGB偏 置cscBiasOut0[0]。RGB转YUV时 无 效。

cscBiasOut1

输 入

YUV转RGB偏 置cscBiasOut1[1]。RGB转YUV时 无 效。

cscBiasOut2

输 入

YUV转RGB偏 置cscBiasOut2[2]。RGB转YUV时 无 效。

约 束 说 明

  • src0、src1在Global Memory上 的 地 址 对 齐 要 求 如 下:

    图 片 格 式

    src0

    src1

    YUV420SP

    必 须2Bytes对 齐

    必 须2Bytes对 齐

    XRGB8888

    必 须4Bytes对 齐

    -

    RGB888

    无 对 齐 要 求

    -

    YUV400

    无 对 齐 要 求

    -

  • 对 于XRGB输 入 格 式 的 数 据,芯 片 在 处 理 的 时 候 会 默 认 丢 弃 掉 第 四 个 通 道 的 数 据 输 出RGB格 式 的 数 据,所 以 如 果 是X在channel0的 场 景 下,为 了 达 成 上 述 目 的,X通 道 后 移 的 功 能 必 须 开 启,将 输 入 的 通 道 转 换 为RGBX;反 之 如 果 是X在channel3的 场 景 下,X通 道 后 移 的 功 能 必 须 不 开 启 以 输 出RGB格 式 的 数 据。

返 回 值 说 明

调 用 示 例

  • 该 调 用 示 例 支 持 的 运 行 平 台 为Atlas 推 理 系 列 产 品AI Core,示 例 图 片 格 式 为YUV420SP。

    Text
    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 });
    

免 责 声 明:本 站 内 容 由 asc-devkit 仓 master 分 支 自 动 编 译 生 成,属 于 持 续 开 发 版 本,可 能 存 在 缺 陷,仅 供 预 览 与 参 考。如 需 稳 定 及 商 用 资 料,请 查 阅 官 方 昇 腾 社 区