code: def _get_encoder_input(self, feats, pad_mask=None):
      # get projection features
      proj_feats = [
          self.input_proj[i](feat) for i, feat in enumerate(feats)
      ]
      if self.num_levels > len(proj_feats):
          len_srcs = len(proj_feats)
          for i in range(len_srcs, self.num_levels):
              if i == len_srcs:
                  proj_feats.append(self.input_proj[i](feats[-1]))
              else:
                  proj_feats.append(self.input_proj[i](proj_feats[-1]))
  
      # get encoder inputs
      feat_flatten = []
      mask_flatten = []
      lvl_pos_embed_flatten = []
      spatial_shapes = []
      valid_ratios = []
      for i, feat in enumerate(proj_feats):
          bs, _, h, w = paddle.shape(feat)
          spatial_shapes.append(paddle.concat([h, w]))
          # [b,c,h,w] -> [b,h*w,c]
          feat_flatten.append(feat.flatten(2).transpose([0, 2, 1]))
          if pad_mask is not None:
              mask = F.interpolate(pad_mask.unsqueeze(0), size=(h, w))[
                  0
              ]
          else:
              mask = paddle.ones([bs, h, w])
          valid_ratios.append(get_valid_ratio(mask))
          # [b, h*w, c]
          pos_embed = self.position_embedding(mask).flatten(1, 2)
          lvl_pos_embed = pos_embed + self.level_embed.weight[i]
          lvl_pos_embed_flatten.append(lvl_pos_embed)
          if pad_mask is not None:
              # [b, h*w]
              mask_flatten.append(mask.flatten(1))
  
      # [b, l, c]
      feat_flatten = paddle.concat(feat_flatten, 1)
      # [b, l]
      mask_flatten = (
          None if pad_mask is None else paddle.concat(mask_flatten, 1)
      )
      # [b, l, c]
      lvl_pos_embed_flatten = paddle.concat(lvl_pos_embed_flatten, 1)
      # [num_levels, 2]
      spatial_shapes = paddle.to_tensor(
          paddle.stack(spatial_shapes).astype("int64")
      )
      # [l], 每一个level的起始index
      level_start_index = paddle.concat(
          [
              paddle.zeros([1], dtype="int64"),
              spatial_shapes.prod(1).cumsum(0)[:-1],
          ]
      )
      # [b, num_levels, 2]
      valid_ratios = paddle.stack(valid_ratios, 1)
      return (
          feat_flatten,
          spatial_shapes,
          level_start_index,
          mask_flatten,
          lvl_pos_embed_flatten,
          valid_ratios,
      )
  
imports: from __future__ import absolute_import
  from __future__ import division
  from __future__ import print_function
  import math
  import paddle
  import paddle.nn
  import paddle.nn.functional
  from paddle import ParamAttr
  from paddle.regularizer import L2Decay
  from ppdet.core.workspace import register
  from .position_encoding import PositionEmbedding
  from ..heads.detr_head import MLP
  from .deformable_transformer import DeformableTransformerEncoderLayer, DeformableTransformerEncoder
  from .dino_transformer import DINOTransformerDecoderLayer
  from ..initializer import linear_init_, constant_, xavier_uniform_, bias_init_with_prob
  from .utils import _get_clones, get_valid_ratio, get_denoising_training_group, get_sine_pos_embed, inverse_sigmoid, mask_to_box_coordinate
label_desc: Use image node_id 5 for calling the MaskDINO obj's underlying member method code with example usage: obj._get_encoder_input(feats, pad_mask) and returns: feat_flatten,  spatial_shapes,  level_start_index,  mask_flatten,  lvl_pos_embed_flatten,  valid_ratios