
    RЦi`?                     `   S r SSKJ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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Jr  SSKJrJrJ r   S/r! " S S\RD                  5      r# " S S\RD                  5      r$ " S S\RD                  5      r%S r&S'S jr'S(S jr(\" \(" SS9\(" SSS9\(" SS9\(" SS9\(" SS9\(" SSSS9\(" SSSS9\(" SSSS9\(" SS9\(" SSS9S.
5      r)\S'S\%4S jj5       r*\S'S\%4S jj5       r+\S'S\%4S  jj5       r,\S'S\%4S! jj5       r-\ " \.S"S#S$S%S&.5        g))z
TResNet: High Performance GPU-Dedicated Architecture
https://arxiv.org/pdf/2003.13630.pdf

Original model: https://github.com/mrT23/TResNet

    )OrderedDict)partial)ListOptionalTupleUnionTypeN)SpaceToDepth
BlurPool2dClassifierHeadSEModuleConvNormActDropPathcalculate_drop_path_rates   )build_model_with_cfg)feature_take_indices)
checkpointcheckpoint_seq)register_modelgenerate_default_cfgsregister_model_deprecationsTResNetc                      ^  \ rS rSrSr       SS\S\S\S\\R                     S\	S	\\
\R                        S
\SS4U 4S jjjrS rSrU =r$ )
BasicBlock   r   Ninplanesplanesstride
downsampleuse_seaa_layerdrop_path_ratereturnc
                   > XS.n
