class_docstr: Implements DeepLabV3 model from `"Rethinking Atrous Convolution for Semantic Image Segmentation"
  <https://arxiv.org/abs/1706.05587>`_.
  
  Partially copy-pasted from https://github.com/pytorch/vision/blob/master/torchvision/models/segmentation/deeplabv3.py
docstr: Args:
      feature_maps: Input feature maps
      aspp_channels:
      out_channels: Number of output channels
      atrous_rates:
      dropout:
      activation:
      low_level_channels:
code: def __init__(
      self,
      input_spec: FeatureMapsSpecification,
      out_channels: int,
      aspp_channels: int,
      low_level_channels: int = 48,
      atrous_rates=(12, 24, 36),
      dropout: float = 0.5,
      activation: str = ACT_RELU,
  ):
      """
  
      Args:
          feature_maps: Input feature maps
          aspp_channels:
          out_channels: Number of output channels
          atrous_rates:
          dropout:
          activation:
          low_level_channels:
      """
      super().__init__(input_spec)
  
      self.project = nn.Sequential(
          nn.Conv2d(
              input_spec.channels[0], low_level_channels, 1, bias=False
          ),
          nn.BatchNorm2d(low_level_channels),
          instantiate_activation_block(activation, inplace=True),
      )
  
      self.aspp = ASPP(
          in_channels=input_spec.channels[-1],
          out_channels=aspp_channels,
          atrous_rates=atrous_rates,
          dropout=dropout,
          activation=activation,
          aspp_module=SeparableASPPModule,
      )
  
      self.final = nn.Sequential(
          nn.Conv2d(
              aspp_channels + low_level_channels,
              out_channels,
              kernel_size=3,
              padding=1,
              bias=False,
          ),
          nn.BatchNorm2d(out_channels),
          instantiate_activation_block(activation, inplace=True),
      )
  
      self.output_spec = FeatureMapsSpecification(
          channels=[out_channels, aspp_channels],
          strides=[input_spec.strides[0], input_spec.strides[-1]],
      )
  
file_path: pytorch-toolbelt/pytorch_toolbelt/modules/decoders/deeplab_v3_plus.py
imports: from typing import List
  import torch
  import torch.nn.functional
  from torch import nn, Tensor
  from ..activations import instantiate_activation_block, ACT_RELU
  from ..interfaces import AbstractDecoder, FeatureMapsSpecification
  from ..spp import ASPP, SeparableASPPModule
label_desc: Use image node_id 1 to create a new DeeplabV3PlusDecoder object from inherited base classes: AbstractDecoder with example: obj = DeeplabV3PlusDecoder(input_spec, out_channels, aspp_channels, low_level_channels, atrous_rates, dropout, activation)