@ -146,17 +146,49 @@ class BatchNormOpConverter : public OpConverter {
TensorRTEngine : : Weight power_weights { nvinfer1 : : DataType : : kFLOAT , nullptr ,
0 } ;
nvinfer1 : : IScaleLayer * layer =
TRT_ENGINE_ADD_LAYER ( engine_ , Scale , * const_cast < nvinfer1 : : ITensor * > ( X ) ,
nvinfer1 : : ScaleMode : : kCHANNEL , shift_weights . get ( ) ,
scale_weights . get ( ) , power_weights . get ( ) ) ;
int dynamic_shape_offset = engine_ - > with_dynamic_shape ( ) ? 1 : 0 ;
nvinfer1 : : ILayer * layer = nullptr ;
nvinfer1 : : IShuffleLayer * expand_layer = nullptr ;
nvinfer1 : : IShuffleLayer * squeeze_layer = nullptr ;
auto x_dim = X - > getDimensions ( ) ;
if ( x_dim . nbDims < 3 + dynamic_shape_offset ) {
nvinfer1 : : Dims expand_shape ;
expand_shape . nbDims = 3 + dynamic_shape_offset ;
for ( int i = 0 ; i < 3 + dynamic_shape_offset ; i + + ) {
if ( i < x_dim . nbDims ) {
expand_shape . d [ i ] = x_dim . d [ i ] < 0 ? 0 : x_dim . d [ i ] ;
} else {
expand_shape . d [ i ] = 1 ;
}
}
expand_layer = TRT_ENGINE_ADD_LAYER ( engine_ , Shuffle , * X ) ;
expand_layer - > setReshapeDimensions ( expand_shape ) ;
X = expand_layer - > getOutput ( 0 ) ;
}
layer = TRT_ENGINE_ADD_LAYER (
engine_ , Scale , * X , nvinfer1 : : ScaleMode : : kCHANNEL , shift_weights . get ( ) ,
scale_weights . get ( ) , power_weights . get ( ) ) ;
auto output_name = op_desc . Output ( " Y " ) . front ( ) ;
engine_ - > SetWeights ( op_desc . Input ( " Bias " ) . front ( ) ,
std : : move ( combile_bias_tensor ) ) ;
engine_ - > SetWeights ( op_desc . Input ( " Scale " ) . front ( ) ,
std : : move ( combile_scale_tensor ) ) ;
RreplenishLayerAndOutput ( layer , " pool2d " , { output_name } , test_mode ) ;
if ( x_dim . nbDims < 3 + dynamic_shape_offset ) {
nvinfer1 : : Dims squeeze_shape ;
squeeze_shape . nbDims = x_dim . nbDims ;
for ( int i = 0 ; i < squeeze_shape . nbDims ; i + + ) {
squeeze_shape . d [ i ] = x_dim . d [ i ] < 0 ? 0 : x_dim . d [ i ] ;
}
squeeze_layer =
TRT_ENGINE_ADD_LAYER ( engine_ , Shuffle , * ( layer - > getOutput ( 0 ) ) ) ;
squeeze_layer - > setReshapeDimensions ( squeeze_shape ) ;
layer = static_cast < nvinfer1 : : ILayer * > ( squeeze_layer ) ;
}
RreplenishLayerAndOutput ( layer , " batchnorm_add_scale " , { output_name } ,
test_mode ) ;
}
} ;