code: def _init_feature_encoders(self, attr: str):
      feat_encoder = self.config[attr + "_feature_encodings"]
      feature_dim = self.config[attr + "_feature_dim"]
      setattr(self, attr + "_feature_dim", feature_dim)
  
      feat_encoder_config = copy.deepcopy(feat_encoder)
      with omegaconf.open_dict(feat_encoder_config):
          feat_encoder_config.params.model_data_dir = (
              self.config.model_data_dir
          )
          feat_encoder_config.params.in_dim = feature_dim
      feat_model = build_image_encoder(
          feat_encoder_config, direct_features=False
      )
  
      setattr(self, attr + "_feature_dim", feat_model.out_dim)
      setattr(self, attr + "_feature_encoders", feat_model)
  
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 7 for calling the MoVieMcan obj's underlying member method code with example usage: obj._init_feature_encoders(attr) without return types