HiSpark AI

- 软件资料
  - AMCT模型压缩工具用户指南
    - 学习向导
    - 概述
    - 准备环境
    - 快速入门
    - AMCT（PyTorch）
    - AMCT（ONNX）
    - AMCT（TensorFlow）(不支持)
    - AMCT（Caffe）(不支持)
    - 命令行参数说明
    - 样例列表
    - FAQ
    - 附录
  - ATC离线模型编译工具用户指南
    - 学习向导
    - ATC简介
    - 准备环境
    - 快速入门
    - 初级功能
    - 高级功能
    - 参数说明
    - 专题
    - 参考
    - FAQ
  - HiSpark Studio AI for VS Code使用指南
    - 前言
    - HiSpark Studio AI简介
    - 数据准备与环境搭建
    - Hi3863操作指南
    - Hi3322操作指南
  - HiSpark.AI API开发指南
    - 前言
    - 简介
    - 接口调用流程介绍
    - HiSpark.AI API参考
    - 样例使用指导
    - FAQ
  - HiSpark.AI 快速入门指南
    - 前言
    - 简介
    - 开发板准备
    - 开发环境准备
    - 样例运行
    - 常见错误
  - HiSpark.AI 转换工具使用指南
    - 前言
    - Converter_lite工具使用环境搭建
    - 快速入门
    - 基础知识
    - 初级功能
    - 参数说明
    - 算子规格参考
    - 专题
  - Nano AI应用开发指导书
    - Nano AI应用界面
    - Nano 芯片支持数据类型和典型模型性能
    - Nano AI资料清单
    - Nano AI应用开发流程
    - FAQ
  - 应用开发指南
    - 简介
    - 准备环境
    - 编程接口与调用流程
    - 初始化与去初始化
    - 运行时资源管理
    - 模型管理
    - 更多特性
    - 应用编译&运行
    - 精度/性能优化
    - acl API参考
    - FAQ案例集
    - 附录
  - 开发环境安装指南
    - 简介
    - 获取软件包
    - 安装前准备
    - 安装
    - 常用操作
    - FAQ
    - 附录
    - Compiler的库文件存在路径
  - 术语和缩略语
    - 术语和缩略语
  - 模型评估脚本使用指南
    - 简介
    - 使用前准备
    - 使用步骤
  - 精度调试工具用户指南
    - 简介
    - 使用前准备
    - GPU vs NPU（TensorFlow离线推理）-IPV350不支持
    - GPU vs NPU（ONNX离线推理）-IPV350不支持
    - NPU vs NPU（离线推理）
    - 比对结果说明
    - 比对结果分析
    - 扩展功能
    - 附录
  - 驱动日志说明文档
    - 简介
    - 日志分类
    - 异常场景
    - 典型案例

### 该页内容

- 前言
- Converter_lite工具使用环境搭建
  - 获取converter_lite转换工具
  - 设置环境变量
  - 限制与约束
- 快速入门
  - 开源框架的TFLite/ONNX模型转换为Micro工程
- 基础知识
  - 工具功能架构
  - 工具运行流程
- 初级功能
  - RISCV平台编译部署
  - 基于x86_64平台精度调试
- 参数说明
  - 总体约束
  - 参数概览
  - 基础功能参数
    - 总体选项
    - 输入选项
    - 输出选项
- 算子规格参考
  - TFLite算子规格参考
    - Conv2D
    - MaxPool2D
    - FullyConnected
    - BatchMatmul
    - Softmax
    - Relu
    - Tanh
    - Logistic (Sigmoid)
    - Reshape
    - Mul
    - Add
    - Sub
    - Gather
    - Split
      - Split
      - SplitV
    - Concatenation
    - AveragePool2D
    - Tile
    - Pad
      - Pad
      - PadV2
      - Mirror_Pad
    - Resize
      - Resize_Bilinear
      - Resize_Nearest_Neighbor
    - Squeeze
    - ExpandDims
    - Abs
    - Ceil
    - Cos
    - Exp
    - Floor
    - Log
    - Round
    - Rsqrt
    - Sin
    - Sqrt
    - Square
    - L2Normalization
    - Slice
      - Slice
      - StridedSlice
    - DepthwiseConv2D
    - Transpose
    - ArgMax
    - ArgMin
    - Div
    - ReduceMax
    - ReduceMin
    - Sum
    - Mean
    - Cast
    - Quantize
    - Dequantize
  - ONNX算子规格参考
    - Conv
    - MaxPool
    - Gemm
    - Matmul
    - Softmax
    - Relu
    - Tanh
    - Sigmoid
    - Reshape
    - Mul
    - Add
    - Sub
    - Gather
    - Split
    - Concat
    - AveragePool
    - InstanceNormalization
    - LSTM
    - Tile
    - Pad
    - Resize
    - Squeeze
    - Unsqueeze
    - Flatten
    - Abs
    - Ceil
    - Cos
    - Exp
    - Floor
    - Log
    - Round
    - Sin
    - Sqrt
    - BatchNormalization
    - LayerNormalization
    - LpNormalization
    - Slice
    - GlobalMaxPool
    - GlobalAveragePool
    - Transpose
    - ArgMax
    - ArgMin
    - Div
    - Clip
    - ReduceMax
    - ReduceMin
    - ReduceSum
    - ReduceMean
    - Cast
- 专题
  - 高效算子支持
    - Conv优化

# 前言

概述

本文档介绍如何在HiSpark系列MCU上，基于MindSpore Lite Enterprise Micro v106版本，实现第三方开源框架（如TFLite、ONNX等）网络模型的轻量化部署与推理任务。Converter_lite是MindSpore Lite Enterprise Micro的转换工具，基于一系列内存/算子优化技术，生成适配HiSpark MCU上可执行的Micro模块代码。基于Converter_lite，在服务器端能够将模型转换为可在x86 / RISCV平台（x86部署可以为板端调试提供精度标杆）上部署的Micro工程代码，从而脱离在线解析模型和图编译，具有运行时内存小、代码轻量化等特点。

通过本文档，您将能够实现以下目标：

- 了解不同开源框架网络模型离线转换Micro工程代码的方法。

- 能够基于本文档的参数配置，转成量化或非量化的Micro工程代码。

- 能够基于Micro工程代码在x86/RISCV平台侧（x86部署可以为板端调试提供精度标杆）做部署推理。

掌握以下经验和技能可以更好理解本文档：

- 熟悉Linux基本命令。

- 对机器学习、人工智能有一定的了解。

- 有一定的C++工程开发经验。

读者对象

本文档适用于使用MindSpore Lite Enterprise Micro v106工具进行AI模型端侧部署的人员，本文档适用于以下工程师：

- 技术支持工程师

- 软件工程师

- 硬件工程师

符号约定

在本文中可能出现下列标志，它们所代表的含义如下。

符号 | 说明
--- | ---
| 表示如不避免则将会导致死亡或严重伤害的具有高等级风险的危害。
| 表示如不避免则可能导致死亡或严重伤害的具有中等级风险的危害。
| 表示如不避免则可能导致轻微或中度伤害的具有低等级风险的危害。
| 用于传递设备或环境安全警示信息。如不避免则可能会导致设备损坏、数据丢失、设备性能降低或其它不可预知的结果。 “须知”不涉及人身伤害。
| 对正文中重点信息的补充说明。 “说明”不是安全警示信息，不涉及人身、设备及环境伤害信息。

修改记录

文档版本 | 发布日期 | 修改说明
--- | --- | ---
03 | 2026-03-24 | 新增Onnx/TFLite算子规格： 更新ArgMax ArgMin ArgMax ArgMin 更新Div Clip Cast Div Cast 更新ReduceMax ReduceMin ReduceSum ReduceMean ReduceMax Sum Mean 更新Quantize Dequantize 更新Conv优化
02 | 2025-12-18 | 新增Onnx/TFLite算子规格： 更新Squeeze Unsqueeze Flatten Squeeze ExpandDims Slice Slice 更新Abs Ceil Cos Exp Floor Log Round Sin Sqrt Abs Ceil Cos Exp Floor Log Round Rsqrt Sin Sqrt Square 更新 BatchNormalization LayerNormalization LpNormalization L2Normalization 更新 GlobalMaxPool GlobalAveragePool 更新 DepthwiseConv2D Transpose Transpose
01 | 2025-10-30 | 第一次正式版本发布。

# Converter_lite工具使用环境搭建

## 获取converter_lite转换工具

工具包获取：converter_lite工具位于发布包的“mindspore-enterprise-lite-{version}-linux-x64/tools/converter/converter/converter_lite”路径下，其中“version”为软件版本号。

本文档以converter_lite转换工具的使用为例进行说明。

## 设置环境变量

使用export方式设置环境变量后，环境变量仅在当前窗口有效。如果用户之前已在.bashrc文件中设置过环境变量，则需要在执行上述命令前，先手动删除原来设置的环境变量。

> 须知：

> - converter_lite工具包依赖于GCC-12.3版本，可以通过点击链接访问官网（GCC-12.3），选择下载12.3.0版本。

> - converter_lite工具包依赖于Python3.11环境。

> - “必选环境变量”中步骤必须按顺序执行，否则可能导致converter_lite工具无法链接到动态库。

必选环境变量

1. 设置converter_lite工具动态库链接。

       export LD_LIBRARY_PATH=mindspore-enterprise-lite-{version}-linux-x64安装目录/tools/converter/lib:$LD_LIBRARY_PATH

2. 将Python3.11的路径添加到LD_LIBRARY_PATH中。

       export LD_LIBRARY_PATH=${py311_inptsll_path}/lib:$LD_LIBRARY_PATH

3. 将GCC的libstdc++6.0.30库路径添加到LD_LIBRARY_PATH中。

       export LD_LIBRARY_PATH=${libc++6.0.30_path}/libxx:$LD_LIBRARY_PATH

4. 切换到GCC中libstdc++.so.6.0.30的安装目录，为libstdc++建立软链接。

       ln -s libstdc++.so.6.0.30 libstdc++.so.6

可选环境变量

若需要在RISCV平台进行部署推理，只需配置RISCV交叉编译链路径。

设置RISCV交叉编译工具链：

    export HISPARK_RISCV_TOOLCHAIN_PATH=${sdk_install_path}/tools/bin/compiler/riscv/cc_riscv32_musl_105/

## 限制与约束

