
    NgU                     T   d 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mZ ddlmZ ddlmZ dd	lmZ dd
lmZmZ dgZddddZddddZ G d dej	        j                  Z  G d de	j!                  Z" G d de	j                  Z# G d de	j                  Z$ G d de	j                  Z% G d de	j                  Z& G d d e	j                  Z' G d! d"e	j                  Z( G d# d$e	j                  Z) G d% d&e	j                  Z* G d' d(e	j                  Z+ G d) de	j                  Z,d* Z-d6d,Z. e e.d-.           e.d-.           e.d-.          d/          Z/d7d1Z0ed7d2e,fd3            Z1ed7d2e,fd4            Z2ed7d2e,fd5            Z3dS )8a   EfficientFormer

@article{li2022efficientformer,
  title={EfficientFormer: Vision Transformers at MobileNet Speed},
  author={Li, Yanyu and Yuan, Geng and Wen, Yang and Hu, Eric and Evangelidis, Georgios and Tulyakov,
   Sergey and Wang, Yanzhi and Ren, Jian},
  journal={arXiv preprint arXiv:2206.01191},
  year={2022}
}

Based on Apache 2.0 licensed code at https://github.com/snap-research/EfficientFormer, Copyright (c) 2022 Snap Inc.

Modifications and timm support by / Copyright 2022, Ross Wightman
    )DictListOptionalTupleUnionNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)DropPathtrunc_normal_	to_2tupleMlpndgrid   )build_model_with_cfg)feature_take_indices)checkpoint_seq)generate_default_cfgsregister_modelEfficientFormer)0   `      i  )@      i@  i   )r        i   )l1l3l7)            )r$   r$      r#   )r#   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 )	Attentionattention_bias_cacher       r'   r$      c           	         t                                                       || _        |dz  | _        || _        ||z  | _        t          ||z            | _        | j        |z  | _        || _	        t          j        || j        dz  | j        z             | _        t          j        | j        |          | _        t          |          }t          j        t#          t          j        |d                   t          j        |d                                                           d          }|dd d d f         |dd d d f         z
                                  }|d         |d         z  |d         z   }t          j
                            t          j        ||d         |d         z                      | _        |                     d|           i | _        d S )Ng      r"   r   r   .attention_bias_idxs)super__init__	num_headsscalekey_dimkey_attn_dimintval_dimval_attn_dim
attn_rationnLinearqkvprojr   torchstackr   arangeflattenabs	Parameterzerosattention_biasesregister_bufferr*   )	selfdimr3   r1   r8   
resolutionposrel_pos	__class__s	           W/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/efficientformer.pyr0   zAttention.__init__.   s    	"_
#i/:/00 L94$9S$"3a"7$:K"KLLId/55	z**
k&jm!<!<el:VW=>Y>YZZ[[ccdeffsAAAt|$s3aaa<'88==??1:
1-; % 2 25;y*UV-ZdefZgJg3h3h i i2G<<<$&!!!    Tc                 r    t                                          |           |r| j        ri | _        d S d S d S N)r/   trainr*   )rF   moderK   s     rL   rP   zAttention.trainJ   sM    d 	+D- 	+(*D%%%	+ 	+ 	+ 	+rM   devicereturnc                     t           j                                        s| j        r| j        d d | j        f         S t          |          }|| j        vr| j        d d | j        f         | j        |<   | j        |         S rO   )r=   jit
is_tracingtrainingrD   r.   strr*   )rF   rR   
device_keys      rL   get_attention_biaseszAttention.get_attention_biasesP   s    9!! 	9T] 	9(D,D)DEEVJ!:::8<8MaaaQUQiNi8j)*5,Z88rM   c                 >   |j         \  }}}|                     |          }|                    ||| j        d                              dddd          }|                    | j        | j        | j        gd          \  }}}||                    dd          z  | j	        z  }	|	| 
                    |j                  z   }	|	                    d          }	|	|z                      dd                              ||| j                  }|                     |          }|S )Nr   r"   r   r!   rG   )shaper;   reshaper1   permutesplitr3   r6   	transposer2   rZ   rR   softmaxr7   r<   )
rF   xBNCr;   qkvattns
             rL   forwardzAttention.forwardY   s   '1ahhqkkkk!Q33;;Aq!QGG))T\4<FA)NN1aAKKB'''4:5d//999|||##AX  A&&..q!T5FGGIIaLLrM   )r   r+   r'   r$   r,   T)__name__
__module____qualname__r   rX   r=   Tensor__annotations__r0   no_gradrP   rR   rZ   rm   __classcell__rK   s   @rL   r)   r)   +   s         sEL01111 ' ' ' ' ' '8 U]__+ + + + + _+
95< 9EL 9 9 9 9      rM   r)   c                   8     e Zd Zej        ej        f fd	Z xZS )Stem4c           
         t                                                       d| _        |                     dt	          j        ||dz  ddd                     |                     d ||dz                       |                     d |                       |                     d	t	          j        |dz  |ddd                     |                     d
 ||                     |                     d |                       d S )Nr$   conv1r"   r!   r   kernel_sizestridepaddingnorm1act1conv2norm2act2)r/   r0   r}   
add_moduler9   Conv2d)rF   in_chsout_chs	act_layer
norm_layerrK   s        rL   r0   zStem4.__init__i   s    67a<QWXbc!d!d!deeeGqL!9!9:::		,,,7a<aXYcd!e!e!efffG!4!4555		,,,,,rM   )ro   rp   rq   r9   ReLUBatchNorm2dr0   ru   rv   s   @rL   rx   rx   h   sF        24'bn 	- 	- 	- 	- 	- 	- 	- 	- 	- 	-rM   rx   c                   <     e Zd ZdZdddej        f fd	Zd Z xZS )
Downsamplez
    Downsampling via strided conv w/ norm
    Input: tensor in shape [B, C, H, W]
    Output: tensor in shape [B, C, H/stride, W/stride]
    r!   r"   Nc                     t                                                       ||dz  }t          j        |||||          | _         ||          | _        d S )Nr"   r{   )r/   r0   r9   r   convnorm)rF   r   r   r|   r}   r~   r   rK   s          rL   r0   zDownsample.__init__|   sZ    ?!Q&GIfg;v_fggg	Jw''			rM   c                 Z    |                      |          }|                     |          }|S rO   )r   r   rF   re   s     rL   rm   zDownsample.forward   s%    IIaLLIIaLLrM   )	ro   rp   rq   __doc__r9   r   r0   rm   ru   rv   s   @rL   r   r   u   se          56aZ\Zh ( ( ( ( ( (      rM   r   c                   $     e Zd Z fdZd Z xZS )Flatc                 H    t                                                       d S rO   )r/   r0   )rF   rK   s    rL   r0   zFlat.__init__   s    rM   c                 X    |                     d                              dd          }|S )Nr"   r   )r@   rc   r   s     rL   rm   zFlat.forward   s&    IIaLL""1a((rM   ro   rp   rq   r0   rm   ru   rv   s   @rL   r   r      sG                  rM   r   c                   *     e Zd ZdZd fd	Zd Z xZS )PoolingzP
    Implementation of pooling for PoolFormer
    --pool_size: pooling size
    r!   c                     t                                                       t          j        |d|dz  d          | _        d S )Nr   r"   F)r}   r~   count_include_pad)r/   r0   r9   	AvgPool2dpool)rF   	pool_sizerK   s     rL   r0   zPooling.__init__   s<    L1i1n`efff			rM   c                 2    |                      |          |z
  S rO   )r   r   s     rL   rm   zPooling.forward   s    yy||arM   )r!   )ro   rp   rq   r   r0   rm   ru   rv   s   @rL   r   r      s\         
g g g g g g             rM   r   c                   H     e Zd ZdZddej        ej        df fd	Zd Z xZ	S )ConvMlpWithNormz`
    Implementation of MLP with 1*1 convolutions.
    Input: tensor with shape [B, C, H, W]
    N        c                    t                                                       |p|}|p|}t          j        ||d          | _        | ||          nt          j                    | _         |            | _        t          j        ||d          | _        | ||          nt          j                    | _	        t          j
        |          | _        d S )Nr   )r/   r0   r9   r   fc1Identityr   actfc2r   Dropoutdrop)rF   in_featureshidden_featuresout_featuresr   r   r   rK   s          rL   r0   zConvMlpWithNorm.__init__   s     	#2{)8[9[/1==4>4JZZ000PRP[P]P]
9;;9_lA>>1;1GZZ---R[]]
Jt$$			rM   c                 ,   |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|S rO   )r   r   r   r   r   r   r   s     rL   rm   zConvMlpWithNorm.forward   sp    HHQKKJJqMMHHQKKIIaLLHHQKKJJqMMIIaLLrM   )
ro   rp   rq   r   r9   GELUr   r0   rm   ru   rv   s   @rL   r   r      sk          !g~% % % % % %&      rM   r   c                   &     e Zd Zd fd	Zd Z xZS )
LayerScaleh㈵>Fc                     t                                                       || _        t          j        |t          j        |          z            | _        d S rO   r/   r0   inplacer9   rB   r=   onesgammarF   rG   init_valuesr   rK   s       rL   r0   zLayerScale.__init__   B    \+
3"?@@


rM   c                 X    | j         r|                    | j                  n	|| j        z  S rO   )r   mul_r   r   s     rL   rm   zLayerScale.forward   s(    %)\Eqvvdj!!!q4:~ErM   r   Fr   rv   s   @rL   r   r      sY        A A A A A A
F F F F F F FrM   r   c                   F     e Zd Zdej        ej        dddf fd	Zd Z xZS )MetaBlock1d      @r   r   c                    t                                                        ||          | _        t          |          | _         ||          | _        t          |t          ||z            ||          | _        |dk    rt          |          nt          j                    | _        t          ||          | _        t          ||          | _        d S )N)r   r   r   r   r   )r/   r0   r   r)   token_mixerr   r   r5   mlpr   r9   r   	drop_pathr   ls1ls2)	rF   rG   	mlp_ratior   r   	proj_dropr   layer_scale_init_valuerK   s	           rL   r0   zMetaBlock1d.__init__   s     	Z__
$S>>Z__
i00	
 
 
 1:B),,,BKMMc#9::c#9::rM   c           
      J   ||                      |                     |                     |                     |                                        z   }||                      |                     |                     |                     |                                        z   }|S rO   )r   r   r   r   r   r   r   r   s     rL   rm   zMetaBlock1d.forward   sy    txx(8(8A(G(GHHIIItxxA(?(?@@AAArM   )	ro   rp   rq   r9   r   	LayerNormr0   rm   ru   rv   s   @rL   r   r      sd        
 g|#'; ; ; ; ; ;2      rM   r   c                   &     e Zd Zd fd	Zd Z xZS )LayerScale2dr   Fc                     t                                                       || _        t          j        |t          j        |          z            | _        d S rO   r   r   s       rL   r0   zLayerScale2d.__init__   r   rM   c                 ~    | j                             dddd          }| j        r|                    |          n||z  S )Nr   r\   )r   viewr   r   )rF   re   r   s      rL   rm   zLayerScale2d.forward   s:    
2q!,, $;qvve}}}!e);rM   r   r   rv   s   @rL   r   r      sR        A A A A A A
< < < < < < <rM   r   c                   H     e Zd Zddej        ej        dddf fd	Zd Z xZS )MetaBlock2dr!   r   r   r   c	                    t                                                       t          |          | _        t	          ||          | _        |dk    rt          |          nt          j                    | _	        t          |t          ||z            |||          | _        t	          ||          | _        |dk    rt          |          nt          j                    | _        d S )N)r   r   )r   r   r   r   )r/   r0   r   r   r   r   r   r9   r   
drop_path1r   r5   r   r   
drop_path2)
rF   rG   r   r   r   r   r   r   r   rK   s
            rL   r0   zMetaBlock2d.__init__   s     	"Y777%;<<1:R(9---R[]]"i00!
 
 
  %;<<1:R(9---R[]]rM   c                     ||                      |                     |                     |                              z   }||                     |                     |                     |                              z   }|S rO   )r   r   r   r   r   r   r   s     rL   rm   zMetaBlock2d.forward  sc    )9)9!)<)< = =>>>! 5 5666rM   )	ro   rp   rq   r9   r   r   r0   rm   ru   rv   s   @rL   r   r      sm        
 g~#'S S S S S S4      rM   r   c            
       X     e Zd Zddddej        ej        ej        dddf
 fd	Zd Z xZ	S )	EfficientFormerStageTr   r!   r   r   r   c                    t                                                       d| _        |rt          |||	          | _        |}n ||k    sJ t          j                    | _        g }|r'||k    r!|                    t                                 t          |          D ]}||z
  dz
  }|r6||k    r0|                    t          ||||
|||         |                     B|                    t          |||||	|||         |                     |r'||k    r!|                    t                                 t          j        | | _        d S )NF)r   r   r   r   )r   r   r   r   r   r   )r   r   r   r   r   r   r   )r/   r0   grad_checkpointingr   
downsampler9   r   appendr   ranger   r   
Sequentialblocks)rF   rG   dim_outdepthr   num_vitr   r   r   r   norm_layer_clr   r   r   r   	block_idx
remain_idxrK   s                    rL   r0   zEfficientFormerStage.__init__  s     	"' 	,(WQ[\\\DOCC'>>>> kmmDO 	"w%''MM$&&!!!u 	* 	*I*Q.J *7Z//"+"+#0"+"+I"6/E  	 	 	 	 "+"+"+#-"+"+I"6/E	 	 	
 
 
  *w*44MM$&&)))mV,rM   c                     |                      |          }| j        r4t          j                                        st          | j        |          }n|                     |          }|S rO   )r   r   r=   rU   is_scriptingr   r   r   s     rL   rm   zEfficientFormerStage.forward[  sZ    OOA" 	59+A+A+C+C 	t{A..AAAArM   )
ro   rp   rq   r9   r   r   r   r0   rm   ru   rv   s   @rL   r   r     ss         g~,#':- :- :- :- :- :-x      rM   r   c                   r    e Zd Zdddddddddej        ej        ej        dddf fd		Z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e	j
        j        d'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   Nr!     avgr   r$   r   r   c                    t                                                       || _        || _        t	          ||d         |          | _        |d         }t          |          | _        | j        dz
  }d t          j	        d|t          |                                        |          D             }|pdd| j        dz
  z  z   }g }g | _        t          | j                  D ]}t          |||         ||         ||         ||k    r|nd|	|||||||         |
          }||         }|                    |           | xj        t!          ||         dd|z   z  d	| 
          gz  c_        t#          j        | | _        |d         x| _        | _         || j                  | _        t#          j        |          | _        |dk    rt#          j        | j        |          nt#          j                    | _        |dk    rt#          j        |d         |          nt#          j                    | _        d| _        |                     | j                   d S )Nr   )r   r   c                 6    g | ]}|                                 S  )tolist).0re   s     rL   
<listcomp>z,EfficientFormer.__init__.<locals>.<listcomp>  s     ```aqxxzz```rM   Frn   )
r   r   r   r   r   r   r   r   r   r   r"   stages.)num_chs	reductionmoduler\   F) r/   r0   num_classesglobal_poolrx   stemlen
num_stagesr=   linspacesumrb   feature_infor   r   r   dictr9   r   stagesnum_featureshead_hidden_sizer   r   	head_dropr:   r   head	head_distdistilled_trainingapply_init_weights)rF   depths
embed_dimsin_chansr   r   downsamplesr   
mlp_ratiosr   r   r   r   r   	drop_rateproj_drop_ratedrop_path_ratekwargsprev_dim
last_stagedprr   istagerK   s                           rL   r0   zEfficientFormer.__init__f  s]   ( 	&&(JqMjIII	a= f++_q(
``5>!^S[[#Q#Q#W#WX^#_#_```!OX4?Q;N0O%Ot'' 	i 	iA(1q	&q>#$
??#$#+%(a&'=  E "!}HMM%   $z!}AaCYfcdYfYf"g"g"g!hhmV, 5?rNBD1!M$"344	I..ALqBId/===VXVaVcVc	CNQR??:b>;???XZXcXeXe"'

4%&&&&&rM   c                     t          |t          j                  r^t          |j        d           t          |t          j                  r0|j        +t          j                            |j        d           d S d S d S d S )Ng{Gz?)stdr   )
isinstancer9   r:   r   weightbiasinit	constant_)rF   ms     rL   r  zEfficientFormer._init_weights  s    a## 	-!(,,,,!RY'' -AF,>!!!&!,,,,,	- 	-- -,>,>rM   c                 >    d |                                  D             S )Nc                      h | ]\  }}d |v 	|S )rD   r   )r   rj   _s      rL   	<setcomp>z2EfficientFormer.no_weight_decay.<locals>.<setcomp>  s'    QQQda9Kq9P9P9P9P9PrM   )named_parametersrF   s    rL   no_weight_decayzEfficientFormer.no_weight_decay  s"    QQd3355QQQQrM   Fc                 ,    t          dddg          }|S )Nz^stem)z^stages\.(\d+)N)z^norm)i )r   r   )r   )rF   coarsematchers      rL   group_matcherzEfficientFormer.group_matcher  s)    -/CD
 
 
 rM   Tc                 (    | j         D ]	}||_        
