
    RЦie                        S r SSKJr  SSKJrJrJrJrJr  SSK	r	SSK
Jr  SSKJrJr  SSKJrJrJrJrJr  SSKJr  SS	KJr  SS
KJrJr  SSKJr  S/r " S S\R>                  5      r  " S S\R>                  5      r! " S S\R>                  5      r" " S S\R>                  5      r#S r$\S0S\\%\%4   S\&4S jj5       r' " S S\R>                  5      r(S0S jr)S1S jr*\" \*" SS9\*" SSS9\*" SS SS!S"9\*" SS9\*" SSS9\*" SS SS!S"9\*" SS9\*" SSS9\*" SS9\*" SS9\*" SS9S#.5      r+\S0S$\(4S% jj5       r,\S0S$\(4S& jj5       r-\S0S$\(4S' jj5       r.\S0S$\(4S( jj5       r/\S0S$\(4S) jj5       r0\S0S$\(4S* jj5       r1\S0S$\(4S+ jj5       r2\S0S$\(4S, jj5       r3\S0S$\(4S- jj5       r4\S0S$\(4S. jj5       r5\S0S$\(4S/ jj5       r6g)2a  CrossViT Model

@inproceedings{
    chen2021crossvit,
    title={{CrossViT: Cross-Attention Multi-Scale Vision Transformer for Image Classification}},
    author={Chun-Fu (Richard) Chen and Quanfu Fan and Rameswar Panda},
    booktitle={International Conference on Computer Vision (ICCV)},
    year={2021}
}

Paper link: https://arxiv.org/abs/2103.14899
Original code: https://github.com/IBM/CrossViT/blob/main/models/crossvit.py

NOTE: model names have been renamed from originals to represent actual input res all *_224 -> *_240 and *_384 -> *_408

Modifications and additions for timm hacked together by / Copyright 2021, Ross Wightman
Modified from Timm. https://github.com/rwightman/pytorch-image-models/blob/master/timm/models/vision_transformer.py
    )partial)ListOptionalTupleTypeUnionNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)DropPathcalculate_drop_path_rates	to_2tupletrunc_normal__assert   )build_model_with_cfg)register_notrace_function)register_modelgenerate_default_cfgs)BlockCrossVitc                   p   ^  \ rS rSrSr       SS\\\\\4   4   S\S\S\S\4
U 4S jjjr	S	 r
S
rU =r$ )
PatchEmbed'   zImage to Patch Embedding
    img_size
