
    khd              
       6   d Z dgZddlZddlmZ ddlmZmZmZm	Z	m
Z
 ddlZddlmZ ddlmZmZ ddlmZmZmZmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZmZ  G d dej                  j@                        Z! G d dej                  j@                        Z" G d dej                  jF                        Z$ G d dej                  jF                        Z% G d dej                  jF                        Z& G d dej                  jF                        Z' G d dej                  jF                        Z( G d dej                  jF                        Z) G d dej                  jF                        Z* G d d ej                  j@                        Z+ G d! dejF                        Z,d-d"Z- e e-d#$       e-d#$       e-d#$       e-d#$       e-d#$       e-d#$      d%      Z.d.d&Z/ed.d'       Z0ed.d(       Z1ed.d)       Z2ed.d*       Z3ed.d+       Z4ed.d,       Z5y)/z EfficientViT (by MSRA)

Paper: `EfficientViT: Memory Efficient Vision Transformer with Cascaded Group Attention`
    - https://arxiv.org/abs/2305.07027

Adapted from official impl at https://github.com/microsoft/Cream/tree/main/EfficientViT
EfficientVitMsra    N)OrderedDict)DictListOptionalTupleUnionIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)SqueezeExciteSelectAdaptivePool2dtrunc_normal__assert   )build_model_with_cfg)feature_take_indices)
checkpointcheckpoint_seq)register_modelgenerate_default_cfgsc                   N     e Zd Zd fd	Z ej
                         d        Z xZS )ConvNormc	           
         t         	|           t        j                  |||||||d      | _        t        j
                  |      | _        t        j                  j                  j                  | j                  j                  |       t        j                  j                  j                  | j                  j                  d       y )NFbiasr   )super__init__nnConv2dconvBatchNorm2dbntorchinit	constant_weightr   )
selfin_chsout_chsksstridepaddilationgroupsbn_weight_init	__class__s
            Y/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/efficientvit_msra.pyr   zConvNorm.__init__   s}    IIfgr63&W\]	..)?a0    c           	      B   | j                   | j                  }}|j                  |j                  |j                  z   dz  z  }|j                  |d d d d d f   z  }|j
                  |j                  |j                  z  |j                  |j                  z   dz  z  z
  }t        j                  j                  |j                  d      | j                   j                  z  |j                  d      |j                  dd  | j                   j                  | j                   j                  | j                   j                  | j                   j                        }|j                  j                   j#                  |       |j
                  j                   j#                  |       |S )N      ?r   r      )r,   paddingr.   r/   )r!   r#   r'   running_varepsr   running_meanr$   r   r    sizer/   shaper,   r7   r.   datacopy_)r(   cr#   wbms         r2   fusezConvNorm.fuse!   s5   		4772II"&&0366HHqD$,--GGboo		1^^bff$s*+ +HHOOFF1I		(((!&&)QWWQR[99##TYY->->I[I[dhdmdmdtdt  v 	
A	!r3   )r   r   r   r   r   r   __name__
__module____qualname__r   r$   no_gradrC   __classcell__r1   s   @r2   r   r      s$    1 U]]_ r3   r   c                   N     e Zd Zd fd	Z ej
                         d        Z xZS )
