支持量化的层及约束
本章节给出不同框架可量化的层以及相关约束。
 
 - 若网络模型输入数据类型或权重数据类型为Float16或混合精度类型(Float32/Float16共存),AMCT会关闭如下算子的量化功能:AvgPool、Pooling、AvgPoolV2、MaxPool、MaxPoolV3、Pooling、Add、Eltwise、BatchMatMulV2(两路输入都为变量tensor)。 
- 由于硬件约束,该版本不建议使用非均匀量化的功能,获取不到性能收益。
| 框架 | 支持的层类型 | 约束 | 对应Ascend IR定义的层类型 | 
|---|---|---|---|
| Caffe | InnerProduct:全连接层 | transpose属性为false,axis为1 | FullyConnection | 
| Convolution:卷积层 | filter维度为4 | Conv2D | |
| Deconvolution: 反卷积层 | dilation为1、filter维度为4 | Deconvolution | |
| Pooling | 
 | Pooling | |
| Eltwise | 只做tensor量化 | Eltwise | |
| TensorFlow | MatMul:全连接层 | 
 | MatMulV2 | 
| Conv2D:卷积层 | weight的输入来源不含有placeholder等可动态变化的节点 | Conv2D | |
| DepthwiseConv2dNative:Depthwise卷积层 | weight的输入来源不含有placeholder等可动态变化的节点 | DepthwiseConv2D | |
| Conv2DBackpropInput | dilation为1,weight的输入来源不含有placeholder等可动态变化的节点 | Conv2DBackpropInput | |
| BatchMatMulV2 | BatchMatMulV2 | ||
| AvgPool | 不支持移位N操作 | AvgPool | |
| Conv3D | dilation_d为1 | Conv3D | |
| MaxPool | 只做tensor量化 | MaxPool、MaxPoolV3 | |
| Add | 只做tensor量化 | Add | |
| ONNX | Conv:卷积层 | 
 | Conv2D、Conv3D | 
| Gemm:广义矩阵乘 | 
 | MatMulV2 | |
| ConvTranspose:转置卷积 | 
 | Conv2DTranspose | |
| MatMul | BatchMatMulV2 | ||
| AveragePool | global_pooling为false,不支持移位N操作 | AvgPoolV2 | |
| MaxPool | 只做tensor量化 | MaxPool、MaxPoolV3 | |
| Add | 只做tensor量化 | Add | 
| 框架 | 支持的层类型 | 约束 | 对应Ascend IR定义的层类型 | 
|---|---|---|---|
| Caffe | Convolution:卷积层 | dilation为1、filter维度为4 | Conv2D | 
| InnerProduct:全连接层 | transpose属性为false,axis为1 | FullyConnection | |
| TensorFlow | Conv2D:卷积层 | dilation为1 | Conv2D | 
| MatMul:全连接层 | transpose_a为False | MatMulV2 | |
| ONNX | Conv:卷积层 | - | Conv2D | 
| Gemm:广义矩阵乘 | transpose_a=false | MatMulV2 | 
| Ascend IR定义的层类型 | 仅权重量化 权重ARQ中channel_wise=true | 仅权重量化 权重ARQ中asymmetric=true | 权重和数据都量化 权重ARQ中channel_wise=true | 权重和数据都量化 权重ARQ中asymmetric=true | 约束 | 
|---|---|---|---|---|---|
| Conv2D | √ | √ | √ | × | weight的输入来源不含有placeholder等可动态变化的节点。 | 
| DepthwiseConv2D | √ | √ | √ | × | weight的输入来源不含有placeholder等可动态变化的节点。 | 
| FullyConnection | √ | √ | × | × | - | 
| MatMulV2 | √ | √ | × | × | 第二路的输入来源不含有placeholder等可动态变化的节点。 | 
| Deconvolution | √ | √ | √ | × | weight的输入来源不含有placeholder等可动态变化的节点。 | 
| Conv2DTranspose | √ | √ | √ | × | weight的输入来源不含有placeholder等可动态变化的节点。 | 
| Conv2DBackpropInput | √ | √ | √ | × | weight的输入来源不含有placeholder等可动态变化的节点。 | 
| BatchMatMulV2 | √ | √ | × | × | 第二路的输入来源不含有placeholder等可动态变化的节点。 | 
| Conv3D | √ | √ | √ | × | weight的输入来源不含有placeholder等可动态变化的节点。 | 
| Pooling | 不支持 | 不支持 | × | × | - | 
| AvgPool | 不支持 | 不支持 | × | × | - | 
| AvgPoolV2 | 不支持 | 不支持 | × | × | - | 
其中:
- √表示支持,×表示该场景量化会异常。
- 权重ARQ中channel_wise=true:表示每个channel独立量化,量化因子不同。
- 权重ARQ中asymmetric=true:表示权重量化使用非对称量化。
- 不支持:表示该算子不支持仅权重量化特性。