class_docstr: Block that creates recursively the Encode-Decoder structure of one Hourglass.
  
  Attributes:
    depth: Integer, depth of the encoder
    features_dims: Integer list, feature dimensions in each depth.
    blocks_per_stage: Integer list, number of residual blocks in each stage.
    norm_type: Object type of the norm to use.
code: def __init__(
      self,
      depth,
      features_dims,
      blocks_per_stage,
      norm_type,
      kernel_regularizer,
  ):
      super(EncoderDecoderBlock, self).__init__(
          name="EncoderDecoderBlock"
      )
      cur_feature_dim = features_dims[0]
      next_feature_dim = features_dims[1]
  
      self.encoder_block1 = self.make_encoder_hourglass_block(
          cur_feature_dim,
          norm_type,
          kernel_regularizer,
          blocks_per_stage[0],
      )
      self.encoder_block2 = self.make_encoder_hourglass_block(
          next_feature_dim,
          norm_type,
          kernel_regularizer,
          blocks_per_stage[0],
          do_stride=True,
      )
  
      if depth > 1:
          self.inner_block = [
              EncoderDecoderBlock(
                  depth - 1,
                  features_dims[1:],
                  blocks_per_stage[1:],
                  norm_type,
                  kernel_regularizer,
              )
          ]
      else:
          self.inner_block = self.make_encoder_hourglass_block(
              next_feature_dim,
              norm_type,
              kernel_regularizer,
              blocks_per_stage[1],
          )
  
      self.decoder_block = self.make_decoder_hourglass_block(
          next_feature_dim,
          cur_feature_dim,
          norm_type,
          kernel_regularizer,
          blocks_per_stage[0],
      )
      self.upsample = tf.keras.layers.UpSampling2D(2)
  
      self.merge_features = tf.keras.layers.Add()
  
imports: import gin
  import tensorflow
  from tensorflow_graphics.projects.points_to_3Dobjects.networks import networks
  import tensorflow_graphics.projects.points_to_3Dobjects.networks.custom_blocks
label_desc: Use image node_id 1 to create a new EncoderDecoderBlock object from inherited base classes: tf.keras.layers with example: obj = EncoderDecoderBlock(depth, features_dims, blocks_per_stage, norm_type, kernel_regularizer)