
    ^jl                     v   d Z ddlmZ ddlmZmZmZmZmZ ddl	Z	ddl
mc m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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	dl!m"Z"m#Z# dgZ$d-dZ% G d dejL                        Z'd-dZ( G d dejL                        Z) G d dejL                        Z* G d dejL                        Z+ G d dejL                        Z, G d dejL                        Z- G d dejL                        Z. G d dejL                        Z/d  Z0d.d!Z1d/d"Z2 e" e2d#$       e2d#$       e2d#$       e2d#d%d&d'(       e2d#d%d&d'(       e2d#d%d&d'(       e2d#$       e2d#$       e2d#$       e2d#d%d&d'(       e2d#d%d&d'(       e2d#d%d&d'(      d)      Z3e#d.d*       Z4e#d.d+       Z5e#d.d,       Z6y)0z Next-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                    | j                   j                  }| j                  bt        j                  | j
                  |j                        j                  |j                               }t        j                  |      | _        | j                  j                  }||j                  du sJ d       |j                  du sJ d       |j                  j                  |j                        j                  d      }||j                   z  }|j                  |j                   |j                   z  |z  z
  }n.|j                  du sJ d       |j                  du sJ d       |j                  du sJ d       |j                  du sJ d       |j                  j                  |j                        j                  d      }	|j                  j                  |j                        j                  d      }
|	|j                   z  |
z  |j                   z  }|
|j                   z  |j                  |j                   |j                   z  |	z  z
  |j                   z
  z  |j                  z   }t#        | t        j$                        rE||z  }|j'                  |j)                  d|j+                  d            j-                  |             nt#        | t        j.                        r|j0                  d   dk(  r|j0                  d	   dk(  sJ |j3                  |j0                  d
   |j0                  d         }||z  }|j'                  |j)                  d|j+                  d            j-                  |             |j3                  |j0                  d
   |j0                  d   dd      }|j5                  |       || j                   _        || j                  _        y)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              ^/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/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#hoo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--  	 &"))$j(
L%%aQ8BB6JK	FBII	&||A!#Q1(<<<QaAj(
L%%aQ8BB6JKQa!QGIIjFMMFKK    c                        e Zd Zdddej                  ej
                  ddfdededededed	eej                     d
eej                     f fdZ	d Z
 xZS )ConvNormActr!   r   Nin_chsr'   kernel_sizestridegroups
norm_layer	act_layerc
           	          ||	d}
t         |           t        j                  ||f||d|dd|
| _         ||fi |
| _         |       | _        y )Nr   dtyper   FrI   rJ   paddingrK   r$   )super__init__r	   r7   convnormact)selfrH   r'   rI   rJ   rK   rL   rM   r   rP   dd	__class__s              rC   rT   zConvNormAct.__init__J   sl     /II	
 $	
 	
	 w-"-	;rE   c                 l    | j                  |      }| j                  |      }| j                  |      }|S N)rU   rV   rW   rX   xs     rC   forwardzConvNormAct.forwarde   s.    IIaLIIaLHHQKrE   )__name__
__module____qualname__r	   BatchNorm2dReLUintr   ModulerT   r_   __classcell__rZ   s   @rC   rG   rG   I   s    
  !*,..)+  	
   RYY BII6rE   rG   c                 j    ||}t        |t        | |dz  z         |z  |z        }|d| z  k  r||z  }|S )Nr    g?)maxre   )vdivisor	min_valuenew_vs       rC   _make_divisiblero   l   sJ    		3q7Q;/7:WDEEsQwLrE   c            
       n     e Zd Zdej                  ddfdedededeej                     f fdZd Z	 xZ
