def model_core_squeezenet17(x, mode, params, info): y, info = layer.conv2d_batch_norm_relu_dropout_l(x, mode, params, info, filters=128, kernel_size=3, strides=1) y, info = layer.sqnet_expand(y, mode, params, info, 2*64) y, info = layer.maxpool_l(y, info) # output 128x128 #y, info = layer.sqnet_squeeze_pool(y, mode, params, info, 80) y, info = layer.sqnet_squeeze(y, mode, params, info, 80) y, info = layer.sqnet_expand(y, mode, params, info, 2*96) y, info = layer.maxpool_l(y, info) # output 64x64 #y, info = layer.sqnet_squeeze_pool(y, mode, params, info, 104) y, info = layer.sqnet_squeeze(y, mode, params, info, 104) y, info = layer.sqnet_expand(y, mode, params, info, 2*112) y, info = layer.sqnet_squeeze(y, mode, params, info, 120) y, info = layer.sqnet_expand(y, mode, params, info, 2*128) y, info = layer.maxpool_l(y, info) # output 32x32 #y, info = layer.sqnet_squeeze_pool(y, mode, params, info, 120) y, info = layer.sqnet_squeeze(y, mode, params, info, 120) y, info = layer.sqnet_expand(y, mode, params, info, 2*112) y, info = layer.sqnet_squeeze(y, mode, params, info, 104) y, info = layer.sqnet_expand(y, mode, params, info, 2*96) y, info = layer.maxpool_l(y, info) # output 16x16 #y, info = layer.sqnet_squeeze_pool(y, mode, params, info, 88) y, info = layer.sqnet_squeeze(y, mode, params, info, 88) y, info = layer.sqnet_expand(y, mode, params, info, 2*80) y, info = layer.sqnet_squeeze(y, mode, params, info, 72) y, info = layer.sqnet_expand(y, mode, params, info, 2*65, last=True) return y, info
def model_core_squeezenet12(x, mode, params, info): y, info = layer.conv2d_batch_norm_relu_dropout_l(x, mode, params, info, filters=32, kernel_size=6, strides=2) # output 128x128 y, info = layer.maxpool_l(y, info) # output 64x64 y, info = layer.sqnet_squeeze(y, mode, params, info, 21) y, info = layer.sqnet_expand(y, mode, params, info, 2*26) y, info = layer.sqnet_squeeze(y, mode, params, info, 36) y, info = layer.sqnet_expand(y, mode, params, info, 2*46) y, info = layer.maxpool_l(y, info) # output 32x32 y, info = layer.sqnet_squeeze(y, mode, params, info, 41) y, info = layer.sqnet_expand(y, mode, params, info, 2*36) y, info = layer.sqnet_squeeze(y, mode, params, info, 31) y, info = layer.sqnet_expand(y, mode, params, info, 2*26) y, info = layer.maxpool_l(y, info) # output 16x16 y, info = layer.sqnet_squeeze(y, mode, params, info, 21) y, info = layer.sqnet_expand(y, mode, params, info, 2*16, last=True) return y, info
def model_core_darknet(x, mode, params, info): y, info = layer.conv2d_batch_norm_relu_dropout_l(x, mode, params, info, filters=64, kernel_size=3, strides=1) y, info = layer.conv2d_batch_norm_relu_dropout_l(y, mode, params, info, filters=50, kernel_size=1, strides=1) y, info = layer.maxpool_l(y, info) # output 128x128 y, info = layer.conv2d_batch_norm_relu_dropout_l(y, mode, params, info, filters=52, kernel_size=3, strides=1) y, info = layer.conv2d_batch_norm_relu_dropout_l(y, mode, params, info, filters=54, kernel_size=1, strides=1) y, info = layer.maxpool_l(y, info) # output 64x64 y, info = layer.conv2d_batch_norm_relu_dropout_l(y, mode, params, info, filters=56, kernel_size=3, strides=1) y, info = layer.conv2d_batch_norm_relu_dropout_l(y, mode, params, info, filters=58, kernel_size=1, strides=1) y, info = layer.maxpool_l(y, info) # output 32x32 y, info = layer.conv2d_batch_norm_relu_dropout_l(y, mode, params, info, filters=60, kernel_size=3, strides=1) y, info = layer.conv2d_batch_norm_relu_dropout_l(y, mode, params, info, filters=62, kernel_size=1, strides=1) y, info = layer.maxpool_l(y, info) # output 16x16 y, info = layer.conv2d_batch_norm_relu_dropout_l(y, mode, params, info, filters=64, kernel_size=3, strides=1) y, info = layer.conv2d_batch_norm_relu_dropout_l(y, mode, params, info, filters=65, kernel_size=1, strides=1) # the last number of filters must be multiple of 5 so that the YOLO head can be added afterwards return y, info
def model_core_configurable_squeezenet(x, mode, params, info): """This configurable model tries to spread the layers evenly between the maxpool layers and also spread depth increases and decreases in a progressive way. Depth at the end is the same as it was initially.""" nlayers = params["layers"] depth_increment = params["depth_increment"] first_layer_fdepth = params["first_layer_filter_depth"] first_layer_fstride = params["first_layer_filter_stride"] first_layer_fsize = params["first_layer_filter_size"] layers_n, first_expand_layer, depth_incr_doubler = layer.sqnet_spread_layers(nlayers) def sqnet_squeeze_expand(x, mode, params, info, depth_increment, last=False): """Squeezenet "fire" module, i.e. a "squeeze" module followed by an "expand" module.""" depth = int(x.get_shape()[3])//2 depth += depth_increment x, info = layer.sqnet_squeeze(x, mode, params, info, depth) depth += depth_increment x, info = layer.sqnet_expand(x, mode, params, info, 2*depth, last=last) return x, info y, info = layer.conv2d_batch_norm_relu_dropout_l(x, mode, params, info, filters=first_layer_fdepth, kernel_size=first_layer_fsize, strides=first_layer_fstride) if first_expand_layer == 1: y, info = layer.sqnet_expand(y, mode, params, info, first_layer_fdepth) y, info = layer.maxpool_l(y, info) for _ in range(layers_n[1]//2): y, info = sqnet_squeeze_expand(y, mode, params, info, depth_increment*depth_incr_doubler[0]) if first_layer_fstride == 1: y, info = layer.maxpool_l(y, info) for _ in range(layers_n[2]//2): y, info = sqnet_squeeze_expand(y, mode, params, info, depth_increment*depth_incr_doubler[1]) y, info = layer.maxpool_l(y, info) for _ in range(layers_n[3]//2): y, info = sqnet_squeeze_expand(y, mode, params, info, -depth_increment*depth_incr_doubler[2]) y, info = layer.maxpool_l(y, info) for i in range(layers_n[4]//2, 0, -1): y, info = sqnet_squeeze_expand(y, mode, params, info, -depth_increment*depth_incr_doubler[3], last=(i==1)) return y, info