Skip to content

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,其余情况转换成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
当该AVGPool输入为
uint8 则 h*w <= 255
int16 则 h*w <=65025
对于MAXPool不管输入为何类型都
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中这样描述:

    layer {
        bottom: "layer85-conv"
        top: "layer86-upsample"
        name: "layer86-upsample"
        type: "Upsample"
        upsample_param {
            scale: 2
        }
    }
    
    scale参数与Deconvolution的Stride含义相同。但需注意Upsample相当于权重全为1的Deconvolution算子。

  • ROIPooling算子在prototxt中这样描述:

    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
        }
    }
    
    Roi_pooling_param仅支持pooled_w,pooled_h和spatial_scale。Float模型的rois输入为rpn层输出的坐标,Fixed和Offline模型的rois输入为rpn层输出坐标乘spatial_scale值后再量化到int16后送入模型。

10.2. TensorFlow支持算子

类别 算子 备注
Convolution Conv 限制条件:Kernel_size:H * W < 255
Convolution DepthwiseConv2dNative 原生支持Kernel_size为3 * 3,其余情况转换成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 目前的双线性插值的版本只能支持满足下面条件的case:(1)只能支持整数倍的放大。(2)放大倍数必须小于等于8倍。(3)只支援3维数据的差值,即NHWC中的N必须为1,这点和卷积类似
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,其余情况转换成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输入为
uint8 则 h*w <= 255
int16 则 h*w <=65025
        
GlobalMaxPool
若kernel size为h*w
当该算子l输入为
uint8 则 h*w <= 255
int16 则 h*w <=65026
        
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
不支持roi参数,只对整个维度进行缩放。
Bilinear 方式coordinate_transformation_mod参数
仅支持align_corners,asymmetric;
不支持下采样
只支持4维输入
H W放大倍数相同
H*W放大倍数<=8
        
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. DepthwiseConv如果kernle size > 3,必须满足input size == kernel size。

2. 对于指定维度的Softmax,我们只支持对最内维度的操作(多余多维Tensor所Softmax运算,我们只支持Softmax制定在最内维度做)。

3. 对于TensorFlow的网络,尽量减少大数据量DMA算子(包括Gather、Unpack、Pack、Concat、Reshape、Slice、Tile、Tanspose、Pad、Split等这类单纯数据搬运操作的算子)的使用。使用上述算子时,如C维度是16的整数倍,能够加速运算。

4. 对于Caffe 网络与TensorFlow类似,尽量减少Split、Concat、Reshape、Flatten、Slice、Permute的使用。

5. 除第一层Conv外,其他层的Conv DI维度(即NHWC 中C这个维度)越大效率会越高,最大支援2048。

6. Math类算子(包括Add、Sub、Mul、Div等元素操作的算子),如果右操作数是scaler(单个数字) 或者 1 维向量(HW维度数据相同,C维度不同),效率会更高。

7. 网络结构中尽量减少一个算子的输出被多个算子作为输入的情况,如ResNet的残差结构,GoogLeNet的Inception模块等。