code: def forward(
      self,
      texts,
      answer_options,
      histories,
      image_features,
      image_dims,
      **kwargs,
  ):
      texts = texts.view(-1, texts.size(2))
      histories = histories.view(-1, histories.size(2))
      text_embedding_total = self.process_text_embedding(texts)
      histories_total = self.process_text_embedding(
          histories, "history_embeddings"
      )
  
      for idx, image_feature in enumerate(image_features):
          feature_size = image_feature.size()[2:]
          image_features[idx] = image_feature.view(-1, *feature_size)
  
      size = image_dims.size()[2:]
      image_dims = image_dims.view(-1, *size)
  
      assert len(image_features) == len(
          self.img_feat_encoders
      ), "number of image feature model doesnot equal \
                   to number of image features"
  
      image_embedding_total = self.process_image_embedding(
          image_features, image_dims, text_embedding_total
      )
  
      if self.inter_model is not None:
          image_embedding_total = self.inter_model(
              image_embedding_total
          )
  
      joint_embedding = self.combine_embeddings(
          image_embedding_total, text_embedding_total, histories_total
      )
  
      decoder_info = {
          "answer_options": answer_options,
          "answer_options_len": kwargs["answer_options_len"],
      }
      return self.calculate_logits(joint_embedding, **decoder_info)
  
file_path: mmf/mmf/models/visdial_multi_modal.py
imports: from mmf.models.pythia import Pythia
  from mmf.modules.decoders import VisDialDiscriminator
label_desc: Use image node_id 9 for calling the VisDialMultiModalModel obj's underlying member method code with example usage: obj.forward(texts, answer_options, histories, image_features, image_dims) and returns: self