patch_sizein_chans	embed_dim
multi_convc                   > XgS.n[         T
U ]  5         [        U5      n[        U5      nUS   US   -  US   US   -  -  n	Xl        X l        Xl        U(       GaM  US   S:X  a  [        R                  " [        R                  " X4S-  4SSSS.UD6[        R                  " S	S
9[        R                  " US-  US-  4SSSS.UD6[        R                  " S	S
9[        R                  " US-  U4SSSS.UD65      U l
        g US   S:X  a  [        R                  " [        R                  " X4S-  4SSSS.UD6[        R                  " S	S
9[        R                  " US-  US-  4SSSS.UD6[        R                  " S	S
9[        R                  " US-  U4SSSS.UD65      U l
        g g [        R                  " X44X"S.UD6U l
        g )Ndevicedtyper   r               )kernel_sizestridepaddingT)inplace      )r(   r)   )super__init__r   r   r   num_patchesnn
SequentialConv2dReLUproj)selfr   r   r   r   r   r"   r#   ddr0   	__class__s             S/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/crossvit.pyr/   PatchEmbed.__init__+   s    /X&z*
{jm3zRS}8TU $&!}"MMIIhQaAaYZa^`aGGD)IIi1ni1ng!TU_`gdfgGGD)IIi1nibQqZ[b_ab	 A"$MMIIhQaAaYZa^`aGGD)IIi1ni1ng!TU_`gdfgGGD)IIi1nibQqZ[b_ab	 % 		(g:gdfgDI    c                    UR                   u  p#pE[        X@R                  S   :H  SU SU SU R                  S    SU R                  S    S3	5        [        XPR                  S   :H  SU SU SU R                  S    SU R                  S    S3	5        U R                  U5      R	                  S5      R                  SS5      nU$ )Nr   zInput image size (*z) doesn't match model (r   z).r,   )shaper   r   r5   flatten	transpose)r6   xBCHWs         r9   forwardPatchEmbed.forwardQ   s    WW
a]]1%%$QCq+B4==QRCSBTTUVZVcVcdeVfUggij	l]]1%%$QCq+B4==QRCSBTTUVZVcVcdeVfUggij	lIIaL  #--a3r;   )r   r0   r   r5   )   r-   r'      FNN)__name__
__module____qualname____firstlineno____doc__r   intr   boolr/   rF   __static_attributes____classcell__r8   s   @r9   r   r   '   s}    
 58  $$hCsCx01$h $h 	$h
 $h $h $hL r;   r   c                   V   ^  \ rS rSr      S
S\S\S\S\S\4
U 4S jjjrS rS	r	U =r
$ )CrossAttention\   dim	num_headsqkv_bias	attn_drop	proj_dropc                   > XgS.n[         T
U ]  5         X l        X-  n	U	S-  U l        [        R
                  " X4SU0UD6U l        [        R
                  " X4SU0UD6U l        [        R
                  " X4SU0UD6U l        [        R                  " U5      U l
        [        R
                  " X40 UD6U l        [        R                  " U5      U l        g )Nr!   g      bias)r.   r/   rX   scaler1   LinearwqwkwvDropoutrZ   r5   r[   )r6   rW   rX   rY   rZ   r[   r"   r#   r7   head_dimr8   s             r9   r/   CrossAttention.__init__]   s     /"#%
))C:8:r:))C:8:r:))C:8:r:I.IIc-"-	I.r;   c                    UR                   u  p#nU R                  US S 2SS2S4   5      R                  USU R                  X@R                  -  5      R	                  SSSS5      nU R                  U5      R                  X#U R                  X@R                  -  5      R	                  SSSS5      nU R                  U5      R                  X#U R                  X@R                  -  5      R	                  SSSS5      nXVR                  SS5      -  U R                  -  nUR                  SS9nU R                  U5      nX-  R                  SS5      R                  USU5      nU R                  U5      nU R                  U5      nU$ )	Nr   r   .r,   r'   rW   )r>   r`   reshaperX   permutera   rb   r@   r^   softmaxrZ   r5   r[   )	r6   rA   rB   NrC   qkvattns	            r9   rF   CrossAttention.forwardu   sQ   ''aGGAa1ckN#++Aq$..!~~BUV^^_`bcefhijGGAJqT^^Q..5HIQQRSUVXY[\]GGAJqT^^Q..5HIQQRSUVXY[\]KKB''4::5|||#~~d#X  A&..q!Q7IIaLNN1r;   )rZ   rX   r5   r[   r^   ra   r`   rb   )   F        rt   NN)rJ   rK   rL   rM   rO   rP   floatr/   rF   rQ   rR   rS   s   @r9   rU   rU   \   s[     "!!// / 	/
 / / /0 r;   rU   c                      ^  \ rS rSrSSSSS\R
                  \R                  SS4	S\S\S\S	\	S