d S rO   )r   r   )rF   enabless      rL   set_grad_checkpointingz&EfficientFormer.set_grad_checkpointing  s(     	* 	*A#)A  	* 	*rM   rS   c                     | j         | j        fS rO   r  r  r#  s    rL   get_classifierzEfficientFormer.get_classifier  s    y$.((rM   r   r   c                    || _         ||| _        |dk    rt          j        | j        |          nt          j                    | _        |dk    rt          j        | j        |          nt          j                    | _        d S )Nr   )r   r   r9   r:   r   r   r  r  )rF   r   r   s      rL   reset_classifierz EfficientFormer.reset_classifier  sw    &"*DALqBId/===VXVaVcVc	FQTUoo4#4kBBB[][f[h[hrM   c                     || _         d S rO   )r  )rF   r*  s     rL   set_distilled_trainingz&EfficientFormer.set_distilled_training  s    "(rM   NCHWre   indicesr   
stop_early
output_fmtintermediates_onlyc           	         |dv s
J d            g }t          t          | j                  |          \  }}	|                     |          }|j        \  }
}}}| j        dz
  }t          j                                        s|s| j        }n| j        d|	dz            }d}t          |          D ]\  }} ||          }||k     r|j        \  }
}}}||v r|||k    ra|r| 
                    |          n|}|                    |                    |
