Skip to content

Instantly share code, notes, and snippets.

@max-kuk
Last active October 20, 2022 14:03
Show Gist options
  • Save max-kuk/bf6728da2499378fa8a6374ffcf768bb to your computer and use it in GitHub Desktop.
Save max-kuk/bf6728da2499378fa8a6374ffcf768bb to your computer and use it in GitHub Desktop.
The Global Convolution Network (GCN) Block is essentially a kx1 followed by 1xk convolution summed with a parallely computed 1xk followed by kx1 convolution. This results in a large kxk kernel with dense connections.
class GCN(tf.Module):
def __init__(self, filters, k=7):
super(GCN, self).__init__()
self.padding_l1 = tf.keras.layers.ZeroPadding2D(padding=((k - 1) // 2, 0))
self.conv_l1 = tf.keras.layers.Conv2D(filters, kernel_size=(k, 1))
self.padding_l2 = tf.keras.layers.ZeroPadding2D(padding=(0, (k - 1) // 2))
self.conv_l2 = tf.keras.layers.Conv2D(filters, kernel_size=(1, k))
self.padding_r1 = tf.keras.layers.ZeroPadding2D(padding=((k - 1) // 2, 0))
self.conv_r1 = tf.keras.layers.Conv2D(filters, kernel_size=(1, k))
self.padding_r2 = tf.keras.layers.ZeroPadding2D(padding=(0, (k - 1) // 2))
self.conv_r2 = tf.keras.layers.Conv2D(filters, kernel_size=(k, 1))
def __call__(self, x):
x_l = self.padding_l1(x)
x_l = self.conv_l1(x_l)
x_l = self.padding_l2(x_l)
x_l = self.conv_l2(x_l)
x_r = self.padding_r1(x)
x_r = self.conv_r1(x_r)
x_r = self.padding_r2(x_r)
x_r = self.conv_r2(x_r)
x = x_l + x_r
return x
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment