Ë
    éÓ^j9R  ã                   óf  — d Z ddlmZ ddlmZmZmZmZmZm	Z	 ddl
Z
ddlmZ ddlmZmZ ddlmZmZmZmZmZmZmZmZ ddlmZ dd	lmZ dd
lmZ ddlm Z m!Z! dgZ" G d„ dejF                  «      Z$ G d„ dejF                  «      Z%de&fd„Z' G d„ dejF                  «      Z( G d„ dejR                  «      Z* G d„ dejF                  «      Z+d+d„Z,d„ Z-d,d„Z.d-d„Z/ e! e/d¬«       e/d¬«       e/d ¬«       e/d!¬«       e/d"d#dd$¬%«      d&œ«      Z0e d,d'„«       Z1e d,d(„«       Z2e d,d)„«       Z3e d,d*„«       Z4y).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                   ót   ‡ — e Zd Z	 	 ddedededeej                     deej                     f
ˆ fd„Zd„ Zˆ xZ	S )	ÚBlockÚin_chsÚ	inter_chsÚout_chsÚ
norm_layerÚ	act_layerc                 ó  •— ||dœ}t         ‰	| �  «        t        j                  t        j                  ||f|ddddœ|¤Ž ||fi |¤Žt        j                  ||fddddœ|¤Ž |«       t        j                  ||fddddœ|¤Ž«      | _        y ©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
            €ú\/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/rdnet.pyr0   zBlock.__init__   s•   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ—m‘mÜ�I‰I�f˜fÐ^¨VÀÈ1ÐVWÑ^Ð[]Ñ^Ù�vÑ$ Ñ$Ü�I‰I�f˜iÐR°Q¸qÈ!ÑRÈrÑRÙ‹KÜ�I‰I�i ÐS°aÀÈ1ÑSÐPRÑSó