NormLinearc                    t         |           t        j                  |      | _        t        j
                  |      | _        t        j                  |||      | _        t        | j                  j                  |       | j                  j                  5t        j                  j                  | j                  j                  d       y y )Nr   )stdr   )r   r   r   BatchNorm1dr#   DropoutdropLinearlinearr   r'   r   r%   r&   )r(   in_featuresout_featuresr   rN   rQ   r1   s         r2   r   zNormLinear.__init__1   s    ..-JJt$	ii\Edkk((c2;;'GGdkk..2 (r3   c                 J   | j                   | j                  }}|j                  |j                  |j                  z   dz  z  }|j
                  | j                   j                  | j                   j                  z  |j                  |j                  z   dz  z  z
  }|j                  |d d d f   z  }|j
                  $|| j                  j                  j                  z  }n<|j                  |d d d f   z  j                  d      | j                  j
                  z   }t        j                  j                  |j                  d      |j                  d            }|j                  j                  j                  |       |j
                  j                  j                  |       |S )Nr5   r   r   )r#   rS   r'   r8   r9   r   r:   Tviewr$   r   rR   r;   r=   r>   )r(   r#   rS   r@   rA   rB   s         r2   rC   zNormLinear.fuse;   s6   WWdkkFII"&&0366GGdgg**GGNN nnrvv5;< <MMAdAgJ&;;DKK&&(((A1d7+11"58H8HHAHHOOAFF1Iqvvay1	A	!r3   )Tg{Gz?        rD   rJ   s   @r2   rL   rL   0   s$    3 U]]_ r3   rL   c                   $     e Zd Z fdZd Z xZS )PatchMergingc                 "   t         |           t        |dz        }t        ||ddd      | _        t
        j                  j                         | _        t        ||ddd|      | _	        t        |d      | _        t        ||ddd      | _        y )N   r   r      r6   r/   g      ?)r   r   intr   conv1r$   r   ReLUactconv2r   seconv3)r(   dimout_dimhid_dimr1   s       r2   r   zPatchMerging.__init__M   sx    cAg,c7Aq!4
88==?gw1aH
-gw1a8
r3   c                     | j                  | j                  | j                  | j                  | j                  | j	                  |                                    }|S N)rg   rf   rd   re   rb   r(   xs     r2   forwardzPatchMerging.forwardV   sA    JJtwwtxx

488DJJqM3J(KLMNr3   rE   rF   rG   r   ro   rI   rJ   s   @r2   r\   r\   L   s    9r3   r\   c                   &     e Zd Zd fd	Zd Z xZS )ResidualDropc                 >    t         |           || _        || _        y rl   )r   r   rB   rQ   )r(   rB   rQ   r1   s      r2   r   zResidualDrop.__init__\   s    	r3   c           	      v   | j                   r| j                  dkD  r|| j                  |      t        j                  |j                  d      ddd|j                        j                  | j                        j                  d| j                  z
        j                         z  z   S || j                  |      z   S )Nr   r   )device)
trainingrQ   rB   r$   randr;   ru   ge_divdetachrm   s     r2   ro   zResidualDrop.forwarda   s    ==TYY]tvvay5::q	1a188$558S^CCDIIDVW]W]W_` ` ` tvvay= r3   )rZ   rp   rJ   s   @r2   rr   rr   [   s    
!r3   rr   c                   $     e Zd Z fdZd Z xZS )ConvMlpc                     t         |           t        ||      | _        t        j
                  j                         | _        t        ||d      | _        y )Nr   r0   )	r   r   r   pw1r$   r   rc   rd   pw2)r(   edhr1   s      r2   r   zConvMlp.__init__j   s<    B?88==?Ar!4r3   c                 d    | j                  | j                  | j                  |                  }|S rl   )r   rd   r   rm   s     r2   ro   zConvMlp.forwardp   s&    HHTXXdhhqk*+r3   rp   rJ   s   @r2   r|   r|   i   s    5r3   r|   c                        e Zd ZU eeej                  f   ed<   	 	 	 	 	 d fd	Z ej                         d	 fd	       Z
dej                  dej                  fdZd Z xZS )
CascadedGroupAttentionattention_bias_cachec                 &   t         |           || _        |dz  | _        || _        t        ||z        | _        || _        g }g }t        |      D ]  }	|j                  t        ||z  | j                  dz  | j                  z                |j                  t        | j                  | j                  ||	   d||	   dz  | j                                t        j                  j                  |      | _        t        j                  j                  |      | _        t        j                  j!                  t        j                  j#                         t        | j                  |z  |d            | _        t'        t)        j*                  t        |      t        |                  }
t-        |
      }i }g }|
D ]W  }|
D ]P  }t/        |d   |d   z
        t/        |d   |d   z
        f}||vrt-        |      ||<   |j                  ||          R Y t        j                  j1                  t        j2                  |t-        |                  | _        | j7                  dt        j8                  |      j;                  ||      d	       i | _        y )
Ng      r6   r   r`   r   r~   attention_bias_idxsF)
persistent)r   r   	num_headsscalekey_dimra   val_dim
attn_ratiorangeappendr   r$   r   
ModuleListqkvsdws
Sequentialrc   projlist	itertoolsproductlenabs	Parameterzerosattention_biasesregister_buffer
LongTensorrY   r   )r(   rh   r   r   r   
resolutionkernelsr   r   ipointsNattention_offsetsidxsp1p2offsetr1   s                    r2   r   zCascadedGroupAttention.__init__   s9    	"_
:/0$y! 	rAKK!3T\\A5E5TUVJJxdllGAJ7ST:YZ?cgcocopq	r HH''-	88&&s+HH''HHMMOT\\I-s1E
	
 i''j(95;LMNK 	7B 7bebem,c"Q%"Q%-.@A!22034E0F%f--f56	7	7 !& 2 25;;y#N_J`3a b2E4D4DT4J4O4OPQST4Ubgh$&!r3   c                 R    t         |   |       |r| j                  ri | _        y y y rl   )r   trainr   )r(   moder1   s     r2   r   zCascadedGroupAttention.train   s)    dD--(*D% .4r3   ru   returnc                 4   t         j                  j                         s| j                  r| j                  d d | j
                  f   S t        |      }|| j                  vr*| j                  d d | j
                  f   | j                  |<   | j                  |   S rl   )r$   jit