|dz  |dz  d                              dddd                     |                    |           |r|S ||k    r| 
                    |          }||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:

        )r4  zOutput shape must be NCHW.r   Nr   r"   r\   r!   )r   r   r   r   r_   r   r=   rU   r   	enumerater   r   r`   ra   )rF   re   r5  r   r6  r7  r8  intermediatestake_indices	max_indexrf   rh   HWlast_idxr   feat_idxr  x_inters                      rL   forward_intermediatesz%EfficientFormer.forward_intermediates  s   * Y&&&(D&&&"6s4;7G7G"Q"Qi IIaLLW
1a?Q&9!!## 	1: 	1[FF[)a-0F(00 		, 		,OHeaA(""W
1a<''x''.29diilllG!((AFAFB)O)O)W)WXY[\^_ab)c)cdddd!((+++ 	!  x		!A-rM   r   
prune_norm
prune_headc                     t          t          | j                  |          \  }}| j        d|dz            | _        |rt          j                    | _        |r|                     dd           |S )z@ Prune layers not required for specified intermediates.
        Nr   r    )r   r   r   r9   r   r   r1  )rF   r5  rD  rE  r<  r=  s         rL   prune_intermediate_layersz)EfficientFormer.prune_intermediate_layers  sq     #7s4;7G7G"Q"Qik.9q=.1 	&DI 	)!!!R(((rM   c                     |                      |          }|                     |          }|                     |          }|S rO   )r   r   r   r   s     rL   forward_featuresz EfficientFormer.forward_features  s4    IIaLLKKNNIIaLLrM   