ˆ�ó    c                 ó$   — | j                  |«      S ©N©r4   ©r6   Úxs     r9   ÚforwardzBlock.forward-   ó   € Ø�{‰{˜1‹~Ðr:   ©NN©
Ú__name__Ú
__module__Ú__qualname__Úintr	   r1   ÚModuler0   r@   Ú__classcell__©r8   s   @r9   r   r      sU   ø„ ð Øñ
àð
ð ð
ð ð	
ð
 ˜RŸY™Y™ð
ð ˜BŸI™I‘õ
ö(r:   r   c                   ót   ‡ — e Zd Z	 	 ddedededeej                     deej                     f
ˆ fd„Zd„ Zˆ xZ	S )	ÚBlockESEr   r   r    r!   r"   c                 ó.  •— ||dœ}t         ‰	| �  «        t        j                  t        j                  ||f|ddddœ|¤Ž ||fi |¤Žt        j                  ||fddddœ|¤Ž |«       t        j                  ||fddddœ|¤Žt        |fi |¤Ž«      | _        y r$   )r/   r0   r1   r2   r3   r   r4   r5   s
            €r9   r0   zBlockESE.__init__2   s¢   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ—m‘mÜ�I‰I�f˜fÐ^¨VÀÈ1ÐVWÑ^Ð[]Ñ^Ù�vÑ$ Ñ$Ü�I‰I�f˜iÐR°Q¸qÈ!ÑRÈrÑRÙ‹KÜ�I‰I�i ÐS°aÀÈ1ÑSÐPRÑSÜ˜gÑ,¨Ñ,ó
ˆ�r:   c                 ó$   — | j                  |«      S r<   r=   r>   s     r9   r@   zBlockESE.forwardG   rA   r:   rB   rC   rJ   s   @r9   rL   rL   1   sU   ø„ ð Øñ
àð
ð ð
ð ð	
ð
 ˜RŸY™Y™ð
ð ˜BŸI™I‘õ
ö*r:   rL   Úblockc                 ó€   — | j                  «       j                  «       } | dk(  rt        S | dk(  rt        S J d| › d�«       ‚)NrO   ÚblockesezUnknown block type (z).)ÚlowerÚstripr   rL   )rO   s    r9   Ú_get_block_typerT   K   sD   € Ø�K‰K‹M×ÑÓ!€EØ�ÒÜˆØ	�*Ò	Üˆà6Ð,¨U¨G°2Ð6Ó6ˆur:   c                   ó  ‡ — e Zd Zdd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	ej                     de	ej                     fˆ fd„Zdeej                     dej                  fd„Zˆ xZS )Ú
DenseBlocké@   ç      @ç        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           	      óx  •— ||dœ}t         ‰| �  «        || _        || _        || _        || _        || _        |	dkD  r,t        j                  |	t        j                  |fi |¤Žz  «      nd | _        t        |«      }t        ||z  dz  «      dz  }t        |«      | _         t        |«      d||||
|dœ|¤Ž| _        y )Nr%   r   é   )r   r   r    r!   r"   © )r/   r0   r_   r^   r`   ra   r\   r1   Ú	ParameterÚtorchÚonesÚgammarG   r   Ú	drop_pathrT   r4   )r6   r[   r\   r]   r^   r_   r`   ra   rb   rc   r!   r"   r&   r'   r7   r   r8   s                   €r9   r0   zDenseBlock.__init__V   sÐ   ø€ ð  ¨Ñ/ˆÜ‰ÑÔØ"ˆŒØ,ˆÔØ%:ˆÔ"Ø"ˆŒØ&ˆÔàTaÐdeÒTe”R—\‘\ -´%·*±*¸[Ñ2OÈBÑ2OÑ"OÔPÐkoˆŒ
Ü˜+Ó&ˆÜÐ*Ð-CÑCÀaÑGÓHÈ1ÑLˆ	ä! .Ó1ˆŒà1”o jÓ1ð 
Ø%ØØØ!Øñ
ð ñ
ˆ�r:   r?   Úreturnc                 óè   — t        j                  |d«      }| j                  |«      }| j                  �-|j	                  | j                  j                  dddd«      «      }| j                  |«      }|S )Nr   éÿÿÿÿ)rh   Úcatr4   rj   ÚmulÚreshaperk   r>   s     r9   r@   zDenseBlock.forward}   s^   € Ü�I‰I�a˜‹OˆØ�K‰K˜‹Nˆà�:‰:Ð!Ø—‘�d—j‘j×(Ñ(¨¨B°°1Ó5Ó6ˆAà�N‰N˜1ÓˆØˆr:   )rD   rE   rF   r1   Ú	LayerNormÚGELUrG   ÚfloatÚstrr	   rH   r0   r   rh   ÚTensorr@   rI   rJ   s   @r9   rV   rV   U   sÖ   ø„ ð ')Ø!Ø,/Ø$'Ø"Ø+.ØØ%Ø#'Ø*,¯,©,Ø)+¯©ØØñ%
à #ð%
ð ð%
ð %*ð	%
ð
 "ð%
ð ð%
ð $)ð%
ð ð%
ð ð%
ð !ð%
ð ˜RŸY™Y™ð%
ð ˜BŸI™I‘õ%
ðN˜˜eŸl™lÑ+ð °·±÷ r:   rV   c            	       ót   ‡ — e Zd Z	 	 d	dededee   defˆ fd„Zdej                  dej                  fd„Z	ˆ xZ
S )
Ú
DenseStageÚ	num_blockr[   Údrop_path_ratesr\   c           	      ó¸   •— ||dœ}t         ‰| �  «        t        |«      D ]1  }	t        d||||	   |	dœ|¤|¤Ž}
||z  }| j	                  d|	› �|
«       Œ3 || _        y )Nr%   )r[   r\   r^   ra   Údense_blockrf   )r/   r0   ÚrangerV   Ú
add_moduleÚnum_out_features)r6   ry   r[   rz   r\   r&   r'   Úkwargsr7   ÚiÚlayerr8   s              €r9   r0   zDenseStage.__init__‰   sŽ   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ�yÓ!ò 
	6ˆAÜð Ø#5Ø'Ø.¨qÑ1Øñ	ð
 ðð ñˆEð  +Ñ-ÐØ�O‰O˜k¨!¨Ð-¨uÕ5ð
	6ð !3ˆÕr:   Úinit_featurerl   c                 ót   — |g}| D ]  } ||«      }|j                  |«       Œ t        j                  |d«      S )Nr   )Úappendrh   ro   )r6   rƒ   ÚfeaturesÚmoduleÚnew_features        r9   r@   zDenseStage.forward¢   sA   € Ø �>ˆØò 	)ˆFÙ  Ó*ˆKØ�O‰O˜KÕ(ð	)ô �y‰y˜ 1Ó%Ð%r:   rB   )rD   rE   rF   rG   r   rt   r0   rh   rv   r@   rI   rJ   s   @r9   rx   rx   ˆ   sU   ø„ ð Øñ3àð3ð !$ð3ð " %™[ð	3ð
 õ3ð2& E§L¡Lð &°U·\±\÷ &r:   rx   c            +       óæ  ‡ — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d*dedededeee   ee   f   deee   ee   f   deee   ee   f   deee   ee   f   de	d	e	d
