
    RЦil                     <   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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  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 jr% " S S\RL                  5      r'S-S jr( " S S\RL                  5      r) " S S\RL                  5      r* " S S\RL                  5      r+ " S S\RL                  5      r, " S S\RL                  5      r- " S S\RL                  5      r. " S S\RL                  5      r/S  r0S.S! jr1S/S" jr2\"" \2" S#S$9\2" S#S$9\2" 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$9\2" S#S$9\2" S#S$9\2" S#S%S&S'S(9\2" S#S%S&S'S(9\2" S#S%S&S'S(9S).5      r3\#S.S* j5       r4\#S.S+ j5       r5\#S.S, j5       r6g)0zNext-ViT

As described in https://arxiv.org/abs/2207.05501

Next-ViT model defs and weights adapted from https://github.com/bytedance/Next-ViT, original copyright below
    )partial)ListOptionalTupleUnionTypeN)nnIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)DropPathcalculate_drop_path_ratestrunc_normal_ConvMlpget_norm_layerget_act_layeruse_fused_attn)ClassifierHead   )build_model_with_cfg)feature_take_indices)
checkpointcheckpoint_seq)generate_default_cfgsregister_modelNextViTc                    U R                   R                  nU R                  ca  [        R                  " U R
                  UR                  S9R                  UR                  5       5      n[        R                  " U5      U l        U R                  R                  nUc  UR                  SL d   S5       eUR                  SL d   S5       eUR                  R                  UR                  5      R                  S5      nXaR                   -  nUR                  UR                   UR                   -  U-  -
  nGO0UR                  SL d   S5       eUR                  SL d   S5       eUR                  SL d   S5       eUR                  SL d   S5       eUR                  R                  UR                  5      R                  S5      n	UR                  R                  UR                  5      R                  S5      n
XR                   -  U
-  UR                   -  nXR                   -  UR                  UR                   UR                   -  U	-  -
  UR                   -
  -  UR                  -   n[#        U [        R$                  5      (       aD  X8-  nUR'                  UR)                  SUR+                  S5      5      R-                  U5      5        O[#        U [        R.                  5      (       a  UR0                  S   S:X  a  UR0                  S	   S:X  d   eUR3                  UR0                  S
   UR0                  S   5      nX8-  nUR'                  UR)                  SUR+                  S5      5      R-                  U5      5        UR3                  UR0                  S
   UR0                  S   SS5      nUR5                  U5        X0R                   l        XPR                  l        g)z.Merge pre BN to reduce inference runtime.
    N)deviceTz2Unsupported bn_module.track_running_stats is Falsez%Unsupported bn_module.affine is False      r         r   )weightdatabiastorchzerosout_chsr   typer	   	Parametertrack_running_statsaffinerunning_varaddepspowrunning_mean
