class_docstr: Feature Adaption Module.
  
  Feature Adaption Module is implemented based on DCN v1.
  It uses anchor shape prediction rather than feature map to
  predict offsets of deform conv layer.
  
  Args:
      in_channels (int): Number of channels in the input feature map.
      out_channels (int): Number of channels in the output feature map.
      kernel_size (int): Deformable conv kernel size.
      deform_groups (int): Deformable conv group size.
code: def __init__(
      self, in_channels, out_channels, kernel_size=3, deform_groups=4
  ):
      super(FeatureAdaption, self).__init__()
      offset_channels = kernel_size * kernel_size * 2
      self.conv_offset = nn.Conv2d(
          2, deform_groups * offset_channels, 1, bias=False
      )
      self.conv_adaption = DeformConv2d(
          in_channels,
          out_channels,
          kernel_size=kernel_size,
          padding=(kernel_size - 1) // 2,
          deform_groups=deform_groups,
      )
      self.relu = nn.ReLU(inplace=True)
  
imports: import torch
  import torch.nn
  from mmcv.cnn import bias_init_with_prob, normal_init
  from mmcv.ops import DeformConv2d, MaskedConv2d
  from mmcv.runner import force_fp32
  from mmdet.core import anchor_inside_flags, build_anchor_generator, build_assigner, build_bbox_coder, build_sampler, calc_region, images_to_levels, multi_apply, multiclass_nms, unmap
  from ..builder import HEADS, build_loss
  from .anchor_head import AnchorHead
label_desc: Use image node_id 1 to create a new FeatureAdaption object from inherited base classes: nn with example: obj = FeatureAdaption(in_channels, out_channels, kernel_size, deform_groups)