code: def _init_feature_embeddings(self, attr: str):
      embedding_kwargs = self.config[attr + "_feature_embeddings"][
          "params"
      ]
      setattr(
          self,
          attr + "_feature_embeddings_out_dim",
          embedding_kwargs["hidden_dim"],
      )
      assert (
          getattr(self, attr + "_feature_embeddings_out_dim")
          == self.text_embeddings_out_dim
      ), "dim1: {}, dim2: {}".format(
          getattr(self, attr + "_feature_embeddings_out_dim"),
          self.text_embeddings_out_dim,
      )
  
      feature_embedding = TwoBranchEmbedding(
          getattr(self, attr + "_feature_dim"), **embedding_kwargs
      )
      setattr(
          self, attr + "_feature_embeddings_list", feature_embedding
      )
  
imports: import copy
  from typing import Any, Dict, List, Optional, Tuple
  import omegaconf
  import torch
  from mmf.common.registry import registry
  from mmf.models.base_model import BaseModel
  from mmf.modules.embeddings import PreExtractedEmbedding, TextEmbedding, TwoBranchEmbedding
  from mmf.modules.layers import BranchCombineLayer, ClassifierLayer
  from mmf.utils.build import build_image_encoder
  from mmf.utils.general import filter_grads
  from omegaconf import DictConfig
label_desc: Use image node_id 8 for calling the MoVieMcan obj's underlying member method code with example usage: obj._init_feature_embeddings(attr) without return types