class_docstr: Wrapper for ClassyVision EfficientNet model so we can map layers into feature
  blocks to facilitate feature extraction and benchmarking at several layers.
code: def forward(self, x: torch.Tensor, out_feat_keys: List[str] = None):
      out_feat_keys, max_out_feat = parse_out_keys_arg(
          out_feat_keys, self.all_feat_names
      )
      out_feats = [None] * len(out_feat_keys)
      feat = x
  
      # Walk through the EfficientNet, block by block
      blocks = iter(self._feature_blocks.named_children())
  
      # - First block is always the stem
      stem_name, stem_block = next(blocks)
      feat = stem_block(feat)
      if stem_name in out_feat_keys:
          out_feats[out_feat_keys.index(stem_name)] = feat
  
      # - Next go through all the MIRB, then the eventual conv and pooling
      for i, (feature_name, feature_block) in enumerate(blocks):
          if "block" in feature_name:
              # -- MIRB blocks (needs ad-hoc drop connect rate)
              drop_connect_rate = self.drop_connect_rate
              if self.drop_connect_rate:
                  drop_connect_rate *= float(i) / self.num_blocks
              feat = feature_block(
                  feat, drop_connect_rate=drop_connect_rate
              )
          else:
              # -- Conv, Pooling (simple forward)
              feat = feature_block(feat)
  
          # If requested, store the feature
          if feature_name in out_feat_keys:
              out_feats[out_feat_keys.index(feature_name)] = feat
  
          # Early exit if all the features have been collected
          if i == max_out_feat:
              break
  
      return out_feats
  
file_path: vissl/vissl/models/trunks/efficientnet.py
imports: import logging
  from typing import List
  import torch
  import torch.nn
  from classy_vision.models.efficientnet import EfficientNet, MODEL_PARAMS
  from vissl.config import AttrDict
  from vissl.models.model_helpers import Flatten, parse_out_keys_arg, Wrap
  from vissl.models.trunks import register_model_trunk
label_desc: Use image node_id 2 for calling the EfficientNet obj's underlying member method code with example usage: obj.forward(x, out_feat_keys) and returns: out_feats