class_docstr: MultiScaleBlock for mvit
class_docstr_tok: ["MultiScaleBlock","for","mvit"]
code: def forward(self, x, thw_shape):
      x1, x2 = self.clone1(x, 2)
      x2, thw_shape_new = self.attn(self.norm1(x2), thw_shape)
      x1, _ = self.atn_pool(x1, thw_shape)
      x = self.add1([x1, self.drop_path(x2)])
  
      if self.dim != self.dim_out:
          x_norm = self.norm2(x)
          x_norm2, x_norm1 = self.clone_norm(x_norm, 2)
          x2 = self.mlp(x_norm2)
          x1 = self.proj(x_norm1)
          x = self.add2([x1, self.drop_path(x2)])
      else:
          x1, x2 = self.clone2(x, 2)
          x_norm = self.norm2(x2)
          x2 = self.mlp(x_norm)
          x = self.add2([x1, self.drop_path(x2)])
  
      return x, thw_shape_new
  
imports: import math
  from functools import partial
  from typing import Tuple, List
  import numpy
  import torch
  from torch import nn
  from torch.nn.init import trunc_normal_
  from einops import rearrange
  from towhee.models.layers.layers_with_relprop import GELU, Linear, Dropout, Conv2d, Conv3d, Softmax, Sigmoid, LayerNorm, Einsum, Add, Clone, MaxPool3d, IndexSelect
label_desc: Use image node_id 2 for calling the MultiScaleBlock obj's underlying member method code with example usage: obj.forward(x, thw_shape) and returns: x,  thw_shape_new