isinstanceLinearmul_viewsize	expand_asConv2dshapereshapeadd_)modulepre_bn_1pre_bn_2r"   r&   r$   scale_invstdextra_weight
extra_biasscale_invstd_1scale_invstd_2s              R/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/nextvit.pymerge_pre_bnrD      s    ]]F{{FNN6==AFFv{{}Ull5);;D++t3i5ii3$&O(OO&++//=AA$G#oo5]]X__x7L7L%L|%[[
++t3i5ii3$&O(OO&++t3i5ii3$&O(OO&!--11(,,?CCDI!--11(,,?CCDI%7.H8??Z0==8??X5J5J#J^#[[^f^s^ssu--  	 &"))$$(
L%%aQ8BB6JK	FBII	&	&||A!#Q1(<<<QaA(
L%%aQ8BB6JKQa!QGIIjMMKK    c                      ^  \ rS rSrSSS\R
                  \R                  SS4S\S\S\S\S	\S
\\R                     S\\R                     4U 4S jjjr
S rSrU =r$ )ConvNormActI   r!   r   Nin_chsr'   kernel_sizestridegroups
norm_layer	act_layerc
           	         > XS.n
[         TU ]  5         [        R                  " UU4UUSUSS.U
D6U l        U" U40 U
D6U l        U" 5       U l        g )Nr   dtyper   FrJ   rK   paddingrL   r$   )super__init__r	   r7   convnormact)selfrI   r'   rJ   rK   rL   rM   rN   r   rQ   dd	__class__s              rC   rU   ConvNormAct.__init__J   sj     /II	
 $	
 	
	 w-"-	;rE   c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ N)rV   rW   rX   rY   xs     rC   forwardConvNormAct.forwarde   s.    IIaLIIaLHHQKrE   )rX   rV   rW   )__name__
__module____qualname____firstlineno__r	   BatchNorm2dReLUintr   ModulerU   ra   __static_attributes____classcell__r[   s   @rC   rG   rG   I   s    
  !*,..)+  	
   RYY BII 6 rE   rG   c                 j    Uc  Un[        U[        XS-  -   5      U-  U-  5      nUSU -  :  a  X1-  nU$ )Nr    g?)maxri   )vdivisor	min_valuenew_vs       rC   _make_divisiblert   l   sF    		3qQ;/7:WDEEsQwLrE   c            
       |   ^  \ rS rSrS\R
                  SS4S\S\S\S\\R                     4U 4S jjjr	S	 r
S
rU =r$ )
PatchEmbedv   r   NrI   r'   rK   rM   c                   > XVS.n[         TU ]  5         US:X  aK  [        R                  " SSSSS9U l        [        R
                  " X4SSSS.UD6U l        U" U40 UD6U l        g X:w  aI  [        R                  " 5       U l        [        R
                  " X4SSSS.UD6U l        U" U40 UD6U l        g [        R                  " 5       U l        [        R                  " 5       U l        [        R                  " 5       U l        g )	NrP   r    )r    r    TF)rK   	ceil_modecount_include_padr   )rJ   rK   r$   )	rT   rU   r	   	AvgPool2dpoolr7   rV   rW   Identity)	rY   rI   r'   rK   rM   r   rQ   rZ   r[   s	           rC   rU   PatchEmbed.__init__w   s     /Q;VAY^_DI		&]qQV]Z\]DI"71b1DIDI		&]qQV]Z\]DI"71b1DIDIDIDIrE   c                 `    U R                  U R                  U R                  U5      5      5      $ r^   )rW   rV   r|   r_   s     rC   ra   PatchEmbed.forward   s"    yy499Q<011rE   )rV   rW   r|   )rc   rd   re   rf   r	   rg   ri   r   rj   rU   ra   rk   rl   rm   s   @rC   rv   rv   v   sW    
 *,..&& & 	&
 RYY& &02 2rE   rv   c            
          ^  \ rS rSrSr\R                  \R                  SS4S\S\S\	\R                     S\	\R                     4U 4S jjjrS	 rS
rU =r$ )ConvAttention   z$
Multi-Head Convolutional Attention
Nr'   head_dimrM   rN   c           	         > XVS.n[         TU ]  5         [        R                  " UU4SSSX-  SS.UD6U l        U" U40 UD6U l        U" 5       U l        [        R                  " X4SSS.UD6U l        g )NrP   r!   r   FrR   )rJ   r$   )rT   rU   r	   r7   group_conv3x3rW   rX   
projection)	rY   r'   r   rM   rN   r   rQ   rZ   r[   s	           rC   rU   ConvAttention.__init__   s     /YY	
 &	
 	
 w-"-	;))GV!%VSUVrE   c                     U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU$ r^   )r   rW   rX   r   rY   r`   outs      rC   ra   ConvAttention.forward   s?      #iinhhsmooc"
rE   )rX   r   rW   r   )rc   rd   re   rf   __doc__r	   rg   rh   ri   r   rj   rU   ra   rk   rl   rm   s   @rC   r   r      sn     +-..)+WW W RYY	W
 BIIW W2 rE   r   c                      ^  \ rS 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\R                  " 5       S 5       rS rSrU =r$ )NextConvBlock   z