pre_logitsc                 :   | j         dk    r|                    d          }|                     |          }|r|S |                     |          |                     |          }}| j        r)| j        r"t          j        	                                s||fS ||z   dz  S )Nr   r   r]   r"   )
r   meanr  r  r  r  rW   r=   rU   r   )rF   re   rK  x_dists       rL   forward_headzEfficientFormer.forward_head  s    u$$1ANN1 	HIIaLL$.."3"36" 	$t} 	$UY=S=S=U=U 	$f9 J!##rM   c                 Z    |                      |          }|                     |          }|S rO   )rJ  rO  r   s     rL   rm   zEfficientFormer.forward)  s-    !!!$$a  rM   r   rn   rO   )NFFr4  F)r   FT)!ro   rp   rq   r9   r   r   r   r0   r  r=   rU   ignorer$  r(  r,  Moduler/  r5   r   rX   r1  r3  rr   r   r   boolr   rC  rH  rJ  rO  rm   ru   rv   s   @rL   r   r   d  s       
 #'g~,#@' @' @' @' @' @'F- - - YR R R Y    Y* * * * Y)	 ) ) ) )i iC ihsm i i i i Y) ) ) ) 8<$$',4  4 |4  eCcN344  	4 
 4  4  !%4  
tEL!5tEL7I)I#JJ	K4  4  4  4 p ./$#	 3S	>*  	      $ $$ $ $ $ $      rM   c                 p   d| v r| S i }ddl }d}|                                 D ]\  }}|                    d          rX|                    dd          }|                    dd          }|                    d	d
          }|                    dd          }|                    d|          r|dz  }|                    dd| d|          }|                    dd| d|          }|                    dd| d|          }|                    dd|          }|                    dd          }|||<   |S )z$ Remap original checkpoints -> timm zstem.0.weightr   Npatch_embedzpatch_embed.0