关于工具链版本的约束要求，如表1所示。

表 1 工具链版本约束

工具链名称 | 工具链版本
--- | ---
GCC | 12.3.0
CMake | 3.28.2
riscv32-linux-musl-gcc | (build ver100.090 2023-05-17) 7.3.0
riscv32-linux-musl-g++ | (build ver100.090 2023-05-17) 7.3.0
Ubuntu | 22.04
Python | 3.11

# 快速入门

本章节以TFLite与ONNX框架的MNIST模型转换为例，演示如何快速转换生成Micro工程推理代码。

## 开源框架的TFLite/ONNX模型转换为Micro工程

1. 获取开源框架MNIST网络模型。

   - TFLite模型：从链接中获取MNIST网络的模型文件：mnist网络模型，下载后解压得到mnist.tflite、mnist.tflite.ms.bin（MNIST输入数据）、mnist.tflite.ms.out（标杆输出数据，可用于精度对比）。该模型为已经训练完成的MNIST分类模型，为TFLite模型，将mnist.tflite模型拷贝到开发环境任意目录，例如上传到“$HOME/module/”目录下。

   - ONNX模型：从链接中获取mnist网络的模型文件：mnist网络模型，下载解压得到mnist-7.onnx，该模型为已经训练完成的MNIST分类模型，为ONNX模型，将mnist-7.onnx模型拷贝到开发环境任意目录，例如上传到“$HOME/module/”目录下。

2. 获取converter_lite的压缩包，并进行解压。

       tar -xvf mindspore-enterprise-lite-{version}-linux-x64.tar.gz

3. 将转换工具运行时所需的动态链接库添加到环境变量LD_LIBRARY_PATH中。

       export LD_LIBRARY_PATH=mindspore-enterprise-lite-{version}-linux-x64/tools/converter/lib/tools/converter/lib:${LD_LIBRARY_PATH}

4. 进入转换目录。

       cd mindspore-enterprise-lite-{version}-linux-x64安装目录/tools/converter/converter

5. 设置Micro配置项。

   场景一：以x86平台部署为例，将原模型直接转换为Micro工程目录。

       #控制micro配置项
       [micro_param]
       # 支持code-gen生成Micro工程代码
       enable_micro=true
       # 支持x86,RISCV平台
       target=x86
       # 配置是否并行推理，当前仅支持单线程推理
       support_parallel=false

   场景二：以x86平台部署为例，将FP32原模型转换为int8量化Micro工程目录，具体参数请参见“参数说明”章节。

       #控制micro配置项
       [micro_param]
       # 支持code-gen生成Micro工程代码
       enable_micro=true
       # 支持x86,RISCV平台
       target=x86
       # 配置是否并行推理，当前仅支持单线程推理
       support_parallel=false
       #控制通用量化参数配置项
       [common_quant_param]
       # 当前仅支持全量化方式
       quant_type=FULL_QUANT
       # 全量化仅支持8bit量化
       bit_num=8
       # 配置校准数据集参数
       [data_preprocess_param]
       #关于calibrate_path解释为前半部分是网络的输入名称，后半部分是输入存放路径，详细设置请参见“参数说明”章节
       calibrate_path=input:${HOME}/module/dataset/quant_data
       #数据集大小，这里必须与calibrate_path目录下的数据集大小对应，请参见“参数说明”章节
       calibrate_size=1
       #数据集格式，仅支持bin校准数据集格式，且该数据集下不允许存储非bin格式文件
       input_type=BIN
       #全量化参数配置项
       [full_quant_param]
       #激活值量化算法选择MAX_MIN，当前仅支持MAX_MIN量化算法
       activation_quant_method=MAX_MIN
       #是否开启数据集校准
       bias_correction=true
       #扩展量化算子,提升量化精度且牺牲性能可关闭
       enable_all_ops=true

6. 执行如下命令生成Micro工程代码（如下命令中使用的目录以及文件均为样例，请以实际为准）。

   1. TFLite模型converter_lite转换命令：

          #转换TFLite框架的MNIST模型生成Micro工程代码，converter_lite转换时参数请参见“参数说明”章节
          ./converter_lite --fmk=TFLITE --modelFile=mnist.tflite --outputFile=mnist --configFile=micro.cfg --encryption=false --inputDataFormat=NHWC --outputDataFormat=NHWC --inputDataType=FLOAT --outputDataType=FLOAT

   2. ONNX模型converter_lite转换命令：

          #转换ONNX框架的MNIST模型生成Micro工程代码，converter_lite转换时参数请参见“参数说明”章节
          ./converter_lite --fmk=ONNX --modelFile=mnist-7.onnx --outputFile=mnist --configFile=micro.cfg --encryption=false --inputDataFormat=NCHW --outputDataFormat=NCHW --inputDataType=FLOAT --outputDataType=FLOAT

   3. 运行成功后的结果显示为：

          CONVERT RESULT SUCCESS:0

7. 若想快速体验转换后的Micro工程代码的编译与推理，请准备好环境、符合模型输入要求的*.bin输入数据以及Micro工程代码，具体操作请参见“初级功能”章节。

# 基础知识

## 工具功能架构

converter_lite工具功能架构设计如图1所示。

图 1 converter_lite工具功能架构

开源框架网络模型场景的详细流程如下：

1. 开源框架网络模型经过Parser解析后，转换为中间态IR Graph。

2. 中间态IR经过图拆分与图编译优化操作后，根据节点注册对应规格算子。

3. 生成模型权重数据、头文件与C源码等Micro工程代码。

4. 通过gcc或者RISCV交叉编译工具链生成静态库文件，并将其上传到指定平台执行推理。

## 工具运行流程

使用converter_lite工具将模型转成Micro工程代码的总体流程如图1所示。

图 1 converter_lite工具运行流程图

详细流程说明如下：

1. 使用converter_lite工具之前，请先在开发环境中安装converter_lite工具包，并获取相关路径下的converter_lite工具。详细说明请参见“Converter_lite工具使用环境搭建”章节。

2. 准备要进行转换的模型文件，并将其上传到开发环境。

3. 设置Micro配置项，可根据需要进行量化与非量化的参数配置。

4. 使用converter_lite工具进行模型转换，生成Micro工程代码。

5. 编译Micro工程。

# 初级功能

本章节介绍如何在“基础知识”Micro工程代码的基础上进行编译部署推理。当前支持模型规格如下：

- FP32 TFLite模型FP32 Micro推理。

- FP32 TFLite模型INT8量化Micro推理。

- INT8 TFLite模型INT8 Micro推理。

- FP32 ONNX模型FP32 Micro推理。

- FP32 ONNX模型INT8量化Micro推理。

支持推理平台为：x86_64平台（x86部署可以为板端调试提供精度标杆）与RISCV平台。

支持后端类型：CPU单核单线程。

## RISCV平台编译部署

本节以FP32的mnist.onnx模型为例，介绍如何利用生成的Micro INT8量化推理代码，并在RISCV平台部署推理。

1. converter_lite工具转换开源框架模型生成Micro工程，请参见“快速入门”章节。

   > 须知：

   > - 在使用converter_lite转换命令时，--fmk选项必须与AI模型的开源框架对应，否则将导致转换失败。

   > - micro.cfg的target必须选择RISCV，并且需要按照“开源框架的TFLite/ONNX模型转换为Micro工程”章节中的5场景二进行配置。

   > - RISCV平台部署编译需要依赖海思提供的RISCV编译工具链，需下载相应的工具包。

2. 切换到Micro工程目录。

       #切换到名为micro的Micro工程目录
       cd $HOME/micro/

3. 下载并解压converter_lite工具包。

       #进入到算子库在开发环境的路径
       cd ${mindspore-enterprise-lite-{version}-linux-x64安装目录}
       #解压tar包
       tar -xvf mindspore-enterprise-lite-{version}-linux-x64.tar.gz

4. 在Micro工程目录新建“build_riscv.sh”脚本，配置如下：

       #mindspore-enterprise-lite-{version}-linux-x64为converter_lite工具包在开发环境的路径，sdk_path为海思工具包在开发环境的路径
       rm -rf build
       cmake -S . -B build -D OP_LIB="${mindspore-enterprise-lite-{version}-linux-x64安装目录}/tools/codegen/lib/riscv/libnnacl.a" \
           -D WRAPPER_LIB="${mindspore-enterprise-lite-{version}-linux-x64安装目录}/tools/codegen/lib/riscv/libwrapper.a" -D RISCV_TOOLCHAIN_PATH="${sdk_path}/tools/bin/compiler/riscv/cc_riscv32_musl_b090/cc_riscv32_musl/bin" \
           -D PKG_PATH="${mindspore-enterprise-lite-{version}-linux-x64安装目录}"
       cd build
       make -j4

5. 在"Micro工程目录/build ”目录中生成算子执行文件，目录如下：

       Micro工程目录/build                                       # MCU推理代码目录
       ├── CMakeCache.txt
       ├── CMakeFiles
       ├── cmake_install.cmake
       ├── libmicro_runtime.a			          # 算子运行时静态库
       ├── Makefile
       └── src
           ├── CMakeFiles
           ├── cmake_install.cmake
           ├── libnet.a				          # 算子定义与实现的静态库
           └── Makefile

   代码编译成功，屏幕显示结果如下：

       [ 50%] Built target net
       [100%] Built target micro_runtime

6. 将编译产物libnet.a与libmicro_runtime.a上传至海思工具包再次编译得到编译产物*.fwpkg文件。然后，使用海思工具在Windows平台烧录推理，具体步骤请参考对应的application/samples/ai中的readme.md。

## 基于x86_64平台精度调试

本节以mnist.tflite模型为例，介绍在x86_64平台上的编译和部署过程（x86部署可以为板端调试提供精度标杆）。

1. 使用converter_lite工具将开源框架模型转换为Micro工程，请参见“快速入门”章节

   > 须知：

   > - 在使用converter_lite转换命令时，--fmk选项必须与AI模型的开源框架对应，否则将导致转换失败，且需要配置--encryption=false参数。

   > - micro.cfg的target必须选择x86，且需要按照“开源框架的TFLite/ONNX模型转换为Micro工程”章节中的5场景一进行配置。

2. 切换到Micro工程目录。

       #切换到Micro工程目录，假设工程目录叫micro
       cd $HOME/micro/