Next Convolution Block
r               g      @NrI   r'   rK   	drop_pathdropr   	mlp_ratiorM   rN   c                 T  > XS.n[         TU ]  5         Xl        X l        X&-  S:X  d   e[	        XU4SU0UD6U l        [        UU4UU	S.UD6U l        [        U5      U l	        U" U40 UD6U l
        [        U4[        X'-  5      USU	S.UD6U l        [        U5      U l        SU l        g )NrP   r   rM   )rM   rN   T)hidden_featuresr   r$   rN   F)rT   rU   rI   r'   rv   patch_embedr   mhcar   attn_drop_pathrW   r   ri   mlpmlp_drop_pathis_fused)rY   rI   r'   rK   r   r   r   r   rM   rN   r   rQ   rZ   r[   s                rC   rU   NextConvBlock.__init__   s     /!Q&&&%fv[*[XZ[!
 "	

 
	 'y1w-"-	
 34
 
 &i0rE   c                     U R                   (       dL  [        U R                  R                  U R                  5        [
        R                  " 5       U l        SU l         g g NT)r   rD   r   fc1rW   r	   r}   rY   s    rC   reparameterizeNextConvBlock.reparameterize   s8    }}tyy1DI DM rE   c                     U R                  U5      nXR                  U R                  U5      5      -   nU R                  U5      nXR	                  U R                  U5      5      -   nU$ r^   )r   r   r   rW   r   r   r   s      rC   ra   NextConvBlock.forward   sZ    Q##DIIaL11iil""488C=11rE   )	r   rI   r   r   r   r   rW   r'   r   rc   rd   re   rf   r   r	   rg   rh   ri   floatr   rj   rU   r%   no_gradr   ra   rk   rl   rm   s   @rC   r   r      s     !!*,..)+(( ( 	(
 ( ( ( ( RYY( BII( (T ]]_! ! rE   r   c                      ^  \ rS rSr% Sr\R                  R                  \   \	S'   SSSSSS\
R                  SS4	S	\S
\\   S\S\S\S\S\S\\
R                      4U 4S jjjrS rSrU =r$ )EfficientAttention   z%
Efficient Multi-Head Self Attention

fused_attnNr   Tr   r   dimout_dimr   qkv_bias	attn_drop	proj_dropsr_ratiorM   c                 4  > XS.n[         TU ]  5         Xl        Ub  UOUU l        U R                  U-  U l        X0l        US-  U l        [        5       U l        [        R                  " XR                  4SU0UD6U l        [        R                  " XR                  4SU0UD6U l        [        R                  " XR                  4SU0UD6U l        [        R                  " U R                  U R                  40 UD6U l        [        R                  " U5      U l        [        R                  " U5      U l        Xpl        US-  U l        US:  a=  [        R(                  " U R&                  U R&                  S9U l        U" U40 UD6U l        g S U l        S U l        g )NrP   r   r$   r    r   )rJ   rK   )rT   rU   r   r   	num_headsr   scaler   r   r	   r2   qkrp   projDropoutr   r   r   N_ratio	AvgPool1dsrrW   )rY   r   r   r   r   r   r   r   rM   r   rQ   rZ   r[   s               rC   rU   EfficientAttention.__init__   s?    /")"5w3X- %
(*3>x>2>3>x>2>3>x>2>IIdhh;;	I.I. 1}a<llt||DLLQDG"3-"-DIDGDIrE   c                     UR                   u  p#nU R                  U5      R                  X#U R                  U R                  5      R                  SSSS5      nU R                  bB  U R                  UR                  SS5      5      nU R                  U5      R                  SS5      nU R                  U5      R                  USU R                  U R                  5      R                  SS5      nU R                  U5      R                  USU R                  U R                  5      R                  SS5      nU R                  (       a>  [        R                  " XVUU R                  (       a  U R                  R                   OSS9nOFXPR"                  -  nXVR                  SS5      -  nUR%                  SS	9nU R                  U5      nX-  nUR                  SS5      R                  X#U5      nU R'                  U5      nU R)                  U5      nU$ )
Nr   r    r   r!   r   )	dropout_pr   )r8   r   r9   r   r   permuter   	transposerW   r   rp   r   Fscaled_dot_product_attentiontrainingr   pr   softmaxr   r   )	rY   r`   BNCr   r   rp   attns	            rC   ra   EfficientAttention.forward#  s   ''aFF1IaDNNDMMBJJ1aQRTUV77Aq)*A		!&&q!,AFF1IaT^^T]]CMMaQRSFF1IaT^^T]]CMMaQRS??..a.2mm$..**A
 JJA{{2r**D<<B<'D>>$'DAKK1%%aA.IIaLNN1rE   )r   r   r   r   r   r   rW   r   r   r   r   r   r   r   r   rp   )rc   rd   re   rf   r   r%   jitFinalbool__annotations__r	   BatchNorm1dri   r   r   r   rj   rU   ra   rk   rl   rm   s   @rC   r   r      s     		%%
 &*!!!*,..$$ c]$ 	$
 $ $ $ $ RYY$ $L rE   r   c                   
  ^  \ rS rSrSrSSSSSSS\R                  \R                  SS4S	\S
\S\	S\S\S\	S\S\	S\	S\	S\
\R                     S\
\R                     4U 4S jjjr\R                  " 5       S 5       rS rSrU =r$ )NextTransformerBlocki@  z
Next Transformer Block
r   r    r         ?r   NrI   r'   r   rK   r   r   r   mix_block_ratior   r   rM   rN   c                   > XS.n[         TU ]  5         Xl        X l        Xl        [        [        X(-  5      S5      U l        X R                  -
  U l        [        XR                  U40 UD6U l
        U" U R                  40 UD6U l        [        U R                  4UUU	U
S.UD6U l        [        X8-  5      U l        [        U R                  U R                  4SUS.UD6U l        [#        U R                  4UUUS.UD6U l        [        USU-
  -  5      U l        U" U40 UD6U l        [+        U4[        X&-  5      UU
S.UD6U l        [        U5      U l        SU l        g )	NrP   r   )r   r   r   r   r   )rK   rM   )r   rM   rN   )r   rN   r   F)rT   rU   rI   r'   r   rt   ri   mhsa_out_chsmhca_out_chsrv   r   norm1r   e_mhsar   mhsa_drop_pathr   r   r   mhca_drop_pathnorm2r   r   r   r   )rY   rI   r'   r   rK   r   r   r   r   r   r   rM   rN   r   rQ   rZ   r[   s                   rC   rU   NextTransformerBlock.__init__E  s   " /.+C0I,JBO#&7&77%f.?.?N2N 1 18R8
(

 
 'y'BC$
 !	

 
 "
!	

 
	 'yA4G'HI.2.

 34	

 
 &i0rE   c                 d   U R                   (       Gd  [        U R                  R                  U R                  5        U R                  R
                  b  [        U R                  R                  U R                  U R                  R
                  5        [        U R                  R                  U R                  U R                  R
                  5        [        R                  " 5       U R                  l        OT[        U R                  R                  U R                  5        [        U R                  R                  U R                  5        [        R                  " 5       U l        [        U R                  R                  U R                  5        [        R                  " 5       U l        SU l         g g r   )r   rD   r   r   r   rW   r   rp   r	   r}   r   r   r   r   s    rC   r   #NextTransformerBlock.reparameterize  s    }}}

3{{+T[[]]DJJ8H8HIT[[]]DJJ8H8HI#%;;= T[[]]DJJ7T[[]]DJJ7DJtzz2DJ DM rE   c                 ,   U R                  U5      nUR                  u  p#pEU R                  U5      nUR                  X#S5      R	                  SS5      nU R                  U R                  U5      5      nXR	                  SS5      R                  X#XE5      -   nU R                  U5      nX`R                  U R                  U5      5      -   n[        R                  " X/SS9nU R                  U5      nXR                  U R                  U5      5      -   nU$ )Nr   r   r   r   )r   r8   r   r9   r   r   r   r   r   r   r%   catr   r   r   )rY   r`   r   r   HWr   s          rC   ra   NextTransformerBlock.forward  s    QWW
ajjmkk!#--b"5!!$++c"23b"%--aA99ooa ''		#77IIqhA&jjm""488C=11rE   )r   rI   r   r   r   r   r   r   r   r   r   r   r   r'   r   r   r   rm   s   @rC   r   r   @  s      %)!*,..)+?? ? 	?
 ? ? ? ? #? ? ? RYY? BII? ?B ]]_! !  rE   r   c                   V  ^  \ rS rSrSSSSSSS\R
                  \R                  SS4S\S	\\   S
\\	\R                        S\S\S\S\S\S\\\\   \\S4   4   S\S\	\R                     S\	\R                     4U 4S jjjr\R                   R"                  SS j5       rS rSrU =r$ )	NextStagei  r    r         ?r   r   NrI   	block_chsblock_typesrK   r   r   r   r   r   .r   rM   rN   c                   > XS.n[         TU ]  5         SU l        / n[        U5       H  u  nnUS:X  a  UOSnUU   nUU   n[	        U	[
        [        45      (       a  U	U   OU	nU[        L a&  [        UU4UUUU
UUS.UD6nUR                  U5        O1U[        L a(  [        UU4UUUU
UUUUUS.	UD6nUR                  U5        UnM     [        R                  " U6 U l        g )NrP   Fr   r   )rK   r   r   r   rM   rN   )	r   rK   r   r   r   r   r   rM   rN   )rT   rU   grad_checkpointing	enumerater1   listtupler   appendr   r	   
Sequentialblocks)rY   rI   r   r   rK   r   r   r   r   r   r   rM   rN   r   rQ   rZ   r   	block_idx
block_typer'   dprlayerr[   s                         rC   rU   NextStage.__init__  s,   " /"'%.{%;!Iz(A~V1F	*G$Y/J*4Yu*N*N)I&T]C]*%
 "!%)'
 
 e$33, "!%%$3')'  e$FE &<H mmV,rE   c                     Xl         g r^   )r   )rY   enables     rC   set_grad_checkpointing NextStage.set_grad_checkpointing  s    "(rE   c                     U R                   (       a;  [        R                  R                  5       (       d  [	        U R
                  U5      nU$ U R                  U5      nU$ r^   )r   r%   r   is_scriptingr   r   r_   s     rC   ra   NextStage.forward  sH    ""599+A+A+C+Ct{{A.A  AArE   )r   r   T)rc   rd   re   rf   r	   rg   rh   ri   r   r   rj   r   r   r   rU   r%   r   ignorer   ra   rk   rl   rm   s   @rC   r   r     s    %(!FH*,..)+:-:- Cy:- d299o.	:-
 :- :- #:- :- :- UDKucz1BBC:- :- RYY:- BII:- :-x YY) ) rE   r   c                     ^  \ rS rSrSSSSSSSS	S	S
S\R
                  SSS4S\S\S\S\\S4   S\\S4   S\\S4   S\\S4   S\	S\	S\	S\S\	S\
\R                     S\\
\R                        4U 4S jjjrS r\R                   R"                  S2S j5       r\R                   R"                  S3S j5       r\R                   R"                  S \R                  4S! j5       rS4S\S\\   4S" jjr     S5S#\R,                  S$\\\\\   4      S%\S&\S'\S(\S \\\R,                     \\R,                  \\R,                     4   4   4S) jjr   S6S$\\\\   4   S*\S+\4S, jjrS- rS2S.\4S/ jjrS0 rS1rU =r $ )7r   i    avg)@   r   r  r!      
   r!   )r   r    r    r    )   r	  r    r   皙?r   r   r   Nin_chansnum_classesglobal_poolstem_chs.depthsstrides	sr_ratiosdrop_path_rateattn_drop_rate	drop_rater   r   rM   rN   c                   > [         TU ]  5         UUS.nSU l        X l        Xl        [        U5      nUc  [        [        R                  SS9nO[        U5      nS/US   -  S/US   S-
  -  S	/-   / S
QUS   S-  -  S/US   S-
  -  S/-   /U l
        [        U R                  5       VVs/ s H  u  nn[        US   SUS-   -  SU 3S9PM     snnU l        [        /US   -  [        /US   S-
  -  [        /-   [        [        [        [        [        /US   S-  -  [        /US   S-
  -  [        /-   /U l        [        R"                  " [%        XS   4SSXS.UD6[%        US   US   4SSXS.UD6[%        US   US   4SSXS.UD6[%        US   US   4SSXS.UD65      U l        US   =nn/ nSn[)        XSS9n[+        [-        U5      5       H`  n[/        SUU R                  U   U R                   U   UU   UU   UUU
U	UU   UUS.UD6nU R                  U   S   =nnUU/-  nUUU   -  nMb     U=U l        U l        [        R"                  " U6 U l        U" U40 UD6U l        [9        SUUUS.UD6U l        [+        [-        U5      5       Vs/ s H  n[=        US US-    5      S-
  PM     snU l        U RA                  5         g s  snnf s  snf )NrP   FT)inplace`   r      r      )  r  r  r  i   r       i   r!   i   r   zstages.)num_chs	reductionr;   )rJ   rK   rM   rN   )	stagewise)rI   r   r   rK   r   r   r   r   r   r   rM   rN   )	pool_typein_featuresr   )!rT   rU   r   r  r  r   r   r	   rh   r   stage_out_chsr   dictfeature_infor   r   stage_block_typesr   rG   stemr   rangelenr   num_featureshead_hidden_sizestagesrW   r   headsumstage_out_idx_initialize_weights)rY   r  r  r  r  r  r  r  r  r  r  r   r   rM   rN   r   rQ   rZ   iscrI   r'   r-  idxr   	stage_idxstager[   s                              rC   rU   NextViT.__init__  s   & 	/"'& #J/
6I%i0I DF1IEVAY]#se+%a8EVAY]#tf,	
 !!3!34	6 5ea	 "rF!a%jQC=
 5	6 OfQi'Ovay1}-1E0FFM=-I]^bhijbkopbpqOvay1}-1E0FF	"H MM1+r34Q:rnprXa[u67juqsuXa[u67juqsuXa[u67juqsu	
	 $B<''$Os6{+I ,,Y7 229=y)"9- /!(i.%# E  $11)<R@@FWugF6)$$C% ,& 5<;D1mmV,w-"-	"m[g[fmjlm	CHVCUVCUCc&#'"23a7CUV  "i6f Ws   +$KKc                 >   U R                  5        GH  u  p[        U[        R                  5      (       ab  [	        UR
                  SS9  [        US5      (       a;  UR                  b,  [        R                  R                  UR                  S5        M  M  M  [        U[        R                  5      (       d  M  [	        UR
                  SS9  [        US5      (       d  M  UR                  c  M  [        R                  R                  UR                  S5        GM     g )Ng{Gz?)stdr$   r   )named_modulesr1   r	   r2   r   r"   hasattrr$   init	constant_r7   )rY   nms      rC   r1  NextViT._initialize_weightsN  s    &&(DA!RYY''ahhC01f%%!&&*<GG%%affa0 +=%Aryy))ahhC01f%%!&&*<GG%%affa0 )rE   c                 0    [        SU(       a  SS9$ SS/S9$ )Nz^stemz^stages\.(\d+))z^stages\.(\d+)\.blocks\.(\d+)N)z^norm)i )r(  r   )r%  )rY   coarses     rC   group_matcherNextViT.group_matcherY  s/    (.$
 	
 9$5
 	
rE   c                 T    Xl         U R                   H  nUR                  US9  M     g )N)r   )r   r-  r   )rY   r   r6  s      rC   r   NextViT.set_grad_checkpointingc  s'    "([[E(((7 !rE   returnc                 .    U R                   R                  $ r^   )r.  fcr   s    rC   get_classifierNextViT.get_classifieri  s    yy||rE   c                 B    Xl         U R                  R                  XS9  g )N)r!  )r  r.  reset)rY   r  r  s      rC   reset_classifierNextViT.reset_classifierm  s    &		;rE   r`   indicesrW   
stop_early
output_fmtintermediates_onlyc                    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       H  u  pU R                  (       a/  [        R
                  R                  5       (       d  [        X5      nOU" U5      nX;   d  MT  X:X  a-  U(       a  U R                  U5      OUnUR                  U5        M  UR                  U5        M     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(  r%   r   r   r   r   r   rW   r   )rY   r`   rP  rW   rQ  rR  rS  intermediatestake_indices	max_indexlast_idxr-  feat_idxr6  x_inters                  rC   forward_intermediatesNextViT.forward_intermediatesq  s*   * Y&D(DD&"6s4;;7G"Q IIaLt{{#a'99!!##:[[F[[)a-0F(0OH&&uyy/E/E/G/Gu(!H''.2diilG!((1!((+  1   x		!ArE   
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}   rW   rN  )rY   rP  r^  r_  rW  rX  s         rC   prune_intermediate_layers!NextViT.prune_intermediate_layers  s[     #7s4;;7G"Qkk.9q=1DI!!!R(rE   c                    U R                  U5      nU R                  (       a:  [        R                  R	                  5       (       d  [        U R                  U5      nOU R                  U5      nU R                  U5      nU$ r^   )r(  r   r%   r   r   r   r-  rW   r_   s     rC   forward_featuresNextViT.forward_features  sY    IIaL""599+A+A+C+Ct{{A.AAAIIaLrE   
pre_logitsc                 P    U(       a  U R                  XS9$ U R                  U5      $ )N)rg  )r.  )rY   r`   rg  s      rC   forward_headNextViT.forward_head  s#    6@tyyy2RdiiPQlRrE   c                 J    U R                  U5      nU R                  U5      nU$ r^   )re  ri  r_   s     rC   ra   NextViT.forward  s'    !!!$a rE   )r&  r   r.  r,  r  rW   r  r+  r'  r$  r0  r-  r(  Fr  r^   )NFFrU  F)r   FT)!rc   rd   re   rf   r	   rg   ri   strr   r   r   rj   r   rU   r1  r%   r   r  rC  r   rJ  rN  Tensorr   r   r   r\  rb  re  ri  ra   rk   rl   rm   s   @rC   r   r     s     $$(4&3'3)5$'$&!%)*,..37#X#X# X# 	X#
 CHoX# #s(OX# 38_X# S#XX# "X# "X# X# X# #X# RYYX#  RYY0X# X#t	1 YY
 
 YY8 8
 YY		  <C <hsm < 8<$$',3 ||3  eCcN343  	3 
 3  3  !%3  
tELL!5tELL7I)I#JJ	K3 n ./$#	3S	>*  	 S$ S rE   c                     SU ;   a  U $ UR                  5       n0 n[        UR                  5       U R                  5       UR                  5       U R                  5       5       H
  u  pEpgXsU'   M     U$ )z#Remap original checkpoints -> timm zhead.fc.weight)
state_dictzipkeysvalues)rq  modelDout_dictkakbvavbs           rC   checkpoint_filter_fnr|    sg    :%AHaffh
(9188:zGXGXGZ[ \ OrE   c           	          [        S [        UR                  SS5      5       5       5      nUR                  SU5      n[	        [
        U U4[        [        SUS9S.UD6nU$ )Nc              3   *   #    U  H	  u  pUv   M     g 7fr^   r#  ).0r2  _s      rC   	<genexpr>"_create_nextvit.<locals>.<genexpr>  s     \.[da.[s   r  )r   r   r!   r   out_indicesT)flatten_sequentialr  )pretrained_filter_fnfeature_cfg)r   r   getpopr   r   r|  r%  )variant
pretrainedkwargsdefault_out_indicesr  ru  s         rC   _create_nextvitr    sl    \i

8\8Z.[\\**],?@K  2DkJ E LrE   c                 2    U SSSSS[         [        SSSS	.UE$ )
Nr  )r!      r  )   r  gffffff?bicubiczstem.0.convzhead.fcz
apache-2.0)urlr  
input_size	pool_sizecrop_pctinterpolationmeanr9  
first_conv
classifierlicenser
   )r  r  s     rC   _cfgr    s3    =v9%.B#9  rE   ztimm/)	hf_hub_id)r!   r  r  )   r  r   )r  r  r  r  )znextvit_small.bd_in1kznextvit_base.bd_in1kznextvit_large.bd_in1kznextvit_small.bd_in1k_384znextvit_base.bd_in1k_384znextvit_large.bd_in1k_384znextvit_small.bd_ssld_6m_in1kznextvit_base.bd_ssld_6m_in1kznextvit_large.bd_ssld_6m_in1kz!nextvit_small.bd_ssld_6m_in1k_384z nextvit_base.bd_ssld_6m_in1k_384z!nextvit_large.bd_ssld_6m_in1k_384c           	      J    [        SSS9n[         SSU 0[        U40 UD6D6nU$ )Nr  r  r  r  r  )nextvit_smallr%  r  r  r  
model_argsru  s       rC   r  r     =    ]3?JN$.N26z2LV2LNELrE   c           	      J    [        SSS9n[         SSU 0[        U40 UD6D6nU$ )N)r!   r	     r!   皙?r  r  )nextvit_baser  r  s       rC   r  r  (  s=    ]3?JM#-M15j1KF1KMELrE   c           	      J    [        SSS9n[         SSU 0[        U40 UD6D6nU$ )N)r!   r	     r!   r  r  r  )nextvit_larger  r  s       rC   r  r  0  r  rE   r^   rm  )ra  )7r   	functoolsr   typingr   r   r   r   r   r%   torch.nn.functionalr	   
functionalr   	timm.datar   r   timm.layersr   r   r   r   r   r   r   r   _builderr   	_featuresr   _manipulater   r   	_registryr   r   __all__rD   rj   rG   rt   rv   r   r   r   r   r   r   r|  r  r  default_cfgsr  r  r  r#  rE   rC   <module>r     s    5 5     A C  C  C & * + 3 <+,^ "))  F2 2:#BII #J<BII <~F FRf299 fRG		 GTRbii Rj	 %! ! " "& Hs" !% Hs! "& Hs"
 &*& %)% &*& *. Hs* )- Hs) *. Hs*Q,& ,^      rE   