docstr: Forward function.
  
  Args:
      pro_features: (1,  N * num_boxes, self.feat_channels)
      roi_features: (49, N * num_boxes, self.feat_channels)
  
  Returns:
docstr_tok: ["Forward","function",".","Args",":","pro_features",":","(","1",",","N","*","num_boxes",",","self.feat_channels",")","roi_features",":","(","49",",","N","*","num_boxes",",","self.feat_channels",")","Returns",":"]
code: def forward(
      self, pro_features: Tensor, roi_features: Tensor
  ) -> Tensor:
      """Forward function.
  
      Args:
          pro_features: (1,  N * num_boxes, self.feat_channels)
          roi_features: (49, N * num_boxes, self.feat_channels)
  
      Returns:
      """
      features = roi_features.permute(1, 0, 2)
      parameters = self.dynamic_layer(pro_features).permute(1, 0, 2)
  
      param1 = parameters[:, :, : self.num_params].view(
          -1, self.feat_channels, self.dynamic_dim
      )
      param2 = parameters[:, :, self.num_params :].view(
          -1, self.dynamic_dim, self.feat_channels
      )
  
      features = torch.bmm(features, param1)
      features = self.norm1(features)
      features = self.activation(features)
  
      features = torch.bmm(features, param2)
      features = self.norm2(features)
      features = self.activation(features)
  
      features = features.flatten(1)
      features = self.out_layer(features)
      features = self.norm3(features)
      features = self.activation(features)
  
      return features
  
imports: import copy
  import math
  import random
  import warnings
  from typing import Tuple
  import torch
  import torch.nn
  import torch.nn.functional
  from mmcv.cnn import build_activation_layer
  from mmcv.ops import batched_nms
  from mmengine.structures import InstanceData
  from torch import Tensor
  from mmdet.registry import MODELS, TASK_UTILS
  from mmdet.structures import SampleList
  from mmdet.structures.bbox import bbox2roi, bbox_cxcywh_to_xyxy, bbox_xyxy_to_cxcywh, get_box_wh, scale_boxes
  from mmdet.utils import InstanceList
label_desc: Use image node_id 2 for calling the DynamicConv obj's underlying member method code with example usage: obj.forward(pro_features, roi_features) and returns: features