S )	
PatchEmbedr   NrH   r'   rJ   rL   c                     ||d}t         |           |dk(  rMt        j                  dddd      | _        t        j
                  ||fdddd|| _         ||fi || _        y ||k7  rHt        j                         | _        t        j
                  ||fdddd|| _         ||fi || _        y t        j                         | _        t        j                         | _        t        j                         | _        y )	NrO   r    )r    r    TF)rJ   	ceil_modecount_include_padr   )rI   rJ   r$   )	rS   rT   r	   	AvgPool2dpoolr7   rU   rV   Identity)	rX   rH   r'   rJ   rL   r   rP   rY   rZ   s	           rC   rT   zPatchEmbed.__init__w   s     /Q;VAY^_DI		&']qQV]Z\]DI"71b1DIwDI		&']qQV]Z\]DI"71b1DIDIDIDIrE   c                 `    | j                  | j                  | j                  |                  S r\   )rV   rU   rv   r]   s     rC   r_   zPatchEmbed.forward   s"    yy499Q<011rE   )r`   ra   rb   r	   rc   re   r   rf   rT   r_   rg   rh   s   @rC   rq   rq   v   sM    
 *,..&& & 	&
 RYY&02rE   rq   c            
            e Zd ZdZej
                  ej                  ddfdededeej                     deej                     f fdZ
d Z xZS )	ConvAttentionz,
    Multi-Head Convolutional Attention
    Nr'   head_dimrL   rM   c           	          ||d}t         |           t        j                  ||fddd||z  dd|| _         ||fi || _         |       | _        t        j                  ||fddd|| _        y )NrO   r!   r   FrQ   )rI   r$   )rS   rT   r	   r7   group_conv3x3rV   rW   
projection)	rX   r'   r{   rL   rM   r   rP   rY   rZ   s	           rC   rT   zConvAttention.__init__   s     /YY	
 h&	
 	
 w-"-	;))GWV!%VSUVrE   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }|S r\   )r}   rV   rW   r~   rX   r^   outs      rC   r_   zConvAttention.forward   s?      #iinhhsmooc"