3. Micro工程目录结构如下，其中benchmark目录为x86_64部署的样例工程，调用相关Micro API接口。

       micro                          # 指定的生成代码根目录名称
       ├── benchmark                  # 对模型推理代码进行集成调用的benchmark例程
       │   ├── benchmark.c
       │   ├── calib_output.c
       │   ├── calib_output.h
       │   ├── load_input.c
       │   └── load_input.h
       ├── CMakeLists.txt             # benchmark例程的cmake工程文件
       ├── include                    # 头文件
       │   ├── model_handle.h
       └── src                        # 模型推理代码目录
           ├── allocator.c
           ├── allocator.h
           ├── CMakeLists.txt
           ├── context.c
           ├── context.h
           ├── model.c
           ├── model.h
           ├── net.cmake
           ├── tensor.c
           └── tensor.h

4. gcc编译生成可执行文件。

   - 切换到converter_lite工具包算子库路径，然后将算子库拷贝到父级目录。

         cd "mindspore-enterprise-lite-{version}-linux-x64安装目录"/tools/codegen/lib/cpu
         将算子库拷贝到父级目录
         cp libnnacl.a libwrapper.a ../

   - 创建编译目录，gcc编译benchmark可执行环境。

         #创建并且切换到编译目录
         mkdir build && cd build
         #gcc编译生成可执行文件
         cmake -DPKG_PATH="mindspore-enterprise-lite-{version}-linux-x64安装目录" ..
         make

   - 若Micro工程代码编译成功，屏幕将显示如下结果，此时在“Micro工程目录/build/src/”目录下会生成libnet.a。

         [100%] Linking C executable benchmark
         [100%] Built target benchmark

5. 运行benchmark推理流程，输入bin文件可以从mnist.tar.gz获取，也可以自行构造随机输入。

   - 构造随机输入数据，下面给出生成[0,1]范围内Fp32随机数据的Python参考脚本，输出结果为mnist.bin文件。

     > 须知：

     > - 随机输入数据可以用于Micro工程推理，也可用于Micro INT8量化校准数据集。

     > - 若用户有真实数据集，可转换为Bin格式，无需参考下面的随机数据构造脚本。

         #随机输入构造脚本，仅供参考
         import numpy as np
         import os

         def generate_random_data(output_file, shape=(1, 25, 24, 1), dtype=np.float32):
             # 生成[0, 1)范围内的随机数
             random_data = np.random.uniform(low=0.0, high=1.0, size=shape).astype(dtype)

             # 手动将部分点设为1.0，确保范围包含1
             total_elements = np.prod(shape)
             if total_elements > 0:
                 # 将最后一个元素设为1.0
                 random_data.flat[-1] = 1.0
                 # 再随机选一个元素设为0.0，确保包含0
                 random_data.flat[np.random.randint(0, total_elements)] = 0.0

             # 验证数据范围
             min_val = np.min(random_data)
             max_val = np.max(random_data)
             assert min_val >= 0.0, f"数据最小值{min_val}小于0"
             assert max_val <= 1.0, f"数据最大值{max_val}大于1"

             # 确保输出目录存在
             os.makedirs(os.path.dirname(output_file), exist_ok=True)

             # 保存为二进制文件
             with open(output_file, 'wb') as f:
                 random_data.tofile(f)

             # 输出信息
             print(f"数据维度: {random_data.shape}")
             print(f"数据类型: {random_data.dtype}")
             print(f"数据范围: [{min_val:.6f}, {max_val:.6f}]")
             print("数据前5个元素预览:", random_data.flatten()[:5])

         if __name__ == "__main__":
             # 输出文件路径
             output_file = "mnist.bin"

             # 生成并保存数据
             generate_random_data(output_file)

   - 运行benchmark，在x86_64平台完成推理。

         #benchmark是精度评测的可执行文件，用法为./benchmark "mnist.tflite.ms.bin路径" "net0.bin路径"，benchmark第一个参数是输入数据，第二个参数是模型权重文件(模型文件在benchmark目录同级的src/model0目录下)。假设mnist.tflite.ms.bin相对路径为"../../mnist/mnist.tflite.ms.bin"，net0.bin相对路径为"net0.bin"。执行命令可参考如下：
         ./benchmark ../../mnist/mnist.tflite.ms.bin ../src/model0/net0.bin

     推理成功，屏幕显示结果应该如下：

         =======run benchmark======
         ThreadNum: 1.
         BindMode: 0.
         input 0: ../../mnist/mnist.tflite.ms.bin
         Running warm up loops...========run success=======

         outputs:
         name: Identity, DataType: 43, Elements: 10, Shape: [1 10 ], Data:
         0.000036, 0.000000, 0.009328, 0.000032, 0.000011, 0.000002, 0.000000, 0.000000, 0.990591, 0.000000,
         ========run success=======

# 参数说明

## 总体约束

针对converter_lite转换工具总体约束如下：

- 支持ONNX、TFLite开源框架的模型转换，当原始框架类型为ONNX、TFLite时，输入类型应为FP32、INT8、UINT8。

- 开源框架模型类型应与--fmk配置参数名称必须保持一致（包括大小写）。

- 在使用全量化转换时，必须构建校准输入数据集，且按照模型的输入名称设置Micro配置项。校准数据集和实际输入格式为BIN（即数据类型为.bin二进制文件），并且该路径下不允许存在其他格式文件。

## 参数概览

> 须知：

> - 如果通过./converter_lite --help命令查询出的参数未在表1中解释，则说明该参数预留或者适用于其他芯片版本，用户无需关注。

> - 使用converter_lite命令进行Micro工程代码生成时，支持模型量化与非量化，x86_64与RISCV编译，用户可根据实际情况进行选择。

converter_lite参数概览如表1所示，详细说明请参见“基础功能参数”章节。

表 1 converter_lite工具参数概览

convert lite参数名称 | 是否必选 | 参数说明 | 取值范围 | 默认值
--- | --- | --- | --- | ---
--help | 否 | 打印全部帮助信息。 | - | -
--fmk=<FMK> | 是 | 输入模型的原始格式。 | TFLITE/ONNX | -
--modelFile=<MODELFILE> | 是 | 输入模型的路径。 | - | -
--outputFile=<OUTPUTFILE> | 是 | 转成Micro工程代码的路径。 | - | -
--configFile=<CONFIGFILE> | 是 | 设置转换Micro工程的配置项。 | - | -
--encryption=<ENCRYPTION> | 是 | 不支持设置，取值范围暂不支持true，使用时必须配置为false。 | false | -
--inputDataFormat | 是 | 设定导出模型的输入format，其中，源模型为ONNX框架应当设置为NCHW，为TFLITE框架应当设置为NHWC。 | NCHW/NHWC | -
--outputDataFormat | 是 | 设定导出模型的输出format，其中源模型为ONNX框架应当设置为NCHW，为TFLITE框架应当设置为NHWC。 | NCHW/NHWC | -
--inputDataType | 是 | 设定导出模型的输入数据类型，自研量化时类型与原始模型保持不变，TFLite第三方量化与量化后数据类型保持一致。 | FLOAT/INT8/UINT8 | -
--outputDataType | 是 | 设定导出模型的输出数据类型，自研量化时类型与原始模型保持不变，TFLite第三方量化与量化后数据类型保持一致。 | FLOAT/INT8/UINT8 | -
--decryptKey | 否 | 解密密钥，Micro不支持 | - | -
--encryptKey | 否 | 加密密钥，Micro不支持 | - | -
--infer | 否 | 预推理功能开关，Micro不支持 | - | false
--fp16 | 否 | 开启fp16推理开关，Micro不支持 | - | false
--optimize | 否 | Micro仅支持general，不支持额外配置 | - | general
--optimizeTransformer | 否 | Micro开启Transformer融合，Micro不支持 | - | false
--saveType | 否 | 导出中间IR文件格式，Micro暂不支持其他配置 | - | MINDIR_LITE
--trainModel | 否 | 端侧训练开关，Micro暂不支持 | - | false
--weightFile | 否 | caffe格式模型配套的weight文件导入，Micro暂不支持 | - | -
--riscvOpt | 否 | 开启RISC-V高性能优化，在优化列表内的算子规格能够有性能提升 | - | false

## 基础功能参数

### 总体选项

--help

- 功能说明

  打印全部帮助信息。

- 关联参数

  无

- 参数取值

  无

- 推荐配置及收益

  无

- 示例

      #切换到converter_lite工具安装目录，配置LD_LIBRARY_PATH环境变量
      ./converter_lite --help

- 依赖约束

  无

### 输入选项

--fmk=<FMK>

- 功能说明

  配置输入开源框架模型的原始格式。

- 关联参数

  无

- 参数取值

  - TFLite：转换TFLite开源框架模型为Micro工程代码。

  - ONNX：转换ONNX开源框架模型为Micro工程代码。

  - 参数默认值：无

- 推荐配置及收益

  无

- 示例

      #配置输入开源框架模型的原始格式，模型与fmk对应关系为*.tflite-TFLite；*.onnx->ONNX
      --fmk=TFLITE
      --fmk=ONNX

- 依赖约束

  无

--modelFile=<MODELFILE>

- 功能说明

  输入模型的路径。

- 关联参数

  无

- 参数取值

  参数默认值：无

- 推荐配置及收益

  无

- 示例

      #配置开源框架的输入模型路径，例如
      --modelFile=$HOME/module/mnist.tflite

- 依赖约束

  无

--configFile=<CONFIGFILE>

- 功能说明

  设置转换Micro工程的配置项。

- 关联参数

  无