\S\S\S\
\R                     S\
\R                     4U 4S jjjrS rSrU =r$ )CrossAttentionBlock         @Frt   NrW   rX   	mlp_ratiorY   r[   rZ   	drop_path	act_layer
norm_layerc                    > XS.n[         TU ]  5         U	" U40 UD6U l        [        U4UUUUS.UD6U l        US:  a  [        U5      U l        g [        R                  " 5       U l        g )Nr!   )rX   rY   rZ   r[   rt   )	r.   r/   norm1rU   rq   r   r1   Identityr{   )r6   rW   rX   rz   rY   r[   rZ   r{   r|   r}   r"   r#   r7   r8   s                r9   r/   CrossAttentionBlock.__init__   ss     /*r*
"

 
	 1:B),BKKMr;   c                 ~    US S 2SS2S4   U R                  U R                  U R                  U5      5      5      -   nU$ )Nr   r   .)r{   rq   r   )r6   rA   s     r9   rF   CrossAttentionBlock.forward   s9    a1ckNT^^DIIdjjm,DEEr;   )rq   r{   r   )rJ   rK   rL   rM   r1   GELU	LayerNormrO   ru   rP   r   Moduler/   rF   rQ   rR   rS   s   @r9   rw   rw      s      ""!!!)+*,,,RR R 	R
 R R R R BIIR RYYR R8 r;   rw   c                   P  ^  \ rS rSrSSSS\R
                  \R                  SS4S\\S4   S\\S4   S\\S4   S	\\S4   S
