def add_bottleneck(bottom, num_output, stride, flag): # flag: 1, skip; 2, downsampling # output: 11 [conv1, bn1, scale1] = add_module(bottom, num_output / 4, 0, 1, 1) relu1 = L.ReLURecover(conv1, in_place=True) [conv2, bn2, scale2] = add_module(conv1, num_output / 4, 1, 3, 1) relu2 = L.ReLURecover(conv2, in_place=True) [conv3, bn3, scale3] = add_module(conv2, num_output * flag, 0, 1, stride) return conv1, bn1, scale1, relu1, conv2, bn2, scale2, relu2, conv3, bn3, scale3
def add_skip_block(bottom, num_output): [conv1, bn1, scale1] = add_module(bottom, num_output, 1) relu1 = L.ReLURecover(conv1, in_place=True) [conv2, bn2, scale2] = add_module(conv1, num_output, 1) relu2 = L.ReLU(conv2, in_place=True) return conv1, bn1, scale1, relu1, conv2, bn2, scale2, relu2
def add_downsampling_block_1(bottom, num_output): # special case [res1, bn1, scale1] = add_module(bottom, 2 * num_output, 1, 3, 2) [conv1, bn2, scale2] = add_module(bottom, num_output, 1, 3, 1) relu1 = L.ReLURecover(conv1, in_place=True) [conv2, bn3, scale3] = add_module(conv1, 2 * num_output, 1, 3, 2) res2 = L.Eltwise(res1, conv2) relu2 = L.ReLU(res2, in_place=True) return res1, bn1, scale1, conv1, bn2, scale2, relu1, conv2, bn3, scale3, res2, relu2
def add_skip_block(bottom, num_output): [conv1, bn1, scale1] = add_module(bottom, num_output, 1) relu1 = L.ReLURecover(conv1, in_place=True) [conv2, bn2, scale2] = add_module(conv1, num_output, 1) # bottom不做任何变化,表示skip connection res = L.Eltwise(bottom, conv2) relu2 = L.ReLU(res, in_place=True) return conv1, bn1, scale1, relu1, conv2, bn2, scale2, res, relu2