- 参数取值

  参数取值参考如表1所示。

  > 须知：

  > - Micro配置项表1中未声明的参数不支持或者适用于其他芯片，用户无需关注。

  > - 如果不使用全量化，仅配置[micro_param]、enable_micro、target、support_parallel，其中support_parallel将默认配置为false。

  > - 如果需要使用全量化，需要配置表1中除debug_mode以外的参数。quant_type需要配置为FULL_QUANT，bit_num默认配置为8，bias_correction默认配置为true，enable_all_ops默认配置为false。

  > - 全量化时配置calibrate_path必须符合“input_name_1:input_1_dir,input_name_2:input_2_dir.... ”输入格式，且input_name_1、input_name_2等的输入数量与名称必须与开源框架AI模型的输入数量和名称相符合。

  > - 全量化时配置的calibrate_size必须与calibrate_path每个数据集目录元素数量相同。

  表 1 micro.cfg配置项参数概览

  参数名称 | 是否必选 | 参数说明 | 取值范围 | 默认值
  --- | --- | --- | --- | ---
  [micro_param] | 是 | 当前正在设置Micro配置项，用于控制代码生成。 | - | -
  enable_micro | 是 | 使能convert lite生成Micro工程代码。 | true/false | false
  target | 是 | Micro工程代码部署推理平台。 | x86/RISCV | x86
  support_parallel | 否 | 是否生成多线程推理代码，当前尚未支持多线程即不支持置为true。 | true/false | false
  debug_mode | 否 | 是否打开调测接口，仅全量化时选择。 | true/false | false
  [common_quant_param] | 否 | 公共量化参数，仅全量化时选择。 | - | -
  quant_type | 否 | 设置量化类型，启用全量化时需要配置为FULL_QUANT，仅全量化时选择。 | FULL_QUANT/- | -
  bit_num | 否 | 设置量化的比特数，目前仅支持8bit量化，仅全量化时选择。 | 8 | -
  [data_preprocess_param] | 否 | 校准数据集参数，仅全量化时选择。 | - | -
  calibrate_path | 否 | 校准数据集路径，该路径下不能存放非bin格式文件，仅全量化时选择。 | - | -
  calibrate_size | 否 | 校准数据集大小，仅全量化时选择。 | 必须与calibrate_path数据集数量一致 | -
  input_type | 否 | 校准数据集格式，启用全量化时需要配置为BIN，仅全量化时选择。 | 只支持BIN | -
  [full_quant_param] | 否 | 全量化参数，仅全量化时选择。 | - | -
  activation_quant_method | 否 | 激活值量化算法，仅全量化时选择。 | 只支持MAX_MIN | -
  bias_correction | 否 | 是否对量化误差进行校正，仅全量化时选择。 | true/false | -
  enable_all_ops | 否 | 是否开启进阶量化算子。 默认量化算子（无论是否配置均会开启）：Conv Matmul/Gemm(FullyConneted) /Reshape ； 进阶量化算子（需要配置此属性为true才会开启）：Maxpool Relu Softmax Mul Add Sub Gather Concat Split AvgPool。 | true/false |

- 推荐配置及收益

  无

- 示例

      #配置Micro工程配置项绝对路径，例如
      --configFile=$HOME/module/micro.cfg

- 依赖约束

  无

### 输出选项

--outputFile=<OUTPUTFILE>

- 功能说明

  转成Micro工程代码的路径

- 关联参数

  无

- 参数取值

  参数默认值：无

- 推荐配置及收益

  无

- 示例

       #Micro工程路径为当前目录的mnist文件夹
       --outputFile=mnist
       #Micro工程路径为当前目录的micro文件夹
       --outputFile=.

  命令执行完毕后，屏幕会打印类似如下信息：

      CONVERT RESULT SUCCESS:0

- 依赖约束

  无

# 算子规格参考

本章主要介绍（MindSpore Lite）所支持的算子规格限制，目前主要支持ONNX格式以及TFLite格式的模型，并且支持算子的数据类型主要为int8以及fp32。

> 说明： Gemm是ONNX框架的矩阵乘法算子，而FullyConnected则是TFLite框架的矩阵乘法算子。目前，int8仅支持量化模型，不支持onnxruntime量化场景。

## TFLite算子规格参考

### Conv2D

功能描述

对4D输入进行卷积计算。

参数说明

表 1 Conv2D参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为4D，格式为NHWC。 | -
filter | input | tensor | filter张量，维度为4D。 | 规格约束：权重为离线变量
bias | input | tensor | bias张量，维度为1D。 | 规格约束：偏置为离线变量
output | output | tensor | 输出张量，维度为4D，格式为NHWC。 | -
dilation_h_factor | attribute | int32 | filter在H方向上的扩张系数。 | -
dilation_w_factor | attribute | int32 | filter在W方向上的扩张系数。 | -
fused_activation_function | attribute | string | 融合的激活函数类型。 | 配置范围：NONE、RELU
padding | attribute | string | 填充类型。 | 配置范围：SAME、VALID
stride_h | attribute | int32 | filter在H方向上的移动步长。 | -
stride_w | attribute | int32 | filter在W方向上的移动步长。 | -

### MaxPool2D

功能描述

对4D输入进行最大池化计算。

参数说明

表 1 MaxPool2D参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为4D，格式为NHWC。 | -
output | output | tensor | 输出张量，维度为4D，格式为NHWC。 | -
filter_height | attribute | int32 | 在H方向上的过滤窗口大小。 | -
filter_width | attribute | int32 | 在W方向上的过滤窗口大小。 | -
fused_activation_function | attribute | string | 融合的激活函数类型。 | 配置范围：NONE、RELU
padding | attribute | string | 填充类型。 | 配置范围：SAME、VALID
stride_h | attribute | int32 | filter在H方向上的移动步长。 | -
stride_w | attribute | int32 | filter在W方向上的移动步长。 | -

### FullyConnected

功能描述

对2D、3D、4D输入的最后一个维度进行特征映射（类似Onnx规格中Gemm）。

参数说明

表 1 FullyConnected参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
filter | input | tensor | 权重张量，维度为2D。 | 规格约束：权重为离线变量
bias | input | tensor | 偏置张量，维度为1D。 | 规格约束：偏置为离线变量
output | output | tensor | 输出张量，维度为4D，格式为NHWC。 | -
fused_activation_function | attribute | string | 融合的激活函数类型。 | 配置范围：NONE、RELU
weights_format | attribute | string | 权重张量在内存中的存储布局。 | 配置范围：DEFAULT，不支持其他配置
keep_num_dims | attribute | bool | 是否对输入展平为2D进行计算。 | -
asymmetric_quantize_inputs | attribute | bool | 是否对输入进行非对称量化。 | -

### BatchMatmul

功能描述

对两个2D/3D/4D输入张量进行矩阵乘法运算。

参数说明

> 说明： BatchMatmul暂时不支持广播机制，x倒数两维为计算维度[M, K]，y倒数两维为计算维度[K, N]，K大小必须保持一致。计算维度前，维度必须保持一致。

表 1 BatchMatmul参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度为3D/4D，格式分别为NWC、NHWC。 | -
y | input | tensor | 权重张量，维度为3D/4D，格式分别为NWC、NHWC。 | -
output | output | tensor | 输出张量，维度为3D/4D，格式分别为NWC、NHWC。符合矩阵乘法运算规则。 | -
adj_x | attribute | bool | 是否对x的最后两个维度进行转置。 | -
adj_y | attribute | bool | 是否对y的最后两个维度进行转置。 | -
asymmetric_quantize_inputs | attribute | bool | BatchMatmul是否对输入进行非对称量化。 | -

### Softmax

功能描述

计算最后一维的归一化Softmax概率分布。

参数说明

> 说明： 受TFLite限制，Softmax仅支持在最后一维上进行计算。

表 1 Softmax参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D / 3D / 4D，格式分别为ND、NWC、NHWC。 | -
output | output | tensor | 输出张量，维度为2D / 3D / 4D，格式分别为ND、NWC、NHWC。 | -
beta | attribute | float | 对输入的缩放系数。 | 配置范围：暂仅支持beta=1.0的情况

### Relu

功能描述

对输入张量做Relu激活函数运算。

参数说明

表 1 Relu参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -

### Tanh

功能描述

对输入张量做Tanh激活函数运算。

参数说明

表 1 Tanh参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -

### Logistic (Sigmoid)

功能描述

对输入张量做Sigmoid激活函数运算。

参数说明

表 1 Logistic参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -

### Reshape

功能描述

改变Tensor的Shape，但不改变其排布。

参数说明

表 1 Reshape参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
shape | input | tensor (int32) | Shape张量，转换后的Shape。 | 规格约束：所有元素之积与input包含的元素个数相等
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -

### Mul

功能描述

计算两个矩阵逐点相乘。

参数说明

> 说明： Mul支持广播特性。双向广播需要在转换命令中明确配置inputDataFormat和outputDataFormat参数。

表 1 Mul参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
lhs | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
rhs | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
fused_activation_function | attribute | string | 融合的激活函数类型。 | 配置范围：NONE、RELU

### Add

功能描述

计算两个矩阵逐点相加。

参数说明

> 说明： Add支持广播特性。双向广播需要在转换命令中明确配置inputDataFormat和outputDataFormat参数。

表 1 Add参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
lhs | input | tensor | 左输入张量，维度为2D/3D/4D，格式分别为ND、NWC，NHWC。 | -
rhs | input | tensor | 右输入张量，维度为2D/3D/4D，格式分别为ND，NWC、NHWC。 | -
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND，NWC、NHWC。 | -
fused_activation_function | attribute | string | 融合的激活函数类型。 | 配置范围：NONE、RELU

### Sub

功能描述

计算两个矩阵逐点相减。

参数说明

> 说明： Sub支持广播特性。双向广播需要在转换命令中明确配置inputDataFormat和outputDataFormat参数。

表 1 Sub参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
lhs | input | tensor | 左输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
rhs | input | tensor | 右输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
fused_activation_function | attribute | string | 融合的激活函数类型。 | 配置范围：NONE、RELU

### Gather

功能描述

根据指定索引，从输入张量的指定轴上提取元素，组合成新张量

参数说明

表 1 Gather参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
params | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
indices | input | tensor (int32) | 索引张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
axis | attribute | int | 输入张量被切分的轴。 | -rank(value)<=axis<rank(value)，rank为张量的秩
batch_dims | attribute | int | 将索引的前batch_dims个轴作为batch轴，切分行为有所改变。 | 仅支持为batch_dims为0的情况

### Split

Split算子在TFLITE框架中包含tfl.Split、tfl.SplitV等api，其中tfl.Split表示均匀划分，tfl.SplitV自定义非均匀划分。

#### Split

功能描述

对张量分割按照某一轴平均切分成若干份。

参数说明

表 1 Split参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
value | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
outputs | output | varList(tensor) | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
num_splits | attribute | int | 平均分割的数量。 | (0, split_dim] ，且 num_splits需要能被指定轴整除
split_dim | attribute | int | 指定被分割的轴。 | 维度索引

#### SplitV

功能描述

对张量分割按照某一轴非平均切分成若干份。

参数说明

