class_docstr: Bidirectional Corner Pooling Module (TopLeft, BottomRight, etc.)
  
  Args:
      in_channels (int): Input channels of module.
      out_channels (int): Output channels of module.
      feat_channels (int): Feature channels of module.
      directions (list[str]): Directions of two CornerPools.
      norm_cfg (dict): Dictionary to construct and config norm layer.
class_docstr_tok: ["Bidirectional","Corner","Pooling","Module","(","TopLeft",",","BottomRight",",","etc",".",")","Args",":","in_channels","(","int",")",":","Input","channels","of","module",".","out_channels","(","int",")",":","Output","channels","of","module",".","feat_channels","(","int",")",":","Feature","channels","of","module",".","directions","(","list","[","str","]",")",":","Directions","of","two","CornerPools",".","norm_cfg","(","dict",")",":","Dictionary","to","construct","and","config","norm","layer","."]
code: def __init__(
      self,
      in_channels,
      directions,
      feat_channels=128,
      out_channels=128,
      norm_cfg=dict(type="BN", requires_grad=True),
  ):
      super(BiCornerPool, self).__init__()
      self.direction1_conv = ConvModule(
          in_channels, feat_channels, 3, padding=1, norm_cfg=norm_cfg
      )
      self.direction2_conv = ConvModule(
          in_channels, feat_channels, 3, padding=1, norm_cfg=norm_cfg
      )
  
      self.aftpool_conv = ConvModule(
          feat_channels,
          out_channels,
          3,
          padding=1,
          norm_cfg=norm_cfg,
          act_cfg=None,
      )
  
      self.conv1 = ConvModule(
          in_channels, out_channels, 1, norm_cfg=norm_cfg, act_cfg=None
      )
      self.conv2 = ConvModule(
          in_channels, out_channels, 3, padding=1, norm_cfg=norm_cfg
      )
  
      self.direction1_pool = CornerPool(directions[0])
      self.direction2_pool = CornerPool(directions[1])
      self.relu = nn.ReLU(inplace=True)
  
imports: from math import ceil, log
  import torch
  import torch.nn
  import torch.nn.functional
  from mmcv.cnn import ConvModule, bias_init_with_prob
  from mmcv.ops import CornerPool, batched_nms
  from mmdet.core import multi_apply
  from ..builder import HEADS, build_loss
  from ..utils import gaussian_radius, gen_gaussian_target
  from .base_dense_head import BaseDenseHead
label_desc: Use image node_id 1 to create a new BiCornerPool object from inherited base classes: nn with example: obj = BiCornerPool(in_channels, directions, feat_channels, out_channels, norm_cfg)