
    RЦi9R                     X   S r SSKJr  SSKJrJrJrJrJrJ	r	  SSK
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/r" " S S\RF                  5      r$ " S S\RF                  5      r%S\&4S jr' " S S\RF                  5      r( " S S\RR                  5      r* " S S\RF                  5      r+S+S jr,S r-S,S jr.S-S jr/\!" \/" SS9\/" SS9\/" S S9\/" S!S9\/" S"S#SS$S%9S&.5      r0\ S,S' j5       r1\ S,S( j5       r2\ S,S) j5       r3\ S,S* j5       r4g).z?
RDNet
Copyright (c) 2024-present NAVER Cloud Corp.
Apache-2.0
    )partial)ListOptionalTupleUnionCallableTypeNIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)DropPathcalculate_drop_path_ratesNormMlpClassifierHeadClassifierHeadEffectiveSEModulemake_divisibleget_act_layerget_norm_layer   )build_model_with_cfg)feature_take_indices)named_apply)register_modelgenerate_default_cfgsRDNetc                      ^  \ rS rSr  S
S\S\S\S\\R                     S\\R                     4
U 4S jjjrS r	S	r
U =r$ )Block   in_chs	inter_chsout_chs
norm_layer	act_layerc                   > XgS.n[         T	U ]  5         [        R                  " [        R                  " X4USSSS.UD6U" U40 UD6[        R                  " X4SSSS.UD6U" 5       [        R                  " X#4SSSS.UD65      U l        g Ndevicedtype   r      )groupskernel_sizestridepaddingr   r,   r-   r.   )super__init__nn
SequentialConv2dlayers
selfr   r    r!   r"   r#   r'   r(   dd	__class__s
            P/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/rdnet.pyr1   Block.__init__   s     /mmIIf^V1VW^[]^v$$IIfRQq!RrRKIIiSa1SPRS
    c                 $    U R                  U5      $ Nr5   r7   xs     r:   forwardBlock.forward-       {{1~r<   r?   NN__name__
__module____qualname____firstlineno__intr	   r2   Moduler1   rB   __static_attributes____classcell__r9   s   @r:   r   r      s_     

 
 	

 RYY
 BII
 
( r<   r   c                      ^  \ rS rSr  S
S\S\S\S\\R                     S\\R                     4
U 4S jjjrS r	S	r
U =r$ )BlockESE1   r   r    r!   r"   r#   c                 .  > XgS.n[         T	U ]  5         [        R                  " [        R                  " X4USSSS.UD6U" U40 UD6[        R                  " X4SSSS.UD6U" 5       [        R                  " X#4SSSS.UD6[        U40 UD65      U l        g r%   )r0   r1   r2   r3   r4   r   r5   r6   s
            r:   r1   BlockESE.__init__2   s     /mmIIf^V1VW^[]^v$$IIfRQq!RrRKIIiSa1SPRSg,,
r<   c                 $    U R                  U5      $ r>   r?   r@   s     r:   rB   BlockESE.forwardG   rD   r<   r?   rE   rF   rO   s   @r:   rQ   rQ   1   s_     

 
 	

 RYY
 BII
 
* r<   rQ   blockc                     U R                  5       R                  5       n U S:X  a  [        $ U S:X  a  [        $  SU  S35       e)NrW   blockesezUnknown block type (z).)lowerstripr   rQ   )rW   s    r:   _get_block_typer\   K   sD    KKM!E	*	6,UG266ur<   c                     ^  \ rS rSrSSSSSSSSS\R
                  \R                  SS4S	\S
\S\S\S\S\S\S\	S\S\
\R                     S\
\R                     4U 4S jjjrS\\R                     S\R                  4S jrSrU =r$ )
DenseBlockU   @         @        r   r   ư>Nnum_input_featuresgrowth_ratebottleneck_width_ratiodrop_path_rate	drop_raterand_gather_step_prob	block_idx
block_typels_init_valuer"   r#   c           	      p  > XS.n[         TU ]  5         XPl        X@l        X`l        Xpl        X l        U	S:  a.  [        R                  " U	[        R                  " U40 UD6-  5      OS U l        [        U5      n[        X-  S-  5      S-  n[        U5      U l        [        U5      " SUUUU
US.UD6U l        g )Nr&   r      )r   r    r!   r"   r#    )r0   r1   rh   rg   ri   rj   re   r2   	ParametertorchonesgammarK   r   	drop_pathr\   r5   )r7   rd   re   rf   rg   rh   ri   rj   rk   rl   r"   r#   r'   r(   r8   r    r9   s                   r:   r1   DenseBlock.__init__V   s      /",%:""&TadeTeR\\-%**[2OB2O"OPko
+&*CaGH1L	!.1%j1 
%!
 
r<   rA   returnc                     [         R                  " US5      nU R                  U5      nU R                  b-  UR	                  U R                  R                  SSSS5      5      nU R                  U5      nU$ )Nr   )rq   catr5   rs   mulreshapert   r@   s     r:   rB   DenseBlock.forward}   s^    IIaOKKN::!djj((B156ANN1r<   )rj   rt   rg   rh   rs   re   r5   ri   )rG   rH   rI   rJ   r2   	LayerNormGELUrK   floatstrr	   rL   r1   r   rq   TensorrB   rM   rN   rO   s   @r:   r^   r^   U   s     ')!,/$'"+.%#'*,,,)+%
 #%
 %
 %*	%

 "%
 %
 $)%
 %
 %
 !%
 RYY%
 BII%
 %
Nell+   r<   r^   c            	          ^  \ rS rSr  SS\S\S\\   S\4U 4S jjjrS\R                  S\R                  4S	 jr
S
rU =r$ )
DenseStage   	num_blockrd   drop_path_ratesre   c           	         > XVS.n[         TU ]  5         [        U5       H0  n	[        SUUX9   U	S.UDUD6n
X$-  nU R	                  SU	 3U
5        M2     X l        g )Nr&   )rd   re   rg   rj   dense_blockro   )r0   r1   ranger^   
add_modulenum_out_features)r7   r   rd   r   re   r'   r(   kwargsr8   ilayerr9   s              r:   r1   DenseStage.__init__   s     /y!A #5'.1	
  E -OOk!-u5 " !3r<   init_featurerv   c                 z    U/nU  H  nU" U5      nUR                  U5        M     [        R                  " US5      $ )Nr   )appendrq   ry   )r7   r   featuresmodulenew_features        r:   rB   DenseStage.forward   s<     >F *KOOK(  yy1%%r<   )r   rE   )rG   rH   rI   rJ   rK   r   r   r1   rq   r   rB   rM   rN   rO   s   @r:   r   r      s_     33 !$3 "%[	3
 3 32&ELL &U\\ & &r<   r   c            +       
  ^  \ rS rSr                       S,S\S\S\S\\\   \\   4   S\\\   \\   4   S\\\   \\   4   S\\\	   \\	   4   S	\
S
\
S\
S\S\S\S\
S\	S\	S\\\4   S\S\\
   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     S0S\R.                  S\\\\\   4      S\	S \	S!\S"\	S\\\R.                     \\R.                  \\R.                     4   4   4S# jjr   S1S\\\\   4   S$\	S%\	4S& jjrS' rS-S(\	4S) jjrS* rS+rU =r$ )2r      in_chansnum_classesglobal_poolgrowth_ratesnum_blocks_listrk   is_downsample_blockrf   transition_compression_ratiorl   	stem_type
patch_sizenum_init_featureshead_init_scalehead_norm_first	conv_biasr#   r"   norm_epsrh   rg   c                   > [         T%U ]  5         UUS.n[        U5      [        U5      s=:X  a  [        U5      :X  d   e   e[        U5      n[	        U5      nUb
  [        UUS9nX l        Xl        UU l        US;   d   eUS:X  a>  [        R                  " [        R                  " X4XUS.UD6U" U40 UD65      U l        UnOrSU;   a  [        US-  5      OUn[        R                  " [        R                  " UU4S	SS
US.UD6[        R                  " UU4S	SS
US.UD6U" U40 UD65      U l        Sn/ U l        [        U5      U l        UnUn[!        UUSS9n/ n[#        U R                  5       GH8  n/ n US:w  ap  [%        UU	-  S-  5      S-  n!S
=n"n#UU   (       a	  US-  nS=n"n#U R'                  U" U40 UD65        U R'                  [        R                  " UU!4U"U#SS.UD65        U!n[)        SUU   UUU   UUUU   U
UU   UUS.
UD6n$U R'                  U$5        UUU   UU   -  -  nUS
-   U R                  :X  d   US
-   U R                  :w  a3  UUS
-      (       a&  U =R                  [+        UUSU 3UU   S9/-  sl        UR'                  [        R                  " U 6 5        GM;     [        R                  " U6 U l        U=U l        U l        U(       aB  U" U R.                  40 UD6U l        [5        U R.                  U4UU R                  S.UD6U l        OD[        R8                  " 5       U l        [;        U R.                  U4UU R                  US.UD6U l        [=        [        [>        US9U 5        g)aY  
Args:
    in_chans: Number of input image channels.
    num_classes: Number of classes for classification head.
    global_pool: Global pooling type.
    growth_rates: Growth rate at each stage.
    num_blocks_list: Number of blocks at each stage.
    is_downsample_block: Whether to downsample at each stage.
    bottleneck_width_ratio: Bottleneck width ratio (similar to mlp expansion ratio).
    transition_compression_ratio: Channel compression ratio of transition layers.
    ls_init_value: Init value for Layer Scale, disabled if None.
    stem_type: Type of stem.
    patch_size: Stem patch size for patch stem.
    num_init_features: Number of features of stem.
    head_init_scale: Init scaling value for classifier weights and biases.
    head_norm_first: Apply normalization before global pool + head.
    conv_bias: Use bias layers w/ all convolutions.
    act_layer: Activation layer type.
    norm_layer: Normalization layer type.
    norm_eps: Small value to avoid division by zero in normalization.
    drop_rate: Head pre-classifier dropout rate.
    drop_path_rate: Stochastic depth drop rate.
r&   N)eps)patchoverlapoverlap_tieredr   )r,   r-   biastiered   r*   r   )r,   r-   r.   r      T)	stagewiser   rn   r/   )
r   rd   re   rf   rh   r   rl   rk   r"   r#   zdense_stages.)num_chs	reductionr   re   )	pool_typerh   )r   rh   r"   )r   ro   ) r0   r1   lenr   r   r   r   r   rh   r2   r3   r4   stemr   feature_info
num_stagesr   r   rK   r   r   dictdense_stagesnum_featureshead_hidden_sizenorm_prer   headIdentityr   r   _init_weights)&r7   r   r   r   r   r   rk   r   rf   r   rl   r   r   r   r   r   r   r#   r"   r   rh   rg   r'   r(   r8   stem_stridemid_chscurr_strider   dp_ratesr   r   dense_stage_layerscompressed_num_featuresk_sizer-   stager9   s&                                        r:   r1   RDNet.__init__   s   b 	/< C$8TC@S<TTTTTT!),	#J/
 :J& " BBBB		(w:gpwtvw,33DI %K@HI@Un%6!%;<[lG		(Gf1aV_fcef		'#4o!AWX_holno,33DI
 K l+!(,^_X\]t'A!#Av*-l=Y.Y\].]*^ab*b'"##&q)1$K&''FV"))*\*HR*HI"))")) ++ !'!+ +   7 )!,#/(O'=# (+%a=%# E %%e,OA.a@@L1u'AET__,DI\]^ab]bIc!! ,"-!.qc2$0O	& ! /A BC[ (\ MM<84@@D1 &t'8'8?B?DM&!! &..	
 DI KKMDM-!! &..% DI 	GM?KTRr<   c                 2    U(       a   S5       e[        SSS9$ )Nz,coarse grouping is not implemented for RDNetz^stemz^dense_stages\.(\d+))r   blocks)r   )r7   coarses     r:   group_matcherRDNet.group_matcherK  s#    IIIz*
 	
