def get_before_pool()

in utils/symbol/symbol_densenet.py [0:0]


def get_before_pool(depth, ratio=-1, use_fp16=False):
    data = mx.symbol.Variable(name="data")
    data = mx.sym.Cast(data=data, dtype=np.float16) if use_fp16 else data
    
    # define densenet
    width, inc, k_sec = densenet_spec[depth]
    mid = int(4*inc)

    # ---------
    
    # stage 1
    conv1_x = Conv_BN_ACT(data=data, num_filter=width, kernel=(7, 7), pad=(3, 3), stride=(2, 2), name='conv1')
    conv2_x = mx.symbol.Pooling(data=conv1_x, pool_type="max", kernel=(3, 3), pad=(1,1), stride=(2, 2), name='pool1')
    
    conv2_x = (conv2_x, None) if ratio >= 0 else conv2_x

    # stage 2
    for i in range(1, k_sec[2]+1):
        conv2_x = DenseBlock(conv2_x, mid, inc, 'L2_B%02d'%i, ratio=ratio)
        width += inc

                
    # stage 3
    width = int(width/2)
    conv3_x = Connector(conv2_x, width, 'L3_Trans', ratio=ratio)
    for i in range(1, k_sec[3]+1):
        conv3_x = DenseBlock(conv3_x, mid, inc, 'L3_B%02d'%i, ratio=ratio)
        width += inc

               
    # stage 4
    width = int(width/2)
    conv4_x = Connector(conv3_x, width, 'L4_Trans', ratio=ratio)
    for i in range(1, k_sec[4]+1):
        conv4_x = DenseBlock(conv4_x, mid, inc, 'L4_B%02d'%i, ratio=ratio)
        width += inc

             
    # stage 5
    width = int(width/2)
    conv5_x = Connector(conv4_x, width, 'L5_Trans', ratio=min(ratio,0.)) # force to 0. because the shape is 7x7
    for i in range(1, k_sec[5]+1):
        # ratio is forced to be 0. for the last stage
        # (because do 3x3 conv on 3.5x3.5 resolution map does not make sense)
        conv5_x = DenseBlock(conv5_x, mid, inc, 'L5_B%02d'%i, ratio=min(ratio,0.))
        width += inc


    # ---------
    # output
    output = BN_ACT(data=conv5_x, name="tail")
    output = mx.sym.Cast(data=output, dtype=np.float32) if use_fp16 else output
    return output