
    RЦic                        S r SSK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s  J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JrJrJr  SS	KJr  SS
KJr  SSKJ r   SSK!J"r"J#r#  SSK$J%r%J&r&  S/r'\  " S S\RP                  5      5       r) " S S\RP                  5      r* " S S\RP                  5      r+ " S S\RP                  5      r, " S S\RP                  5      r- " S S\RP                  5      r.S,S jr/S r0S-S jr1S.S jr2\&" \2" SS SS!9\2" SS SS!9\2" SS"S#SS$9\2" SS"S#SS$9\2" SS"S#SS$9\2" SS#SS!9S%.5      r3\%S-S&\.4S' jj5       r4\%S-S&\.4S( jj5       r5\%S-S&\.4S) jj5       r6\%S-S&\.4S* jj5       r7\%S-S&\.4S+ jj5       r8g)/a"  EdgeNeXt

Paper: `EdgeNeXt: Efficiently Amalgamated CNN-Transformer Architecture for Mobile Vision Applications`
 - https://arxiv.org/abs/2206.10589

Original code and weights from https://github.com/mmaaz60/EdgeNeXt

Modifications and additions for timm by / Copyright 2022, Ross Wightman
    N)partial)ListOptionalTupleTypeUnion)nnIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)DropPathcalculate_drop_path_ratesLayerNorm2dMlpcreate_conv2dNormMlpClassifierHeadClassifierHeadtrunc_normal_tf_   )build_model_with_cfg)feature_take_indices)register_notrace_module)named_applycheckpoint_seq)register_modelgenerate_default_cfgsEdgeNeXtc                   `   ^  \ rS rSr     S	S\S\S\4U 4S jjjrS\\\\4   4S jrSr	U =r
$ )
PositionalEncodingFourier'   
hidden_dimdimtemperaturec                    > XES.n[         TU ]  5         [        R                  " US-  U4SS0UD6U l        S[
        R                  -  U l        X0l        Xl	        X l
        g )Ndevicedtype   kernel_sizer   )super__init__r	   Conv2dtoken_projectionmathpiscaler#   r!   r"   )selfr!   r"   r#   r&   r'   dd	__class__s          S/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/edgenext.pyr+   "PositionalEncodingFourier.__init__)   sY     / "		*q.# S1 SPR S[
&$    shapec           
      D   U R                   R                  R                  nU R                   R                  R                  n[        R
                  " U5      R                  U[        R                  S9) nUR                  S[        R                  S9nUR                  S[        R                  S9nSnXUS S 2SS 2S S 24   U-   -  U R                  -  nXfS S 2S S 2SS 24   U-   -  U R                  -  n[        R                  " U R                  [        R                  US9R                  [        R                  5      nU R                  S[        R                  " USSS	9-  U R                  -  -  nUS S 2S S 2S S 2S 4   U-  n	US S 2S S 2S S 2S 4   U-  n
[        R                   " U	S S 2S S 2S S 2S
S S24   R#                  5       U	S S 2S S 2S S 2SS S24   R%                  5       4SS9R'                  S5      n	[        R                   " U
S S 2S S 2S S 2S
S S24   R#                  5       U
S S 2S S 2S S 2SS S24   R%                  5       4SS9R'                  S5      n
[        R(                  " X4SS9R+                  S
SSS5      nU R                  UR                  U5      5      nU$ )Nr%   r   )r'   r(   ư>)r'   r&   floor)rounding_moder      r"      )r-   weightr&   r'   torchzerostoboolcumsumfloat32r0   aranger!   int64r#   divstacksincosflattencatpermute)r1   r7   r&   r'   inv_masky_embedx_embedepsdim_tpos_xpos_yposs               r4   forward!PositionalEncodingFourier.forward9   sX   &&--44%%,,22KK&))uzz)JJ//!5==/9//!5==/9QQY/#56CQ23Y/#56CT__EKKORRSXS`S`a  Q5!7)S%SVZVeVe%ef1a&.1a&.1aADqD=!%%'1aADqD=!%%')./118 	 1aADqD=!%%'1aADqD=!%%')./118 	 iiA.66q!QB##CFF5M2
r6   )r"   r!   r0   r#   r-   )    i   g     @NN)__name__
__module____qualname____firstlineno__intfloatr+   r   rX   __static_attributes____classcell__r3   s   @r4   r   r   '   sV     !!'  	  U3S=1  r6   r   c                      ^  \ rS rSrSSSSSS\" \R                  SS9\R                  S	SS4S
\S\	\   S\S\S\
S\S\S\\R                     S\\R                     S\4U 4S jjjrS rSrU =r$ )	ConvBlockT   N   r   Tr=   r9   rS           r"   dim_outr)   stride	conv_biasexpand_ratiols_init_value
norm_layer	act_layer	drop_pathc                   > XS.n[         TU ]  5         U=(       d    UnUS:  =(       d    X:g  U l        [        UU4UUSUS.UD6U l        U" U40 UD6U l        [        U[        Xb-  5      4SU	0UD6U l        US:  a.  [        R                  " U[        R                  " U40 UD6-  5      OS U l        U
S:  a  [        U
5      U l        g [        R                  " 5       U l        g )Nr%   r   T)r)   rk   	depthwisebiasrp   r   ri   )r*   r+   shortcut_after_dwr   conv_dwnormr   r_   mlpr	   	ParameterrA   onesgammar   Identityrq   )r1   r"   rj   r)   rk   rl   rm   rn   ro   rp   rq   r&   r'   r2   r3   s                 r4   r+   ConvBlock.__init__U   s     /.S!'!!=s~$
 $
 
 w-"-	&'
  
 	
 Q^`aPaR\\-%**W2K2K"KLgk