表 1 SplitV参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
value | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
outputs | output | varList(tensor) | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
num_splits | attribute | int | 分割的数量。 | -
size_splits | attribute | tensor | 具体每一份分割的维度。 | [n1, n2, ..., ni]，∑ni = axis，n > 0
split_dim | attribute | int | 被分割的轴。 | -rank(value)<=axis<rank(value)，rank为张量的秩

### Concatenation

功能描述

将多个张量拼接成某一个张量。

参数说明

表 1 Concatenation参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
values | input | varList(tensor) | 输入张量列表，内部各张量维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | 规格约束：列表中各张量在指定轴上元素个数相等
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
axis | attribute | int | 指定沿着哪个轴进行连接。 | 规格约束：-rank(value)<=axis<rank(value)，rank为张量的秩
fused_activation_function | attribute | string | 融合的激活函数类型。 | 配置范围：NONE、RELU

### AveragePool2D

功能描述

对4D输入进行平均池化计算。

参数说明

表 1 AveragePool2D参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为4D，格式为NHWC。 | -
output | output | tensor | 输出张量，维度为4D，格式为NHWC。 | -
filter_height | attribute | int32 | 在H方向上的过滤窗口大小。 | -
filter_width | attribute | int32 | 在W方向上的过滤窗口大小。 | -
fused_activation_function | attribute | string | 融合的激活函数类型。 | 配置范围：NONE、RELU
padding | attribute | string | 填充类型。 | 配置范围：SAME、VALID
stride_h | attribute | int32 | filter在H方向上的移动步长。 | -
stride_w | attribute | int32 | filter在W方向上的移动步长。 | -

### Tile

功能描述

对2D/3D/4D输入沿指定维度做复制扩展。

参数说明

表 1 Tile参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NWC/NHWC。 | -
multiples | input | list(int) | 指定每个维度复制次数。 | 规格约束：multiples为离线常量
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NWC/NHWC。 | -

### Pad

Pad算子在TFLITE框架中包含tfl.Pad、tfl.PadV2、tfl.Mirror_Pad等api，其中tfl.Pad表示零填充，tfl.Padv2表示自定义常量填充，tfl.Mirror_Pad表示镜像反射填充。

#### Pad

功能描述

对输入张量边界做零填充。

参数说明

表 1 Pad参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NWC/NHWC。 | 规格约束：int8量化场景仅支持4D张量输入
padding | input | list(int) | 指定各输入维度填充范围。 | 规格约束：padding为离线常量，padding[i]<input_dim[i]
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NWC/NHWC。 | -

#### PadV2

功能描述

对输入张量边界做自定义常量填充。

参数说明

表 1 PadV2参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NWC/NHWC。 | 规格约束：int8量化场景仅支持4D张量输入
padding | input | list(int) | 指定各输入维度填充范围。 | 规格约束：padding为离线常量，padding[i]<input_dim[i]
constant_values | input | int32 | 自定义填充常数。 | 规格约束：constant_values为离线常量
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NWC/NHWC。 | -

#### Mirror_Pad

功能描述

对输入张量边界做镜像反射填充。

参数说明

表 1 Mirror_Pad参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NWC/NHWC。 | -
pad | input | list(int) | 指定各输入维度填充范围。 | 规格约束：pad为离线常量，pad[i]<input_dim[i]
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NWC/NHWC。 | -
mode | attribute | string | 填充模式，指定边界填充方式。 | 配置范围：REFLECT、SYMMETRIC

### Resize

Resize算子在TFLITE框架中包含tfl.Resize_Bilinear、tfl.Resize_Nearest_Neighbor等api，其中tfl.Pad表示零填充，tfl.Resize_Bilinear表示双线性插值缩放，tfl.Resize_Nearest_Neighbor表示最近邻插值缩放。

#### Resize_Bilinear

功能描述

对输入张量做双线性插值缩放。

参数说明

表 1 Resize_Bilinear参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为4D，格式为NHWC。 | -
size | input | list(int) | 指定输出张量的目标尺寸。 | 规格约束：离线常量，NC维度与输入张量保持一致
output | output | tensor | 输出张量，维度为4D，格式为NHWC。 | -
align_corners | attribute | bool | 缩放填充模式，是否对齐输入输出的角落像素。 | 配置范围：true、false，与half_pixel_centers必须配置一个且仅一个配置为true
half_pixel_centers | attribute | bool | 缩放填充模式，像素坐标中心是否取(0.5, 0.5)计算。 | 配置范围：true、false

#### Resize_Nearest_Neighbor

功能描述

对输入张量做最近邻插值缩放。

参数说明

表 1 Resize_Nearest_Neighbor参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为4D，格式为NHWC。 | -
size | input | list(int) | 指定输出张量的目标尺寸。 | 规格约束：离线常量，NC维度与输入张量保持一致
output | output | tensor | 输出张量，维度为4D，格式为NHWC。 | -
align_corners | attribute | bool | 缩放填充模式，是否对齐输入输出的角落像素。 | 配置范围：true、false，与half_pixel_centers必须配置一个且仅一个配置为true
half_pixel_centers | attribute | bool | 缩放填充模式，像素坐标中心是否取(0.5, 0.5)计算。 | 配置范围：true、false

### Squeeze

功能描述

对输入张量进行shape压缩操作。

参数说明

表 1 Squeeze参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度不限制。 | -
output | output | tensor | 输出张量，维度不限制。 | -
squeeze_dims（可选） | attribute | list(int) | 被压缩的轴列表。 | -Rank(tensor) <= axis < Rank(tensor)

### ExpandDims

功能描述

对输入张量进行shape扩展操作。

参数说明

表 1 ExpandDims参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度不限制。 | -
output | output | tensor | 输出张量，维度不限制。 | -
dim | attribute | int | 被扩展的轴。 | -Rank(output) <= axis < Rank(output)

### Abs

功能描述

对张量的每个元素做绝对值运算。

参数说明

表 1 Abs参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | -

### Ceil

功能描述

对张量中的每个元素做向上取整操作。

参数说明

表 1 Ceil参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | -

### Cos

功能描述

对张量中的每个元素做余弦操作。

参数说明

表 1 Cos参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | [-1, 1]

### Exp

功能描述

对张量中的每个元素做指数计算操作。

参数说明

表 1 Exp参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | (0, 正无穷)

### Floor

功能描述

对张量中的每个元素做向下取整操作。

参数说明

表 1 Floor参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | -

### Log

功能描述

对张量中的每个元素做对数计算操作（底数值为e）。

参数说明

表 1 Log参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | (0, 正无穷)
y | output | tensor | 输出张量，维度不限制。 | -

### Round

功能描述

对张量中的每个元素做四舍五入操作。

参数说明

表 1 Round参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | -

### Rsqrt

功能描述

对张量中的每个元素做平方根倒数计算操作。

参数说明

表 1 Rsqrt参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | (0, 正无穷)
y | output | tensor | 输出张量，维度不限制。 | (0, 正无穷)

### Sin

功能描述

对张量中的每个元素做正弦计算操作。

参数说明

表 1 Sin参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | [-1, 1]

### Sqrt

功能描述

对张量中的每个元素做平方根计算操作。

参数说明

表 1 Sqrt参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | [0, 正无穷)
y | output | tensor | 输出张量，维度不限制。 | [0, 正无穷)

### Square

功能描述

对张量中的每个元素做平方计算操作。

参数说明

表 1 Square参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | -

### L2Normalization

功能描述

沿指定轴，用L2范数对输入张量执行归一化计算。

参数说明

表 1 L2Normalization参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
fused_activation_function | attribute | string | 融合的激活函数类型。 | 配置范围：NONE、RELU、RELU6

### Slice

Slice算子在TFLITE框架中包含tfl.slice、tfl.strided_slice等api，其中tfl.slice为连续提取子张量，tfl.strided_slice可以通过指定步长、掩码等方式更灵活地进行提取。

#### Slice

功能描述

从输入张量中沿指定轴连续提取子张量。

参数说明

Slice参数概览

表 1 Slice参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NWC/NHWC。 | -
begins | input | tensor | 维度为1D，对应各维度的起始索引。 | 规格约束：begins为离线常量
size | input | tensor | 维度为1D，各维度要提取的元素个数。size[i]=-1时表示取i轴上从begins[i]开始的所有元素。 | 规格约束：size为离线常量
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NWC/NHWC。 | -

#### StridedSlice

功能描述

从输入张量中沿指定轴提取子张量。

参数说明

表 1 StridedSlice参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NWC/NHWC。 | -
begin | input | tensor | 维度为1D，对应各维度的起始索引。 | 规格约束：begin为离线常量
end | input | tensor | 维度为1D，对应各维度的结束索引。 | 规格约束：end为离线常量
strides | input | tensor | 维度为1D，对应各维度的切片步长。 | 规格约束：strides为离线常量
output | output | tensor | 输出张量，输出维度和尺寸由切片逻辑及掩码决定。 | -
begin_mask | attribute | int | 第 i 维度对应位为 1 时，忽略该维度的 begin[i]，改用维度起始边界（正向切片 = 0，反向切片 = 维度长度 - 1）。 | -
end_mask | attribute | int | 第 i 维度对应位为 1 时，忽略该维度的 end[i]，改用维度结束边界（正向 = 维度长度，反向切片 =-1）。 | -
ellipsis_mask | attribute | int | 第 i 维度对应位为 1 时，对应维度及后续未显式指定的维度完整保留。 | 规格约束：仅允许一个二进制位为1
new_axis_mask | attribute | int | 第 i 维度对应位为 1 时，在输出中插入长度为 1 的新维度。 | -
shrink_axis_mask | attribute | int | 第 i 维度对应位为 1 时，在输出中移除该维度。 | -
offset | attribute | bool | 取值为true：end输入表示切片长度。 取值为false：直接使用原始索引。 | 暂不支持配置，默认为false

### DepthwiseConv2D

功能描述

对4D输入进行深度可分离卷积计算。

参数说明