rE   )r`   ra   rb   __doc__r	   rc   rd   re   r   rf   rT   r_   rg   rh   s   @rC   rz   rz      sc     +-..)+WW W RYY	W
 BIIW2rE   rz   c                        e Zd ZdZdddddej
                  ej                  ddf	deded	ed
edededede	ej                     de	ej                     f fdZ ej                         d        Zd Z xZS )NextConvBlockz 
    Next Convolution Block
    r               g      @NrH   r'   rJ   	drop_pathdropr{   	mlp_ratiorL   rM   c                 ^   |
|d}t         |           || _        || _        ||z  dk(  sJ t	        |||fd|i|| _        t        ||f||	d|| _        t        |      | _	         ||fi || _
        t        |ft        ||z        |d|	d|| _        t        |      | _        d| _        y )NrO   r   rL   )rL   rM   T)hidden_featuresr   r$   rM   F)rS   rT   rH   r'   rq   patch_embedrz   mhcar   attn_drop_pathrV   r   re   mlpmlp_drop_pathis_fused)rX   rH   r'   rJ   r   r   r{   r   rL   rM   r   rP   rY   rZ   s                rC   rT   zNextConvBlock.__init__   s     /!Q&&&%fgv[*[XZ[!
 "	

 
	 'y1w-"-	
) 34
 
 &i0rE   c                     | j                   sKt        | j                  j                  | j                         t        j                         | _        d| _         y y NT)r   rD   r   fc1rV   r	   rw   rX   s    rC   reparameterizezNextConvBlock.reparameterize   s8    }}tyy1DI DM rE   c                     | j                  |      }|| j                  | j                  |            z   }| j                  |      }|| j	                  | j                  |            z   }|S r\   )r   r   r   rV   r   r   r   s      rC   r_   zNextConvBlock.forward   s^    Q##DIIaL11iil""488C=11rE   r`   ra   rb   r   r	   rc   rd   re   floatr   rf   rT   r%   no_gradr   r_   rg   rh   s   @rC   r   r      s     !!*,..)+(( ( 	(
 ( ( ( ( RYY( BII(T U]]_! !rE   r   c                        e Zd ZU dZej
                  j                  e   ed<   dddddde	j                  ddf	ded	ee   d
edededededee	j                     f fdZd Z xZS )EfficientAttentionz-
    Efficient Multi-Head Self Attention
    
fused_attnNr   Tr   r   dimout_dimr{   qkv_bias	attn_drop	proj_dropsr_ratiorL   c                 6   |	|
d}t         |           || _        ||n|| _        | j                  |z  | _        || _        |dz  | _        t               | _        t        j                  || j                  fd|i|| _        t        j                  || j                  fd|i|| _        t        j                  || j                  fd|i|| _        t        j                  | j                  | j                  fi || _        t        j                  |      | _        t        j                  |      | _        || _        |dz  | _        |dkD  r?t        j(                  | j&                  | j&                        | _         ||fi || _        y d | _        d | _        y )NrO   r   r$   r    r   )rI   rJ   )rS   rT   r   r   	num_headsr{   scaler   r   r	   r2   qkrk   projDropoutr   r   r   N_ratio	AvgPool1dsrrV   )rX   r   r   r{   r   r   r   r   rL   r   rP   rY   rZ   s               rC   rT   zEfficientAttention.__init__   sM    /")"5w3X- %
(*3>x>2>3>x>2>3>x>2>IIdhh;;	I.I. 1}a<llt||DLLQDG"3-"-DIDGDIrE   c                 "   |j                   \  }}}| j                  |      j                  ||| j                  | j                        j                  dddd      }| j                  B| j                  |j                  dd            }| j                  |      j                  dd      }| j                  |      j                  |d| j                  | j                        j                  dd      }| j                  |      j                  |d| j                  | j                        j                  dd      }| j                  r<t        j                  |||| j                  r| j                  j                   nd      }nL|| j"                  z  }||j                  dd      z  }|j%                  d	      }| j                  |      }||z  }|j                  dd      j                  |||      }| j'                  |      }| j)                  |      }|S )
Nr   r    r   r!   r   )	dropout_pr   )r8   r   r9   r   r{   permuter   	transposerV   r   rk   r   Fscaled_dot_product_attentiontrainingr   pr   softmaxr   r   )	rX   r^   BNCr   r   rk   attns	            rC   r_   zEfficientAttention.forward#  s   ''1aFF1IaDNNDMM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??..1a.2mm$..**A
 DJJAq{{2r**D<<B<'D>>$'DqAKK1%%aA.IIaLNN1rE   )r`   ra   rb   r   r%   jitFinalbool__annotations__r	   BatchNorm1dre   r   r   r   rf   rT   r_   rg   rh   s   @rC   r   r      s     		%%
 &*!!!*,..$$ c]$ 	$
 $ $ $ $ RYY$LrE   r   c                        e Zd ZdZdddddddej
                  ej                  ddfded	ed
edededededededede	ej                     de	ej                     f fdZ ej                         d        Zd Z xZS )NextTransformerBlockz 
    Next Transformer Block
    r   r    r         ?r   NrH   r'   r   rJ   r   r   r{   mix_block_ratior   r   rL   rM   c                    ||d}t         |           || _        || _        || _        t        t        ||z        d      | _        || j                  z
  | _        t        || j                  |fi || _
         || j                  fi || _        t        | j                  f|||	|
d|| _        t        ||z        | _        t        | j                  | j                  fd|d|| _        t#        | j                  f|||d|| _        t        |d|z
  z        | _         ||fi || _        t+        |ft        ||z        ||
d|| _        t        |      | _        d| _        y )	NrO   r   )r{   r   r   r   r   )rJ   rL   )r{   rL   rM   )r   rM   r   F)rS   rT   rH   r'   r   ro   re   mhsa_out_chsmhca_out_chsrq   r   norm1r   e_mhsar   mhsa_drop_pathr~   rz   r   mhca_drop_pathnorm2r   r   r   r   )rX   rH   r'   r   rJ   r   r   r{   r   r   r   rL   rM   r   rP   rY   rZ   s                   rC   rT   zNextTransformerBlock.__init__E  s   " /.+C/0I,JBO#d&7&77%fd.?.?N2N 1 18R8
(

 
 'y?'BC$
 !	

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

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

 
 &i0rE   c                 R   | j                   st        | j                  j                  | j                         | j                  j
                  t        | j                  j                  | j                  | j                  j
                         t        | j                  j                  | j                  | j                  j
                         t        j                         | j                  _        nTt        | j                  j                  | j                         t        | j                  j                  | j                         t        j                         | _        t        | j                  j                  | j                         t        j                         | _        d| _         y y r   )r   rD   r   r   r   rV   r   rk   r	   rw   r   r   r   r   s    rC   r   z#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                 B   | j                  |      }|j                  \  }}}}| j                  |      }|j                  ||d      j	                  dd      }| j                  | j                  |            }||j	                  dd      j                  ||||      z   }| j                  |      }|| j                  | j                  |            z   }t        j                  ||gd      }| j                  |      }|| j                  | j                  |            z   }|S )Nr   r   r   r   )r   r8   r   r9   r   r   r   r~   r   r   r%   catr   r   r   )rX   r^   r   r   HWr   s          rC   r_   zNextTransformerBlock.forward  s    QWW
1ajjmkk!Q#--b"5!!$++c"23b"%--aAq99ooa D''		#77IIq#hA&jjm""488C=11rE   r   rh   s   @rC   r   r   @  s      %)!*,..)+?? ? 	?
 ? ? ? ? #? ? ? RYY? BII?B U]]_! ! rE   r   c                   F    e Zd Zdddddddej                  ej
                  ddfdedee   d	eeej                        d
edede
de
de
dee
ee
   ee
df   f   dedeej                     deej                     f fdZej                  j                   dd       Zd Z xZS )	NextStager    r         ?r   r   NrH   	block_chsblock_typesrJ   r   r   r   r   r   .r{   rL   rM   c                    ||d}t         |           d| _        g }t        |      D ]  \  }}|dk(  r|nd}||   }||   }t	        |	t
        t        f      r|	|   n|	}|t        u r&t        ||f||||
||d|}|j                  |       n0|t        u r(t        ||f||||
|||||d	|}|j                  |       |} t        j                  | | _        y )NrO   Fr   r   )rJ   r   r   r{   rL   rM   )	r   rJ   r   r{   r   r   r   rL   rM   )rS   rT   grad_checkpointing	enumerater1   listtupler   appendr   r	   
Sequentialblocks)rX   rH   r   r   rJ   r   r   r   r   r   r{   rL   rM   r   rP   rY   r   	block_idx
block_typer'   dprlayerrZ   s                         rC   rT   zNextStage.__init__  s0   " /"'%.{%; "	!Iz(A~V1F	*G$Y/J*4Yu*N)I&T]C]*%
 "!%)'
 
 e$33, "!%%$3')'  e$FE"	H mmV,rE   c                     || _         y r\   )r   )rX   enables     rC   set_grad_checkpointingz NextStage.set_grad_checkpointing  s
    "(rE   c                     | j                   r6t        j                  j                         st	        | j
                  |      }|S | j                  |      }|S r\   )r   r%   r   is_scriptingr   r   r]   s     rC   r_   zNextStage.forward  sE    ""599+A+A+Ct{{A.A  AArE   T)r`   ra   rb   r	   rc   rd   re   r   r   rf   r   r   r   rT   r%   r   ignorer   r_   rg   rh   s   @rC   r   r     s    %(!FH*,..)+:-:- Cy:- d299o.	:-
 :- :- #:- :- :- UDKucz1BBC:- :- RYY:- BII:-x YY) )rE   r   c                       e Zd Zdddddddddd	d
ej                  dddfdedededeedf   deedf   deedf   deedf   dededededede	ej                     dee	ej                        f fdZd Zej                  j                   d0d       Zej                  j                   d1d       Zej                  j                   dej                  fd        Zd2dedee   fd!Z	 	 	 	 	 d3d"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	 	 	 d4d#eeee   f   d)ed*efd+Zd, Zd0d-efd.Zd/ Z xZS )5r     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   rL   rM   c                    t         |           ||d}d| _        || _        || _        t        |      }|t        t        j                  d      }nt        |      }dg|d   z  dg|d   dz
  z  d	gz   g d
|d   dz  z  dg|d   dz
  z  dgz   g| _
        t        | j                        D cg c]  \  }}t        |d   d|dz   z  d|       ! c}}| _        t        g|d   z  t        g|d   dz
  z  t        gz   t        t        t        t        t        g|d   dz  z  t        g|d   dz
  z  t        gz   g| _        t        j"                  t%        ||d   fdd||d|t%        |d   |d   fdd||d|t%        |d   |d   fdd||d|t%        |d   |d   fdd||d|      | _        |d   x}}g }d}t)        ||d      }t+        t-        |            D ]_  }t/        d|| j                  |   | j                   |   ||   ||   |||
