docstr: Architecture in Table 3 of FlowNet 2.0.
  
  Args:
      x: concatenation of two inputs, of shape [1, 2xC, H, W]
docstr_tok: ["Architecture","in","Table","3","of","FlowNet","2.0",".","Args",":","x",":","concatenation","of","two","inputs",",","of","shape","[","1",",","2xC",",","H",",","W","]"]
code: def flownet2_sd(self, x):
      """
      Architecture in Table 3 of FlowNet 2.0.
  
      Args:
          x: concatenation of two inputs, of shape [1, 2xC, H, W]
      """
      with argscope(
          [tf.layers.conv2d],
          activation=lambda x: tf.nn.leaky_relu(x, 0.1),
          padding="valid",
          strides=2,
          kernel_size=3,
          data_format="channels_first",
      ), argscope(
          [tf.layers.conv2d_transpose],
          padding="same",
          activation=tf.identity,
          data_format="channels_first",
          strides=2,
          kernel_size=4,
      ):
          x = tf.layers.conv2d(pad(x, 1), 64, name="conv0", strides=1)
  
          x = tf.layers.conv2d(pad(x, 1), 64, name="conv1")
          conv1 = tf.layers.conv2d(
              pad(x, 1), 128, name="conv1_1", strides=1
          )
          x = tf.layers.conv2d(pad(conv1, 1), 128, name="conv2")
          conv2 = tf.layers.conv2d(
              pad(x, 1), 128, name="conv2_1", strides=1
          )
  
          x = tf.layers.conv2d(pad(conv2, 1), 256, name="conv3")
          conv3 = tf.layers.conv2d(
              pad(x, 1), 256, name="conv3_1", strides=1
          )
          x = tf.layers.conv2d(pad(conv3, 1), 512, name="conv4")
          conv4 = tf.layers.conv2d(
              pad(x, 1), 512, name="conv4_1", strides=1
          )
          x = tf.layers.conv2d(pad(conv4, 1), 512, name="conv5")
          conv5 = tf.layers.conv2d(
              pad(x, 1), 512, name="conv5_1", strides=1
          )
          x = tf.layers.conv2d(pad(conv5, 1), 1024, name="conv6")
          conv6 = tf.layers.conv2d(
              pad(x, 1), 1024, name="conv6_1", strides=1
          )
  
          flow6 = tf.layers.conv2d(
              pad(conv6, 1),
              2,
              name="predict_flow6",
              strides=1,
              activation=tf.identity,
          )
          flow6_up = tf.layers.conv2d_transpose(
              flow6, 2, name="upsampled_flow6_to_5"
          )
          x = tf.layers.conv2d_transpose(
              conv6,
              512,
              name="deconv5",
              activation=lambda x: tf.nn.leaky_relu(x, 0.1),
          )
  
          concat5 = tf.concat(
              [conv5, x, flow6_up], axis=1, name="concat5"
          )
          interconv5 = tf.layers.conv2d(
              pad(concat5, 1),
              512,
              strides=1,
              name="inter_conv5",
              activation=tf.identity,
          )
          flow5 = tf.layers.conv2d(
              pad(interconv5, 1),
              2,
              name="predict_flow5",
              strides=1,
              activation=tf.identity,
          )
          flow5_up = tf.layers.conv2d_transpose(
              flow5, 2, name="upsampled_flow5_to_4"
          )
          x = tf.layers.conv2d_transpose(
              concat5,
              256,
              name="deconv4",
              activation=lambda x: tf.nn.leaky_relu(x, 0.1),
          )
  
          concat4 = tf.concat(
              [conv4, x, flow5_up], axis=1, name="concat4"
          )
          interconv4 = tf.layers.conv2d(
              pad(concat4, 1),
              256,
              strides=1,
              name="inter_conv4",
              activation=tf.identity,
          )
          flow4 = tf.layers.conv2d(
              pad(interconv4, 1),
              2,
              name="predict_flow4",
              strides=1,
              activation=tf.identity,
          )
          flow4_up = tf.layers.conv2d_transpose(
              flow4, 2, name="upsampled_flow4_to_3"
          )
          x = tf.layers.conv2d_transpose(
              concat4,
              128,
              name="deconv3",
              activation=lambda x: tf.nn.leaky_relu(x, 0.1),
          )
  
          concat3 = tf.concat(
              [conv3, x, flow4_up], axis=1, name="concat3"
          )
          interconv3 = tf.layers.conv2d(
              pad(concat3, 1),
              128,
              strides=1,
              name="inter_conv3",
              activation=tf.identity,
          )
          flow3 = tf.layers.conv2d(
              pad(interconv3, 1),
              2,
              name="predict_flow3",
              strides=1,
              activation=tf.identity,
          )
          flow3_up = tf.layers.conv2d_transpose(
              flow3, 2, name="upsampled_flow3_to_2"
          )
          x = tf.layers.conv2d_transpose(
              concat3,
              64,
              name="deconv2",
              activation=lambda x: tf.nn.leaky_relu(x, 0.1),
          )
  
          concat2 = tf.concat(
              [conv2, x, flow3_up], axis=1, name="concat2"
          )
          interconv2 = tf.layers.conv2d(
              pad(concat2, 1),
              64,
              strides=1,
              name="inter_conv2",
              activation=tf.identity,
          )
          flow2 = tf.layers.conv2d(
              pad(interconv2, 1),
              2,
              name="predict_flow2",
              strides=1,
              activation=tf.identity,
          )
  
          return resize(flow2 / DISP_SCALE, mode="nearest")
  
imports: import tensorflow
  from tensorpack import ModelDesc, argscope, enable_argscope_for_module
label_desc: Use image node_id 4 for calling the FlowNet2 obj's underlying member method code with example usage: obj.flownet2_sd(x) and returns: resize