表 1 DepthwiseConv2D参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为4D，格式为NHWC。 | -
filter | input | tensor | filter张量，维度为4D。 | 规格约束：权重为离线常量
bias | input | tensor | bias张量，维度为1D。 | 规格约束：偏置为离线常量
output | output | tensor | 输出张量，维度为4D，格式为NHWC。 | -
dilation_h_factor | attribute | int32 | filter在H方向上的扩张系数。 | -
dilation_w_factor | attribute | int32 | filter在W方向上的扩张系数。 | -
fused_activation_function | attribute | string | 融合的激活函数类型。 | 配置范围：NONE、RELU
padding | attribute | string | 填充类型。 | 配置范围：SAME、VALID
stride_h | attribute | int32 | filter在H方向上的移动步长。 | -
stride_w | attribute | int32 | filter在W方向上的移动步长。 | -
depth_multiplier | attribute | int32 | 深度乘法因子，控制通道数缩放。 | 规格约束：INT8量化场景仅支持配置为1

### Transpose

功能描述

对输入张量进行转置。

参数说明

表 1 Transpose参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NHWC。 | -
perm | input | tensor | 输入张量的维度重排顺序。 | 规格约束：不支持perm=[0,3,1,2]、[0,2,3,1]的Transpose单算子转换
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NHWC。 | -

### ArgMax

功能描述

在张量的指定维度上，计算并返回最大值对应的位置索引。

参数说明

> 说明： 仅支持float类型，不支持int8类型。

表 1 ArgMax参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NHWC。 | -
dim | input | tensor | 指定在张量中执行计算逻辑的维度。 | 规格约束：-rank(input)<=axis<rank(input)，rank为张量的秩
output | output | tensor (int32) | 输出张量，维度为1D/2D/3D，格式为N/ND/NCW。 | -
output_type | attribute | TensorType | 指定算子输出张量的元素数据类型。 | 规格约束：仅支持配置为tf.int32

### ArgMin

功能描述

在张量的指定维度上，计算并返回最小值对应的位置索引。

参数说明

> 说明： 仅支持float类型，不支持int8类型。

表 1 ArgMin参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NHWC。 | -
dim | input | tensor | 指定在张量中执行计算逻辑的维度。 | 规格约束：-rank(input)<=axis<rank(input)，rank为张量的秩
output | output | tensor (int32) | 输出张量，维度为1D/2D/3D，格式为N/ND/NCW。 | -
output_type | attribute | TensorType | 指定算子输出张量的元素数据类型。 | 规格约束：仅支持配置为tf.int32

### Div

功能描述

对两输入张量进行除法运算。

参数说明

表 1 Div参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
lhs | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
rhs | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
fused_activation_function | attribute | string | 融合的激活函数类型。 | 配置范围：NONE、RELU

### ReduceMax

功能描述

对指定维度的张量进行最大值归约计算。

参数说明

表 1 ReduceMax参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
axes | input | tensor | 指定归约的轴。 | 规格约束：离线常量，元素范围[-rank(input), rank(input))
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
keep_dims | attribute | bool | 是否需要保留归约轴的维度。 | 配置范围：true/false

### ReduceMin

功能描述

对指定维度的张量进行最小值归约计算。

参数说明

表 1 ReduceMin参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
axes | input | tensor | 指定归约的轴。 | 规格约束：离线常量，元素范围[-rank(input), rank(input))
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
keep_dims | attribute | bool | 是否需要保留归约轴的维度。 | 配置范围：true/false

### Sum

功能描述

对指定维度的张量进行求和归约计算。

参数说明

表 1 Sum参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
axes | input | tensor | 指定归约的轴。 | 规格约束：离线常量，元素范围[-rank(input), rank(input))
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
keep_dims | attribute | bool | 是否需要保留归约轴的维度。 | 配置范围：true/false

### Mean

功能描述

对指定维度的张量进行均值归约计算。

参数说明

表 1 Mean参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
axes | input | tensor | 指定归约的轴。 | 规格约束：离线常量，元素范围[-rank(input), rank(input))
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | -
keep_dims | attribute | bool | 是否需要保留归约轴的维度。 | 配置范围：true/false

### Cast

功能描述

对输入张量进行数据类型的转换。

参数说明

> 说明： Cast算子不支持量化。

表 1 Cast参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | 数据类型仅支持float32、uint8、int8、int32
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | 数据类型仅支持float32、uint8、int8、int32

### Quantize

功能描述

对输入张量进行量化操作。

参数说明

> 说明： Quantize算子不支持量化。

表 1 Quantize参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | int8, uint8
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | float32, int8, uint8

### Dequantize

功能描述

对输入张量进行量化操作。

参数说明

> 说明： Dequantize算子不支持量化。

表 1 Dequantize参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | float32, int8, uint8
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NWC、NHWC。 | int8, uint8

## ONNX算子规格参考

### Conv

功能描述

基于一个filter模板对3D或4D输入进行卷积计算。

参数说明

表 1 Conv参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
X | input | tensor | 输入张量，维度为3D或4D，格式为NCW/NCHW。 | -
W | input | tensor | 权重张量，维度为3D或4D。 | 规格约束：权重为离线常量
B | input | tensor | 偏置张量，维度为1D。 | 规格约束：偏置为离线常量
Y | output | tensor | 输出张量，维度为3D或4D，格式为NCW/NCHW。 | -
auto_pad | attribute | string | 指定padding的类型。 | 规格约束：仅支持NOTSET
dilations | attribute | list(int) | 每个轴上的扩张系数。 | -
group | attribute | int | 在输入输出channel上划分的分组个数。 | 规格约束：仅支持输入为1的情况
kernel_shape | attribute | list(int) | kernel沿各轴的大小。 | -
pads | attribute | list(int) | 各轴前后填充零的个数。 | -
strides | attribute | list(int) | 各个方向上kernel的移动步长。 | -

### MaxPool

功能描述

对3D或4D输入进行最大池化计算。

参数说明

> 说明： Maxpool双输出规格暂不支持。

表 1 MaxPool参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
X | input | tensor | 输入张量，维度为3D或4D，格式为NCW/NCHW。 | -
Y | output | tensor | 输出张量，维度为3D或4D，格式为NCW/NCHW。 | -
auto_pad | attribute | string | 指定padding的类型。 | 配置范围：NOTSET、SAME_UPPER、SAME_LOWER、VALID
ceil_mode | attribute | int | 输出形状的取整方式。 | 规格约束：仅支持floor
dilations | attribute | list(int) | 每个轴上的扩张系数。 | 规格约束：仅支持1
kernel_shape | attribute | list(int) | kernel沿各轴的大小。 | -
pads | attribute | list(int) | 各轴前后填充零的个数。 | -
storage_order | attribute | int | 张量存储主序。 | 规格约束：仅支持0
strides | attribute | list(int) | 各个方向上kernel的移动步长。 | -

### Gemm

功能描述

对两个2D张量进行矩阵乘积运算。

参数说明

表 1 Gemm参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
A | input | tensor | 输入张量，维度为2D，格式为ND。 | -
B | input | tensor | 权重张量，维度为2D。 | 规格约束：仅支持离线变量
C | input | tensor | 偏置张量，维度为1D。 | 规格约束：仅支持离线变量
Y | output | tensor | 输出张量，维度为2D，格式为ND。 | -
alpha | attribute | float | A×B张量的缩放系数。 | 规格约束：仅支持1.0
beta | attribute | float | C的乘数。 | 规格约束：仅支持0.0
transA | attribute | int | 决定输入A是否转置。 | 配置范围：0、1
transB | attribute | int | 决定输入B是否转置。 | 配置范围：0、1

### Matmul

功能描述

对两个2D/3D/4D张量进行矩阵乘积运算。

参数说明

> 说明： Matmul不支持广播场景。

表 1 Matmul参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
A | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
B | input | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
Y | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -

### Softmax

功能描述

计算指定维度的归一化Softmax概率分布。

参数说明

> 说明： 当Softmax维度较大时，int8量化损失较大，推荐使用fp32模式的算子，关闭cfg中的enable_all_ops选项（仅保留矩阵运算类算子的量化）。

表 1 Softmax参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
axis | attribute | int | Softmax的计算轴。 | -rank(input)<=axis<rank(input)，rank为张量的秩

### Relu

功能描述

对输入张量做Relu激活函数运算。

参数说明

表 1 Relu参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
X | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND/NCL/NCHW。 | -
Y | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND/NCW/NCHW。 | -

### Tanh

功能描述

对输入张量做Tanh激活函数运算。

参数说明

表 1 Tanh参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
X | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND/NCW/NCHW。 | -
Y | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND/NCW/NCHW。 | -

### Sigmoid

功能描述

对输入张量做Sigmoid激活函数运算。

参数说明

表 1 Sigmoid参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
X | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND/NCW/NCHW。 | -
Y | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND/NCW/NCHW。 | -

### Reshape

功能描述

改变Tensor的Shape，但不改变其排布。

参数说明

表 1 Reshape参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NCW、NCHW。 | -
shape | input | tensor (int64) | Shape张量，转换后的Shape。 | 所有元素之积与input包含的元素个数相等
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NCW、NCHW。 | -
allowzero | attribute | int | 判断是否对目标形状做适配（默认0）。 | 仅支持0

### Mul

功能描述

计算两个矩阵逐点相乘。

参数说明

> 说明： Mul支持广播特性。双向广播需要在转换命令中明确配置inputDataFormat和outputDataFormat参数。

表 1 Mul参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
A | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
B | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
C | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -

### Add

功能描述

计算两个矩阵逐点相加。

参数说明

> 说明： Add支持广播特性。双向广播需要在转换命令中明确配置inputDataFormat和outputDataFormat参数。

表 1 Add参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
A | input | tensor | 左输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
B | input | tensor | 右输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
C | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -

### Sub

功能描述

计算两个矩阵逐点相减。

参数说明

> 说明： Sub支持广播特性。双向广播需要在转换命令中明确配置inputDataFormat和outputDataFormat参数。

表 1 Sub参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
A | input | tensor | 左输入张量，维度为2D/3D/4D，格式分别为ND/NCW/NCHW。 | -
B | input | tensor | 右输入张量，维度为2D/3D/4D，格式分别为ND/NCW/NCHW。 | -
C | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -

### Gather

功能描述

根据指定索引，从输入张量的指定轴上提取元素，组合成新张量。

参数说明

表 1 Gather参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
data | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NCW、NCHW。 | -
index | input | tensor (int32) | 索引张量，维度为2D/3D/4D，格式分别为ND、NCW、NCHW。 | -
output | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NCW、NCHW。 | -
axis | attribute | int | 输入张量被切分的轴。 | -rank(data)<=axis<rank(data)，rank为张量的秩

### Split

功能描述

对张量分割按照某一轴平均或非平均切分成若干份。

参数说明

表 1 Split参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
data | input | tensor | 输入张量，维度为2D/3D/4D，格式分别为ND、NCW、NCHW。 | -
outputs | output | varList(tensor) | 输出张量，维度为2D/3D/4D，格式分别为ND、NCW、NCHW。 | -
num_outputs | attribute | int | 分割的数量。 | (0, split_dim]
axis | attribute | int | 被分割的轴。 | 维度索引
split | attribute | tensor | 具体每一份分割的维度。 | [n1, n2, ..., ni]，∑ni = 轴的值，n > 0

### Concat

功能描述

将多个张量拼接成某一个张量。

参数说明

表 1 Concat参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
inputs | input | varList(tensor) | 输入张量列表，内部各张量维度为2D/3D/4D，格式分别为ND、NCW、NCHW。 | 规格约束：列表中各张量在指定轴上元素个数相等
concat_result | output | tensor | 输出张量，维度为2D/3D/4D，格式分别为ND、NCW、NCHW。 | -
axis | attribute | int | 指定沿着哪个轴进行连接。 | 规格约束：-rank(data)≤axis<rank(data)，rank为张量的秩

### AveragePool

功能描述

对3D或4D输入进行平均池化计算。

参数说明

表 1 AveragePool参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
X | input | tensor | 输入张量，维度为3D或4D，格式为NCW/NCHW。 | -
Y | output | tensor | 输出张量，维度为3D或4D，格式为NCW/NCHW。 | -
auto_pad | attribute | string | 指定padding的类型。 | 配置范围：NOTSET、SAME_UPPER、SAME_LOWER、VALID
ceil_mode | attribute | int | 输出形状的取整方式。 | 仅支持floor
dilations | attribute | list(int) | 每个轴上的扩张系数。 | 仅支持1
kernel_shape | attribute | list(int) | kernel沿各轴的大小。 | -
pads | attribute | list(int) | 各轴前后填充零的个数。 | -
storage_order | attribute | int | 张量存储主序。 | 仅支持0
strides | attribute | list(int) | 各个方向上kernel的移动步长。 | -

### InstanceNormalization

功能描述

对3D输入张量做归一化计算。

参数说明

> 说明： 暂时只支持1D，仅支持float类型，暂不支持int8类型。

表 1 InstanceNormalization参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为3D，格式为NCW。 | -
scale | input | tensor | 输入张量的放缩系数，维度为1D。 | -
B | input | tensor | 偏置向量，维度为1D。 | -
output | output | tensor | 输出张量，维度为3D，格式为NCW。 | -
epsilon | attribute | float | 用于避免除零溢出（默认1e-5）。 | -

### LSTM

功能描述

一种循环神经网络，用于捕捉输入的时序数据长期依赖关系。

参数说明

> 说明： 仅支持float类型，暂不支持int8类型。

表 1 LSTM参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
X | input | tensor | 输入时序数据，维度为3D，格式为NCW。 | 规格约束：作为在线变量
W | input | tensor | 门的权重张量，维度为3D，格式为NCW。 | 规格约束：离线常量
R | input | tensor | 循环权重张量，维度为3D，格式为NCW。 | 规格约束：离线常量
B | input | tensor | 输入门偏置张量，维度为2D，格式为ND。 | 规格约束：离线常量
sequence_lens | input | tensor | 确定每个批数据中时序长度。 | 暂不支持配置
initial_h | input | tensor | 隐藏层初始值，维度为3D，格式为NCW。 | 规格约束：作为在线变量
initial_c | input | tensor | 细胞层初始值，维度为3D，格式为NCW。 | 规格约束：作为在线变量
P | input | tensor | 窥视孔权重向量。 | 暂不支持配置
Y | output | tensor | 隐藏层所有中间输出值张量拼接后的向量，维度为4D，格式为NCHW。 | 规格约束：作为在线输出变量
Y_h | output | tensor | 隐藏层输出向量，维度为3D，格式为NCW。 | 规格约束：作为在线输出变量
Y_c | output | tensor | 细胞层输出向量，维度为3D，格式为NCW。 | 规格约束：作为在线输出变量
activation_alpha | attribute | list(float) | 对LSTM激活函数结果做放缩（默认0.01）。 | -
activation_beta | attribute | list(float) | 对LSTM激活函数结果做偏置（默认0.01）。 | -
activations | attribute | list(string) | LSTM激活函数类型。 | 暂不支持配置
clip | attribute | float | 梯度裁剪阈值。 | 暂不支持配置
direction | attribute | string | 指定LSTM处理输入数据的方式（默认'forward'）。 | 暂不支持配置
hidden_size | attribute | int | 隐藏层大小。 | -
input_forget | attribute | int | 是否对输入和遗忘门进行耦合（默认0）。 | 暂不支持配置
layout | attribute | int | 确定输入数据的排布格式，取值范围0或1（默认0）。 | 暂不支持配置

### Tile

功能描述

对2D/3D/4D输入沿指定维度做复制扩展。

参数说明

表 1 Tile参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
repeats | input | list(int) | 指定每个维度复制次数。 | 规格约束：repeats为离线常量
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -

### Pad

功能描述

对输入张量边界做填充。

参数说明

表 1 Pad参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
data | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | 规格约束：mode=constant的int8量化场景仅支持4D张量输入
pads | input | list(int) | 指定各输入维度填充范围。 | 规格约束：pads为离线常量，pads[i]<input_dim[i] pads[i]非负
constant_value | input | int | 自定义填充常量。 | 规格约束：constant_value为离线常量
axes | input | list(int) | 指定需要填充的轴。 | 暂不支持配置
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
mode | attribute | string | 指定填充模式。 | 配置范围：constant、reflect、edge

### Resize

功能描述

对输入张量按照指定填充模式做缩放。

参数说明

表 1 Resize参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
X | input | tensor | 输入张量，维度为4D，格式为NCHW。 | -
roi | input | list(int) | 指定每个维度复制次数。 | 暂不支持配置
scales | input | list(float) | 自定义填充常量。 | 规格约束：离线常量，NC轴保持1.0。fp32仅支持out_dim为整数，int8不支持配置，scales为离线常量，与sizes必须配置且仅配置一个
sizes | input | list(int) | 指定需要填充的轴。 | 规格约束：离线常量，NC轴同输入张量保持一致，sizes为离线常量
Y | output | tensor | 输出张量，维度为4D，格式为NCHW。 | -
antialias | attribute | int32 | 默认值：0。抗锯齿开关，用于平滑缩小图像边缘锯齿。 | 暂不支持配置
axes | attribute | list(int) | 指定缩放的维度轴索引。 | 暂不支持配置
coordinate_transformation_mode | attribute | string | 默认值："half_pixel"。指定坐标转换模式，控制像素映射关系。 | 配置范围： 'half_pixel'、"align_corners"、"asymmetric"
cubic_coeff_a | attribute | float | 默认值："-0.75"。三次插值系数，影响插值平滑程度。 | 暂不支持配置
exclude_outside | attribute | int | 默认值："0"。边界处理开关，是否排除外部像素。 | 暂不支持配置
extrapolation_value | attribute | float | 默认值："0.0"。外推填充值，越界时使用的数值。 | 暂不支持配置
keep_aspect_ratio_policy | attribute | string | 默认值："stretch"。保持高宽比策略，缩放比例计算方式。 | 暂不支持配置
mode | attribute | string | 默认值："nearest"。指定缩放插值模式。 | 配置范围： "nearest"、"linear"
nearest_mode | attribute | string | 默认值："round_prefer_floor"。 最近邻插值模式下取整函数。 | 配置范围： "round_prefer_floor"、"round_prefer_ceil"、"floor"

### Squeeze

功能描述

对输入张量进行shape压缩操作，被压缩维度的dim值必须为1。

参数说明

表 1 Squeeze参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
data | input | tensor | 输入张量，维度不限制。 | -
squeezed | output | tensor | 输出张量，维度不限制。 | -
axes（可选） | attribute | list(int) | 被压缩的轴列表。 | -Rank(tensor) <= axis < Rank(tensor)

### Unsqueeze

功能描述

对多维Tensor进行shape扩展。

参数说明

表 1 Unsqueeze参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
data | input | tensor | 输入张量，维度不限制。 | -
expanded | output | tensor | 输出张量，维度不限制。 | -
axes（可选） | attribute | list(int) | 被扩展的轴列表。 | -Rank(expanded) <= axis < Rank(expanded)

### Flatten

功能描述

对多维Tensor进行维度展平。

参数说明