|	||   ||d|}| j                  |   d   x}}||gz  }|||   z  }a |x| _        | _        t        j"                  | | _         ||fi || _        t9        d|||d|| _        t+        t-        |            D cg c]  }t=        |d |dz          dz
   c}| _        | jA                          y c c}}w c c}w )NrO   FT)inplace`   r      r      )  r  r  r  i   r       i   r!   i   r   zstages.)num_chs	reductionr;   )rI   rJ   rL   rM   )	stagewise)rH   r   r   rJ   r   r   r{   r   r   r   rL   rM   )	pool_typein_featuresr    )!rS   rT   r   r   r   r   r   r	   rd   r   stage_out_chsr   dictfeature_infor   r   stage_block_typesr   rG   stemr   rangelenr   num_featureshead_hidden_sizestagesrV   r   headsumstage_out_idx_initialize_weights)rX   r   r   r   r   r   r   r   r   r   r   r{   r   rL   rM   r   rP   rY   iscrH   r'   r  idxr   	stage_idxstagerZ   s                              rC   rT   zNextViT.__init__  s   & 	/"'& #J/
6I%i0I DF1IEVAY]#se+%a8EVAY]#tf,	
 !!3!34	6 a	 "rF!a%jQC=
 6 OfQi'Ovay1}-1E0FFM=-I]^bhijbkopbpqOvay1}-1E0FF	"H MM(1+r34Q:ajrnprXa[u67jdmuqsuXa[u67jdmuqsuXa[u67jdm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VCc&#'"23a7V  "i6f Ws   /$KKc                    | j                         D ]  \  }}t        |t        j                        r\t	        |j
                  d       t        |d      sD|j                  Qt        j                  j                  |j                  d       |t        |t        j                        st	        |j
                  d       t        |d      s|j                  t        j                  j                  |j                  d        y )Ng{Gz?)stdr$   r   )named_modulesr1   r	   r2   r   r"   hasattrr$   init	constant_r7   )rX   nms      rC   r  zNextViT._initialize_weightsN  s    &&( 	1DAq!RYY'ahhC01f%!&&*<GG%%affa0Aryy)ahhC01f%!&&*<GG%%affa0	1rE   c                 2    t        d|rd      S ddg      S )Nz^stemz^stages\.(\d+))z^stages\.(\d+)\.blocks\.(\d+)N)z^norm)i )r  r   )r  )rX   coarses     rC   group_matcherzNextViT.group_matcherY  s/    (.$
 	
 9$5
 	
rE   c                 X    || _         | j                  D ]  }|j                  |        y )N)r   )r   r  r   )rX   r   r  s      rC   r   zNextViT.set_grad_checkpointingc  s.    "([[ 	8E(((7	8rE   returnc                 .    | j                   j                  S r\   )r  fcr   s    rC   get_classifierzNextViT.get_classifieri  s    yy||rE   c                 L    || _         | j                  j                  ||       y )N)r	  )r   r  reset)rX   r   r   s      rC   reset_classifierzNextViT.reset_classifierm  s    &		{;rE   r^   indicesrV   
stop_early
output_fmtintermediates_onlyc                    |dv sJ d       g }t        t        | j                        |      \  }}	| j                  |      }t        | j                        dz
  }
t        j
                  j                         s|s| j                  }n| j                  d|	dz    }t        |      D ]  \  }}| j                  r+t        j
                  j                         st        ||      }n ||      }||v sJ||
k(  r'|r| j                  |      n|}|j                  |       v|j                  |        |r|S |
k(  r| j                  |      }||fS )a   Forward features that returns intermediates.

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

        )NCHWzOutput shape must be NCHW.r   N)r   r  r  r  r%   r   r   r   r   r   rV   r   )rX   r^   r2  rV   r3  r4  r5  intermediatestake_indices	max_indexlast_idxr  feat_idxr  x_inters                  rC   forward_intermediateszNextViT.forward_intermediatesq  s5   * Y&D(DD&"6s4;;7G"Qi IIaLt{{#a'99!!#:[[F[[)a-0F(0 
	,OHe&&uyy/E/E/Gua(!H<'x'.2diilG!((1!((+
	,   x		!A-rE   
prune_norm
prune_headc                     t        t        | j                        |      \  }}| j                  d|dz    | _        |rt        j                         | _        |r| j                  dd       |S )z@ Prune layers not required for specified intermediates.
        Nr   r    )r   r  r  r	   rw   rV   r1  )rX   r2  r?  r@  r9  r:  s         rC   prune_intermediate_layersz!NextViT.prune_intermediate_layers  s]     #7s4;;7G"Qikk.9q=1DI!!!R(rE   c                     | j                  |      }| j                  r5t        j                  j	                         st        | j                  |      }n| j                  |      }| j                  |      }|S r\   )r  r   r%   r   r   r   r  rV   r]   s     rC   forward_featureszNextViT.forward_features  sV    IIaL""599+A+A+Ct{{A.AAAIIaLrE   
pre_logitsc                 N    |r| j                  ||      S | j                  |      S )N)rF  )r  )rX   r^   rF  s      rC   forward_headzNextViT.forward_head  s%    6@tyyzy2RdiiPQlRrE   c                 J    | j                  |      }| j                  |      }|S r\   )rE  rH  r]   s     rC   r_   zNextViT.forward  s'    !!!$a rE   Fr   r\   )NFFr7  F)r   FT)r`   ra   rb   r	   rc   re   strr   r   r   rf   r   rT   r  r%   r   r   r)  r   r.  r1  Tensorr   r   r   r>  rC  rE  rH  r_   rg   rh   s   @rC   r   r     sw     $$(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#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                     d| v r| S |j                         }i }t        |j                         | j                         |j                         | j                               D ]  \  }}}}|||<    |S )z$ Remap original checkpoints -> timm zhead.fc.weight)
state_dictzipkeysvalues)rN  modelDout_dictkakbvavbs           rC   checkpoint_filter_fnrY    sq    :%AHaffh
(9188:zGXGXGZ[ BB OrE   c           	          t        d t        |j                  dd            D              }|j                  d|      }t	        t
        | |ft        t        d|      d|}|S )Nc              3   &   K   | ]	  \  }}|  y wr\   r  ).0r  _s      rC   	<genexpr>z"_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   rY  r  )variant
