docstr: Add all parameters of module to the params list.
  
  The parameters of the given module will be added to the list of param
  groups, with specific rules defined by paramwise_cfg.
  
  Args:
      params (list[dict]): A list of param groups, it will be modified
          in place.
      module (nn.Module): The module to be added.
docstr_tok: ["Add","all","parameters","of","module","to","the","params","list",".","The","parameters","of","the","given","module","will","be","added","to","the","list","of","param","groups",",","with","specific","rules","defined","by","paramwise_cfg",".","Args",":","params","(","list","[","dict","]",")",":","A","list","of","param","groups",",","it","will","be","modified","in","place",".","module","(","nn.Module",")",":","The","module","to","be","added","."]
code: def add_params(
      self, params: List[dict], module: nn.Module, **kwargs
  ) -> None:
      """Add all parameters of module to the params list.
  
      The parameters of the given module will be added to the list of param
      groups, with specific rules defined by paramwise_cfg.
  
      Args:
          params (list[dict]): A list of param groups, it will be modified
              in place.
          module (nn.Module): The module to be added.
      """
      logger = MMLogger.get_current_instance()
  
      parameter_groups = {}
      logger.info(f"self.paramwise_cfg is {self.paramwise_cfg}")
      num_layers = self.paramwise_cfg.get("num_layers") + 2
      decay_rate = self.paramwise_cfg.get("decay_rate")
      decay_type = self.paramwise_cfg.get("decay_type", "layer_wise")
      logger.info(
          "Build LearningRateDecayOptimizerConstructor  "
          f"{decay_type} {decay_rate} - {num_layers}"
      )
      weight_decay = self.base_wd
      for name, param in module.named_parameters():
          if not param.requires_grad:
              continue  # frozen weights
          if (
              len(param.shape) == 1
              or name.endswith(".bias")
              or name in ("pos_embed", "cls_token")
          ):
              group_name = "no_decay"
              this_weight_decay = 0.0
          else:
              group_name = "decay"
              this_weight_decay = weight_decay
          if "layer_wise" in decay_type:
              if "ConvNeXt" in module.backbone.__class__.__name__:
                  layer_id = get_layer_id_for_convnext(
                      name, self.paramwise_cfg.get("num_layers")
                  )
                  logger.info(f"set param {name} as id {layer_id}")
              else:
                  raise NotImplementedError()
          elif decay_type == "stage_wise":
              if "ConvNeXt" in module.backbone.__class__.__name__:
                  layer_id = get_stage_id_for_convnext(name, num_layers)
                  logger.info(f"set param {name} as id {layer_id}")
              else:
                  raise NotImplementedError()
          group_name = f"layer_{layer_id}_{group_name}"
  
          if group_name not in parameter_groups:
              scale = decay_rate ** (num_layers - layer_id - 1)
  
              parameter_groups[group_name] = {
                  "weight_decay": this_weight_decay,
                  "params": [],
                  "param_names": [],
                  "lr_scale": scale,
                  "group_name": group_name,
                  "lr": scale * self.base_lr,
              }
  
          parameter_groups[group_name]["params"].append(param)
          parameter_groups[group_name]["param_names"].append(name)
      rank, _ = get_dist_info()
      if rank == 0:
          to_display = {}
          for key in parameter_groups:
              to_display[key] = {
                  "param_names": parameter_groups[key]["param_names"],
                  "lr_scale": parameter_groups[key]["lr_scale"],
                  "lr": parameter_groups[key]["lr"],
                  "weight_decay": parameter_groups[key]["weight_decay"],
              }
          logger.info(
              f"Param groups = {json.dumps(to_display, indent=2)}"
          )
      params.extend(parameter_groups.values())
  
file_path: mmdetection/mmdet/engine/optimizers/layer_decay_optimizer_constructor.py
imports: import json
  from typing import List
  import torch.nn
  from mmengine.dist import get_dist_info
  from mmengine.logging import MMLogger
  from mmengine.optim import DefaultOptimWrapperConstructor
  from mmdet.registry import OPTIM_WRAPPER_CONSTRUCTORS
label_desc: Use image node_id 1 for calling the LearningRateDecayOptimizerConstructor obj's underlying member method code with example usage: obj.add_params(params, module) without return types