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模块等。