pretrainedkwargsdefault_out_indicesr_  rR  s         rC   _create_nextvitri    sl    \i

8\8Z.[\\**],?@K  2DkJ E LrE   c                 2    | dddddt         t        dddd	|S )
Nr   )r!      rk  )   rl  gffffff?bicubiczstem.0.convzhead.fcz
apache-2.0)urlr   
input_size	pool_sizecrop_pctinterpolationmeanr   
first_conv
classifierlicenser
   )rn  rg  s     rC   _cfgrw    s3    =v9%.B#9  rE   ztimm/)	hf_hub_id)r!   r  r  )   ry  r   )rx  ro  rp  rq  )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           	      P    t        dd      }t        	 dd| it        |fi |}|S )Nr   r   r   r   rf  )nextvit_smallr  ri  rf  rg  
model_argsrR  s       rC   r|  r|     =    ]3?JN$.N26z2LV2LNELrE   c           	      P    t        dd      }t        	 dd| it        |fi |}|S )N)r!   r      r!   皙?r{  rf  )nextvit_baser}  r~  s       rC   r  r  (  s=    ]3?JM#-M15j1KF1KMELrE   c           	      P    t        dd      }t        	 dd| it        |fi |}|S )N)r!   r      r!   r  r{  rf  )nextvit_larger}  r~  s       rC   r  r  0  r  rE   r\   rJ  )rB  )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   rf   rG   ro   rq   rz   r   r   r   r   r   rY  ri  rw  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   