docstr: Center FPN block that aggregates multi-scale context using strided average poolings
  
  :param in_channels: Number of input features
  :param out_channels: Number of output features
  :param abn_block: Block for Activation + BatchNorm2d
  :param dropout: Dropout rate after context fusion
docstr_tok: ["Center","FPN","block","that","aggregates","multi-scale","context","using","strided","average","poolings",":","param","in_channels",":","Number","of","input","features",":","param","out_channels",":","Number","of","output","features",":","param","abn_block",":","Block","for","Activation","+","BatchNorm2d",":","param","dropout",":","Dropout","rate","after","context","fusion"]
code: def __init__(
      self,
      in_channels: int,
      out_channels: int,
      abn_block=ABN,
      dropout=0.0,
  ):
      """
      Center FPN block that aggregates multi-scale context using strided average poolings
  
      :param in_channels: Number of input features
      :param out_channels: Number of output features
      :param abn_block: Block for Activation + BatchNorm2d
      :param dropout: Dropout rate after context fusion
      """
      super().__init__()
      self.bottleneck = nn.Conv2d(
          in_channels, in_channels // 2, kernel_size=1
      )
  
      self.pool2 = nn.AvgPool2d(kernel_size=2, stride=2)
      self.proj2 = nn.Conv2d(
          in_channels // 2, in_channels // 8, kernel_size=1
      )
  
      self.pool4 = nn.AvgPool2d(kernel_size=4, stride=4)
      self.proj4 = nn.Conv2d(
          in_channels // 2, in_channels // 8, kernel_size=1
      )
  
      self.pool8 = nn.AvgPool2d(kernel_size=8, stride=8)
      self.proj8 = nn.Conv2d(
          in_channels // 2, in_channels // 8, kernel_size=1
      )
  
      self.pool_global = nn.AdaptiveAvgPool2d(1)
      self.proj_global = nn.Conv2d(
          in_channels // 2, in_channels // 8, kernel_size=1
      )
  
      self.blend = nn.Conv2d(
          4 * in_channels // 8, out_channels, kernel_size=1
      )
  
      self.conv1 = nn.Conv2d(
          out_channels,
          out_channels,
          kernel_size=3,
          padding=1,
          bias=False,
      )
      self.abn1 = abn_block(out_channels)
  
      self.dropout = nn.Dropout2d(dropout, inplace=True)
  
      self.conv2 = nn.Conv2d(
          out_channels,
          out_channels,
          kernel_size=3,
          padding=1,
          bias=False,
      )
      self.abn2 = abn_block(out_channels)
  
imports: from __future__ import absolute_import
  from typing import List
  import torch
  from torch import nn, Tensor
  from torch.nn import functional
  from ..modules.activations import ABN
label_desc: Use image node_id 1 to create a new FPNContextBlock object from inherited base classes: nn with example: obj = FPNContextBlock(in_channels, out_channels, abn_block, dropout)