class_docstr: Hourglass network architecture.
  
  Attributes:
    heads: Dict, keys are head names, value for each key is a dict with {'dim':
      dim} where dim is the output dimensionality of the last convolution.
    features_dims: Integer list, feature dimensionality at the output of the
      input downsampling convolution block and at the output of each encoder
      stage.
    number_hourglasses: Integer, number of hourglasses to stack.
    depth: Integer, depth of the encoder.
    blocks_per_stage: Integer list, number of residual blocks at each encoder
      stage.
    name: String, name of the block.
code: def call(self, inputs, training=None, mask=None):
      x = self.downsample_input(inputs)
      output = []
      for ii in range(self.number_hourglasses):
          x_hourglass = self.hourglass_network[ii](x)
  
          x_out = self.output_conv[ii](x_hourglass)
  
          if self.heads is not None:
              output_heads = {}
              for name in self.heads:
                  head = self.__getattribute__(name)[ii]
                  head_out = head(x_out)
                  output_heads = {**output_heads, **head_out}
              if self.return_output_features:
                  output_heads["output_features"] = x_out
              new_output = output_heads
          else:
              new_output = {"output_features": x_out}
          output.append(new_output)
  
          if ii < self.number_hourglasses - 1:
              x = self.intermediate_conv1[ii](
                  x
              ) + self.intermediate_conv2[ii](x_out)
              x = self.intermediate_relu(x)
  
              intermediate_residual = self.intermediate_residual[ii]
              x = intermediate_residual(x)
  
      return output
  
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 2 for calling the Hourglass obj's underlying member method code with example usage: obj.call(inputs, training, mask) and returns: output