e	dededede	dededeee
f   dedee	   de	de	f*ˆ fd„Zej                  j                  d+d„«       Zej                  j                  d,d„«       Zej                  j                  dej&                  fd„«       Zd-dedee   fd„Z	 	 	 	 	 d.dej,                  deeeee   f      deded ed!edeeej,                     eej,                  eej,                     f   f   fd"„Z	 	 	 d/deeee   f   d#ed$efd%„Zd&„ Zd+d'efd(„Zd)„ Zˆ xZS )0r   Úin_chansÚnum_classesÚglobal_poolÚgrowth_ratesÚnum_blocks_listrb   Úis_downsample_blockr]   Útransition_compression_ratiorc   Ú	stem_typeÚ
patch_sizeÚnum_init_featuresÚhead_init_scaleÚhead_norm_firstÚ	conv_biasr"   r!   Únorm_epsr_   r^   c                 óÎ  •— t         ‰%| �  «        ||dœ}t        |«      t        |«      cxk(  rt        |«      k(  sJ ‚ J ‚t        |«      }t	        |«      }|�t        ||¬«      }|| _        || _        || _        |dv sJ ‚|dk(  r>t        j                  t        j                  ||f|||dœ|¤Ž ||fi |¤Ž«      | _        |}nmd|v rt        |dz  «      n|}t        j                  t        j                  ||fd	dd
|dœ|¤Žt        j                  ||fd	dd
|dœ|¤Ž ||fi |¤Ž«      | _        d}g | _        t        |«      | _        |}|}t!        ||d¬«      }g }t#        | j                  «      D �]+  }g } |dk7  rjt%        ||	z  dz  «      dz  }!d
x}"}#||   r	|dz  }dx}"}#| j'                   ||fi |¤Ž«       | j'                  t        j                  ||!f|"|#ddœ|¤Ž«       |!}t)        d||   |||   ||||   |
||   ||dœ
|¤Ž}$| j'                  |$«       |||   ||   z  z  }|d
z   | j                  k(  s|d
z   | j                  k7  r1||d
z      r)| xj                  t+        ||d|› �||   ¬«      gz  c_        |j'                  t        j                  | Ž «       �Œ. t        j                  |Ž | _        |x| _        | _        |rB || j.                  fi |¤Ž| _        t5        | j.                  |f|| j                  dœ|¤Ž| _        nCt        j8                  «       | _        t;        | j.                  |f|| j                  |dœ|¤Ž| _        t=        t        t>        |¬«      | «       y)a	  
        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   re   r.   )
