
    RЦiP                     `   S r SSKrSSK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  SSKJr  SSKJrJr  S	/r " S
 S\	R*                  5      r " S S\	R*                  5      r " S S\	R*                  5      r " S S\	R*                  5      r " S S\	R*                  5      r " S S	\	R*                  5      rS)S jrS*S jr\" \" SS9\" SS9\" SS9\" SS9\" SS9\" SS9\" SS9\" SS9\" SS9\" SS9\" SSS9\" SSS9S.5      r\S)S\4S jj5       r\S)S 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\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\4S& jj5       r(\S)S\4S' jj5       r)\S)S\4S( jj5       r*g)+ae  Deep Layer Aggregation and DLA w/ Res2Net
DLA original adapted from Official Pytorch impl at: https://github.com/ucbdrive/dla
DLA Paper: `Deep Layer Aggregation` - https://arxiv.org/abs/1707.06484

Res2Net additions from: https://github.com/gasvn/Res2Net/
Res2Net Paper: `Res2Net: A New Multi-scale Backbone Architecture` - https://arxiv.org/abs/1904.01169
    N)ListOptionalTupleTypeIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)create_classifier   )build_model_with_cfg)register_modelgenerate_default_cfgsDLAc            	          ^  \ rS rSrSr    SS\S\S\S\4U 4S jjjrSS\\R                     S	\\
\R                        4S
 jjrSrU =r$ )DlaBasic   z	DLA Basicinplanesplanesstridedilationc           	      d  > XVS.n[         T	U ]  5         [        R                  " UU4SUUSUS.UD6U l        [        R
                  " U40 UD6U l        [        R                  " SS9U l        [        R                  " UU4SSUSUS.UD6U l	        [        R
                  " U40 UD6U l
        X0l        g )Ndevicedtype   Fkernel_sizer   paddingbiasr   Tinplacer   )super__init__nnConv2dconv1BatchNorm2dbn1ReLUreluconv2bn2r   )
selfr   r   r   r   r   r   _dd	__class__s
            N/var/www/html/ai-image-ml/venv/lib/python3.13/site-packages/timm/models/dla.pyr#   DlaBasic.__init__   s     /YY	
 	
 	

 >>&/B/GGD)	YY	
 	
 	

 >>&/B/    shortcutchildrenc                     Uc  UnU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nXB-  nU R                  U5      nU$ N)r&   r(   r*   r+   r,   r-   xr4   r5   outs        r1   forwardDlaBasic.forward>   sg    Hjjmhhsmiinjjohhsmiin
r3   )r(   r,   r&   r+   r*   r   r   r   NNNN)__name__
__module____qualname____firstlineno____doc__intr#   r   torchTensorr   r;   __static_attributes____classcell__r0   s   @r1   r   r      sx     ## # 	#
 # #J8ELL#9 HUYZ_ZfZfUgLh  r3   r   c                      ^  \ rS rSrSrSr      SS\S\S\S\S\S	\4U 4S
 jjjrSS\\	R                     S\\\	R                        4S jjrSrU =r$ )DlaBottleneckO   zDLA/DLA-X Bottleneck   r   	outplanesr   r   cardinality
base_widthc	           
      >  > XxS.n	[         TU ]  5         X0l        [        [        R
                  " X&S-  -  5      U-  5      n
XR                  -  n
[        R                  " X4SSS.U	D6U l	        [        R                  " U
40 U	D6U l        [        R                  " U
U
4SUUSUUS.U	D6U l        [        R                  " U
40 U	D6U l        [        R                  " X4SSS.U	D6U l        [        R                  " U40 U	D6U l        [        R                   " SS	9U l        g )
Nr   @   r   Fr   r   r   )r   r   r   r   r   groupsTr    )r"   r#   r   rD   mathfloor	expansionr$   r%   r&   r'   r(   r+   r,   conv3bn3r)   r*   )r-   r   rN   r   r   rO   rP   r   r   r/   
mid_planesr0   s              r1   r#   DlaBottleneck.__init__S   s    /Ib$AB[PQ
>>1
YYxUURTU
>>*33YY

 

 


 >>*33YYzV!%VSUV
>>)2r2GGD)	r3   r4   r5   c                 J   Uc  UnU R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nXB-  nU R                  U5      nU$ r7   )r&   r(   r*   r+   r,   rX   rY   r8   s        r1   r;   DlaBottleneck.forwardv   s    Hjjmhhsmiinjjohhsmiinjjohhsmiin
r3   )r(   r,   rY   r&   r+   rX   r*   r   )r   r   r   rR   NNr>   r?   r@   rA   rB   rC   rW   rD   r#   r   rE   rF   r   r;   rG   rH   rI   s   @r1   rK   rK   O   s    I !*!* !* 	!*
 !* !* !* !*F8ELL#9 HUYZ_ZfZfUgLh  r3   rK   c                      ^  \ rS rSrSrSr       SS\S\S\S\S\S	\S
\4U 4S jjjrSS\\	R                     S\\\	R                        4S jjrSrU =r$ )DlaBottle2neck   zaRes2Net/Res2NeXT DLA Bottleneck
Adapted from https://github.com/gasvn/Res2Net/blob/master/dla.py
rM   r   rN   r   r   scalerO   rP   c
                   > XS.n
[         TU ]  5         US:  U l        XPl        [	        [
        R                  " X'S-  -  5      U-  5      nXR                  -  nXl        [        R                  " XU-  4SSS.U
D6U l        [        R                  " X-  40 U
D6U l        [        SUS-
  5      n/ n/ n[        U5       HW  nUR!                  [        R                  " UU4SUUUUSS.U
D65        UR!                  [        R                  " U40 U
D65        MY     [        R"                  " U5      U l        [        R"                  " U5      U l        U R                  (       a  [        R(                  " SUSS9OS U l        [        R                  " X-  U4SSS.U
D6U l        [        R                  " U40 U
D6U l        [        R0                  " S	S
9U l        g )Nr   r   rR   FrS   r   )r   r   r   r   rT   r   )r   r   r   Tr    )r"   r#   is_firstrb   rD   rU   rV   rW   widthr$   r%   r&   r'   r(   maxrangeappend
ModuleListconvsbns	AvgPool2dpoolrX   rY   r)   r*   )r-   r   rN   r   r   rb   rO   rP   r   r   r/   rZ   num_scale_convsrj   rk   r.   r0   s                   r1   r#   DlaBottle2neck.__init__   s    /

Ib$AB[PQ
>>1

YYxe);]QV]Z\]
>>*"4;;a+'ALL
  !"
 
 
 JJr~~j7B78 ( ]]5)
==%MQ]]BLLQvqI`d	YYz19^!RW^[]^
>>)2r2GGD)	r3   r4   r5   c                     Uc  UnU R                  U5      nU R                  U5      nU R                  U5      n[        R                  " X@R
                  S5      n/ nUS   n[        [        U R                  U R                  5      5       H]  u  nu  pUS:X  d  U R                  (       a  XX   nOXuU   -   nU	" U5      nU
" U5      nU R                  U5      nUR                  U5        M_     U R                  S:  aE  U R                  b$  UR                  U R                  US   5      5        OUR                  US   5        [        R                  " US5      nU R                  U5      nU R!                  U5      nXB-  nU R                  U5      nU$ )Nr   r   )r&   r(   r*   rE   splitre   	enumerateziprj   rk   rd   rh   rb   rm   catrX   rY   )r-   r9   r4   r5   r:   spxspospiconvbns              r1   r;   DlaBottle2neck.forward   sG   Hjjmhhsmiinkk#zz1-V&s4::txx'@AMAzAvVa&[bBBB2BJJrN B ::>yy$

499SW-.

3r7#iiQjjohhsmiin
r3   )r(   rY   rk   r&   rX   rj   rd   rm   r*   rb   re   )r   r         r}   NNr>   r^   rI   s   @r1   r`   r`      s     I  -*-* -* 	-*
 -* -* -* -* -*^!8ELL#9 !HUYZ_ZfZfUgLh ! !r3   r`   c            	       l   ^  \ rS rSr  S