r<   c                 6    U R                    H	  nXl        M     g r>   )r   grad_checkpointing)r7   enabless      r:   set_grad_checkpointingRDNet.set_grad_checkpointingS  s    ""A#)  #r<   rv   c                 .    U R                   R                  $ r>   )r   fc)r7   s    r:   get_classifierRDNet.get_classifierX  s    yy||r<   c                 F    Xl         U R                  R                  X5        g r>   )r   r   reset)r7   r   r   s      r:   reset_classifierRDNet.reset_classifier\  s    &		1r<   rA   indicesnorm
stop_early
output_fmtintermediates_onlyc                    US;   d   S5       e/ nU R                    Vs/ s H#  n[        US   R                  S5      S   5      PM%     n	n[        [	        U	5      U5      u  pU
 Vs/ s H  oU   PM	     n
nX   nU 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       HF  u  nnU" U5      nX;   d  M  U(       a  X:X  a  U R                  U5      nOUnUR                  U5        MH     U(       a  U$ WU:X  a  U R                  U5      nX4$ s  snf s  snf )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
)NCHWzOutput shape must be NCHW.r   .rx   r   N)r   rK   splitr   r   r   r   rq   jitis_scripting	enumerater   r   )r7   rA   r   r   r   r   r   intermediatesinfo
stage_endstake_indices	max_indexr   last_idxr   feat_idxr   x_inters                     r:   forward_intermediatesRDNet.forward_intermediates`  s[   & Y&D(DD&EIEVEVWEVTc$x...s3B78EV
W"6s:"P/;<|!1|<)	 IIaLt(()A-99!!##:,,L,,^i!m<L(6OHeaA'H0"mmA.GG$$W-  7   xa A9 X<s   *E#%E(
prune_norm
prune_headc                 \   U R                    Vs/ s H#  n[        US   R                  S5      S   5      PM%     nn[        [	        U5      U5      u  pgXW   nU R
                  SUS-    U l        U(       a  [        R                  " 5       U l        U(       a  U R                  SS5        U$ s  snf )z?Prune layers not required for specified intermediates.
        r   r   rx   Nr   r    )
r   rK   r   r   r   r   r2   r   r   r   )r7   r   r   r   r   r   r   r   s           r:   prune_intermediate_layersRDNet.prune_intermediate_layers  s     FJEVEVWEVTc$x...s3B78EV
W"6s:"P)	 --ny1}=KKMDM!!!R( Xs   *B)c                 l    U R                  U5      nU R                  U5      nU R                  U5      nU$ r>   )r   r   r   r@   s     r:   forward_featuresRDNet.forward_features  s2    IIaLa MM!r<   
pre_logitsc                 R    U(       a  U R                  USS9$ U R                  U5      $ )NT)r   )r   )r7   rA   r   s      r:   forward_headRDNet.forward_head  s$    0:tyyty,L		!Lr<   c                 J    U R                  U5      nU R                  U5      nU$ r>   )r   r   r@   s     r:   rB   RDNet.forward  s'    !!!$a r<   )r   rh   r   r   r   r   r   r   r   r   r   )r*     avg)r`   h      r  r  r     )r*   r*   r*   r*   r*   r*   r*   )r   r   rQ   rQ   rQ   rQ   rQ   NTTFFFTra         ?rc   r   r   r`         ?FTgelulayernorm2dNrb   rb   NNF)Tr>   )NFFr   F)r   FT)rG   rH   rI   rJ   rK   r   r   r   r   boolr   r   r   r1   rq   r   ignorer   r   r2   rL   r   r   r   r   r   r   r   rB   rM   rN   rO   s   @r:   r   r      s    #$9[<Q7YBo,/25#'$%'%'$)".4+(,"$'1^S^S ^S 	^S
  S	5: 56^S #49eCj#89^S d3is34^S "'tDz5;'>!?^S %*^S +0^S !^S ^S ^S  #^S #^S  "!^S" #^S$ S(]+%^S& '^S( uo)^S* +^S, "-^S ^S@ YY
 
 YY* * YY		  2C 2hsm 2 8<$$',1 ||1  eCcN341  	1 
 1  1  !%1  
tELL!5tELL7I)I#JJ	K1 j ./$#	3S	>*  	$M$ M r<   r  c                    [        U [        R                  5      (       a*  [        R                  R	                  U R
                  5        g [        U [        R                  5      (       aU  [        R                  R                  U R
                  S5        [        R                  R                  U R                  S5        g [        U [        R                  5      (       a  [        R                  R                  U R                  S5        U(       aR  SU;   aK  U R
                  R                  R                  U5        U R                  R                  R                  U5        g g g g )Nr   r   zhead.)
isinstancer2   r4   initkaiming_normal_weightBatchNorm2d	constant_r   Lineardatamul_)r   namer   s      r:   r   r     s    &"))$$
.	FBNN	+	+
&--+
&++q)	FBII	&	&
&++q)GtOMM##O4KK!!/2 $4 
'r<   c                     SU ;   a  U $ SU ;   a  U S   n 0 nU R                  5        H  u  p4UR                  SS5      nXBU'   M     U$ )zRemap NV checkpoints -> timm zstem.0.weightmodelz
stem.stem.zstem.)itemsreplace)
state_dictr  out_dictkvs        r:   checkpoint_filter_fnr!    sZ    *$*(
H  "IIlG, # Or<   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   r!  r   )variant
pretrainedr   r  s       r:   _create_rdnetr)    s4     w1\dK 	E
 Lr<   c                 8    U SSSSS[         [        SSSS	S
SS.UE$ )Nr  )r*   r  r  )r)   r)   g?bicubiczstem.0zhead.fczarXiv:2403.19588z:DenseNets Reloaded: Paradigm Shift Beyond ResNets and ViTsz!https://github.com/naver-ai/rdnetz
apache-2.0)urlr   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifier	paper_ids
paper_name
origin_urllicenser
   )r,  r   s     r:   _cfgr9    s<    =v)%.Bi'R9  r<   znaver-ai/rdnet_tiny.nv_in1k)	hf_hub_idznaver-ai/rdnet_small.nv_in1kznaver-ai/rdnet_base.nv_in1kznaver-ai/rdnet_large.nv_in1kz(naver-ai/rdnet_large.nv_in1k_ft_in1k_384)r*     r;  )   r<  )r:  r-  r/  r.  )zrdnet_tiny.nv_in1kzrdnet_small.nv_in1kzrdnet_base.nv_in1kzrdnet_large.nv_in1kzrdnet_large.nv_in1k_ft_in1k_384c           	          SnSS/S/-   S/S-  -   S/-   S/U-  SS	S
/S
/-   S/S-  -   S/-   S.n[        SSU 0[        U40 UD6D6nU$ )Nr)   r`   r  r  r   r  r*   r  r  r   rQ   r   r   r   r   r   rk   r(  )
rdnet_tinyr)  r   r(  r   n_layer
model_argsr  s        r:   r?  r?    s    Guuqy0C583=L(+i7)+zlQ.>>*MJ \:\jA[TZA[\ELr<   c           	          SnSS/S/-   S/US-
  -  -   S/S-  -   S/U-  S	S
S/S/-   S/US-
  -  -   S/S-  -   S.n[        SSU 0[        U40 UD6D6nU$ )N   H   r`   r  r      r   r*   NTTFFFFFFTFr  r   rQ   r>  r(  )rdnet_smallr@  rA  s        r:   rI  rI    s    Guu!'<<uqyH3=h(+i7)+zlgk.JJj\\]M]]J ]J]$zB\U[B\]ELr<   c           	          SnSS/S/-   S/US-
  -  -   S/S-  -   S	/U-  S
SS/S/-   S/US-
  -  -   S/S-  -   S.n[        SSU 0[        U40 UD6D6nU$ )NrE  x   `   r     r   iP  r   r*   rH  r  r   rQ   r>  r(  )
rdnet_baser@  rA  s        r:   rN  rN    s    G uu!'<<uqyH3=h(+i7)+zlgk.JJj\\]M]]J \:\jA[TZA[\ELr<   c           	          SnSS/S/-   S/US-
  -  -   S/S-  -   S	/U-  S
SS/S/-   S/US-
  -  -   S/S-  -   S.n[        SSU 0[        U40 UD6D6nU$ )Nr<     r        r   ih  r   r*   )NTTFFFFFFFTFr  r   rQ   r>  r(  )rdnet_larger@  rA  s        r:   rS  rS  %  s    G 1(==	I3=o(+i7)+zlgk.JJj\\]M]]J ]J]$zB\U[B\]ELr<   )Nr  r  )r   )5__doc__	functoolsr   typingr   r   r   r   r   r	   rq   torch.nnr2   	timm.datar   r   timm.layersr   r   r   r   r   r   r   r   _builderr   	_featuresr   _manipulater   	_registryr   r   __all__rL   r   rQ   r   r\   r^   r3   r   r   r   r!  r)  r9  default_cfgsr?  rI  rN  rS  ro   r<   r:   <module>r`     sU    ? ?   A2 2 2 * + $ <)BII 2ryy 473 70 0f& &DGBII GT
3  %/102/102'+< 3((D&         r<   