class_docstr: Module wrapper that returns intermediate layers from a model
  
  It has a strong assumption that the modules have been registered
  into the model in the same order as they are used.
  This means that one should **not** reuse the same nn.Module
  twice in the forward if you want this to work.
  
  Additionally, it is only able to query submodules that are directly
  assigned to the model. So if `model` is passed, `model.feature1` can
  be returned, but not `model.feature1.layer2`.
  
  Args:
      model (nn.Module): model on which we will extract the features
      return_layers (Dict[name, new_name]): a dict containing the names
          of the modules for which the activations will be returned as
          the key of the dict, and the value of the dict is the name
          of the returned activation (which the user can specify).
class_docstr_tok: ["Module","wrapper","that","returns","intermediate","layers","from","a","model","It","has","a","strong","assumption","that","the","modules","have","been","registered","into","the","model","in","the","same","order","as","they","are","used",".","This","means","that","one","should","*","*","not","*","*","reuse","the","same","nn.Module","twice","in","the","forward","if","you","want","this","to","work",".","Additionally",",","it","is","only","able","to","query","submodules","that","are","directly","assigned","to","the","model",".","So","if","`","model","`","is","passed",",","`","model.feature1","`","can","be","returned",",","but","not","`","model.feature1.layer2","`",".","Args",":","model","(","nn.Module",")",":","model","on","which","we","will","extract","the","features","return_layers","(","Dict","[","name",",","new_name","]",")",":","a","dict","containing","the","names","of","the","modules","for","which","the","activations","will","be","returned","as","the","key","of","the","dict",",","and","the","value","of","the","dict","is","the","name","of","the","returned","activation","(","which","the","user","can","specify",")","."]
code: def __init__(
      self, model: nn.Module, return_layers: Dict[str, str]
  ) -> None:
      if not set(return_layers).issubset(
          [name for name, _ in model.named_children()]
      ):
          raise ValueError("return_layers are not present in model")
      orig_return_layers = return_layers
      return_layers = {str(k): str(v) for k, v in return_layers.items()}
  
      # 重新构建backbone，将没有使用到的模块全部删掉
      layers = OrderedDict()
      for name, module in model.named_children():
          layers[name] = module
          if name in return_layers:
              del return_layers[name]
          if not return_layers:
              break
  
      super(IntermediateLayerGetter, self).__init__(layers)
      self.return_layers = orig_return_layers
  
imports: from collections import OrderedDict
  from typing import Dict, List
  import torch
  from torch import nn, Tensor
  from torch.nn import functional
  from .resnet_backbone import resnet50, resnet101
  from .mobilenet_backbone import mobilenet_v3_large
label_desc: Use image node_id 1 to create a new IntermediateLayerGetter object from inherited base classes: nn with example: obj = IntermediateLayerGetter(model, return_layers)