ry   r[   r\   r]   r_   rz   rc   rb   r!   r"   zdense_stages.)Únum_chsÚ	reductionr‡   r\   )Ú	pool_typer_   )r¤   r_   r!   )r”   rf   ) r/   r0   Úlenr   r   r   r‹   rŠ   r_   r1   r2   r3   Ústemr   Úfeature_infoÚ
num_stagesr   r}   rG   r…   rx   ÚdictÚdense_stagesÚnum_featuresÚhead_hidden_sizeÚnorm_prer   ÚheadÚIdentityr   r   Ú_init_weights)&r6   rŠ   r‹   rŒ   r�   rŽ   rb   r�   r]   r�   rc   r‘   r’   r“   r”   r•   r–   r"   r!   r—   r_   r^   r&   r'   r7   Ústem_strideÚmid_chsÚcurr_strider«   Údp_ratesrª   r�   Údense_stage_layersÚcompressed_num_featuresÚk_sizer,   Ústager8   s&                                        €r9   r0   zRDNet.__init__«   s  ø€ ôb 	‰ÑÔØ¨Ñ/ˆÜ�<Ó ¤C¨Ó$8ÔT¼CÐ@SÓ<TÒTÐTÑTÐTÐTÜ! )Ó,ˆ	Ü# JÓ/ˆ
ØÐÜ  °Ô:ˆJà&ˆÔØ ˆŒØ"ˆŒð ÐBÑBÐBÐBØ˜ÒäŸ™Ü—	‘	˜(Ð$5ÐwÀ:ÐV`ÐgpÑwÐtvÑwÙÐ,Ñ3°Ñ3óˆDŒIð %‰Kà@HÈIÑ@U”nÐ%6¸!Ñ%;Ô<Ð[lˆGÜŸ™Ü—	‘	˜( GÐf¸À1ÈaÐV_ÑfÐceÑfÜ—	‘	˜'Ð#4ÐoÀ!ÈAÐWXÐ_hÑoÐlnÑoÙÐ,Ñ3°Ñ3óˆDŒIð
 ˆKð ˆÔÜ˜lÓ+ˆŒØ!ˆØ(ˆÜ,¨^¸_ÐX\Ô]ˆàˆÜ�t—‘Ó'ó -	DˆAØ!#ÐØ�AŠvÜ*-¨lÐ=YÑ.YÐ\]Ñ.]Ó*^ÐabÑ*bÐ'Ø"#Ð#�˜Ø& qÒ)Ø 1Ñ$�KØ&'Ð'�F˜Và"×)Ñ)©*°\Ñ*HÀRÑ*HÔIØ"×)Ñ)¬"¯)©)Ø Ø+ð+ð !'Ø!Øñ+ð ñ+ô ð  7�äð Ø)¨!Ñ,Ø#/Ø(¨™OØ'=Ø#Ø (¨¡Ø+Ø% a™=Ø%Ø#ñð ñˆEð ×%Ñ% eÔ,Ø˜O¨AÑ.°¸a±Ñ@Ñ@ˆLà�1‰u˜Ÿ™Ò'¨A°©E°T·_±_Ò,DÐI\Ð]^ÐabÑ]bÒIcØ×!Ò!ÜØ ,Ø"-Ø!.¨q¨cÐ2Ø$0°¡Oô	ð&ñ Õ!ð ×Ñ¤§¡Ð/AÐ BÖCð[-	Dô\ ŸM™M¨<Ð8ˆÔØ4@Ð@ˆÔ˜DÔ1ñ Ù& t×'8Ñ'8Ñ?¸BÑ?ˆDŒMÜ&Ø×!Ñ!Øðð &ØŸ.™.ñ	ð
 ñˆD�Iô ŸK™K›MˆDŒMÜ-Ø×!Ñ!Øðð &ØŸ.™.Ø%ñð ñˆDŒIô 	”GœM¸?ÔKÈTÕRr:   c                 ó.   — |rJ d«       ‚t        dd¬«      S )Nz,coarse grouping is not implemented for RDNetz^stemz^dense_stages\.(\d+))r¦   Úblocks)r©   )r6   Úcoarses     r9   Úgroup_matcherzRDNet.group_matcherK  s#   € áÐIÐIÓIˆzÜØØ*ô
ð 	
r:   c                 ó4   — | j                   D ]	  }||_        Œ y r<   )rª   Úgrad_checkpointing)r6   ÚenableÚss      r9   Úset_grad_checkpointingzRDNet.set_grad_checkpointingS  s   € à×"Ñ"ò 	*ˆAØ#)ˆAÕ ñ	*r:   rl   c                 ó.   — | j                   j                  S r<   )r®   Úfc)r6   s    r9   Úget_classifierzRDNet.get_classifierX  s   € à�y‰y�|‰|Ðr:   c                 óJ   — || _         | j                  j                  ||«       y r<   )r‹   r®   Úreset)r6   r‹   rŒ   s      r9   Úreset_classifierzRDNet.reset_classifier\  s   € Ø&ˆÔØ�	‰	�‰˜ [Õ1r:   r?   ÚindicesÚnormÚ
stop_earlyÚ
output_fmtÚintermediates_onlyc                 ó   — |dv sJ d«       ‚g }| j                   D �cg c]"  }t        |d   j                  d«      d   «      ‘Œ$ }	}t        t	        |	«      |«      \  }
}|
D �cg c]  }|	|   ‘Œ	 }
}|	|   }| j                  |«      }t	        | j                  «      dz
  }t        j                  j                  «       s|s| j                  }n| j                  d|dz    }t        |«      D ]>  \  }} ||«      }||