表 1 Flatten参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
data | input | tensor | 输入张量，维度不限制。 | -
flattened | output | tensor | 输出张量，维度不限制。 | -
axis | attribute | int | 展平终止维度 (不包括），默认为1。 | -Rank(tensor) <= axis <= Rank(tensor)

### Abs

功能描述

对张量的每个元素做绝对值运算。

参数说明

表 1 Abs参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | -

### Ceil

功能描述

对张量中的每个元素做向上取整操作。

参数说明

表 1 Ceil参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | -

### Cos

功能描述

对张量中的每个元素做余弦操作。

参数说明

表 1 Cos参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | [-1, 1]

### Exp

功能描述

对张量中的每个元素做指数计算操作。

参数说明

表 1 Exp参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | (0, 正无穷)

### Floor

功能描述

对张量中的每个元素做向下取整操作。

参数说明

表 1 Floor参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | -

### Log

功能描述

对张量中的每个元素做对数计算操作（底数值为e）。

参数说明

表 1 Log参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | (0, 正无穷)
y | output | tensor | 输出张量，维度不限制。 | -

### Round

功能描述

对张量中的每个元素做四舍五入操作。

参数说明

表 1 Round参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | -

### Sin

功能描述

对张量中的每个元素做正弦计算操作。

参数说明

表 1 Sin参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | -
y | output | tensor | 输出张量，维度不限制。 | [-1, 1]

### Sqrt

功能描述

对张量中的每个元素做平方根计算操作。

参数说明

表 1 Sqrt参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
x | input | tensor | 输入张量，维度不限制。 | [0, 正无穷)
y | output | tensor | 输出张量，维度不限制。 | [0, 正无穷)

### BatchNormalization

功能描述

对输入张量做批归一化计算。

参数说明

表 1 BatchNormalization参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
scale | input | tensor | 输入张量的放缩系数，维度为1D。 | -
B | input | tensor | 偏置向量，维度为1D。 | -
input_mean | input | tensor | 每个通道的全局均值，维度为1D。 | -
input_var | input | tensor | 每个通道的全局方差，维度为1D。 | -
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
epsilon | attribute | float | 用于避免除零溢出（默认1e-5）。 | -

### LayerNormalization

功能描述

对输入张量做层归一化计算。

参数说明

表 1 LayerNormalization参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
scale | input | tensor | 输入张量的放缩系数，维度为1D。 | -
B | input | tensor | 偏置向量，维度为1D。 | -
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
epsilon | attribute | float | 用于避免除零溢出（默认1e-5）。 | -
axis | attribute | int | 用于指定归一化的维度（默认-1）。 | 规格约束：-Rank(input) <= axis < Rank(input)

### LpNormalization

功能描述

沿指定轴，用 1 或 2 阶 Lp 范数对输入张量执行归一化计算。

参数说明

表 1 LpNormalization参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
p | attribute | int | 用于指定 Lp 范数的阶数。 | 规格约束：只支持取值1或2
axis | attribute | int | 用于指定归一化的维度（默认-1）。 | 规格约束：-Rank(input) <= axis < Rank(input)

### Slice

功能描述

从输入张量中沿指定轴提取子张量。

参数说明

表 1 Slice参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
data | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
starts | input | tensor | 维度为1D，对应 axes 中每个轴的起始索引。 | 规格约束：starts为离线常量
ends | input | tensor | 维度为1D，对应 axes 中每个轴的结束索引。 | 规格约束：ends为离线常量
axes（可选） | input | tensor | 维度为1D，指定要切片的轴（默认值为 [0,1,...,r-1]）。 | 规格约束：axes为离线常量
steps（可选） | input | tensor | 维度为1D，对应 axes 中每个轴的切片步长（默认值为[1,1…,1]）。 | 规格约束：steps为离线常量
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -

### GlobalMaxPool

功能描述

对输入张量除通道轴以外进行最大池化操作。

参数说明

表 1 GlobalMaxpool参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
X | input | tensor | 输入张量，维度为3D/4D，格式为NCW/NCHW。 | 规格约束：仅支持3D 4D
Y | output | tensor | 输出张量，维度为3D/4D，格式为NCW/NCHW。 | -

### GlobalAveragePool

功能描述

对输入张量除通道轴以外进行平均池化操作。

参数说明

表 1 GlobalAveragePool参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
X | input | tensor | 输入张量，维度为3D/4D，格式为NCW/NCHW。 | 规格约束：仅支持3D 4D
Y | output | tensor | 输出张量，维度为3D/4D，格式为NCW/NCHW。 | -

### Transpose

功能描述

对输入张量进行转置。

参数说明

表 1 Transpose参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
data | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
perm | attribute | tensor | 输入张量的维度重排顺序。 | 规格约束：不支持perm=[0,3,1,2]、[0,2,3,1]的Transpose单算子转换
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -

### ArgMax

功能描述

在张量的指定维度上，计算并返回最大值对应的位置索引。

参数说明

> 说明： 仅支持float类型，不支持int8类型。

表 1 ArgMax参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
data | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NHWC。 | -
reduced | output | tensor (int32) | 输出张量，维度为1D/2D/3D/4D，格式为N/ND/NCW/NCHW，取决于参数配置。 | -
axis | attribute | int | 指定在张量中执行计算逻辑的维度。 | 规格约束：-rank(value)<=axis<rank(value)，rank为张量的秩。默认为0
keepdims | attribute | int | 控制是否保留被降维的轴。 | 规格约束：只支持取值0或1。默认为1
select_last_index | attribute | int | 控制最大值重复时的索引选择策略。为 0 时返回第一个最大值的索引；为 1 时返回最后一个最大值的索引。 | 规格约束：只支持取值0或1。默认为0

### ArgMin

功能描述

在张量的指定维度上，计算并返回最小值对应的位置索引。

参数说明

> 说明： 仅支持float类型，不支持int8类型。

表 1 ArgMin参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
data | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NHWC。 | -
reduced | output | tensor (int32) | 输出张量，维度为1D/2D/3D/4D，格式为N/ND/NCW/NCHW，取决于参数配置。 | -
axis | attribute | int | 指定在张量中执行计算逻辑的维度。 | 规格约束：-rank(value)<=axis<rank(value)，rank为张量的秩。默认为0
keepdims | attribute | int | 控制是否保留被降维的轴。 | 规格约束：只支持取值0或1。默认为1
select_last_index | attribute | int | 控制最小值重复时的索引选择策略。为 0 时返回第一个最小值的索引；为 1 时返回最后一个最小值的索引。 | 规格约束：只支持取值0或1。默认为0

### Div

功能描述

对两输入张量进行除法运算。

参数说明

表 1 Div参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
A | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
B | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
C | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -

### Clip

功能描述

对张量进行最大最小值截断操作。

参数说明

表 1 Clip参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
X | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
min | input | tensor | 输入张量，维度为标量。 | -
max | input | tensor | 输入张量，维度为标量。 | -
Y | output | int | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -

### ReduceMax

功能描述

对指定维度的张量进行最大值归约计算。

参数说明

表 1 ReduceMax参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
data | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
axes | input | tensor | 输入张量，维度为1D，指定归约的轴。 | 规格约束：离线常量，元素范围[-rank(input), rank(input))
reduced | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
keepdims | attribute | int | 是否需要保留归约轴的维度。 | 配置范围：0/1
noop_with_empty_axes | attribute | int | 定义归约轴为空时的行为。 | 规格约束：不支持配置

### ReduceMin

功能描述

对指定维度的张量进行最小值归约计算。

参数说明

表 1 ReduceMin参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
data | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
axes | input | tensor | 输入张量，维度为1D，指定归约的轴。 | 规格约束：离线常量，元素范围[-rank(input), rank(input))
reduced | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
keepdims | attribute | int | 是否需要保留归约轴的维度。 | 配置范围：0/1
noop_with_empty_axes | attribute | int | 定义归约轴为空时的行为。 | 规格约束：不支持配置

### ReduceSum

功能描述

对指定维度的张量进行求和归约计算。

参数说明

表 1 ReduceSum参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
data | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
axes | input | tensor | 输入张量，维度为1D，指定归约的轴。 | 规格约束：离线常量，元素范围[-rank(input), rank(input))
reduced | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
keepdims | attribute | int | 是否需要保留归约轴的维度。 | 配置范围：0/1
noop_with_empty_axes | attribute | int | 定义归约轴为空时的行为。 | 规格约束：不支持配置

### ReduceMean

功能描述

对指定维度的张量进行均值归约计算。

参数说明

表 1 ReduceMean参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
data | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
axes | input | tensor | 输入张量，维度为1D，指定归约的轴。 | 规格约束：离线常量，元素范围[-rank(input), rank(input))
reduced | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | -
keepdims | attribute | int | 是否需要保留归约轴的维度。 | 配置范围：0/1
noop_with_empty_axes | attribute | int | 定义归约轴为空时的行为。 | 规格约束：不支持配置

### Cast

功能描述

对输入张量进行数据类型的转换。

参数说明

> 说明： Cast算子不支持量化。

表 1 Cast参数概览

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 配置范围及规格约束说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为2D/3D/4D，格式为ND/NCW/NHWC。 | 数据类型仅支持float32、uint8、int8、int32
output | output | tensor | 输出张量，维度为2D/3D/4D，格式为ND/NCW/NCHW。 | 数据类型仅支持float32、uint8、int8、int32
round_mode | attribute | string | 转换为 FLOAT8E8M0 类型时的舍入模式配置。 | 规格约束：不支持配置
saturate | attribute | int | 设定输入值超出目标类型取值范围时的转换行为，仅对float8类型转换有效。 | 规格约束：不支持配置
to | attribute | int | 指定输入张量元素需要转换的目标数据类型。 | 规格约束：取值仅支持FLOAT、UINT8、INT8、INT32

# 专题

## 高效算子支持

HiSpark.AI工具链对部分常用嵌入式AI的算子规格进行了RISC-V专题的性能优化。在converter_lite命令行中开启riscvOpt选项，即可启用高性能模式。对性能要求较高的嵌入式AI场景中，在AI模型设计时可以优先采用以下规格。

### Conv优化

以下规格的Onnx算子在riscvOpt高性能模式下推理时间上有较大优化，算法工程师在AI模型设计时可以优先采用以下规格。

表 1 Conv Onnx高效算子支持规格列表

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 高效算子规格支持范围说明
--- | --- | --- | --- | ---
X | input | tensor | 输入张量，维度为3D或4D，格式为NCW/NCHW。 | C 在 [1, 8, 16, 32]列表中 H，W均满足 6<=H, W <= 32
Y | output | tensor | 输出张量，维度为3D或4D，格式为NCW/NCHW。 | C 在 [1, 8, 16, 32]列表中 H，W均满足 6<=H, W <= 32
kernel_shape | attribute | list(int) | kernel沿各轴的大小。 | 1D 支持kernel_shape = 3, 5，2D 支持kernel_shape = 3,3
pads | attribute | list(int) | 各轴前后填充零的个数。 | 支持pads满足 输入输出tensor H/W相等的情况
strides | attribute | list(int) | 各个方向上kernel的移动步长。 | stride = 1

以下规格的TFLite算子在riscvOpt高性能模式下推理时间上有较大优化，算法工程师在AI模型设计时可以优先采用以下规格。

表 2 Conv TFLite高效算子支持规格列表

参数名 | 参数/输入输出 | 数据类型 | 参数含义 | 高效算子规格支持范围说明
--- | --- | --- | --- | ---
input | input | tensor | 输入张量，维度为4D，格式为NHWC。 | C 在 [1, 8, 16, 32]列表中 H，W均满足 6<=H, W <= 32
output | output | tensor | 输出张量，维度为4D，格式为NHWC。 | C 在 [1, 8, 16, 32]列表中 H，W均满足 6<=H, W <= 32
padding | attribute | string | 填充类型。 | 配置范围：支持SAME
stride_h | attribute | int32 | filter在H方向上的移动步长。 | stride_h = 1
stride_w | attribute | int32 | filter在W方向上的移动步长。 | stride_w = 1