10. DLA SDK 支持
10.1. Caffe支持算子¶
| 算子 | 备注 | |
|---|---|---|
| ArgMax | only support top 1 | |
| BatchNorm | ||
| Concat | 最大256个tensor concat | |
| Convolution |
限制条件:All tensor size < 2^31
若kernel size 为 do*h*w*di 则h * w < 64
group为1时:转换成Depthwise Convolution;
group为C时:转换为Convolution;
group为 (1, C) 时:拆解成若干Convolution
round(di/16)*round(do/16) < 512 * 1024
| |
| ConvolutionDepthwise | 原生支持Kernel_size为3*3,6*6,9*9,其余情况转换成Convolution处理限制条件:Pad范围:[0, 1] | |
| CReLU | ||
| ContinuationIndicator | ||
| Crop | ||
| Deconvolution |
All tensor size < 2^31
若kernel size 为 do*h*w*di,h * w < 64
round(di/16)*round(do/16) < 512 * 1024
| |
| Dropout | ||
| Eltwise |
支持Add、Sub、Mul、Maximum
对于输入的两个tensor,shape满足下面条件
1. 4维向量,NCHW
2. NCHW ,const
3. NCHW ,C维向量
4. NCHW ,NCHW
| |
| Flatten | ||
| InnerProduct | 若weight size do*di round(di/16)*round(do/16) < 512 * 1024 | |
| Permute | ||
| Pooling |
若kernel size为h*w
1.global_pooling为true
h*w <= 65025
2.global_pooling为false
h*w <= 19*19
| |
| PriorBox | ||
| Power | 仅支持指数为正整数 | |
| Reshape | ||
| Reverse | ||
| ROIPooling | ROIPooling的rois输入维度为(N×5),当后段网络全部是InnerProduct时,N才可以设置大于1,如果后段网络中有卷积时,N仅可以设置为1,第二段网络需要循环执行N次。使用方法和限制详见下方Please Note。 | |
| ReLU | 输入<=4维 | |
| PReLU | 输入<=4维 | |
| Sigmoid | ||
| Slice | ||
| Scale |
对于输入的两个tensor,shape满足下面条件
1. 4维向量,NCHW
2. NCHW ,const
3. NCHW ,C维向量
4. NCHW ,NCHW
| |
| Softmax | 如需对指定维度进行运算,将要计算的维度转置到最后的维度(最内维度),最大支持32*512=16384 | |
| Split | ||
| Tanh | ||
| Threshold | 只支持4维输入 | |
| Tile | ||
| Upsample |
Upsample算子在caffe中没有,可以手动将Deconvolution修改成Upsample
只支持4维输入 Only support same scale on H and W
| |
| Reorg | 只支持stride = 2 | |
| LSTM | 输入c0,h0必须是const tensor,cn,hn不支持单独输出,只支持单向LSTM |
Please Note:
-
Upsample算子在prototxt中这样描述:
scale参数与Deconvolution的Stride含义相同。但需注意Upsample相当于权重全为1的Deconvolution算子。layer { bottom: "layer85-conv" top: "layer86-upsample" name: "layer86-upsample" type: "Upsample" upsample_param { scale: 2 } } -
ROIPooling算子在prototxt中这样描述:
Roi_pooling_param仅支持pooled_w,pooled_h和spatial_scale。Float模型的rois输入为rpn层输出的坐标,Fixed和Offline模型的rois输入为rpn层输出坐标乘spatial_scale值后再量化到int16后送入模型。layer { name: "roi_pool5" type: "ROIPooling" bottom: "conv5_3" bottom: "rois" top: "pool5" roi_pooling_param { pooled_w: 7 pooled_h: 7 spatial_scale: 0.0625 } }
10.2. TensorFlow支持算子¶
| 类别 | 算子 | 备注 |
|---|---|---|
| Convolution | Conv | 限制条件:Kernel_size:H * W < 64 |
| Convolution | DepthwiseConv2dNative | 原生支持Kernel_size为3*3,6*6,9*9,其余情况转换成Convolution处理 |
| Convolution | FullyConnected | |
| Pooling | Max pooling | |
| Pooling | Average Pooling | |
| Activation | ReLU | |
| Activation | PReLU | |
| Activation | ReLU6 | |
| Activation | LeakyReLU | |
| Activation | Sigmoid | |
| Math | Less | |
| Math | Greater | |
| Math | GreaterEqual | |
| Math | Equal | |
| Math | Add | |
| Math | Sub | |
| Math | Mul | |
| Math | RealDiv | 仅支持第二个操作数为常量Tensor |
| Math | Maximum | |
| Math | Minimum | |
| Math | Mean | |
| Math | Max | |
| Math | Sqrt | |
| Math | Rsqrt | |
| Math | Round | |
| Math | Softmax | 如需对指定维度进行运算,将要计算的维度转置到最后的维度(最内维度) |
| Math | FusedBatchNorm | |
| Math | Exp | |
| DMA | Align | |
| DMA | ConcatV2 | |
| DMA | Fill | |
| DMA | Gather | |
| DMA | GatherV2 | |
| DMA | Pack | |
| DMA | Pad | |
| DMA | SpaceToBatchND | |
| DMA | BatchToSpaceND | |
| DMA | Zeroslike | |
| DMA | Split | |
| DMA | Slice | |
| DMA | Unpack | |
| DMA | Tile | |
| DMA | Reshape | |
| DMA | Transpose | |
| DMA | Resize_bilinear | |
| DMA | Resize_NearestNeighbor | |
| Misc | TopKV2 | |
| Misc | shape |
10.3. Onnx支持算子¶
| 算子 | 备注 | |
|---|---|---|
| Add |
对于输入的两个tensor,shape满足下面条件
1. 4维向量,NCHW
2. NCHW ,const
3. NCHW ,C维向量
4. NCHW ,NCHW
| |
| Abs | ||
| ArgMax | ||
| AveragePool | 若kernel size为h*w,当该算子l输入为 h*w <= 19*19 | |
| BatchNorm | ||
| Concat | 最大256个tensor concat | |
| Convolution |
All tensor size < 2^31
若kernel size 为 do*h*w*di 则h * w < 64
round(di/16)*round(do/16) < 512 * 1024
支持autoPad的SAME_UPPER属性;限制条件:Pads范围:[0, 7]
| |
| ConvTranspose |
All tensor size < 2^32
若kernel size 为 do*h*w*di,h * w < 64
round(di/16)*round(do/16) < 512 * 1024
| |
| Clip | Max == 6与Relu6相等,Only support min value is 0,max value is 6 | |
| DepthwiseConv2D | 原生支持Kernel_size为3*3,6*6,9*9,其余情况转换成Convolution处理 | |
| Div |
对于输入的两个tensor,shape满足下面条件
1. 4维向量,NCHW
2. NCHW ,const
3. NCHW ,C维向量
4. NCHW ,NCHW
| |
| Dropout | ||
| DepthToSpace | 只支持4维输入 | |
| Expand | ||
| Exp | ||
| Gather | 只支持indices为int32的常数 | |
| Gemm |
输入<=4维,若weight size do*di
round(di/16)*round(do/16) < 512 * 1024
| |
| GlobalAveragePool |
若kernel size为h*w
当该算子l输入为
h*w <= 65025
| |
| GlobalMaxPool |
若kernel size为h*w
当该算子l输入为
h*w <= 65025
| |
| LSTM |
激活函数固定,不能配置。参见用户手册特殊网络转换LSTM章节
输入c0,h0必须是const tensor,cn,hn不支持单独输出,
支持单向LSTM和双向LSTM
| |
| Matmul |
输入<=4维,若weight size do*di
round(di/16)*round(do/16) < 512 * 1024
| |
| Mul |
对于输入的两个tensor,shape满足下面条件
1. 4维向量,NCHW
2. NCHW ,const
3. NCHW ,C维向量
4. NCHW ,NCHW
| |
| MaxPool | 若kernel size为h*w 当该算子l输入为 h*w <= 19*19 | |
| Max | ||
| Pad | 支持,only support constant | |
| Reshape | ||
| ReduceSum | 输入<=4维 | |
| ReduceMean | 输入<=4维 | |
| ReduceMax | 输入<=4维,仅支持同时对一个axis进行计算 | |
| Resize |
当'model'为nearest
上采样时,'coordinate_transformation_mode'为'asymmetric',
'nearest_mode'only support round_prefer_floor(Default) and floor
coordinate_transformation_mode'为'align_corners',
'nearest_mode'only support round_prefer_floor(Default) and round_prefer_ceil.
下采样时,
'coordinate_transformation_mode'为'asymmetric',
'nearest_mode' is not support floor
| |
| ReLU | 只支持4维输入 | |
| PReLU | 输入<=4维 | |
| LeakyReLU | 输入<=4维 | |
| TanH | ||
| Sigmoid | ||
| Slice | ||
| Softmax | 如需对指定维度进行运算,将要计算的维度转置到最后的维度(最内维度),最大支持32*512=16384 | |
| Split | ||
| SpaceToDepth | ||
| Squeeze | ||
| Sub |
对于输入的两个tensor,shape满足下面条件
1. 4维向量,NCHW
2. NCHW ,const
3. NCHW ,C维向量
4. NCHW ,NCHW
| |
| Transpose | ||
| Tile | ||
| Unsqueeze | ||
| Upsample | 只支持4维输入Only support same scale on H and W |
10.4. SigmaStar DLA SDK对模型的限制¶
1. 对于指定维度的Softmax,我们只支持对最内维度的操作(多余多维Tensor所Softmax运算,我们只支持Softmax制定在最内维度做)。
2. 除第一层Conv外,其他层的Conv DI维度(即NHWC 中C这个维度)越大效率会越高,最大支援2048。
3. Math类算子(包括Add、Sub、Mul、Div等元素操作的算子),如果右操作数是scaler(单个数字) 或者 1 维向量(HW维度数据相同,C维度不同),效率会更高。
4. 网络结构中尽量减少一个算子的输出被多个算子作为输入的情况,如ResNet的残差结构,GoogLeNet的Inception模块等。