code: def feature_passthrough(early_feat, late_feat, filters, name, kernel_size=(1, 1)):
      
      _, h_early, w_early, c_early = early_feat.get_shape().as_list()
      _, h_late, w_late, c_late = late_feat.get_shape().as_list()
  
      s_x = int(w_early / w_late)
      s_y = int(h_early / h_late)
  
      assert h_late * s_y == h_early and w_late * s_x == w_early
  
      with tf.variable_scope(name) as scope:
          early_conv = tf.layers.conv2d(early_feat, filters=filters, kernel_size=(s_x * kernel_size[0], s_y * kernel_size[1]), strides=(s_x, s_y), padding="same")
          late_conv = tf.layers.conv2d(late_feat, filters=filters, kernel_size=kernel_size, strides=(1, 1), padding="same")
          return early_conv + late_conv
docs: A feature passthrough layer inspired by yolo9000 and the inverse tiling layer.
  
      It can be proven, that this layer does the same as conv(concat(inverse_tile(early_feat), late_feat)).
      This layer has no activation function.
  
      :param early_feat: The early feature layer of shape [batch_size, h * s_x, w * s_y, _].
      s_x and s_y are integers computed internally describing the scale between the layers.
      :param late_feat:  The late feature layer of shape [batch_size, h, w, _].
      :param filters: The number of convolution filters.
      :param name: The name of the layer.
      :param kernel_size: The size of the kernel. Default (1x1).
      :return: The output tensor of shape [batch_size, h, w, outputs]