class_docstr: Task decomposition module in task-aligned predictor of TOOD.
  
  Args:
      feat_channels (int): Number of feature channels in TOOD head.
      stacked_convs (int): Number of conv layers in TOOD head.
      la_down_rate (int): Downsample rate of layer attention.
          Defaults to 8.
      conv_cfg (:obj:`ConfigDict` or dict, optional): Config dict for
          convolution layer. Defaults to None.
      norm_cfg (:obj:`ConfigDict` or dict, optional):  Config dict for
      normalization layer. Defaults to None.
class_docstr_tok: ["Task","decomposition","module","in","task-aligned","predictor","of","TOOD",".","Args",":","feat_channels","(","int",")",":","Number","of","feature","channels","in","TOOD","head",".","stacked_convs","(","int",")",":","Number","of","conv","layers","in","TOOD","head",".","la_down_rate","(","int",")",":","Downsample","rate","of","layer","attention",".","Defaults","to","8.","conv_cfg","(",":","obj",":","`","ConfigDict","`","or","dict",",","optional",")",":","Config","dict","for","convolution","layer",".","Defaults","to","None",".","norm_cfg","(",":","obj",":","`","ConfigDict","`","or","dict",",","optional",")",":","Config","dict","for","normalization","layer",".","Defaults","to","None","."]
code: def __init__(
      self,
      feat_channels: int,
      stacked_convs: int,
      la_down_rate: int = 8,
      conv_cfg: OptConfigType = None,
      norm_cfg: OptConfigType = None,
  ) -> None:
      super().__init__()
      self.feat_channels = feat_channels
      self.stacked_convs = stacked_convs
      self.in_channels = self.feat_channels * self.stacked_convs
      self.norm_cfg = norm_cfg
      self.layer_attention = nn.Sequential(
          nn.Conv2d(
              self.in_channels, self.in_channels // la_down_rate, 1
          ),
          nn.ReLU(inplace=True),
          nn.Conv2d(
              self.in_channels // la_down_rate,
              self.stacked_convs,
              1,
              padding=0,
          ),
          nn.Sigmoid(),
      )
  
      self.reduction_conv = ConvModule(
          self.in_channels,
          self.feat_channels,
          1,
          stride=1,
          padding=0,
          conv_cfg=conv_cfg,
          norm_cfg=norm_cfg,
          bias=norm_cfg is None,
      )
  
imports: from typing import List, Optional, Tuple
  import torch
  import torch.nn
  import torch.nn.functional
  from mmcv.cnn import ConvModule, Scale
  from mmcv.ops import deform_conv2d
  from mmengine import MessageHub
  from mmengine.config import ConfigDict
  from mmengine.model import bias_init_with_prob, normal_init
  from mmengine.structures import InstanceData
  from torch import Tensor
  from mmdet.registry import MODELS, TASK_UTILS
  from mmdet.structures.bbox import distance2bbox
  from mmdet.utils import ConfigType, InstanceList, OptConfigType, OptInstanceList, reduce_mean
  from ..task_modules.prior_generators import anchor_inside_flags
  from ..utils import filter_scores_and_topk, images_to_levels, multi_apply, sigmoid_geometric_mean, unmap
  from .atss_head import ATSSHead
label_desc: Use image node_id 1 to create a new TaskDecomposition object from inherited base classes: nn with example: obj = TaskDecomposition(feat_channels, stacked_convs, la_down_rate, conv_cfg, norm_cfg)