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","."]
docstr: Forward features from the upstream network.
  
  Args:
      x (tensor): Input feature of BiCornerPool.
  
  Returns:
      conv2 (tensor): Output feature of BiCornerPool.
docstr_tok: ["Forward","features","from","the","upstream","network",".","Args",":","x","(","tensor",")",":","Input","feature","of","BiCornerPool",".","Returns",":","conv2","(","tensor",")",":","Output","feature","of","BiCornerPool","."]
code: def forward(self, x):
      """Forward features from the upstream network.
  
      Args:
          x (tensor): Input feature of BiCornerPool.
  
      Returns:
          conv2 (tensor): Output feature of BiCornerPool.
      """
      direction1_conv = self.direction1_conv(x)
      direction2_conv = self.direction2_conv(x)
      direction1_feat = self.direction1_pool(direction1_conv)
      direction2_feat = self.direction2_pool(direction2_conv)
      aftpool_conv = self.aftpool_conv(
          direction1_feat + direction2_feat
      )
      conv1 = self.conv1(x)
      relu = self.relu(aftpool_conv + conv1)
      conv2 = self.conv2(relu)
      return conv2
  
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 2 for calling the BiCornerPool obj's underlying member method code with example usage: obj.forward(x) and returns: conv2