Last active
April 24, 2018 03:02
-
-
Save khanhnamle1994/5f5ce6821ce90eaa3b2abcd8944a40c3 to your computer and use it in GitHub Desktop.
FCN - Create the layers for a fully convolutional network. Build skip-layers using the vgg layers.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
def layers(vgg_layer3_out, vgg_layer4_out, vgg_layer7_out, num_classes): | |
# Use a shorter variable name for simplicity | |
layer3, layer4, layer7 = vgg_layer3_out, vgg_layer4_out, vgg_layer7_out | |
# Apply 1x1 convolution in place of fully connected layer | |
fcn8 = tf.layers.conv2d(layer7, filters=num_classes, kernel_size=1, name="fcn8") | |
# Upsample fcn8 with size depth=(4096?) to match size of layer 4 so that we can add skip connection with 4th layer | |
fcn9 = tf.layers.conv2d_transpose(fcn8, filters=layer4.get_shape().as_list()[-1], | |
kernel_size=4, strides=(2, 2), padding='SAME', name="fcn9") | |
# Add a skip connection between current final layer fcn8 and 4th layer | |
fcn9_skip_connected = tf.add(fcn9, layer4, name="fcn9_plus_vgg_layer4") | |
# Upsample again | |
fcn10 = tf.layers.conv2d_transpose(fcn9_skip_connected, filters=layer3.get_shape().as_list()[-1], | |
kernel_size=4, strides=(2, 2), padding='SAME', name="fcn10_conv2d") | |
# Add skip connection | |
fcn10_skip_connected = tf.add(fcn10, layer3, name="fcn10_plus_vgg_layer3") | |
# Upsample again | |
fcn11 = tf.layers.conv2d_transpose(fcn10_skip_connected, filters=num_classes, | |
kernel_size=16, strides=(8, 8), padding='SAME', name="fcn11") | |
return fcn11 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment