code: def test_forward(self):
      base_channels = 64
      pixel_decoder_cfg = ConfigDict(
          dict(
              type="MSDeformAttnPixelDecoder",
              in_channels=[base_channels * 2**i for i in range(4)],
              strides=[4, 8, 16, 32],
              feat_channels=base_channels,
              out_channels=base_channels,
              num_outs=3,
              norm_cfg=dict(type="GN", num_groups=32),
              act_cfg=dict(type="ReLU"),
              encoder=dict(  # DeformableDetrTransformerEncoder
                  num_layers=6,
                  layer_cfg=dict(  # DeformableDetrTransformerEncoderLayer
                      self_attn_cfg=dict(  # MultiScaleDeformableAttention
                          embed_dims=base_channels,
                          num_heads=8,
                          num_levels=3,
                          num_points=4,
                          im2col_step=64,
                          dropout=0.0,
                          batch_first=True,
                          norm_cfg=None,
                          init_cfg=None,
                      ),
                      ffn_cfg=dict(
                          embed_dims=base_channels,
                          feedforward_channels=base_channels * 4,
                          num_fcs=2,
                          ffn_drop=0.0,
                          act_cfg=dict(type="ReLU", inplace=True),
                      ),
                  ),
                  init_cfg=None,
              ),
              positional_encoding=dict(
                  num_feats=base_channels // 2, normalize=True
              ),
              init_cfg=None,
          )
      )
      self = MODELS.build(pixel_decoder_cfg)
      self.init_weights()
      feats = [
          torch.rand(
              (
                  2,
                  base_channels * 2**i,
                  4 * 2 ** (3 - i),
                  5 * 2 ** (3 - i),
              )
          )
          for i in range(4)
      ]
      mask_feature, multi_scale_features = self(feats)
  
      assert mask_feature.shape == feats[0].shape
      assert len(multi_scale_features) == 3
      multi_scale_features = multi_scale_features[::-1]
      for i in range(3):
          assert (
              multi_scale_features[i].shape[-2:]
              == feats[i + 1].shape[-2:]
          )
  
file_path: mmdetection/tests/test_models/test_layers/test_plugins.py
imports: import unittest
  import pytest
  import torch
  from mmengine.config import ConfigDict
  from mmdet.models.layers import DropBlock
  from mmdet.registry import MODELS
  from mmdet.utils import register_all_modules
label_desc: Use image node_id 1 for calling the TestMSDeformAttnPixelDecoder obj's underlying member method code with example usage: obj.test_forward() without return types