class_docstr: Vision Transformer with support for patch or hybrid CNN input stage
      
class_docstr_tok: ["Vision","Transformer","with","support","for","patch","or","hybrid","CNN","input","stage"]
code: def forward_features(self, x) -> List[torch.Tensor]:
      B = x.shape[0]
      xs = []
      for i, patch_embed in enumerate(self.patch_embed):
          x_ = x
          ss = self.img_size_scaled[i]
          x_ = scale_image(x_, ss, self.crop_scale)
          x_ = patch_embed(x_)
          cls_tokens = (
              self.cls_token_0 if i == 0 else self.cls_token_1
          )  # hard-coded for torch jit script
          cls_tokens = cls_tokens.expand(B, -1, -1)
          x_ = torch.cat((cls_tokens, x_), dim=1)
          pos_embed = (
              self.pos_embed_0 if i == 0 else self.pos_embed_1
          )  # hard-coded for torch jit script
          x_ = x_ + pos_embed
          x_ = self.pos_drop(x_)
          xs.append(x_)
  
      for i, blk in enumerate(self.blocks):
          xs = blk(xs)
  
      # NOTE: was before branch token section, move to here to assure all branch token are before layer norm
      xs = [norm(xs[i]) for i, norm in enumerate(self.norm)]
      return xs
  
imports: from functools import partial
  from typing import List
  from typing import Tuple
  import torch
  import torch.hub
  import torch.nn
  from timm.data import IMAGENET_DEFAULT_MEAN, IMAGENET_DEFAULT_STD
  from timm.layers import DropPath, to_2tuple, trunc_normal_, _assert
  from ._builder import build_model_with_cfg
  from ._features_fx import register_notrace_function
  from ._registry import register_model, generate_default_cfgs
  from .vision_transformer import Block
label_desc: Use image node_id 8 for calling the CrossVit obj's underlying member method code with example usage: obj.forward_features(x) and returns: xs