downsampled_logits_shape[0], img_shape[1], img_shape[2], downsampled_logits_shape[3] ]) pool4_feature = end_points['vgg_16/pool4'] with tf.variable_scope('vgg_16/fc8'): aux_logits_16s = slim.conv2d(pool4_feature, number_of_classes, [1, 1], activation_fn=None, weights_initializer=tf.zeros_initializer, scope='conv_pool4') # Perform the upsampling upsample_filter_np_x2 = bilinear_upsample_weights(2, # upsample_factor, number_of_classes) upsample_filter_tensor_x2 = tf.Variable(upsample_filter_np_x2, name='vgg_16/fc8/t_conv_x2') upsampled_logits = tf.nn.conv2d_transpose(logits, upsample_filter_tensor_x2, output_shape=tf.shape(aux_logits_16s), strides=[1, 2, 2, 1], padding='SAME') upsampled_logits = upsampled_logits + aux_logits_16s upsample_filter_np_x16 = bilinear_upsample_weights(upsample_factor, number_of_classes) upsample_filter_tensor_x16 = tf.Variable(upsample_filter_np_x16, name='vgg_16/fc8/t_conv_x16')
downsampled_logits_shape[0], img_shape[1], img_shape[2], downsampled_logits_shape[3] ]) pool4_feature = end_points['vgg_16/pool4'] with tf.variable_scope('vgg_16/fc8'): aux_logits_16s = slim.conv2d(pool4_feature, number_of_classes, [1, 1], activation_fn=None, weights_initializer=tf.zeros_initializer, scope='conv_pool4') # Perform the upsampling upsample_filter_np_x2 = bilinear_upsample_weights(2, # upsample_factor, number_of_classes) upsample_filter_tensor_x2 = tf.Variable(upsample_filter_np_x2, name='vgg_16/fc8/t_conv_x2') upsampled_logits = tf.nn.conv2d_transpose(logits, upsample_filter_tensor_x2, output_shape=tf.shape(aux_logits_16s), strides=[1, 2, 2, 1], padding='SAME') upsampled_logits = upsampled_logits + aux_logits_16s ############################ Added Code Here ######################## # Add the x2 upsampleing pool3_feature = end_points['vgg_16/pool3'] with tf.variable_scope('vgg_16/fc8'): aux_logits_8s = slim.conv2d(pool3_feature, number_of_classes, [1, 1],
activation_fn=None, weights_initializer=tf.zeros_initializer, scope='conv_pool3') # pool4 prediction pool4_feature = end_points['vgg_16/pool4'] with tf.variable_scope('vgg_16/fc8'): aux_logits_pool4 = slim.conv2d(pool4_feature, number_of_classes, [1, 1], activation_fn=None, weights_initializer=tf.zeros_initializer, scope='conv_pool4') # Perform the upsampling upsamples_stride_2 = 2 upsample_filter_np_2x = bilinear_upsample_weights(upsamples_stride_2, number_of_classes) upsample_filter_tensor_2x = tf.Variable(upsample_filter_np_2x, name='vgg_16/fc8/t_conv_2x') upsampled_logits = tf.nn.conv2d_transpose( logits, upsample_filter_tensor_2x, output_shape=tf.shape(aux_logits_pool4), strides=[1, upsamples_stride_2, upsamples_stride_2, 1], padding='SAME') # Combining upsampled_logits = upsampled_logits + aux_logits_pool4 # Combining predictions from both the final layer and the pool4 layer, at stride 2 # upsamples_stride_2 upsample_filter_np_2x_2 = bilinear_upsample_weights(upsamples_stride_2, number_of_classes)