code: def forward(self, batch, out_feat_keys):
      feats = self.base_model(batch, out_feat_keys)
      assert len(feats) == len(
          self.feature_pool_ops
      ), "#features returned by base model ({}) != #Pooling Ops ({})".format(
          len(feats), len(self.feature_pool_ops)
      )
      out = []
      for feat, op in zip(feats, self.feature_pool_ops):
          feat = op(feat)
          if (
              self.model_config.FEATURE_EVAL_SETTINGS.SHOULD_FLATTEN_FEATS
          ):
              feat = torch.flatten(feat, start_dim=1)
          out.append(feat)
      return out
  
file_path: vissl/vissl/models/trunks/feature_extractor.py
imports: import logging
  import torch
  import torch.nn
  from vissl.config import AttrDict
  from vissl.models.model_helpers import Identity
  from vissl.models.trunks import get_model_trunk
label_desc: Use image node_id 2 for calling the FeatureExtractorModel obj's underlying member method code with example usage: obj.forward(batch, out_feat_keys) and returns: out