S\S\S\S\4U 4S jjjrS\\R                     4S jr
S	rU =r$ )DlaRoot   in_channelsout_channelsr   r4   c                    > XVS.n[         TU ]  5         [        R                  " UUS4SSUS-
  S-  S.UD6U l        [        R
                  " U40 UD6U l        [        R                  " SS9U l        X@l	        g )Nr   r   FrM   )r   r   r   Tr    )
r"   r#   r$   r%   rz   r'   r{   r)   r*   r4   )	r-   r   r   r   r4   r   r   r/   r0   s	           r1   r#   DlaRoot.__init__   s     /II
  1_*
 
	 ..44GGD)	 r3   
x_childrenc                     U R                  [        R                  " US5      5      nU R                  U5      nU R                  (       a  X!S   -  nU R                  U5      nU$ )Nr   r   )rz   rE   ru   r{   r4   r*   )r-   r   r9   s      r1   r;   DlaRoot.forward   sM    IIeii
A./GGAJ==AAIIaLr3   )r{   rz   r*   r4   r>   )r?   r@   rA   rB   rD   boolr#   r   rE   rF   r;   rG   rH   rI   s   @r1   r   r      sU     !! ! 	!
 ! !0$u||"4  r3   r   c                      ^  \ rS rSr          SS\S\\R                     S\S\S\S\S\S	\S