\\	S4   S\
S\	S\	S\\\	   \	4   S\\R                     S\\R                     4U 4S jjjrS\\R"                     S\\R"                     4S jrSrU =r$ )MultiScaleBlock   Frt   NrW   .patchesdepthrX   rz   rY   r[   rZ   r{   r|   r}   c                 L  > XS.n[         TU ]  5         [        U5      nXl        [        R
                  " 5       U l        [        U5       H  n/ n[        UU   5       H2  nUR                  [        SUU   UU   UU   UUUU	U   US.UD65        M4     [        U5      S:w  d  MZ  U R                  R                  [        R                  " U6 5        M     [        U R                  5      S:X  a  S U l        [        R
                  " 5       U l        [        U5       Hx  nUU   UUS-   U-     :X  a   U" UU   40 UD6U
" 5       [        R                  " UU   UUS-   U-     40 UD6/nU R                  R                  [        R                  " U6 5        Mz     [        R
                  " 5       U l        [        U5       H  nUS-   U-  nUU   nUS   S:X  a8  U R                  R                  [        SUU   UUU   UUUU	S   US.UD65        MQ  / n[        US   5       H/  nUR                  [        SUU   UUU   UUUU	S   US.UD65        M1     U R                  R                  [        R                  " U6 5        M     [        R
                  " 5       U l        [        U5       H~  nUUS-   U-     UU   :X  a   U" UUS-   U-     40 UD6U
" 5       [        R                  " UUS-   U-     UU   40 UD6/nU R                   R                  [        R                  " U6 5        M     g )Nr!   )rW   rX   rz   rY   r[   rZ   r{   r}   r   r   rh    )r.   r/   lennum_branchesr1   
ModuleListblocksrangeappendr   r2   projsr   r_   fusionrw   revert_projs)r6   rW   r   r   rX   rz   rY   r[   rZ   r{   r|   r}   r"   r#   r7   r   dtmpid_nh_r8   s                         r9   r/   MultiScaleBlock.__init__   s1     /3x(mmo|$AC58_

5 
A'l'l%'''l)
 
 
 % 3x1}""2==##67 %" t{{q DK]]_
|$A1va!e|344 "#a&/B/biiAPSUVYZUZ^jTjPk>roq>rsJJbmmS12 % mmo|$Aa%<'B2BRyA~""' 
G"$"+A,!)"+"+"+B-#-
 
 uRy)AJJ2 
 G"$"+A,!)"+"+"+B-#-
  
  
 * ""2==##67= %@ MMO|$AAE\)*c!f4 "#q1u&<"=DDikyya!e|%;!<c!fKKM$$R]]C%89 %r;   rA   returnc           	         / n[        U R                  5       H  u  p4UR                  U" X   5      5        M      [        R                  R                  [        [        R                     / 5      n[        U R                  5       H(  u  p6UR                  U" X#   S S 2SS2S4   5      5        M*     / n[        [        U R                  U R                  5      5       H  u  nu  p[        R                  " XS   X#S-   U R                  -     S S 2SS 2S4   4SS9n
U" U
5      n
U	" U
S S 2SS2S4   5      n[        R                  " XU   S S 2SS 2S4   4SS9n
UR                  U
5        M     U$ )Nr   r   .ri   )	enumerater   r   torchjitannotater   Tensorr   zipr   r   catr   )r6   rA   outs_br   blockproj_cls_tokenr5   outsr   revert_projr   reverted_proj_cls_tokens               r9   rF   MultiScaleBlock.forward	  sQ   !$++.HAMM%+& / ++D,>C ,GA!!$vyAaC'=">? - (1#dkk4CTCT2U(V$A$))^.AARAR7R0STUWXWY[^T^0_`fghC+C&1#a1ck2B&C#))4Qi12s
6KLRSTCKK )W r;   )r   r   r   r   r   )rJ   rK   rL   rM   r1   r   r   r   rO   ru   rP   r   r   r   r   r/   r   r   rF   rQ   rR   rS   s   @r9   r   r      s    #!!35)+*,,,Z:sCxZ: 38_Z: c?	Z:
 S#XZ: UCZ(Z: Z: Z: Z: T%[%/0Z: BIIZ: RYYZ: Z:xell+ U\\0B  r;   r   c                 l    [        X5       VVs/ s H  u  p#US   U-  US   -  U-  PM     snn$ s  snnf )Nr   r   )r   )r   r   r   ps       r9   _compute_num_patchesr     s9    .1(.DE.DdaAaDAI!!.DEEEs   0ss
crop_scalec                 t   U R                   SS u  p4X1S   :w  d  XAS   :w  a  U(       af  US   U::  a]  US   U::  aT  [        [        X1S   -
  S-  5      5      [        [        XAS   -
  S-  5      5      peU SS2SS2XUUS   -   2XfUS   -   24   n U $ [        R                  R
                  R                  XSSS9n U $ )	a^  
Pulled out of CrossViT.forward_features to bury conditional logic in a leaf node for FX tracing.
Args:
    x (Tensor): input image
    ss (tuple[int, int]): height and width to scale to
    crop_scale (bool): whether to crop instead of interpolate to achieve the desired scale. Defaults to False
Returns:
    Tensor: the "scaled" image batch tensor
rg   Nr   r          @bicubicF)sizemodealign_corners)r>   rO   roundr   r1   
functionalinterpolate)rA   r   r   rD   rE   cucls          r9   scale_imager   #  s     7723<DAqEzQQ%Z"Q%1*A!qE	R/013uaQ%i2=M7N3O!Q1:rr!u*}45A H ##//Z_/`AHr;   c            '         ^  \ rS rSrSrSSSSSSS	S
SSSSSSSSS\" \R                  SS9SSS4S\S\	\
S4   S\	\S4   S\S\S\	\S4   S\	\	\S4   S4   S\	\S4   S\	\
S4   S\S\S\S \
S!\
S"\
S#\
S$\
S%\\R                     S&\4&U 4S' jjjrS( r\R$                  R&                  S) 5       r\R$                  R&                  S5S* j5       r\R$                  R&                  S6S+ j5       r\R$                  R&                  S,\R                  4S- j5       rS7S\S&\\   4S. jjrS,\\R6                     4S/ jrS5S0\\R6                     S1\S,\R6                  4S2 jjrS3 rS4rU =r $ )8r   i8  zHVision Transformer with support for patch or hybrid CNN input stage
    rH   )      ?r   )rs   r-   r'     )     )r   r'   r   r   r   )   r$   )r   r   ry   FTrt   gư>)epstokenNr   	img_scale.r   r   num_classesr   r   rX   rz   r   r   rY   	drop_ratepos_drop_rateproj_drop_rateattn_drop_ratedrop_path_rater}   global_poolc                   > [         T'U ]  5         UUS.nUS;   d   eXPl        X@l        UU l        [        U5      U l        [        U5      nU VVs/ s H5  n[        U R                   Vs/ s H  n[        UU-  5      PM     sn5      PM7     snnU l	        Xl
        [        U R                  U5      n[        U5      U l        X`l        [        U5      =U l        U l        [$        R&                  " 5       U l        [+        U R                  5       H  n[-        U SU 3[$        R.                  " [0        R2                  " SSUU   -   UU   40 UD65      5        [-        U SU 3[$        R.                  " [0        R2                  " SSUU   40 UD65      5        M     [5        U R                  X65       H1  u  nnnU R(                  R7                  [9        SUUUUU
S.UD65        M3     [$        R:                  " US9U l        [        U Vs/ s H  n[        USS  5      PM     sn5      n[?        UU5      n S	n![$        R&                  " 5       U l         [C        U5       HX  u  n"n#[E        U#S S
 5      U#S
   -   n$U U!U!U$-    n%[G        UUU#4UU	UUUU%US.UD6n&U!U$-  n!U R@                  R7                  U&5        MZ     [$        R&                  " [+        U R                  5       Vs/ s H  nU" UU   40 UD6PM     sn5      U l$        [$        R:                  " U5      U l%        [$        R&                  " [+        U R                  5       Vs/ s H9  nUS	:  a  [$        RL                  " UU   U40 UD6O[$        RN                  " 5       PM;     sn5      U l(        [+        U R                  5       H1  n[S        [U        U SU 35      SS9  [S        [U        U SU 35      SS9  M3     U RW                  U RX                  5        g s  snf s  snnf s  snf s  snf s  snf )Nr!   r   avg
pos_embed_r   
cls_token_)r   r   r   r   r   )r   rg   r   rh   )rX   rz   rY   r[   rZ   r{   r}   {Gz?stdr   )-r.   r/   r   r   r   r   r   tuplerO   img_size_scaledr   r   r   r   r   sumnum_featureshead_hidden_sizer1   r   patch_embedr   setattr	Parameterr   zerosr   r   r   rc   pos_dropr   r   r   maxr   norm	head_dropr_   r   headr   getattrapply_init_weights)(r6   r   r   r   r   r   r   r   rX   rz   r   r   rY   r   r   r   r   r   r}   r   r"   r#   r7   sisjr0   r   im_sr   r   rA   total_depthdprdpr_ptridx	block_cfg
curr_depthdpr_blkr8   s(                                          r9   r/   CrossVit.__init__<  s   0 	/....& &!(+i(	XabXaRTdmm&Lms27|m&L MXab$*4+?+?L
O"47	NBD1==? t(()ADJqc*BLLQKXYNHZ\efg\h9oln9o,pqDJqc*BLLQ9UV<9^[]9^,_` * d22JJJD!Q## ! %)  K 

]3613qv;67'Dmmo'.NCYs^,y}<Jww34D! $#!((% C z!GKKs## /& MM5QUQbQbKc"dKca:il#Ab#AKc"de	I.MM4,,-#/- ;F/BIIilK626r{{}\-#/ 0	 t(()A'$*QC(89sC'$*QC(89sC * 	

4%%&w 'Mb4 7. #e#/s+   O3)O.O3O9O><A P.O3c                    [        U[        R                  5      (       am  [        UR                  SS9  [        U[        R                  5      (       a9  UR
                  b+  [        R                  R                  UR
                  S5        g g g [        U[        R                  5      (       aU  [        R                  R                  UR
                  S5        [        R                  R                  UR                  S5        g g )Nr   r   r   r   )	
isinstancer1   r_   r   weightr]   init	constant_r   )r6   ms     r9   r   CrossVit._init_weights  s    a##!((,!RYY''AFF,>!!!&&!, -?'2<<((GGaffa(GGahh, )r;   c                     [        5       n[        U R                  5       HS  nUR                  SU 35        [	        U SU 3S 5      nUc  M,  UR
                  (       d  M?  UR                  SU 35        MU     U$ )Nr   r   )setr   r   addr   requires_grad)r6   outr   pes       r9   no_weight_decayCrossVit.no_weight_decay  sp    et(()AGGj$%A3/6B~""2"2"2*QC()	 *
 
r;   c                     [        SSS/S9$ )Nz ^cls_token|pos_embed|patch_embed)z^blocks\.(\d+)N)z^norm)i )stemr   )dict)r6   coarses     r9   group_matcherCrossVit.group_matcher  s    4-/CD
 	
r;   c                      U(       a   S5       eg )Nz$gradient checkpointing not supportedr   )r6   enables     r9   set_grad_checkpointingCrossVit.set_grad_checkpointing  s    AAAz6r;   r   c                     U R                   $ N)r   )r6   s    r9   get_classifierCrossVit.get_classifier  s    yyr;   c           
      J   Xl         Ub  US;   d   eX l        [        U R                  S   S5      (       a#  U R                  S   R                  R
                  OS n[        U R                  S   S5      (       a#  U R                  S   R                  R                  OS nX4S.n[        R                  " [        U R                  5       Vs/ s HC  nUS:  a%  [        R                  " U R                  U   U40 UD6O[        R                  " 5       PME     sn5      U l        g s  snf )Nr   r   r   r!   )r   r   hasattrr   r   r"   r#   r1   r   r   r   r_   r   r   )r6   r   r   r"   r#   r7   r   s          r9   reset_classifierCrossVit.reset_classifier  s    &""2222*/6tyy|X/N/N1$$++TX-4TYYq\8-L-L		!##))RV/MM4,,-#
- @KQBIIdnnQ';;TVT_T_Taa-#
 	 #
s   	A
D c                    UR                   S   n/ n[        U R                  5       H  u  pEUnU R                  U   n[	        XgU R
                  5      nU" U5      nUS:X  a  U R                  OU R                  nUR                  USS5      n[        R                  " X4SS9nUS:X  a  U R                  OU R                  n	Xi-   nU R                  U5      nUR                  U5        M     [        U R                  5       H  u  pJU
" U5      nM     [        U R                   5       VVs/ s H  u  pKU" X4   5      PM     nnnU$ s  snnf )Nr   rh   r   ri   )r>   r   r   r   r   r   cls_token_0cls_token_1expandr   r   pos_embed_0pos_embed_1r   r   r   r   )r6   rA   rB   xsr   r   x_r   
cls_tokens	pos_embedr   r   s               r9   forward_featuresCrossVit.forward_features  s%   GGAJ'(8(89NAB%%a(BRT__5BRB-.!V))9I9IJ#**1b"5JJ+3B,-F((8H8HIBr"BIIbM :  ,FARB - *3499)=>)=gad25k)=>	 ?s   (Er  
pre_logitsc                 x   U R                   S:X  a(  U Vs/ s H  o3S S 2SS 24   R                  SS9PM     snOU Vs/ s H  o3S S 2S4   PM     snnU Vs/ s H  o0R                  U5      PM     nnU(       d,  [        U R                  S   [
        R                  5      (       a%  [        R                  " U Vs/ s H  o3PM     snSS9$ [        R                  " [        R                  " [        U R                  5       VVs/ s H  u  pEU" X   5      PM     snnSS9SS9$ s  snf s  snf s  snf s  snf s  snnf )Nr   r   ri   r   )r   meanr   r   r   r1   r   r   r   stackr   )r6   r  r"  rA   r   r   s         r9   forward_headCrossVit.forward_head  s    373C3Cu3LB/Bq12hmmm"B/dfRgdf_`UVXYUYSZdfRg)+,AnnQ,DIIaL"++>>99_Aa_!44zz%++)DIIBV&WBVwqtBE{BV&W]^_efgg	 0Rg,,&Ws   !D"D'D,9D1D6c                 J    U R                  U5      nU R                  U5      nU$ r  )r   r&  )r6   rA   r  s      r9   rF   CrossVit.forward  s'    ""1%b!r;   )r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   F)Tr  )!rJ   rK   rL   rM   rN   r   r1   r   rO   r   ru   rP   r   r   strr/   r   r   r   ignorer  r  r  r  r   r  r   r   r   r&  rF   rQ   rR   rS   s   @r9   r   r   8  sb   
  +5*1#)31R)0+7$$!!#%$&$&$&*1",,D*I&-\'\' UCZ(\' c3h	\'
 \' \' S#X\' sCx#-.\' S#X\' UCZ(\' \' \' \' \' !\'  "!\'" "#\'$ "%\'& RYY'\'( )\' \'|- YY  YY
 
 YYB B YY		  C hsm T%,,%7 .htELL1 ht hPUP\P\ h r;   c                 t    UR                  SS 5      (       a  [        S5      eS n[        [        U U4SU0UD6$ )Nfeatures_onlyz<features_only not implemented for Vision Transformer models.c                     0 nU R                  5        H*  nSU;   d  SU;   a  UR                  SS5      nOUnX   X'   M,     U$ )Nr  	cls_token.r   )keysreplace)
state_dictnew_state_dictkeynew_keys       r9   pretrained_filter_fn._create_crossvit.<locals>.pretrained_filter_fn  sN    ??$Cc![C%7++c3/&0oN# % r;   r8  )getRuntimeErrorr   r   )variant
pretrainedkwargsr8  s       r9   _create_crossvitr?    sP    zz/4((YZZ   2	
  r;   c                 2    U SSS S[         [        SSSSS.UE$ )	Nr   )r'      rA  g      ?T)zpatch_embed.0.projzpatch_embed.1.proj)zhead.0zhead.1z
apache-2.0)urlr   
input_size	pool_sizecrop_pctr$  r   fixed_input_size
first_conv
classifierlicenser	   )rB  r>  s     r9   _cfgrJ    s5    =tY^%.BX\B*  r;   ztimm/)	hf_hub_id)zpatch_embed.0.proj.0zpatch_embed.1.proj.0)rK  rG  )r'     rL  r   )rK  rC  rG  rE  )zcrossvit_15_240.in1kzcrossvit_15_dagger_240.in1kzcrossvit_15_dagger_408.in1kzcrossvit_18_240.in1kzcrossvit_18_dagger_240.in1kzcrossvit_18_dagger_408.in1kzcrossvit_9_240.in1kzcrossvit_9_dagger_240.in1kzcrossvit_base_240.in1kzcrossvit_small_240.in1kzcrossvit_tiny_240.in1kr   c           	      t    [        SSS/SS// SQ/ SQ/ SQ/SS// SQS	9n[        SS
U S.[        U40 UD6D6nU$ )Nr   g?r$   r-   `   r   r   r%   r   r'   r%   r%   r   r   r   r   r   rX   rz   crossvit_tiny_240r<  r=  r   r  r?  r=  r>  
model_argsmodels       r9   rS  rS  .  sY     b"X"cS\^girRsa&I/J n%8ZnSWXbSmflSmnELr;   c           	      t    [        SSS/SS// SQ/ SQ/ SQ/SS// SQS	9n[        SS
U S.[        U40 UD6D6nU$ )NrN  r$   r-   r   r   rP  r   rQ  rR  crossvit_small_240rT  r   rU  rV  s       r9   rZ  rZ  7  sY     b"X#sT]_hjsSta&I/J o%9joTXYcTngmTnoELr;   c           	      t    [        SSS/SS// SQ/ SQ/ SQ/SS// SQS9n[        SS	U S
.[        U40 UD6D6nU$ )NrN  r$   r-   r   rI   rP  rQ  rR  crossvit_base_240rT  r   rU  rV  s       r9   r\  r\  @  sY     b"X#sT]_hjsStr(i1J n%8ZnSWXbSmflSmnELr;   c           	      t    [        SSS/SS// SQ/ SQ/ SQ/SS// SQS	9n[        SS
U S.[        U40 UD6D6nU$ )NrN  r$   r-         r   r'   r   r%   r'   r'   r   rR  crossvit_9_240rT  r   rU  rV  s       r9   rb  rb  I  sY     b"X#sT]_hjsSta&I/J k%5*kPTU_PjciPjkELr;   c           	      t    [        SSS/SS// SQ/ SQ/ SQ/SS// SQS	9n[        SS
U S.[        U40 UD6D6nU$ )NrN  r$   r-   r   r   r      r   r   ra  rR  crossvit_15_240rT  r   rU  rV  s       r9   rf  rf  R  sY     b"X#sT]_hjsSta&I/J l%6:lQUV`QkdjQklELr;   c           
      |    [        SSSS/SS// SQ/ SQ/ SQ/SS// SQS	.UD6n[        SS
U S.[        U40 UD6D6nU$ )NrN  r$   r-   rH     r   r   r   r&   ra  rR  crossvit_18_240rT  r   rU  rV  s       r9   rj  rj  [  sf     9"BxC:V_ajluUva&I9179J l%6:lQUV`QkdjQklELr;   c           
      v    [        SSS/SS// SQ/ SQ/ SQ/SS// SQS	S
9n[        SSU S.[        U40 UD6D6nU$ )NrN  r$   r-   r^  r_  r`  r%   ra  Tr   r   r   r   rX   rz   r   crossvit_9_dagger_240rT  r   rU  rV  s       r9   rm  rm  d  s\    "BxC:V_ajluUva&I$@J r%<rW[\fWqjpWqrELr;   c           
      v    [        SSS/SS// SQ/ SQ/ SQ/SS// SQS	S
9n[        SSU S.[        U40 UD6D6nU$ )NrN  r$   r-   r   r   rd  r   ra  Trl  crossvit_15_dagger_240rT  r   rU  rV  s       r9   ro  ro  m  \     b"X#sT]_hjsSta&I$@J s%=*sX\]gXrkqXrsELr;   c           
      v    [        SSS/SS// SQ/ SQ/ SQ/SS// SQS	S
9n[        SSU S.[        U40 UD6D6nU$ )Nr   g?r$   r-   r   r   rd  r   ra  Trl  crossvit_15_dagger_408rT  r   rU  rV  s       r9   rs  rs  v  rp  r;   c           
      v    [        SSS/SS// SQ/ SQ/ SQ/SS// SQS	S
9n[        SSU S.[        U40 UD6D6nU$ )NrN  r$   r-   rH   rh  ri  r&   ra  Trl  crossvit_18_dagger_240rT  r   rU  rV  s       r9   ru  ru    rp  r;   c           
      v    [        SSS/SS// SQ/ SQ/ SQ/SS// SQS	S
9n[        SSU S.[        U40 UD6D6nU$ )Nrr  r$   r-   rH   rh  ri  r&   ra  Trl  crossvit_18_dagger_408rT  r   rU  rV  s       r9   rw  rw    rp  r;   r*  ) )7rN   	functoolsr   typingr   r   r   r   r   r   torch.nnr1   	timm.datar
   r   timm.layersr   r   r   r   r   _builderr   _features_fxr   	_registryr   r   vision_transformerr   __all__r   r   rU   rw   r   r   rO   rP   r   r   r?  rJ  default_cfgsrS  rZ  r\  rb  rf  rj  rm  ro  rs  ru  rw  r   r;   r9   <module>r     s  ,  5 5   A ^ ^ * 3 < %,2 2j)RYY )X "))  Fqbii qhF uS#X D  (rryy rj.	 % 73#'C$ $( -]hk$ !73#'C$ $( -]hk$  '2"&C# #W5#g6"W55& < X   h   X   (   8   8      (   (   (   (  r;   