v sŒ|r||k(  r| j                  |«      }n|}|j                  |«       Œ@ |r|S |k(  r| j                  |«      }||fS c c}w c c}w )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‡   ú.rn   r   N)r§   rG   Úsplitr   r¥   r¦   rª   rh   ÚjitÚis_scriptingÚ	enumerater­   r…   )r6   r?   rÈ   rÉ   rÊ   rË   rÌ   ÚintermediatesÚinfoÚ
stage_endsÚtake_indicesÚ	max_indexr�   Úlast_idxrª   Úfeat_idxr¸   Úx_inters                     r9   Úforward_intermediateszRDNet.forward_intermediates`  se  € ð& ˜YÑ&ÐDÐ(DÓDÐ&ØˆØEI×EVÑEVÖW¸T”c˜$˜x™.×.Ñ.¨sÓ3°BÑ7Õ8ÐWˆ
ÐWÜ"6´s¸:³ÈÓ"PÑˆ�iØ/;Ö<¨!˜
 1›Ð<ˆÐ<Ø˜yÑ)ˆ	ð �I‰I�a‹Lˆä�t×(Ñ(Ó)¨AÑ-ˆÜ�9‰9×!Ñ!Ô#©:Ø×,Ñ,‰Là×,Ñ,¨^¨i¸!©mÐ<ˆLÜ(¨Ó6ò 	.‰OˆH�eÙ�a“ˆAØ˜<Ò'Ù˜H¨Ò0Ø"Ÿm™m¨AÓ.‘Gà�GØ×$Ñ$ WÕ-ð	.ñ Ø Ð à�xÒØ—‘˜aÓ ˆAà�-ÐÐùò9 Xùâ<s   œ'EÁ!EÚ
prune_normÚ
prune_headc                 óD  — | j                   D �cg c]"  }t        |d   j                  d«      d   «      ‘Œ$ }}t        t	        |«      |«      \  }}||   }| j
                  d|dz    | _        |rt        j                  «       | _        |r| j                  dd«       |S c c}w )z@ Prune layers not required for specified intermediates.
        r‡   rÏ   rn   Nr   r   Ú )
r§   rG   rÐ   r   r¥   rª   r1   r¯   r­   rÇ   )r6   rÈ   rÝ   rÞ   rÕ   rÖ   r×   rØ   s           r9   Úprune_intermediate_layerszRDNet.prune_intermediate_layers“  sŸ   € ð FJ×EVÑEVÖW¸T”c˜$˜x™.×.Ñ.¨sÓ3°BÑ7Õ8ÐWˆ
ÐWÜ"6´s¸:³ÈÓ"PÑˆ�iØ˜yÑ)ˆ	Ø ×-Ñ-¨n¨y¸1©}Ð=ˆÔÙÜŸK™K›MˆDŒMÙØ×!Ñ! ! RÔ(ØÐùò Xs   �'Bc                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r<   )r¦   rª   r­   r>   s     r9   Úforward_featureszRDNet.forward_features¥  s2   € Ø�I‰I�a‹LˆØ×Ñ˜aÓ ˆØ�M‰M˜!ÓˆØˆr:   Ú
pre_logitsc                 óN   — |r| j                  |d¬«      S | j                  |«      S )NT)rä   )r®   )r6   r?   rä   s      r9   Úforward_headzRDNet.forward_head«  s$   € Ù0:ˆt�y‰y˜ tˆyÓ,ÐLÀÇ	Á	È!ÃÐLr:   c                 óJ   — | j                  |«      }| j                  |«      }|S r<   )rã   ræ   r>   s     r9   r@   zRDNet.forward®  s'   € Ø×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆr:   )r)   éè  Úavg)rW   éh   é€   rë   rë   rë   éà   )r)   r)   r)   r)   r)   r)   r)   )r   r   rL   rL   rL   rL   rL   ©NTTFFFTrX   ç      à?rZ   rš   r    rW   ç      ð?FTÚgeluÚlayernorm2dNrY   rY   NN©F)Tr<   )NFFrÎ   F)r   FT)rD   rE   rF   rG   ru   r   r   r   Úboolrt   r   r   r0   rh   rÑ   Úignorer¼   rÁ   r1   rH   rÄ   rÇ   rv   rÜ   rá   rã   ræ   r@   rI   rJ   s   @r9   r   r   ª   s	  ø„ ð Ø#Ø$Ø9[Ø<QØ7YØBoØ,/Ø25Ø#'Ø$ØØ%'Ø%'Ø$)Ø"Ø.4Ø+Ø(,Ø"Ø$'ØØñ1^Sàð^Sð ð^Sð ð	^Sð
    S¡	¨5°©:Ð 5Ñ6ð^Sð # 4¨¡9¨e°C©jÐ#8Ñ9ð^Sð ˜d 3™i¨¨s©Ð3Ñ4ð^Sð "' t¨D¡z°5¸±;Ð'>Ñ!?ð^Sð %*ð^Sð +0ð^Sð !ð^Sð ð^Sð ð^Sð  #ð^Sð #ð^Sð  "ð!^Sð" ð#^Sð$ ˜S (˜]Ñ+ð%^Sð& ð'^Sð( ˜u‘oð)^Sð* ð+^Sð, "õ-^Sð@ ‡Y�Y×Ñò
ó ð
ð ‡Y�Y×Ñò*ó ð*ð ‡Y�Y×Ñð §	¡	ò ó ðñ2¨Cð 2¸hÀs¹mó 2ð 8<ØØ$Ø$Ø',ñ1 à�|‰|ð1 ð ˜e C¨¨c© NÑ3Ñ4ð1 ð ð	1 ð
 ð1 ð ð1 ð !%ð1 ð 
ˆt�E—L‘LÑ! 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#JÐJÑ	Kó1 ðj ./Ø$Ø#ñ	à˜3  S¡	˜>Ñ*ðð ðð ó	ò$ñM¨$ó Mör:   rï   c                 ó˜  — t        | t        j                  «      r*t        j                  j	                  | j
                  «       y t        | t        j                  «      rUt        j                  j                  | j
                  d«       t        j                  j                  | j                  d«       y t        | t        j                  «      r}t        j                  j                  | j                  d«       |rPd|v rK| j
                  j                  j                  |«       | j                  j                  j                  |«       y y y y )Nr   r   zhead.)Ú
isinstancer1   r3   ÚinitÚkaiming_normal_ÚweightÚBatchNorm2dÚ	constant_r�   ÚLinearÚdataÚmul_)r‡   Únamer”   s      r9   r°   r°   ´  sÏ   € Ü�&œ"Ÿ)™)Ô$Ü
�‰×Ñ §¡Õ.Ü	�FœBŸN™NÔ	+Ü
�‰×Ñ˜&Ÿ-™-¨Ô+Ü
�‰×Ñ˜&Ÿ+™+ qÕ)Ü	�FœBŸI™IÔ	&Ü
�‰×Ñ˜&Ÿ+™+ qÔ)Ù�G˜t‘OØ�M‰M×Ñ×#Ñ# OÔ4Ø�K‰K×Ñ×!Ñ! /Õ2ð $ˆ4ð 
'r:   c                 ó†   — d| v r| S d| v r| d   } i }| j                  «       D ]  \  }}|j                  dd«      }|||<   Œ |S )z Remap NV checkpoints -> timm zstem.0.weightÚmodelz
stem.stem.zstem.)ÚitemsÚreplace)Ú
state_dictr  Úout_dictÚkÚvs        r9   Úcheckpoint_filter_fnr  Á  sc   € à˜*Ñ$ØÐØ�*ÑØ Ñ(ˆ
à€Hà× Ñ Ó"ò ‰ˆˆ1Ø�I‰I�l GÓ,ˆØˆ�Šðð €Or:   c                 óN   — t        t        | |ft        t        dd¬«      dœ|¤Ž}|S )N)r   r   rŸ   r)   T)Úout_indicesÚflatten_sequential)Úpretrained_filter_fnÚfeature_cfg)r   r   r  r©   )ÚvariantÚ
pretrainedr€   r  s       r9   Ú_create_rdnetr  Ñ  s6   € Ü Üˆw˜
ðä1Ü \ÀdÔKñð ñ	€Eð
 €Lr:   c                 ó8   — | dddddt         t        dddd	d
ddœ|¥S )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     r9   Ú_cfgr   Ú  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           	      ó’   — d}ddgdgz   dgdz  z   dgz   dg|z  dd	d
gd
gz   dgdz  z   dgz   dœ}t        dd| it        |fi |¤Ž¤Ž}|S )Nr(   rW   rê   rë   r    rì   r)   rí   rî   r   rL   ©r“   r�   rŽ   r�   r�   rb   r  )Ú
rdnet_tiny©r  r©   ©r  r€   Ún_layerÚ
model_argsr  s        r9   r&  r&  ø  s€   € à€GàØ˜ ˜u™¨ u¨q¡yÑ0°C°5Ñ8Ø˜3 ™=ØLØ(+Ø�i 7 )Ñ+¨z¨l¸QÑ.>Ñ>À*ÀÑMñ€Jô Ñ\°:Ð\ÄÀjÑA[ÐTZÑA[Ñ\€EØ€Lr:   c           	      óª   — d}ddgdgz   dg|dz
  z  z   dgdz  z   dg|z  d	d
dgdgz   dg|dz
  z  z   dgdz  z   dœ}t        dd| it        |fi |¤Ž¤Ž}|S )Né   éH   rW   rë   r    éð   rŸ   r)   ©NTTFFFFFFTFrî   r   rL   r%  r  )Úrdnet_smallr'  r(  s        r9   r0  r0    s“   € à€GàØ˜ ˜u™¨ u°¸!±Ñ'<Ñ<À¸uÀq¹yÑHØ˜3 ™=ØhØ(+Ø�i 7 )Ñ+¨z¨l¸gÈ¹kÑ.JÑJÈjÈ\Ð\]ÑM]Ñ]ñ€Jô Ñ]°JÐ]Ä$ÀzÑB\ÐU[ÑB\Ñ]€EØ€Lr:   c           	      óª   — d}ddgdgz   dg|dz
  z  z   dgdz  z   d	g|z  d
ddgdgz   dg|dz
  z  z   dgdz  z   dœ}t        dd| it        |fi |¤Ž¤Ž}|S )Nr,  éx   é`   rë   é¨   r    iP  rŸ   r)   r/  rî   r   rL   r%  r  )Ú
