code: def __init__(
      self,
      in_channels: int,
      out_channels: int,
      aspp_module: Union[Type[ASPPModule], Type[SeparableASPPModule]],
      atrous_rates=(12, 24, 36),
      dropout: float = 0.5,
      activation: str = ACT_RELU,
  ):
      super(ASPP, self).__init__()
      aspp_modules = [
          aspp_module(
              in_channels,
              out_channels,
              3,
              padding=1,
              dilation=1,
              activation=activation,
          ),
          ASPPPooling(in_channels, out_channels),
      ] + [
          aspp_module(
              in_channels, out_channels, 3, padding=ar, dilation=ar
          )
          for ar in atrous_rates
      ]
  
      self.aspp = nn.ModuleList(aspp_modules)
      self.project = nn.Sequential(
          nn.Conv2d(
              len(self.aspp) * out_channels, out_channels, 1, bias=False
          ),
          nn.BatchNorm2d(out_channels),
          instantiate_activation_block(activation, inplace=True),
          nn.Dropout2d(dropout, inplace=False),
      )
  
imports: from collections import OrderedDict
  from typing import Union, Type
  import torch
  from torch import nn, Tensor
  from pytorch_toolbelt.modules import ACT_RELU, instantiate_activation_block, DepthwiseSeparableConv2d
label_desc: Use image node_id 1 to create a new ASPP object from inherited base classes: nn with example: obj = ASPP(in_channels, out_channels, aspp_module, atrous_rates, dropout, activation)