class_docstr: Vision Transformer with support for patch input
  
  This module is different from ppdet's VisionTransformer (from ppdet/modeling/backbones/visio_transformer.py),
  the main differences are:
  1.the module PatchEmbed.proj has padding set,padding=(4 + 2 * (ratio // 2 - 1), 4 + 2 * (ratio // 2 - 1),
    VisionTransformer dose not
  2.Attention module qkv is standard.but VisionTransformer provide more options
  3.MLP module only one Dropout,and VisionTransformer twice;
  4.VisionTransformer provide fpn layer,but the module does not.
code: def forward_features(self, x):
      B = paddle.shape(x)[0]
      x = self.patch_embed(x)
      B, D, Hp, Wp = x.shape
      x = x.flatten(2).transpose([0, 2, 1])
      x = x + self.pos_embed[:, 1:] + self.pos_embed[:, :1]
  
      for blk in self.blocks:
          x = blk(x)
  
      x = self.last_norm(x)
      xp = paddle.reshape(
          paddle.transpose(x, perm=[0, 2, 1]), shape=[B, -1, Hp, Wp]
      )
  
      return xp
  
imports: from collections.abc import Callable
  import numpy
  import paddle
  import paddle.nn
  from paddle.nn.initializer import TruncatedNormal, Constant, Normal
  from ppdet.core.workspace import register, serializable
label_desc: Use image node_id 3 for calling the ViT obj's underlying member method code with example usage: obj.forward_features(x) and returns: xp