is_tracingrv   r   r   strr   )r(   ru   
device_keys      r2   get_attention_biasesz+CascadedGroupAttention.get_attention_biases   s    99!T]]((D,D,D)DEEVJ!:!::8<8M8MaQUQiQiNi8j))*5,,Z88r3   c                    |j                   \  }}}}|j                  t        | j                        d      }g }|d   }| j	                  |j
                        }	t        t        | j                  | j                              D ]%  \  }
\  }}|
dkD  r|||
   z   } ||      }|j                  |d||      j                  | j                  | j                  | j                  gd      \  }}} ||      }|j                  d      |j                  d      |j                  d      }}}|| j                  z  }|j                  dd      |z  }||	|
   z   }|j!                  d      }||j                  dd      z  }|j                  || j                  ||      }|j#                  |       ( | j%                  t'        j(                  |d            }|S )Nr   )rh   r   rW   r6   )r<   chunkr   r   r   ru   	enumeratezipr   rY   splitr   r   flattenr   	transposesoftmaxr   r   r$   cat)r(   rn   BCHWfeats_in	feats_outfeat	attn_biashead_idxqkvr   qkvattns                    r2   ro   zCascadedGroupAttention.forward   s   WW
1a773tyy>q71	{--ahh7	$-c$))TXX.F$G 	# HjsC!|hx00t9Dii2q!,22DLL$,,PTP\P\3]cd2eGAq!AAiilAIIaL!))A,!qADJJA;;r2&*D)H--D<<B<'Dt~~b"--D99Qa3DT"	# IIeii	1-.r3   )   r^         r   r   r   T)rE   rF   rG   r   r   r$   Tensor__annotations__r   rH   r   ru   r   ro   rI   rJ   s   @r2   r   r   u   sl    sELL011	  ('T U]]_+ +
95<< 9ELL 9r3   r   c                   4     e Zd ZdZ	 	 	 	 	 d fd	Zd Z xZS )LocalWindowAttentiona   Local Window Attention.

    Args:
        dim (int): Number of input channels.
        key_dim (int): The dimension for query and key.
        num_heads (int): Number of attention heads.
        attn_ratio (int): Multiplier for the query dim for value dimension.
        resolution (int): Input resolution.
        window_resolution (int): Local window resolution.
        kernels (List[int]): The kernel size of the dw conv on query.
    c                     t         |           || _        || _        || _        |dkD  sJ d       || _        t        ||      }t        ||||||      | _        y )Nr   z"window_size must be greater than 0)r   r   r   )	r   r   rh   r   r   window_resolutionminr   r   	r(   rh   r   r   r   r   r   r   r1   s	           r2   r   zLocalWindowAttention.__init__   sk     	"$ 1$J&JJ$!2 1:>*)!(	
	r3   c           	         | j                   x}}|j                  \  }}}}t        ||k(  d||f d||f        t        ||k(  d||f d||f        || j                  k  r"|| j                  k  r| j	                  |      }|S |j                  dddd      }| j                  || j                  z  z
  | j                  z  }| j                  || j                  z  z
  | j                  z  }	t        j                  j                  j                  |ddd|	d|f      }||z   ||	z   }}