\S\S\S\4U 4S jjjr	SS\
\R                     S\
\\R                        4S jjrSrU =r$ )DlaTreei  levelsblockr   r   r   r   rO   rP   
level_rootroot_dimroot_kernel_sizeroot_shortcutc           	        > XS.n[         TU ]  5         U
S:X  a  SU-  n
U	(       a  X-  n
US:  a  [        R                  " XUS9O[        R                  " 5       U l        [        R                  " 5       U l        [        SXgUS.UD6nUS:X  a  U" X4U40 UD6U l        U" XDS40 UD6U l	        X4:w  aJ  [        R                  " [        R                  " X44SSSS.UD6[        R                  " U40 UD65      U l        [        XX40 UD6U l        OTUR                  [        XS	95        [!        US-
  UUUU4S
S0UD6U l        [!        US-
  UUU4S
X-   0UD6U l	        S U l        Xl        Xl        Xl        g )Nr   r   rM   r   )r   )r   rO   rP   F)r   r   r   )r   r   r    )r"   r#   r$   	MaxPool2dIdentity
downsampleprojectdicttree1tree2
Sequentialr%   r'   r   rootupdater   r   r   r   )r-   r   r   r   r   r   r   rO   rP   r   r   r   r   r   r   r/   cargsr0   s                    r1   r#   DlaTree.__init__  s   " /q=<'H#HAG!",,v=QSQ\Q\Q^{{}]hJ]Z\]Q;{&JEJDJ|1FFDJ*  "}}IIkcQqW\c`bcNN<626 8  8H^[]^DILL/?]^ 
  DJ !
	
 "0 DJ DI$ r3   r4   r5   c                 l   Uc  / nU R                  U5      nU R                  U5      nU R                  (       a  UR                  U5        U R	                  X5      nU R
                  b(  U R                  U5      nU R                  Xe/U-   5      nU$ UR                  U5        U R                  US U5      nU$ r7   )r   r   r   rh   r   r   r   )r-   r9   r4   r5   bottomx1x2s          r1   r;   DlaTree.forwardE  s    H#<<'??OOF#ZZ$99 BB		2(X-.A  OOB

2tX.Ar3   )r   r   r   r   r   r   r   r   )
r   r   r   rR   Fr   r   FNNr>   )r?   r@   rA   rB   rD   r   r$   Moduler   r#   r   rE   rF   r   r;   rG   rH   rI   s   @r1   r   r     s       $$%"';; 		?; 	;
 ; ; ; ; ; ; ; ";  ; ;z8ELL#9 HUYZ_ZfZfUgLh  r3   r   c                     ^  \ rS rSrSSSSSS\SS	S