rdnet_baser'  r(  s        r9   r5  r5    s“   € à€Gà Ø˜ ˜u™¨ u°¸!±Ñ'<Ñ<À¸uÀq¹yÑHØ˜3 ™=ØhØ(+Ø�i 7 )Ñ+¨z¨l¸gÈ¹kÑ.JÑJÈjÈ\Ð\]ÑM]Ñ]ñ€Jô Ñ\°:Ð\ÄÀjÑA[ÐTZÑA[Ñ\€EØ€Lr:   c           	      óª   — d}ddgdgz   dg|dz
  z  z   dgdz  z   d	g|z  d
ddgdgz   dg|dz
  z  z   dgdz  z   dœ}t        dd| it        |fi |¤Ž¤Ž}|S )Nr#  é�   rë   éÀ   é   r    ih  rŸ   r)   )NTTFFFFFFFTFrî   r   rL   r%  r  )Úrdnet_larger'  r(  s        r9   r:  r:  %  s“   € à€Gà Ø˜  ™¨¨°¸1±Ñ(=Ñ=ÀÀÈÁ	ÑIØ˜3 ™=ØoØ(+Ø�i 7 )Ñ+¨z¨l¸gÈ¹kÑ.JÑJÈjÈ\Ð\]ÑM]Ñ]ñ€Jô Ñ]°JÐ]Ä$ÀzÑB\ÐU[ÑB\Ñ]€EØ€Lr:   )Nrï   rò   )rà   )5Ú__doc__Ú	functoolsr   Útypingr   r   r   r   r   r	   rh   Útorch.nnr1   Ú	timm.datar   r   Útimm.layersr   r   r   r   r   r   r   r   Ú_builderr   Ú	_featuresr   Ú_manipulater   Ú	_registryr   r   Ú__all__rH   r   rL   ru   rT   rV   r2   rx   r   r°   r  r  r   Údefault_cfgsr&  r0  r5  r:  rf   r:   r9   ú<module>rG     sU  ðñõ ß ?× ?ã Ý ç A÷2÷ 2ó 2å *Ý +Ý $ß <àˆ)€ôˆB�I‰Iô ô2ˆr�y‰yô ð47˜3ó 7ô0�—‘ô 0ôf&�—‘ô &ôDGˆB�I‰Iô GóT
3òó óñ %ÙØ/ô1áØ0ô2áØ/ô1áØ0ô2á'+Ø<Ø ¨3¸(ô(Dñ&ó €ð òó ðð òó ðð òó ðð òó ñr:   