stem.conv1zpatch_embed.1z
stem.norm1zpatch_embed.3z
stem.conv2zpatch_embed.4z
stem.norm2znetwork\.(\d+)\.proj\.weightr   znetwork.(\d+).(\d+)r   z
.blocks.\2znetwork.(\d+).projz.downsample.convznetwork.(\d+).normz.downsample.normzlayer_scale_([0-9])z
ls\1.gamma	dist_headr  )reitems
startswithreplacematchsub)
state_dictmodelout_dictrX  	stage_idxrj   rk   s          rL   checkpoint_filter_fnrb  /  sf   *$$HIIII  ""  1<<&& 	9		/<88A		/<88A		/<88A		/<88A883Q77 	NIFF)+KY+K+K+KQOOFF(*OI*O*O*OQRSSFF(*OI*O*O*OQRSSFF)=!<<IIk;//OrM   rG  c                 6    | ddd dddt           t          ddd|S )	Nr   )r!   r   r   Tgffffff?bicubicrV  r.  )urlr   
input_sizer   fixed_input_sizecrop_pctinterpolationrM  r  
first_conv
classifierr   )re  r  s     rL   _cfgrl  J  s9    =tae)%.B"2G   rM   ztimm/)	hf_hub_id)z!efficientformer_l1.snap_dist_in1kz!efficientformer_l3.snap_dist_in1kz!efficientformer_l7.snap_dist_in1kFc                     |                     dd          }t          t          | |ft          t	          |d          d|}|S )Nout_indicesr$   getter)ro  feature_cls)pretrained_filter_fnfeature_cfg)popr   r   rb  r   )variant
pretrainedr  ro  r_  s        rL   _create_efficientformerrw  b  sY    **]A..K *1[hGGG  	 E LrM   rS   c           	          t          t          d         t          d         d          }t          dd| it          |fi |S )Nr   r   r  r	  r   efficientformer_l1rv  )rz  r   EfficientFormer_depthEfficientFormer_widthrw  rv  r  
model_argss      rL   rz  rz  m  W    $T*(.  J
 #mmJmRVWaRlRlekRlRlmmmrM   c           	          t          t          d         t          d         d          }t          dd| it          |fi |S )Nr   r$   ry  efficientformer_l3rv  )r  r{  r~  s      rL   r  r  w  r  rM   c           	          t          t          d         t          d         d          }t          dd| it          |fi |S )Nr    r'   ry  efficientformer_l7rv  )r  r{  r~  s      rL   r  r    r  rM   )rG  r   )4r   typingr   r   r   r   r   r=   torch.nnr9   	timm.datar	   r
   timm.layersr   r   r   r   r   _builderr   	_featuresr   _manipulater   	_registryr   r   __all__r}  r|  rR  r)   r   rx   r   r   r   r   r   r   r   r   r   r   rb  rl  default_cfgsrw  rz  r  r  r   rM   rL   <module>r     s    6 5 5 5 5 5 5 5 5 5 5 5 5 5        A A A A A A A A G G G G G G G G G G G G G G * * * * * * + + + + + + ' ' ' ' ' ' < < < < < < < <
 

   

  : : : : : : : :z
- 
- 
- 
- 
-BM 
- 
- 
-       (    29            bi      ! ! ! ! !bi ! ! !HF F F F F F F F    ")   B< < < < <29 < < <    ")   DD D D D D29 D D DNH H H H Hbi H H HV  6    %$)-* * * *.* * * *.* * *
& 
& 
 
    n no n n n n n no n n n n n no n n n n n nrM   