S
4S\\S4   S\\S4   S\S\S\S\S\S\S\\	R                     S\S\4U 4S jjjrS(S\S\S\S\S\4
S 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S# rS)S$\4S% jjrS& rS'rU =r$ ),r   iV        r   avgr   rR   Fg        Nr   .channelsoutput_stridenum_classesin_chansglobal_poolrO   rP   r   shortcut_root	drop_ratec                   > XS.n[         TU ]  5         X l        X@l        XPl        Xpl        Xl        US:X  d   e[        R                  " [        R                  " XRS   4SSSSS.UD6[        R                  " US   40 UD6[        R                  " S	S
95      U l        U R                  " US   US   US   40 UD6U l        U R                  " US   US   US   4SS0UD6U l        [!        SXxU
S.UD6n[#        US   XS   US   S4SS0UD6U l        [#        US   XS   US   S4SS	0UD6U l        [#        US   XS   US   S4SS	0UD6U l        [#        US   XS   US   S4SS	0UD6U l        [!        US   SSS9[!        US   SSS9[!        US   SSS9[!        US   SSS9[!        US   SSS9[!        US   SSS9/U l        US   =U l        U l        [3        U R.                  U R                  4US	US.UD6u  U l        U l        U l        U(       a  [        R:                  " S5      O[        R<                  " 5       U l        U RA                  5        H  n[C        U[        R                  5      (       ak  URD                  S   URD                  S   -  URF                  -  nURH                  RJ                  RM                  S[N        RP                  " SU-  5      5        M  [C        U[        R                  5      (       d  M  URH                  RJ                  RS                  S5        URT                  RJ                  RW                  5         M     g )Nr   r   r      r   r   F)r   r   r   r   Tr    r   rM   )rO   rP   r   r   r}      level0)num_chs	reductionmodulelevel1level2r~   level3   level4level5rq   )	pool_typeuse_convr   g       @r   ),r"   r#   r   r   r   rO   rP   r$   r   r%   r'   r)   
base_layer_make_conv_levelr   r   r   r   r   r   r   r   feature_infonum_featureshead_hidden_sizer
   r   	head_dropfcFlattenr   flattenmodules
isinstancer   r   weightdatanormal_rU   sqrtfill_r   zero_)r-   r   r   r   r   r   r   rO   rP   r   r   r   r   r   r/   r   mnr0   s                     r1   r#   DLA.__init__W  s/     / & &$"""--IIhb1aV[b_abNN8A;-"-GGD!

 ++HQK!fQiVSUV++HQK!fQi`XY`]_`gS`gdfgfQiXa[!gX]gafgfQiXa[!fX\f`effQiXa[!fX\f`effQiXa[!fX\f`ef!(C!(C!(C!(C!8D!8D
 5=RL@D14E5
 "5
 5
1$.$' )4rzz!}A!RYY''MM!$q}}Q'77!..H%%a26):;Ar~~..##A&!!#  r3   r   r   rj   r   r   c                    XgS.n/ n	[        U5       Hd  n
U	R                  [        R                  " UU4SU
S:X  a  UOSUSUS.UD6[        R                  " U40 UD6[        R
                  " SS9/5        UnMf     [        R                  " U	6 $ )	Nr   r   r   r   Fr   Tr    )rg   extendr$   r%   r'   r)   r   )r-   r   r   rj   r   r   r   r   r/   r   ry   s              r1   r   DLA._make_conv_level  s    /uANN			 !"%&!V6$%	 	 v,,%' ( H  }}g&&r3   c                 0    [        SU(       a  SO/ SQS9nU$ )Nz^base_layer^level(\d+)))z^level(\d+)\.tree(\d+)N)z^level(\d+)\.root)rM   )r   )r   )stemblocks)r   )r-   coarsematchers      r1   group_matcherDLA.group_matcher  s     %+> 2
 r3   c                      U(       a   S5       eg )Nz$gradient checkpointing not supportedr   )r-   enables     r1   set_grad_checkpointingDLA.set_grad_checkpointing  s    AAAz6r3   returnc                     U R                   $ r7   )r   )r-   s    r1   get_classifierDLA.get_classifier  s    wwr3   c                     Xl         [        U R                  U R                   USS9u  U l        U l        U(       a  [
        R                  " S5      U l        g [
        R                  " 5       U l        g )NT)r   r   r   )	r   r
   r   r   r   r$   r   r   r   )r-   r   r   s      r1   reset_classifierDLA.reset_classifier  sP    &$5t//;QU%W!$'(3rzz!}r3   c                     U R                  U5      nU R                  U5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU R                  U5      nU$ r7   )r   r   r   r   r   r   r   r-   r9   s     r1   forward_featuresDLA.forward_features  sc    OOAKKNKKNKKNKKNKKNKKNr3   
pre_logitsc                     U R                  U5      nU R                  U5      nU(       a  U R                  U5      $ U R                  U5      nU R                  U5      $ r7   )r   r   r   r   )r-   r9   r   s      r1   forward_headDLA.forward_head  sL    QNN1<<?"GGAJ||Ar3   c                 J    U R                  U5      nU R                  U5      nU$ r7   )r   r   r   s     r1   r;   DLA.forward  s'    !!!$a r3   )r   rP   rO   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r=   F)T)r   )r?   r@   rA   rB   r`   r   rD   strr   r$   r   r   floatr#   r   rE   jitignorer   r   r   r   r   r   r;   rG   rH   rI   s   @r1   r   r   V  sv   
 "$#$  %3"'"?$#s(O?$ CHo?$ 	?$
 ?$ ?$ ?$ ?$ ?$ 		??$  ?$ ?$ ?$B' 'c '# 's 'be '( YY
 
 YYB B YY		  GC Gc G$  r3   c                 :    [        [        U U4S[        SS9S.UD6$ )NF)r   rM   r   r}   r   )out_indices)pretrained_strictfeature_cfg)r   r   r   )variant