09B),BKKMr6   c                 D   UnU R                  U5      nU R                  (       a  UnUR                  SSSS5      nU R                  U5      nU R	                  U5      nU R
                  b  U R
                  U-  nUR                  SSSS5      nX R                  U5      -   nU$ )Nr   r(   r?   r   )rv   ru   rO   rw   rx   r{   rq   )r1   xshortcuts      r4   rX   ConvBlock.forward|   s    LLO!!HIIaAq!IIaLHHQK::!

QAIIaAq!~~a((r6   )rv   rq   r{   rx   rw   ru   )r[   r\   r]   r^   r   r	   	LayerNormGELUr_   r   rD   r`   r   Moduler+   rX   ra   rb   rc   s   @r4   re   re   T   s     &* ""##'*1",,D*I)+!%R%R c]%R 	%R
 %R %R  %R !%R RYY%R BII%R %R %RN r6   re   c                      ^  \ rS rSr      SS\S\S\S\S\4
U 4S jjjrS r\	R                  R                  S	 5       rS
rU =r$ )CrossCovarianceAttn   r"   	num_headsqkv_bias	attn_drop	proj_dropc                   > XgS.n[         T	U ]  5         X l        [        R                  " [
        R                  " USS40 UD65      U l        [        R                  " XS-  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%   r   r?   rt   )r*   r+   r   r	   ry   rA   rz   r#   LinearqkvDropoutr   projr   )
r1   r"   r   r   r   r   r&   r'   r2   r3   s
            r4   r+   CrossCovarianceAttn.__init__   s     /"<<

9a(Ib(IJ99S'??B?I.IIc-"-	I.r6   c                 0   UR                   u  p#nU R                  U5      R                  X#SU R                  S5      R	                  SSSSS5      nUR                  S5      u  pgn[        R                  " USS9[        R                  " USS9R                  SS5      -  U R                  -  n	U	R                  SS9n	U R                  U	5      n	X-  nUR	                  SSSS5      R                  X#U5      nU R                  U5      nU R                  U5      nU$ )	Nr?   r:   r(   r   r=   r   r>   )r7   r   reshaper   rO   unbindF	normalize	transposer#   softmaxr   r   r   )
r1   r   BNCr   qkvattns
             r4   rX   CrossCovarianceAttn.forward   s    ''ahhqk!!!4>>2>FFq!QPQSTU**Q-a A2&QB)?)I)I"b)QQUYUeUee|||#~~d#XIIaAq!))!2IIaLNN1r6   c                     S1$ )Nr#    r1   s    r4   no_weight_decay#CrossCovarianceAttn.no_weight_decay   s
    r6   )r   r   r   r   r   r#   )   Fri   ri   NN)r[   r\   r]   r^   r_   rD   r`   r+   rX   rA   jitignorer   ra   rb   rc   s   @r4   r   r      st     "!!// / 	/
 / / /(  YY r6   r   c                      ^  \ rS rSrSSSSSSS\" \R                  SS9\R                  SSSS	S	4S
\S\S\S\	S\
S\
S\
S\	S\\R                     S\\R                     S\	S\	S\	4U 4S jjjrS rSrU =r$ )SplitTransposeBlock   r   r   r=   Tr9   rh   ri   Nr"   
num_scalesr   rm   use_pos_embrl   r   rn   ro   rp   rq   r   r   c           
        > XS.n[         TU ]  5         [        [        [        R
                  " X-  5      5      [        [        R                  " X-  5      5      5      nUU l        [        SUS-
  5      U l        / n[        U R                  5       H#  nUR                  [        UU4SSUS.UD65        M%     [        R                  " U5      U l        S U l        U(       a  [!        SSU0UD6U l        U	" U40 UD6U l        US:  a.  [        R$                  " U[&        R(                  " U40 UD6-  5      OS U l        [-        U4UUUUS.UD6U l        U	" U4S	S
0UD6U l        [3        U[        XA-  5      4SU
0UD6U l        US:  a.  [        R$                  " U[&        R(                  " U40 UD6-  5      OS U l        US:  a  [9        U5      U l        g [        R:                  " 5       U l        g )Nr%   r   r?   T)r)   rs   rt   r"   r   )r   r   r   r   rS   r9   rp   ri   r   )r*   r+   maxr_   r.   ceilr;   widthr   rangeappendr   r	   
ModuleListconvspos_embdr   norm_xcary   rA   rz   	gamma_xcar   xcarw   r   rx   r{   r   r|   rq   )r1   r"   r   r   rm   r   rl   r   rn   ro   rp   rq   r   r   r&   r'   r2   r   r   ir3   s                       r4   r+   SplitTransposeBlock.__init__   s   $ /C		#"234c$**SEV:W6XY
aa0t'ALLueidYbifhij (]]5)
5D#DDDM"3-"-P]`aPamejj6K6K&KLgk&

 
 s333	"#
  
 	
 MZ\]L]R\\-%**S2GB2G"GHcg
09B),BKKMr6   c           	         UnUR                  [        U R                  5      S-   SS9n/ nUS   n[        U R                  5       H+  u  pgUS:  a  XSU   -   nU" U5      nUR	                  U5        M-     UR	                  US   5        [
        R                  " US5      nUR                  u  ppUR                  XX-  5      R                  SSS5      nU R                  bF  U R                  XU45      R                  USUR                  S   5      R                  SSS5      nX-   nXR                  U R                  U R                  U R                  U5      5      -  5      -   nUR                  XX5      nU R                  U5      nU R!                  U5      nU R"                  b  U R"                  U-  nUR                  SSSS5      nX R                  U5      -   nU$ )Nr   r>   r   r:   r(   r?   )chunklenr   	enumerater   rA   rN   r7   r   rO   r   rq   r   r   r   rw   rx   r{   )r1   r   r   spxspospr   convr   r   HWpos_encodings                r4   rX   SplitTransposeBlock.forward   s    ggc$**o)qg1V ,GA1ua&[bBJJrN	 -
 	

3r7IIc1 WW
aIIaAE"**1a3==$==!3;;Ar1771:NVVWXZ[]^_L At~~q9I0JJKKIIaA! IIaLHHQK::!

QAIIaAq!~~a((r6   )r   rq   r{   r   rx   rw   r   r   r   r   r   )r[   r\   r]   r^   r   r	   r   r   r_   r`   rD   r   r   r+   rX   ra   rb   rc   s   @r4   r   r      s      "# $"!#'*1",,D*I)+!!!!3R3R 3R 	3R
  3R 3R 3R 3R !3R RYY3R BII3R 3R 3R 3R 3Rj! !r6   r   c            $       (  ^  \ rS rSrSSSSSSSSSSSS	\\" \R                  S
S9\R                  S	S	4S\	S\	S\	S\	S\	S\	S\	S\	S\
S\S\S\
S\
S\\\
      S\\R                     S\\R                     S\\R                     4"U 4S jjjrS rSrU =r$ ) EdgeNeXtStagei  r(   r   r=   rg   FT      ?Nr9   rh   in_chsout_chsrk   depthnum_global_blocksr   scalesr)   rm   r   downsample_blockrl   rn   drop_path_ratesro   norm_layer_clrp   c                 2  > UUS.n[         TU ]  5         SU l        U(       d  US:X  a  [        R                  " 5       U l        O>[        R                  " U" U40 UD6[        R                  " X4SSUS.UD65      U l        Un/ n[        U5       Hm  nUXE-
  :  a8  UR                  [        S	UUU(       a  US:X  a  UOSUUU	UUU   UUS.
UD65        O(UR                  [        S	UUUU	U
UUUU   UUS.
UD65        UnMo     [        R                  " U6 U l        g )
Nr%   Fr   r(   r)   rk   rt   r   )
r"   rj   rk   rl   r)   rm   rn   rq   ro   rp   )
r"   r   r   rm   r   rl   rn   rq   ro   rp   r   )r*   r+   grad_checkpointingr	   r|   
downsample
Sequentialr,   r   r   re   r   blocks)r1   r   r   rk   r   r   r   r   r)   rm   r   r   rl   rn   r   ro   r   rp   r&   r'   r2   stage_blocksr   r3   s                          r4   r+   EdgeNeXtStage.__init__  sL   , /"'v{ kkmDO mm6(R(		&YqYVXYDO FuA5,,## " ')9a1fv!"+$/%1&3"1!"4#0"+   ##' "#)"+%1$/"+&3"1!"4#0"+  FC D mm\2r6   c                     U R                  U5      nU R                  (       a;  [        R                  R	                  5       (       d  [        U R                  U5      nU$ U R                  U5      nU$ N)r   r   rA   r   is_scriptingr   r   r1   r   s     r4   rX   EdgeNeXtStage.forwardZ  sV    OOA""599+A+A+C+Ct{{A.A  AAr6   )r   r   r   )r[   r\   r]   r^   r   r   r	   r   r   r_   r`   rD   r   r   r   r   r+   rX   ra   rb   rc   s   @r4   r   r     s8   
 %& "# %%*##&59*5-4R\\t-L)+)F3F3 F3 	F3
 F3  #F3 F3 F3 F3  F3 F3 #F3 F3 !F3 &d5k2F3  RYY!F3"  		?#F3$ BII%F3 F3P r6   r   c            )         ^  \ 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SS4S\S\S\S\\S4   S\\S4   S\\S4   S\\S4   S\\S4   S\\S4   S\\	S4   S\
S \
S!\
S"\	S#\	S$\S%\	S&\\R                     S'\
S(\
4(U 4S) jjjr\R                  R                   S>S* j5       r\R                  R                   S?S+ j5       r\R                  R                   S,\R                  4S- j5       rS@S\S\\   4S. jjr     SAS/\R,                  S0\\\\\   4      S1\	S2\	S3\S4\	S,\\\R,                     \\R,                  \\R,                     4   4   4S5 jjr   SBS0\\\\   4   S6\	S7\	4S8 jjrS9 rS>S:\	4S; jjrS< rS=rU =r$ )Cr   ic  r?     avg   0   X      r?   r?   	   r?   )r   r   r   r   )r?      rg   r   )r   r   r   r   )r(   r(   r?   r=   )FTFFr9   r   r=   FTpatchri   Nin_chansnum_classesglobal_pooldims.depthsglobal_block_countskernel_sizesheads	d2_scalesr   rn   head_init_scalerm   r   rl   	stem_typehead_norm_firstrp   drop_path_rate	drop_ratec           
      
  > [         T U ]  5         UUS.nX l        Xl        X0l        UU l        [        [        SS9n[        [        R                  SS9n/ U l
        US;   d   eUS:X  aC  [        R                  " [        R                  " XS   4SSUS.UD6U" US   40 UD65      U l        OC[        R                  " [        R                  " XS   4S	SSUS
.UD6U" US   40 UD65      U l        Sn/ n[        UUSS9nUS   n[        S5       H  nUS:X  d  US:  a  SOSnUU-  nUR!                  [#        S&0 SU_SUU   _SU_SUU   _SUU   _SUU   _SUU   _SU	U   _SU_SUU   _SU
U   _SU_SU_SU_SU_SU_SU_UD65        UU   nU =R                  [%        UUS U 3S!9/-  sl
        M     [        R                  " U6 U l        US"   =U l        U l        U(       aB  U" U R(                  40 UD6U l        [/        U R(                  U4UU R
                  S#.UD6U l        OD[        R2                  " 5       U l        [5        U R(                  U4UU R
                  US$.UD6U l        [7        [        [8        US%9U 5        g )'Nr%   r9   rh   )r   overlapr   r   r=   r   r   )r)   rk   paddingrt   T)	stagewiser(   r   r   r   rk   r   r   r   r   r   rm   r)   r   rn   r   rl   ro   r   rp   zstages.)num_chs	reductionmoduler:   )	pool_typer   )r  r   ro   )r   r   )r*   r+   r   r   r   r   r   r   r	   r   feature_infor   r,   stemr   r   r   r   dictstagesnum_featureshead_hidden_sizenorm_prer   headr|   r   r   _init_weights)!r1   r   r   r   r   r   r   r   r   r   r   rn   r   rm   r   rl   r   r   rp   r   r   r&   r'   r2   ro   r   curr_strider  dp_ratesr   r   rk   r3   s!                                   r4   r+   EdgeNeXt.__init__d  s   2 	/& &"[d3
$70000		(G\19\XZ\47)b)DI
 		(Gk1f[dkhjk47)b)DI
 ,^VtTaqA%*a!eQF6!KMM- Q  Qi	
 #6a"8  ( !) !| * )O (N , "2 $ &  ,!" $% * !WF$vW^_`^aUb"c!dd5 8 mmV,48H<D1&t'8'8?B?DM&!! &..	
 DI KKMDM-!! &..% DI 	GM?KTRr6   c                 0    [        SU(       a  SS9$ / SQS9$ )Nz^stemz^stages\.(\d+)))z^stages\.(\d+)\.downsample)r   )z^stages\.(\d+)\.blocks\.(\d+)N)z	^norm_pre)i )r  r   )r  )r1   coarses     r4   group_matcherEdgeNeXt.group_matcher  s'    (.$
 	
5
 	
r6   c                 6    U R                    H	  nXl        M     g r   )r  r   )r1   enabless      r4   set_grad_checkpointingEdgeNeXt.set_grad_checkpointing  s    A#)  r6   returnc                 .    U R                   R                  $ r   )r
  fcr   s    r4   get_classifierEdgeNeXt.get_classifier  s    yy||r6   c                 F    Xl         U R                  R                  X5        g r   )r   r
  reset)r1   r   r   s      r4   reset_classifierEdgeNeXt.reset_classifier  s    &		1r6   r   indicesrw   
stop_early
output_fmtintermediates_onlyc                 4   US;   d   S5       e/ n[        [        U R                  5      U5      u  pU R                  U5      n[        U R                  5      S-
  n
[        R
                  R                  5       (       d  U(       d  U R                  nOU R                  SU	S-    n[        U5       HE  u  pU" U5      nX;   d  M  U(       a  X:X  a  U R                  U5      nOUnUR                  U5        MG     U(       a  U$ WU
:X  a  U R                  U5      nX4$ )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.r   N)
r   r   r  r  rA   r   r   r   r	  r   )r1   r   r!  rw   r"  r#  r$  intermediatestake_indices	max_indexlast_idxr  feat_idxstagex_inters                  r4   forward_intermediatesEdgeNeXt.forward_intermediates  s    * Y&D(DD&"6s4;;7G"Q IIaLt{{#a'99!!##:[[F[[)a-0F(0OHaA'H0"mmA.GG$$W-  1   xa Ar6   
prune_norm
prune_headc                     [        [        U R                  5      U5      u  pEU R                  SUS-    U l        U(       a  [        R                  " 5       U l        U(       a  U R                  SS5        U$ )z?Prune layers not required for specified intermediates.
        Nr   r    )r   r   r  r	   r|   r	  r  )r1   r!  r0  r1  r(  r)  s         r4   prune_intermediate_layers"EdgeNeXt.prune_intermediate_layers  s[     #7s4;;7G"Qkk.9q=1KKMDM!!!R(r6   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r   )r  r  r	  r   s     r4   forward_featuresEdgeNeXt.forward_features&  s/    IIaLKKNMM!r6   
pre_logitsc                 R    U(       a  U R                  USS9$ U R                  U5      $ )NT)r9  )r
  )r1   r   r9  s      r4   forward_headEdgeNeXt.forward_head,  s$    0:tyyty,L		!Lr6   c                 J    U R                  U5      nU R                  U5      nU$ r   )r7  r;  r   s     r4   rX   EdgeNeXt.forward/  s'    !!!$a r6   )r   r  r   r
  r  r   r	  r   r  r  r  F)Tr   )NFFr&  F)r   FT) r[   r\   r]   r^   r	   r   r_   strr   rD   r`   r   r   r+   rA   r   r   r  r  r  r   r  Tensorr   r   r.  r4  r7  r;  rX   ra   rb   rc   s   @r4   r   r   c  s    #$$5&23?,8%1)5,G#'%'"#%*"$$))+$&!/fSfS fS 	fS
 S/fS #s(OfS "'sCxfS  S/fS c?fS S#XfS tSy)fS !fS #fS  fS #fS  !fS" #fS$ "%fS& BII'fS( ")fS* +fS fSP YY
 
 YY* * YY		  2C 2hsm 2 8<$$',0 ||0  eCcN340  	0 
 0  0  !%0  
tELL!5tELL7I)I#JJ	K0 h ./$#	3S	>*  	 M$ M r6   r   c                 F   [        U [        R                  5      (       aL  [        U R                  SS9  U R
                  b*  [        R                  R                  U R
                  5        g g [        U [        R                  5      (       a  [        U R                  SS9  [        R                  R                  U R
                  5        U(       aR  SU;   aK  U R                  R                  R                  U5        U R
                  R                  R                  U5        g g g g )Ng{Gz?)stdhead.)
isinstancer	   r,   r   r@   rt   initzeros_r   datamul_)r  namer   s      r4   r  r  5  s    &"))$$C0;;"GGNN6;;' #	FBII	&	&C0
v{{#GtOMM##O4KK!!/2 $4 
'r6   c                 b   SU ;   d  SU ;   a  U $ SU ;   a  U S   n OSU ;   a  U S   n OSU ;   a  U S   n 0 nSSK nU R                  5        H  u  pEUR                  SS	5      nUR                  S
SU5      nUR                  SSU5      nUR                  SS5      nUR                  SS5      nUR                  SS5      nUR	                  S5      (       a  UR                  SS5      nUR
                  S:X  a4  SU;  a.  UR                  5       U   R                  nUR                  U5      nXRU'   M     U$ )zRemap FB checkpoints -> timm zhead.norm.weightznorm_pre.weight	model_emamodel
state_dictr   Nzdownsample_layers.0.zstem.zstages.([0-9]+).([0-9]+)zstages.\1.blocks.\2z#downsample_layers.([0-9]+).([0-9]+)zstages.\1.downsample.\2dwconvrv   pwconvzmlp.fcrD  zhead.fc.znorm.rw   z	head.normr(   r
  )	reitemsreplacesub
startswithndimrN  r7   r   )rN  rM  out_dictrQ  r   r   model_shapes          r4   checkpoint_filter_fnrY  B  s<   Z'+<
+J j ,
	J	(
		#-
H  "II,g6FF.0FJFF9;UWXYIIh	*IIh)IIgz*<<  		&+.A66Q;6?**,Q/55K		+&A # Or6   c           	      F    [        [        X4[        [        SSS9S.UD6nU$ )N)r   r   r(   r?   T)out_indicesflatten_sequential)pretrained_filter_fnfeature_cfg)r   r   rY  r  )variant
pretrainedkwargsrM  s       r4   _create_edgenextrb  a  s4     '1\dK 	E
 Lr6   c                 2    U SSSSS[         [        SSSS	.UE$ )
Nr   )r?      rd  )r   r   g?bicubiczstem.0zhead.fcmit)urlr   
input_size	pool_sizecrop_pctinterpolationmeanrC  
first_conv
classifierlicenser
   )rg  ra  s     r4   _cfgrp  j  s3    =v)%.Bi  r6   ztimm/)r?      rq  )	hf_hub_idtest_input_sizetest_crop_pctgffffff?)r?   @  ru  )rr  rj  rs  rt  )zedgenext_xx_small.in1kzedgenext_x_small.in1kzedgenext_small.usi_in1kzedgenext_base.usi_in1kzedgenext_base.in21k_ft_in1kzedgenext_small_rw.sw_in1kr  c           	      F    [        SSSS9n[        SSU 0[        U40 UD6D6$ )N)r(   r(      r(   r   r=   r=   r=   r=   r   r   r   r`  )edgenext_xx_smallr  rb  r`  ra  
model_argss      r4   rz  rz    s1     \0AVJeJe$zJd]cJdeer6   c           	      F    [        SSSS9n[        SSU 0[        U40 UD6D6$ )Nr   )rZ   @   d      rx  ry  r`  )edgenext_x_smallr{  r|  s      r4   r  r    s1     \0B,WJd:djIc\bIcddr6   c           	      D    [        SSS9n[        SSU 0[        U40 UD6D6$ )Nr   )r   `      i0  r   r   r`  )edgenext_smallr{  r|  s      r4   r  r    s/     \0BCJbbtJGaZ`Gabbr6   c           	      L    [        / SQ/ SQS9n[        SSU 0[        U40 UD6D6$ )Nr   )P   r  rq  iH  r  r`  )edgenext_baser{  r|  s      r4   r  r    s/     \0CDJa
ad:F`Y_F`aar6   c           	      J    [        SSSSSS9n[        SSU 0[        U40 UD6D6$ )	Nr   )r   r  r  i  TFr   )r   r   r   rl   r   r`  )edgenext_small_rwr{  r|  s      r4   r  r    s:    "4)EJ eJe$zJd]cJdeer6   )Nr   r?  )r3  )9__doc__r.   	functoolsr   typingr   r   r   r   r   rA   torch.nn.functionalr	   
functionalr   	timm.datar   r   timm.layersr   r   r   r   r   r   r   r   _builderr   	_featuresr   _features_fxr   _manipulater   r   	_registryr   r   __all__r   r   re   r   r   r   r   r  rY  rb  rp  default_cfgsrz  r  r  r  r  r   r6   r4   <module>r     s     5 5     A	 	 	 + + 1 4 <, )		 ) )X6		 6r'")) 'TW")) WtOBII OdOryy Od
3>	 %"%S: "%S:  $}C  #}C $(}C$ "&%S"'& 4 fX f f eH e e c( c c b b b fX f fr6   