|
| j                  z  }|| j                  z  }|j                  ||| j                  || j                  |      j                  dd      }|j                  ||z  |z  | j                  | j                  |      j                  dddd      }| j	                  |      }|j                  dddd      j                  |||| j                  | j                  |      }|j                  dd      j                  ||
||      }|d d d |d |f   j                         }|j                  dddd      }|S )Nz%input feature has wrong size, expect z, got r   r6   r_   r   )r   r<   r   r   r   permuter$   r   
functionalr-   rY   r   reshape
contiguous)r(   rn   r   r   r   r   H_W_pad_bpad_rpHpWnHnWs                 r2   ro   zLocalWindowAttention.forward   sg   Aww1b"R@!QPRTVxjYZR@!QPRTVxjYZ&&&10F0F+F		!A& # 		!Q1%A++a$2H2H.HHDLbLbbE++a$2H2H.HHDLbLbbE##''Aq!UAu+EFAYE	Bt---Bt---Bq"d44b$:P:PRST^^_`bcdA		!b&2+t'='=t?U?UWXYaabcefhiklmA		!A		!Q1%**1b"d6L6LdNdNdfghAAq!))!RQ7A!RaR!)'')A		!Q1%Ar3   )r   r^   r      r   rE   rF   rG   __doc__r   ro   rI   rJ   s   @r2   r   r      s#    
  
0r3   r   c                   8     e Zd ZdZddddg df fd	Zd Z xZS )	EfficientVitBlocka   A basic EfficientVit building block.

    Args:
        dim (int): Number of input channels.
        key_dim (int): Dimension for query and key in the token mixer.
        num_heads (int): Number of attention heads.
        attn_ratio (int): Multiplier for the query dim for value dimension.
        resolution (int): Input resolution.
        window_resolution (int): Local window resolution.
        kernels (List[int]): The kernel size of the dw conv on query.
    r   r^   r   r   r   c                 z   t         |           t        t        ||ddd|d            | _        t        t        |t        |dz                    | _        t        t        |||||||            | _	        t        t        ||ddd|d            | _
        t        t        |t        |dz                    | _        y )Nr_   r   rZ   )r/   r0   r6   )r   r   r   r   )r   r   rr   r   dw0r|   ra   ffn0r   mixerdw1ffn1r   s	           r2   r   zEfficientVitBlock.__init__   s     	c1a3WY Z[ c#'l!;<	! Wi%%"3

  c1a3WY Z[ c#'l!;<	r3   c                     | j                  | j                  | j                  | j                  | j	                  |                              S rl   )r   r   r   r   r   rm   s     r2   ro   zEfficientVitBlock.forward<  s4    yy$**TYYtxx{-C"DEFFr3   r   rJ   s   @r2   r   r     s$    
  =8Gr3   r   c                   8     e Zd Zdddddg ddf fd	Zd	 Z xZS )
EfficientVitStage r   r   r^   r   r   r   r   c                 t   t         |           |d   dk(  r&|dz
  |d   z  dz   | _        g }|j                  dt        j
                  j                  t        t        ||ddd|            t        t        |t        |dz                          f       |j                  dt        ||      f       |j                  d	t        j
                  j                  t        t        ||ddd|            t        t        |t        |dz                          f       t        j                  t        |            | _        n'||k(  sJ t        j                         | _        || _        g }t        |
      D ],  }|j                  t!        ||||| j                  ||	             . t        j                  | | _        y )
Nr   	subsampler   res1r_   r`   r6   
patchmergeres2)r   r   r   r   r$   r   r   rr   r   r|   ra   r\   r   
downsampleIdentityr   r   blocks)r(   in_dimri   r   r   r   r   r   r   r   depthdown_blocksr   dr1   s                 r2   r   zEfficientVitStage.__init__A  s    	a=K')A~*Q-?!CDOK## &&!Q&!QR VaZ!AB   l67.KLM## '7Aq!G!TU #gk2B!CD   !mmK,DEDOW$$$ kkmDO(DOu 	CAMM+GWiUYUdUdfw  zA  B  C	CmmV,r3   c                 J    | j                  |      }| j                  |      }|S rl   )r   r   rm   s     r2   ro   zEfficientVitStage.forwardl  s"    OOAKKNr3   rp   rJ   s   @r2   r   r   @  s%      )-Vr3   r   c                        e Zd Z fdZ xZS )PatchEmbeddingc           
      `   t         |           | j                  dt        ||dz  ddd             | j                  dt        j
                  j                                | j                  dt        |dz  |dz  ddd             | j                  d	t        j
                  j                                | j                  d
t        |dz  |dz  ddd             | j                  dt        j
                  j                                | j                  dt        |dz  |ddd             d| _        y )Nrb   r   r_   r6   r   relu1re   r^   relu2rg   relu3conv4   )r   r   
add_moduler   r$   r   rc   
patch_size)r(   in_chansrh   r1   s      r2   r   zPatchEmbedding.__init__s  s    (C1HaA!FG1#(C1HaA!FG1#(C1HaA!FG1#(CAq!ABr3   )rE   rF   rG   r   rI   rJ   s   @r2   r  r  r  s    	 	r3   r  c                   J    e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 d fd	Zej
                  j                  d        Zej
                  j                  dd       Zej
                  j                  dd       Z	ej
                  j                  de
j                  fd       Zddedee   fd	Z	 	 	 	 	 dd
ej"                  deeeee   f      dededededeeej"                     eej"                  eej"                     f   f   fdZ	 	 	 ddeeee   f   dedefdZd ZddefdZd Z xZS )r   c                    t         t        |           d| _        || _        || _        t        ||d         | _        | j                  j                  }|| j                  j                  z  }t        t        |            D cg c]  }||   ||   ||   z  z   }}g | _        g }|d   }t        t        |||||||
            D ]{  \  }\  }}}}}}}t        |||||||||	|
      }|}|d   dk(  r|dk7  r||d   z  }|j                  }|j!                  |       | xj                  t#        ||d|       gz  c_        } t%        j&                  | | _        |dk(  rt+        |d	
      | _        n |dk(  sJ t%        j.                         | _        |d   x| _        | _        |dkD  r(t5        | j0                  || j
                        | _        y t6        j$                  j/                         | _        y c c}w )NFr   )
r   ri   r   r   r   r   r   r   r   r   r   r   zstages.)num_chs	reductionmoduleavgT	pool_typer   rW   rQ   )r   r   r   grad_checkpointingnum_classes	drop_rater  patch_embedr  r   r   feature_infor   r   r   r   r   dictr   r   stagesr   global_poolr   num_featureshead_hidden_sizerL   r$   head)r(   img_sizer  r  	embed_dimr   r   r   window_sizer   down_opsr  r  r,   r   r   r   r  pre_edr   kddpthnharwddostager1   s                              r2   r   zEfficientVitMsra.__init__  s    	.0"'&" *(IaLA!!,,!1!1!<!<<
JOPST]P^J_`Qilgaj9Q<&?@`
` 11:Iwy*kS[\2^ 	\-A-Bb"b"%%"$E F!u#Q"Q%))JMM% $rVgVWUXM"Z![['	\( mmV,%3kSWXD!###!{{}D4=bMAD1DORSO {A	Y^YaYaYjYjYl 		E as   G3c                 n    | j                         j                         D ch c]	  }d|v s| c}S c c}w )Nr   )
state_dictkeysrm   s     r2   no_weight_decayz EfficientVitMsra.no_weight_decay  s.    ??,113Oa7IQ7NOOOs   	22c                 ,    t        d|rdnddg      }|S )Nz^patch_embedz^stages\.(\d+))z^stages\.(\d+).downsample)r   )z^stages\.(\d+)\.\w+\.(\d+)N)stemr   )r  )r(   coarsematchers      r2   group_matcherzEfficientVitMsra.group_matcher  s'     (.$455
 r3   c                     || _         y rl   )r  )r(   enables     r2   set_grad_checkpointingz'EfficientVitMsra.set_grad_checkpointing  s
    "(r3   r   c                 .    | j                   j                  S rl   )r!  rS   )r(   s    r2   get_classifierzEfficientVitMsra.get_classifier  s    yyr3   r  r  c                 &   || _         |8|dk(  rt        |d      | _        n |dk(  sJ t        j                         | _        |dkD  r(t        | j                  || j                        | _	        y t        j                  j	                         | _	        y )Nr  Tr  r   r  )
r  r   r  r   r   rL   r  r  r$   r!  )r(   r  r  s      r2   reset_classifierz!EfficientVitMsra.reset_classifier  s    &"e##7+W[#\ "a'''#%;;= DORSO {A	Y^YaYaYjYjYl 		r3   rn   indicesnorm
stop_early
output_fmtintermediates_onlyc                    |dv sJ d       g }t        t        | j                        |      \  }}	| j                  |      }t        j
                  j                         s|s| j                  }
n| j                  d|	dz    }
t        |
      D ]Z  \  }}| j                  r+t        j
                  j                         st        ||      }n ||      }||v sJ|j                  |       \ |r|S ||fS )a   Forward features that returns intermediates.

        Args:
            x: Input image tensor
            indices: Take last n blocks if int, all if None, select matching indices if sequence
            norm: Apply norm layer to compatible intermediates
            stop_early: Stop iterating over blocks when last desired intermediate hit
            output_fmt: Shape of intermediate feature outputs
            intermediates_only: Only return intermediate features
        Returns:

        )NCHWzOutput shape must be NCHW.Nr   )r   r   r  r  r$   r   is_scriptingr   r  r   r   )r(   rn   r>  r?  r@  rA  rB  intermediatestake_indices	max_indexr  feat_idxr-  s                r2   forward_intermediatesz&EfficientVitMsra.forward_intermediates  s    * Y&D(DD&"6s4;;7G"Qi Q99!!#:[[F[[)a-0F(0 	(OHe&&uyy/E/E/Gua(!H<'$$Q'	(   -r3   
prune_norm
prune_headc                     t        t        | j                        |      \  }}| j                  d|dz    | _        |r| j                  dd       |S )z@ Prune layers not required for specified intermediates.
        Nr   r   r   )r   r   r  r=  )r(   r>  rK  rL  rG  rH  s         r2   prune_intermediate_layersz*EfficientVitMsra.prune_intermediate_layers  sM     #7s4;;7G"Qikk.9q=1!!!R(r3   c                     | j                  |      }| j                  r6t        j                  j	                         st        | j                  |      }|S | j                  |      }|S rl   )r  r  r$   r   rE  r   r  rm   s     r2   forward_featuresz!EfficientVitMsra.forward_features  sU    Q""599+A+A+Ct{{A.A  AAr3   
pre_logitsc                 N    | j                  |      }|r|S | j                  |      S rl   )r  r!  )r(   rn   rQ  s      r2   forward_headzEfficientVitMsra.forward_head#  s'    Qq0DIIaL0r3   c                 J    | j                  |      }| j                  |      }|S rl   )rP  rS  rm   s     r2   ro   zEfficientVitMsra.forward'  s'    !!!$a r3   )   r_     @         )r
  r
  r
  r   r6   r_   r^   r^   r^   r   r   r   r   )r   r   r6   r^  r  rZ   Fr   rl   )NFFrD  F)r   FT)rE   rF   rG   r   r$   r   ignorer1  r6  r9  r   Moduler;  ra   r   r   r=  r   r	   r   boolr   rJ  rN  rP  rS  ro   rI   rJ   s   @r2   r   r     s    $ ! B;mz YYP P YY  YY) ) YY 		    	mC 	mhsm 	m 8<$$',, ||,  eCcN34,  	, 
 ,  ,  !%,  
tELL!5tELL7I)I#JJ	K, ` ./$#	3S	>*  	1$ 1r3   c           	      ,    | dt         t        ddddd|S )NrV  zpatch_embed.conv1.convzhead.linearT)r^   r^   )urlr  meanrN   
first_conv
classifierfixed_input_size	pool_sizer
   )rd  kwargss     r2   _cfgrk  O  s.    %#.# 
 
 
r3   ztimm/)	hf_hub_id)zefficientvit_m0.r224_in1kzefficientvit_m1.r224_in1kzefficientvit_m2.r224_in1kzefficientvit_m3.r224_in1kzefficientvit_m4.r224_in1kzefficientvit_m5.r224_in1kc                 h    |j                  dd      }t        t        | |fdt        d|      i|}|S )Nout_indices)r   r   r6   feature_cfgT)flatten_sequentialrn  )popr   r   r  )variant
pretrainedrj  rn  models        r2   _create_efficientvit_msraru  y  sG    **]I6K  DkJ	
 E Lr3   c           	      f    t        dg dg dg dg dg d      }t        d	d| it        |fi |S )
NrU  rW  r[  r\  r]  r   r"  r#  r   r   r$  r   rs  )efficientvit_m0r  ru  rs  rj  
model_argss      r2   rx  rx    s@     J %l:lQUV`QkdjQkllr3   c           	      f    t        dg dg dg dg dg d      }t        d	d| it        |fi |S )
NrU  )rY     rZ  r[  )r6   r_   r_   r]  r   r   r_   r_   rw  rs  )efficientvit_m1ry  rz  s      r2   r  r    @    !J %l:lQUV`QkdjQkllr3   c           	      f    t        dg dg dg dg dg d      }t        d	d| it        |fi |S )
NrU  )rY  rZ  rU  r[  )r^   r_   r6   r]  r~  rw  rs  )efficientvit_m2ry  rz  s      r2   r  r    r  r3   c           	      f    t        dg dg dg dg dg d      }t        d	d| it        |fi |S )
NrU  )rY     i@  r[  )r^   r_   r^   r]  r   rw  rs  )efficientvit_m3ry  rz  s      r2   r  r    r  r3   c           	      f    t        dg dg dg dg dg d      }t        d	d| it        |fi |S )
NrU  )rY       r[  r\  r]  r~  rw  rs  )efficientvit_m4ry  rz  s      r2   r  r    r  r3   c           	      f    t        dg dg dg dg dg d      }t        d	d| it        |fi |S )
NrU  )rZ  i   r  )r   r_   r^   )r_   r_   r^   r]  r~  rw  rs  )efficientvit_m5ry  rz  s      r2   r  r    r  r3   )r   r_  )6r   __all__r   collectionsr   typingr   r   r   r   r	   r$   torch.nnr   	timm.datar   r   timm.layersr   r   r   r   _builderr   	_featuresr   _manipulater   r   	_registryr   r   r   r   rL   ra  r\   rr   r|   r   r   r   r   r  r   rk  default_cfgsru  rx  r  r  r  r  r   r3   r2   <module>r     s   
  # 5 5   A S S * + 3 <uxx"" .$$ 8588?? !588?? !	ehhoo 	[UXX__ [|>588?? >B)G )GX/ /d
UXX(( 
kryy k` %!%" "&" "&" "&" "&" "&"+& 8	 	m 	m 	m 	m 	m 	m 	m 	m 	m 	m 	m 	mr3   