[         TU ]  5         X@l        X0l        [	        [
        R                  SS9n[        UU4SUUUS.U
D6U l        [        X"4SSSS.U
D6U l	        [
        R                  " S	S
9U l        [        X R                  -  S-  S5      nU(       a  [        X R                  -  4SU0U
D6OS U l        US:  a  [!        U5      U l        g [
        R"                  " 5       U l        g )NdevicedtypeMbP?negative_slope   kernel_sizer   	act_layerr"   r   Fr.   r   	apply_actTinplace   @   rd_channelsr   )super__init__r    r   r   nn	LeakyReLUr   conv1conv2ReLUactmax	expansionr   ser   Identity	drop_path)selfr   r   r   r    r!   r"   r#   r'   r(   ddr/   rd_chs	__class__s                R/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/tresnet.pyr8   BasicBlock.__init__   s     /$BLL>	 
 
 

 !`QqTY`]_`
774(Vnn,126QW(6NN2MM"M]a5Ca5G.1R[[]    c                    U R                   b  U R                  U5      nOUnU R                  U5      nU R                  U5      nU R                  b  U R                  U5      nU R	                  U5      U-   nU R                  U5      nU$ N)r    r;   r<   rA   rC   r>   rD   xshortcutouts       rH   forwardBasicBlock.forward=   su    ??&q)HHjjmjjo77''#,CnnS!H,hhsm
rJ   )r>   r;   r<   r    rC   rA   r   )r   NTN        NN__name__
__module____qualname____firstlineno__r@   intr   r9   Moduleboolr	   floatr8   rQ   __static_attributes____classcell__rG   s   @rH   r   r      s    I .226$& [ [  [ 	 [
 !+ [  [ tBII/ [ " [ 
 [  [D rJ   r   c                      ^  \ rS rSrSr        SS\S\S\S\\R                     S\	S	\\
\R                        S
\\
\R                        S\SS4U 4S jjjrS rSrU =r$ )
BottleneckK   r4   Nr   r   r   r    r!   r/   r"   r#   r$   c                   > XS.n[         TU ]  5         X@l        X0l        U=(       d    [	        [
        R                  SS9n[        X4SSUS.UD6U l        [        UU4SUUUS.UD6U l	        [        X R                  -  S-  S	5      nU(       a  [        U4S
U0UD6OS U l        [        X"U R                  -  4SSSS.UD6U l        US:  a  [        U5      O[
        R                   " 5       U l        [
        R$                  " SS9U l        g )Nr&   r)   r*   r   )r.   r   r/   r,   r-      r5   r6   Fr0   r   Tr2   )r7   r8   r    r   r   r9   r:   r   r;   r<   r?   r@   r   rA   conv3r   rB   rC   r=   r>   )rD   r   r   r   r    r!   r/   r"   r#   r'   r(   rE   reduction_chsrG   s                rH   r8   Bottleneck.__init__N   s    /$Kd!K	 fqV_fcef
 
 
 

 F^^3q8"=GM(6C}CCSW $..)@qaXYejqnpq
5Ca5G.1R[[]774(rJ   c                 4   U R                   b  U R                  U5      nOUnU R                  U5      nU R                  U5      nU R                  b  U R                  U5      nU R	                  U5      nU R                  U5      U-   nU R                  U5      nU$ rL   )r    r;   r<   rA   re   rC   r>   rM   s       rH   rQ   Bottleneck.forwardt   s    ??&q)HHjjmjjo77''#,CjjonnS!H,hhsm
rJ   )r>   r;   r<   re   r    rC   rA   r   )r   NTNNrS   NNrT   r_   s   @rH   ra   ra   K   s    I .23726$&$)$) $) 	$)
 !+$) $)  RYY0$) tBII/$) "$) 
$) $)L rJ   ra   c                   r  ^  \ rS rSr         S!S\\   S\S\S\S\S\S	\S
\SS4U 4S jjjr	      S"S 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     S&S\R*                  S\\\\\   4      S\S\S\S\S\\\R*                     \\R*                  \\R*                     4   4   4S jjr   S'S\\\\   4   S\S\4S jjrS rS#S\4S jjrS rS rU =r$ )(r      Nlayersin_chansnum_classeswidth_factorv2global_pool	drop_rater#   r$   c                   > [         TU ]  5         XS.nX0l        X l        Xpl        SU l        [        n[        R                  n[        SU-  5      U l
        [        SU-  5      U l        U(       a.  U R                  S-  S-  U l
        U R                  S-  S-  U l        [        XSS9n[        US-  U R                  4SS	US
.UD6nU R                  " U(       a  [        O[         U R                  US   4SSXS   S.UD6nU R                  " U(       a  [        O[         U R                  S-  US   4SSXS   S.UD6nU R                  " [        U R                  S-  US   4SSXS   S.UD6nU R                  " [        U R                  S-  US	   4SSXS	   S.UD6n[        R"                  " [%        S['        5       4SU4SU4SU4SU4SU4/5      5      U l        [+        U R                  SSS9[+        U R                  U(       a  [        R,                  OS-  SSS9[+        U R                  S-  U(       a  [        R,                  OS-  SSS9[+        U R                  S-  [        R,                  -  SSS9[+        U R                  S-  [        R,                  -  SSS9/U l        U R                  S-  [        R,                  -  =U l        U l        [5        U R0                  U4XgS.UD6U l        U R9                  5        H  n[;        U[        R<                  5      (       a)  [        R>                  RA                  URB                  SSS9  [;        U[        RD                  5      (       d  Ml  URB                  RF                  RI                  SS 5        M     U R9                  5        H  n[;        U[         5      (       a=  [        R>                  RK                  URL                  RN                  RB                  5        [;        U[        5      (       d  Ml  [        R>                  RK                  URP                  RN                  RB                  5        M     g )!Nr&   Fr5   rd   T)	stagewise   r   r,   )r   r.   r/   r   )r   r!   r"   r#      r4   s2dr;   layer1layer2layer3layer4 )num_chs	reductionmodulezbody.layer1zbody.layer2zbody.layer3    zbody.layer4)	pool_typerr   fan_out
leaky_relu)modenonlinearityg{Gz?))r7   r8   rn   rm   rr   grad_checkpointingr   r9   r:   rY   r   r   r   r   _make_layerra   r   
Sequentialr   r
   bodydictr@   feature_infonum_featureshead_hidden_sizer   headmodules
isinstanceConv2dinitkaiming_normal_weightLineardatanormal_zeros_r<   bnre   )rD   rl   rm   rn   ro   rp   rq   rr   r#   r'   r(   rE   r"   r/   dprr;   rx   ry   rz   r{   mrG   s                        rH   r8   TResNet.__init__   s    	/& ""'LL	 B-."|+, MMQ.2DM++*Q.DK'$OHrM4;;kqa[dkhjk!!J*KKk+,THab]ckgik !!J*KK!OVAYo/0efagokmo !!KK!OVAYo/0efagokmo !!KK!OVAYp/0fgbhplnp
 MM+LN#evvvv/
 # 	 "=
(<(<JVW`mnqBJ,@,@ANZ[dqrq:+?+??2Vcdq:+?+??2Vcd
 6:[[1_
H\H\4\\D1"4#4#4kt[tqst	 A!RYY''''y|'\!RYY''%%a.	   A!Z((qwwzz001!Z((qwwzz001	  rJ   c
                 B   XS.n
S nUS:w  d  U R                   X!R                  -  :w  al  / nUS:X  a&  UR                  [        R                  " SSSSS95        U[        U R                   X!R                  -  4SSSS.U
D6/-  n[        R                  " U6 n/ n[        U5       Hh  nUR                  U" U R                   U4US:X  a  UOSUS:X  a  UOS UU[        U[        5      (       a  X}   OUS	.U
D65        X!R                  -  U l         Mj     [        R                  " U6 $ )
Nr&   r   rv   TF)r.   r   	ceil_modecount_include_padr0   r   )r   r    r!   r"   r#   )
r   r@   appendr9   	AvgPool2dr   r   ranger   list)rD   blockr   blocksr   r!   r"   r#   r'   r(   rE   r    rl   is                 rH   r   TResNet._make_layer   s3    /
Q;$--6OO+CCF{bllqdfklm{v7iEFq\aiegi j jF/JvAMM%	 "#avQ)*a:T!4>~t4T4T~0Zh	 	 	 #__4DM  }}f%%rJ   c                 ,    [        SU(       a  SOSS9nU$ )Nz^body\.conv1z^body\.layer(\d+)z^body\.layer(\d+)\.(\d+))stemr   )r   )rD   coarsematchers      rH   group_matcherTResNet.group_matcher   s    OF4HXstrJ   c                     Xl         g rL   )r   )rD   enables     rH   set_grad_checkpointingTResNet.set_grad_checkpointing  s    "(rJ   c                 .    U R                   R                  $ rL   )r   fc)rD   s    rH   get_classifierTResNet.get_classifier  s    yy||rJ   c                 B    Xl         U R                  R                  XS9  g )N)r   )rn   r   reset)rD   rn   rq   s      rH   reset_classifierTResNet.reset_classifier	  s    &		;rJ   rN   indicesnorm
stop_early
output_fmtintermediates_onlyc                 "   US;   d   S5       e/ n/ SQn[        [        U5      U5      u  pU	 Vs/ s H  oU   PM	     n	nX   n
[        R                  R	                  5       (       d  U(       d  U R
                  nOU R
                  SU
S-    n[        U5       He  u  pU R                  (       a/  [        R                  R	                  5       (       d  [        X5      nOU" U5      nX;   d  MT  UR                  U5        Mg     U(       a  U$ X4$ 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
Returns:

)NCHWzOutput shape must be NCHW.r   rv   r,   r4      Nr   )
r   lentorchjitis_scriptingr   	enumerater   r   r   )rD   rN   r   r   r   r   r   intermediates
stage_endstake_indices	max_indexr   stagesfeat_idxstages                  rH   forward_intermediatesTResNet.forward_intermediates  s    * Y&D(DD&$
"6s:"P/;<|!1|<)	99!!##:YYFYY~	A.F(0OH&&uyy/E/E/G/Gu(!H'$$Q'  1   ' =s   D
prune_norm
prune_headc                     / SQn[        [        U5      U5      u  pVXF   nU R                  SUS-    U l        U(       a  U R                  SS5        U$ )z?Prune layers not required for specified intermediates.
        r   Nr   r   r|   )r   r   r   r   )rD   r   r   r   r   r   r   s          rH   prune_intermediate_layers!TResNet.prune_intermediate_layers;  sS     %
"6s:"P)	IIny1}-	!!!R(rJ   c                    U R                   (       a  [        R                  R                  5       (       d  U R                  R                  U5      nU R                  R                  U5      n[        U R                  R                  U R                  R                  U R                  R                  U R                  R                  /USS9nU$ U R	                  U5      nU$ )NT)flatten)r   r   r   r   r   rw   r;   r   rx   ry   rz   r{   rD   rN   s     rH   forward_featuresTResNet.forward_featuresK  s    ""599+A+A+C+C		a A		"A		  		  		  		  	 "
 4!A  		!ArJ   
pre_logitsc                 P    U(       a  U R                  XS9$ U R                  U5      $ )N)r   )r   )rD   rN   r   s      rH   forward_headTResNet.forward_headY  s#    6@tyyy2RdiiPQlRrJ   c                 J    U R                  U5      nU R                  U5      nU$ rL   )r   r   r   s     rH   rQ   TResNet.forward\  s'    !!!$a rJ   )r   rr   r   r   r   r   rm   r   rn   r   r   )	r,           ?FfastrS   rS   NN)r   TNrS   NNF)TrL   )NFFr   F)r   FT)rU   rV   rW   rX   r   rY   r\   r[   strr8   r   r   r   ignorer   r   r9   rZ   r   r   r   Tensorr   r   r   r   r   r   rQ   r]   r^   r_   s   @rH   r   r      s    #"%%!$&O2IO2 O2 	O2
  O2 O2 O2 O2 "O2 
O2 O2l %&N YY  YY) ) YY		  <C <hsm < 8<$$',, ||,  eCcN34,  	, 
 ,  ,  !%,  
tELL!5tELL7I)I#JJ	K, ` ./$#	3S	>*  	 S$ S rJ   c                    SU ;   a  U $ SS K nU R                  SU 5      n U R                  SU 5      n 0 nU R                  5        H  u  pEUR                  SS U5      nUR                  SS U5      nUR                  S	S
 U5      nUR                  SS U5      nUR                  SS U5      nUR                  SS U5      nUR	                  S5      (       a  UR                  5       R                  S5      nXSU'   M     U$ )Nzbody.conv1.conv.weightr   model
state_dictzconv(\d+)\.0.0c                 >    S[        U R                  S5      5       S3$ Nconvr   .convrY   grouprN   s    rH   <lambda>&checkpoint_filter_fn.<locals>.<lambda>k  s    $s1771:6Gu0MrJ   zconv(\d+)\.0.1c                 >    S[        U R                  S5      5       S3$ Nr   r   .bnr   r   s    rH   r   r   l  s    $s1771:6Gs0KrJ   zconv(\d+)\.0c                 >    S[        U R                  S5      5       S3$ r   r   r   s    rH   r   r   m  s    S_4EU.KrJ   zconv(\d+)\.1c                 >    S[        U R                  S5      5       S3$ r   r   r   s    rH   r   r   n  s    S_4ES.IrJ   zdownsample\.(\d+)\.0c                 >    S[        U R                  S5      5       S3$ )Ndownsample.r   r   r   r   s    rH   r   r   o  s    CPQ
OCTTY6ZrJ   zdownsample\.(\d+)\.1c                 >    S[        U R                  S5      5       S3$ )Nr   r   r   r   r   s    rH   r   r   p  s    CPQ
OCTTW6XrJ   z	bn.weightgh㈵>)regetitemssubendswithabsadd)r   r   r   out_dictkvs         rH   checkpoint_filter_fnr  b  s    :-4Jj9JH  "FF$&MqQFF$&KQOFF?$KQOFF?$I1MFF*,Z\]^FF*,XZ[\::k""D!A # OrJ   c           	      D    [        [        U U4[        [        SSS9S.UD6$ )N)r   rv   r,   r4   T)out_indicesflatten_sequential)pretrained_filter_fnfeature_cfg)r   r   r  r   )variant
pretrainedkwargss      rH   _create_tresnetr  x  s6     2\dK  rJ   c                 "    U SSSSSSSSS	S
S.UE$ )Nr   )r,      r  )   r  g      ?bilinear)rS   rS   rS   )r   r   r   zbody.conv1.convzhead.fcz
apache-2.0)urlrn   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierlicense )r  r  s     rH   _cfgr    s2    4}SYJ\'y  rJ   ztimm/)	hf_hub_idi+  )r   rn   )r,     r!  )   r"  )r  r  r   )
ztresnet_m.miil_in21k_ft_in1ktresnet_m.miil_in21kztresnet_m.miil_in1kztresnet_l.miil_in1kztresnet_xl.miil_in1ktresnet_m.miil_in1k_448tresnet_l.miil_in1k_448tresnet_xl.miil_in1k_448ztresnet_v2_l.miil_in21k_ft_in1kztresnet_v2_l.miil_in21kr$   c           	      F    [        / SQS9n[        SSU 0[        U40 UD6D6$ )N)r,   r4      r,   )rl   r  )	tresnet_mr   r  r  r  
model_argss      rH   r)  r)    s*    ]+J\:\jA[TZA[\\rJ   c           	      H    [        / SQSS9n[        SSU 0[        U40 UD6D6$ )N)r4   r      r,   g333333?rl   ro   r  )	tresnet_lr*  r+  s      rH   r0  r0    s,    ]=J\:\jA[TZA[\\rJ   c           	      H    [        / SQSS9n[        SSU 0[        U40 UD6D6$ )N)r4   r   r   r,   g?r/  r  )
tresnet_xlr*  r+  s      rH   r2  r2    s,    ]=J]J]$zB\U[B\]]rJ   c           	      J    [        / SQSSS9n[        SSU 0[        U40 UD6D6$ )N)r,   r4      r,   r   T)rl   ro   rp   r  )tresnet_v2_lr*  r+  s      rH   r5  r5    s.    ]FJ_j_DD^W]D^__rJ   r#  r$  r%  r&  )tresnet_m_miil_in21ktresnet_m_448tresnet_l_448tresnet_xl_448r   )r|   )/__doc__collectionsr   	functoolsr   typingr   r   r   r   r	   r   torch.nnr9   timm.layersr
   r   r   r   r   r   r   _builderr   	_featuresr   _manipulater   r   	_registryr   r   r   __all__rZ   r   ra   r   r  r  r  default_cfgsr)  r0  r2  r5  rU   r  rJ   rH   <module>rF     s   $  5 5   | | | * + 3 Y Y+0 0f5 5p\bii \~, %$(7$; 7F'2'2 73# H   $ H  !% H! (,g'>#g5I#& * ]W ] ]
 ]W ] ]
 ^g ^ ^
 ` ` `
 H2..0	' rJ   