class_docstr: Atrous Spatial Pyramid Pooling module as used in 'Deep Attentive Features for Prostate Segmentation in
  3D Transrectal Ultrasound' <https://arxiv.org/pdf/1907.01743.pdf>. Core functionality as in SimpleASPP, but after each
  layerwise convolution a group normalization is added. Further weight initialization for convolutions is provided in
  _init_weight(). Additional possibility to specify the number of final output channels.
  
  Args:
      spatial_dims: number of spatial dimensions, could be 1, 2, or 3.
      in_channels: number of input channels.
      conv_out_channels: number of output channels of each atrous conv.
      out_channels: number of output channels of final convolution.
          If None, uses len(kernel_sizes) * conv_out_channels
      kernel_sizes: a sequence of four convolutional kernel sizes.
          Defaults to (1, 3, 3, 3) for four (dilated) convolutions.
      dilations: a sequence of four convolutional dilation parameters.
          Defaults to (1, 2, 4, 6) for four (dilated) convolutions.
      norm_type: final kernel-size-one convolution normalization type.
          Defaults to batch norm.
      acti_type: final kernel-size-one convolution activation type.
          Defaults to leaky ReLU.
      bias: whether to have a bias term in convolution blocks. Defaults to False.
          According to `Performance Tuning Guide <https://pytorch.org/tutorials/recipes/recipes/tuning_guide.html>`_,
          if a conv layer is directly followed by a batch norm layer, bias should be False.
  
  Raises:
      ValueError: When ``kernel_sizes`` length differs from ``dilations``.
class_docstr_tok: ["Atrous","Spatial","Pyramid","Pooling","module","as","used","in","'Deep","Attentive","Features","for","Prostate","Segmentation","in","3D","Transrectal","Ultrasound","'","<","https",":","\/\/arxiv.org\/pdf\/1907.01743.pdf",">",".","Core","functionality","as","in","SimpleASPP",",","but","after","each","layerwise","convolution","a","group","normalization","is","added",".","Further","weight","initialization","for","convolutions","is","provided","in","_init_weight","(",")",".","Additional","possibility","to","specify","the","number","of","final","output","channels",".","Args",":","spatial_dims",":","number","of","spatial","dimensions",",","could","be","1",",","2",",","or","3.","in_channels",":","number","of","input","channels",".","conv_out_channels",":","number","of","output","channels","of","each","atrous","conv",".","out_channels",":","number","of","output","channels","of","final","convolution",".","If","None",",","uses","len","(","kernel_sizes",")","*","conv_out_channels","kernel_sizes",":","a","sequence","of","four","convolutional","kernel","sizes",".","Defaults","to","(","1",",","3",",","3",",","3",")","for","four","(","dilated",")","convolutions",".","dilations",":","a","sequence","of","four","convolutional","dilation","parameters",".","Defaults","to","(","1",",","2",",","4",",","6",")","for","four","(","dilated",")","convolutions",".","norm_type",":","final","kernel-size-one","convolution","normalization","type",".","Defaults","to","batch","norm",".","acti_type",":","final","kernel-size-one","convolution","activation","type",".","Defaults","to","leaky","ReLU",".","bias",":","whether","to","have","a","bias","term","in","convolution","blocks",".","Defaults","to","False",".","According","to","`","Performance","Tuning","Guide","<","https",":","\/\/pytorch.org\/tutorials\/recipes\/recipes\/tuning_guide.html",">","`","_",",","if","a","conv","layer","is","directly","followed","by","a","batch","norm","layer",",","bias","should","be","False",".","Raises",":","ValueError",":","When","``","kernel_sizes","``","length","differs","from","``","dilations","``","."]
code: def __init__(
      self,
      spatial_dims: int,
      in_channels: int,
      conv_out_channels: int,
      out_channels: int | None = None,
      kernel_sizes: Sequence[int] = (1, 3, 3, 3),
      dilations: Sequence[int] = (1, 2, 4, 6),
      norm_type: tuple | str | None = "BATCH",
      acti_type: tuple | str | None = "LEAKYRELU",
      bias: bool = False,
  ) -> None:
      super().__init__(
          spatial_dims,
          in_channels,
          conv_out_channels,
          kernel_sizes,
          dilations,
          norm_type,
          acti_type,
          bias,
      )
  
      # add normalization after each atrous convolution, initializes weights
      new_convs = nn.ModuleList()
      for _conv in self.convs:
          tmp_conv = Convolution(1, 1, 1)
          tmp_conv.conv = _conv
          tmp_conv.adn = ADN(ordering="N", norm=norm_type, norm_dim=1)
          tmp_conv = self._init_weight(tmp_conv)
          new_convs.append(tmp_conv)
      self.convs = new_convs
  
      # change final convolution to different out_channels
      if out_channels is None:
          out_channels = len(kernel_sizes) * conv_out_channels
  
      self.conv_k1 = Convolution(
          spatial_dims=3,
          in_channels=len(kernel_sizes) * conv_out_channels,
          out_channels=out_channels,
          kernel_size=1,
          norm=norm_type,
          act=acti_type,
      )
  
imports: from __future__ import annotations
  from collections import OrderedDict
  from collections.abc import Callable, Sequence
  import torch
  import torch.nn
  import torch.nn.functional
  from torch import Tensor
  from monai.networks.blocks import ADN
  from monai.networks.blocks.aspp import SimpleASPP
  from monai.networks.blocks.backbone_fpn_utils import BackboneWithFPN
  from monai.networks.blocks.convolutions import Convolution
  from monai.networks.blocks.feature_pyramid_network import ExtraFPNBlock, FeaturePyramidNetwork
  from monai.networks.layers.factories import Conv, Norm
  from monai.networks.nets.resnet import ResNet, ResNetBottleneck
label_desc: Use image node_id 1 to create a new Daf3dASPP object from inherited base classes: SimpleASPP with example: obj = Daf3dASPP(spatial_dims, in_channels, conv_out_channels, out_channels, kernel_sizes, dilations, norm_type, acti_type, bias)