code: def __init__(
      self,
      in_channels,
      atrous_rates,
      out_channels=256,
      project_dropout=0.5,
      norm_layer=nn.BatchNorm2d,
  ):
      super(_ASPP, self).__init__()
  
      b0 = nn.Sequential(
          nn.Conv2d(
              in_channels=in_channels,
              out_channels=out_channels,
              kernel_size=1,
              bias=False,
          ),
          norm_layer(out_channels),
          nn.ReLU(),
      )
  
      rate1, rate2, rate3 = tuple(atrous_rates)
      b1 = _ASPPConv(in_channels, out_channels, rate1, norm_layer)
      b2 = _ASPPConv(in_channels, out_channels, rate2, norm_layer)
      b3 = _ASPPConv(in_channels, out_channels, rate3, norm_layer)
      b4 = _AsppPooling(
          in_channels, out_channels, norm_layer=norm_layer
      )
  
      self.concurent = nn.ModuleList([b0, b1, b2, b3, b4])
  
      project = [
          nn.Conv2d(
              in_channels=5 * out_channels,
              out_channels=out_channels,
              kernel_size=1,
              bias=False,
          ),
          norm_layer(out_channels),
          nn.ReLU(),
      ]
      if project_dropout > 0:
          project.append(nn.Dropout(project_dropout))
      self.project = nn.Sequential(*project)
  
imports: import torch
  import torch.nn
  import torch.nn.functional
  from contextlib import ExitStack
  from .resnet import ResNetBackbone
  from .basic_blocks import select_activation_function
  from .basic_blocks import SeparableConv2d
label_desc: Use image node_id 1 to create a new _ASPP object from inherited base classes: nn with example: obj = _ASPP(in_channels, atrous_rates, out_channels, project_dropout, norm_layer)