pretrainedkwargss      r1   _create_dlar     s4      _5  r3   c                 2    U SSSSS[         [        SSSS	.UE$ )
Nr   )r      r  )r   r   g      ?bilinearzbase_layer.0r   zbsd-3-clause)urlr   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierlicenser   )r  r   s     r1   _cfgr    s2    =vJ%.B$D^  r3   ztimm/)	hf_hub_idunknown)r  r  )z
dla34.in1kzdla46_c.in1kzdla46x_c.in1kzdla60x_c.in1kz
dla60.in1kzdla60x.in1kzdla102.in1kzdla102x.in1kzdla102x2.in1kzdla169.in1kzdla60_res2net.in1kzdla60_res2next.in1kr   c           	      R    [        SS[        SSS9n[        SU 40 [        U40 UD6D6$ )Nr   r   r   rM   r   r   r   r            i   r      r   r   r   rO   rP   dla60_res2netr   r`   r   r   r   
model_argss      r1   r  r    s7    !,I!<J 
Qd:6P6PQQr3   c           	      R    [        SS[        SSS9n[        SU 40 [        U40 UD6D6$ )Nr  r  r~   r}   r  dla60_res2nextr  r  s      r1   r  r    s8    !,I!;J 'RtJ7Q&7QRRr3   c           	      V    [        / SQ/ SQ[        S9n[        SU 40 [        U40 UD6D6$ )Nr   r   r   rM   rM   r   )r   r   rR   r  r  r  r   r   r   dla34)r   r   r   r  s      r1   r"  r"    s1    !,GxYJw
Id:.H.HIIr3   c           	      V    [        / SQ/ SQ[        S9n[        SU 40 [        U40 UD6D6$ )Nr   r   r   rR   rR   r  r  r!  dla46_cr   rK   r   r  s      r1   r%  r%    s1    !,Fm]Jy*KZ0J60JKKr3   c           	      Z    [        / SQ/ SQ[        SSS9n[        SU 40 [        U40 UD6D6$ )Nr   r$  r   r}   r  dla46x_cr&  r  s      r1   r(  r(  #  7    !,F;J z:Lj1KF1KLLr3   c           	      Z    [        / SQ/ SQ[        SSS9n[        SU 40 [        U40 UD6D6$ )Nr  r$  r   r}   r  dla60x_cr&  r  s      r1   r+  r+  +  r)  r3   c           	      V    [        / SQ/ SQ[        S9n[        SU 40 [        U40 UD6D6$ )Nr  r  r!  dla60r&  r  s      r1   r-  r-  3  s3    !,IJ w
Id:.H.HIIr3   c           	      Z    [        / SQ/ SQ[        SSS9n[        SU 40 [        U40 UD6D6$ )Nr  r  r   r}   r  dla60xr&  r  s      r1   r/  r/  ;  s7    !,I;J xJtJ/I&/IJJr3   c           	      X    [        / SQ/ SQ[        SS9n[        SU 40 [        U40 UD6D6$ )Nr   r   r   r   r}   r   r  Tr   r   r   r   dla102r&  r  s      r1   r3  r3  C  5    !,I41J xJtJ/I&/IJJr3   c           	      \    [        / SQ/ SQ[        SSSS9n[        SU 40 [        U40 UD6D6$ )Nr1  r  r   r}   Tr   r   r   rO   rP   r   dla102xr&  r  s      r1   r7  r7  K  s:    !,IOJ y*KZ0J60JKKr3   c           	      \    [        / SQ/ SQ[        SSSS9n[        SU 40 [        U40 UD6D6$ )Nr1  r  rR   r}   Tr6  dla102x2r&  r  s      r1   r9  r9  S  s:    !,IOJ z:Lj1KF1KLLr3   c           	      X    [        / SQ/ SQ[        SS9n[        SU 40 [        U40 UD6D6$ )N)r   r   rM   r   r   r   r  Tr2  dla169r&  r  s      r1   r;  r;  [  r4  r3   r   ) )+rC   rU   typingr   r   r   r   rE   torch.nnr$   	timm.datar   r	   timm.layersr
   _builderr   	_registryr   r   __all__r   r   rK   r`   r   r   r   r   r  default_cfgsr  r  r"  r%  r(  r+  r-  r/  r3  r7  r9  r;  r   r3   r1   <module>rE     sy    . .   A ) * <'6ryy 6r9BII 9xVRYY Vr bii  FLbii L^F")) FR %)7+G,G,)'*'*7+G,'*)D'9E&   R R R S S J J J L3 L L MC M M MC M M J J J K# K K K# K K L3 L L MC M M K# K Kr3   