
    ^jP                     v   d Z ddlZddl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 ddlmZ ddlmZmZ d	gZ G d
 de	j*                        Z G d de	j*                        Z G d de	j*                        Z G d de	j*                        Z G d de	j*                        Z G d d	e	j*                        Zd)dZd*dZ e ed       ed       ed       ed       ed       ed       ed       ed       ed       ed       edd       edd      d      Zed)defd       Zed)d       Z ed)defd       Z!ed)defd        Z"ed)defd!       Z#ed)defd"       Z$ed)defd#       Z%ed)defd$       Z&ed)defd%       Z'ed)defd&       Z(ed)defd'       Z)ed)defd(       Z*y)+af   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            	            e Zd ZdZ	 	 	 	 d
dedededef fdZddeej                     dee	ej                        fd	Z
 xZS )DlaBasicz	DLA Basicinplanesplanesstridedilationc           	      d   ||d}t         	|           t        j                  ||fd||d|d|| _        t        j
                  |fi || _        t        j                  d      | _        t        j                  ||fdd|d|d|| _	        t        j
                  |fi || _
        || _        y )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
            Z/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/dla.pyr"   zDlaBasic.__init__   s     /YY	
 	
 	

 >>&/B/GGD)	YY	
 	
 	

 >>&/B/    shortcutchildrenc                     ||}| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }||z  }| j                  |      }|S N)r%   r'   r)   r*   r+   r,   xr2   r3   outs        r0   forwardzDlaBasic.forward>   si    Hjjmhhsmiinjjohhsmxiin
r1   r   r   NNNN)__name__
__module____qualname____doc__intr"   r   torchTensorr   r9   __classcell__r/   s   @r0   r   r      sn     ## # 	#
 #J8ELL#9 HUYZ_ZfZfUgLh r1   r   c                        e Zd ZdZdZ	 	 	 	 	 	 ddedededededef fd	Zdd
eej                     dee
ej                        fdZ xZS )DlaBottleneckzDLA/DLA-X Bottleneck   r   	outplanesr   r   cardinality
base_widthc	           
      @   ||d}	t         |           || _        t        t	        j
                  ||dz  z        |z        }
|
| j                  z  }
t        j                  ||
fddd|	| _	        t        j                  |
fi |	| _        t        j                  |
|
fd||d||d|	| _        t        j                  |
fi |	| _        t        j                  |
|fddd|	| _        t        j                  |fi |	| _        t        j                   d	      | _        y )
Nr   @   r   Fr   r   r   )r   r   r   r   r   groupsTr   )r!   r"   r   r@   mathfloor	expansionr#   r$   r%   r&   r'   r*   r+   conv3bn3r(   r)   )r,   r   rH   r   r   rI   rJ   r   r   r.   
mid_planesr/   s              r0   r"   zDlaBottleneck.__init__S   s    /Ib$AB[PQ
4>>1
YYxUURTU
>>*33YY

 

 


 >>*33YYz9V!%VSUV
>>)2r2GGD)	r1   r2   r3   c                 J   ||}| j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }| j                  |      }| j                  |      }||z  }| j                  |      }|S r5   )r%   r'   r)   r*   r+   rR   rS   r6   s        r0   r9   zDlaBottleneck.forwardv   s    Hjjmhhsmiinjjohhsmiinjjohhsmxiin
r1   )r   r   r   rL   NNr;   r<   r=   r>   r?   rQ   r@   r"   r   rA   rB   r   r9   rC   rD   s   @r0   rF   rF   O   s    I !*!* !* 	!*
 !* !* !*F8ELL#9 HUYZ_ZfZfUgLh r1   rF   c                        e Zd ZdZdZ	 	 	 	 	 	 	 ddedededededed	ef fd
Zddeej                     dee
ej                        fdZ xZS )DlaBottle2neckzj Res2Net/Res2NeXT DLA Bottleneck
    Adapted from https://github.com/gasvn/Res2Net/blob/master/dla.py
    rG   r   rH   r   r   scalerI   rJ   c
                    ||	d}
t         |           |dkD  | _        || _        t	        t        j                  ||dz  z        |z        }|| j                  z  }|| _        t        j                  |||z  fddd|
| _        t        j                  ||z  fi |
| _        t        d|dz
        }g }g }t        |      D ]T  }|j!                  t        j                  ||fd||||dd|
       |j!                  t        j                  |fi |
       V t        j"                  |      | _        t        j"                  |      | _        | j                  rt        j(                  d|d      nd | _        t        j                  ||z  |fddd|
| _        t        j                  |fi |
| _        t        j0                  d	
      | _        y )Nr   r   rL   FrM   r   )r   r   r   r   rN   r   )r   r   r   Tr   )r!   r"   is_firstrY   r@   rO   rP   rQ   widthr#   r$   r%   r&   r'   maxrangeappend
ModuleListconvsbns	AvgPool2dpoolrR   rS   r(   r)   )r,   r   rH   r   r   rY   rI   rJ   r   r   r.   rT   num_scale_convsra   rb   r-   r/   s                   r0   r"   zDlaBottle2neck.__init__   s    /

Ib$AB[PQ
4>>1

YYxe);]QV]Z\]
>>*u"4;;a+' 	9ALL
  !"
 
 
 JJr~~j7B78	9 ]]5)
==%MQ]]BLLQvqI`d	YYzE19^!RW^[]^
>>)2r2GGD)	r1   r2   r3   c                    ||}| j                  |      }| j                  |      }| j                  |      }t        j                  || j
                  d      }g }|d   }t        t        | j                  | j                              D ]Y  \  }\  }	}
|dk(  s| j                  r||   }n|||   z   } |	|      } |
|      }| j                  |      }|j                  |       [ | j                  dkD  rD| j                  $|j                  | j                  |d                n|j                  |d          t        j                  |d      }| j                  |      }| j!                  |      }||z  }| j                  |      }|S )Nr   r   )r%   r'   r)   rA   splitr\   	enumeratezipra   rb   r[   r_   rY   rd   catrR   rS   )r,   r7   r2   r3   r8   spxspospiconvbns              r0   r9   zDlaBottle2neck.forward   sU   Hjjmhhsmiinkk#tzz1-V&s4::txx'@A 	MAzbAvV#a&[bBBB2BJJrN	 ::>yy$

499SW-.

3r7#iiQjjohhsmxiin
r1   )r   r         rr   NNr;   rV   rD   s   @r0   rX   rX      s     I  -*-* -* 	-*
 -* -* -* -*^!8ELL#9 !HUYZ_ZfZfUgLh !r1   rX   c            	       \     e Zd Z	 	 ddedededef fdZdeej                     fdZ	 xZ
S )	DlaRootin_channelsout_channelsr   r2   c                     ||d}t         |           t        j                  ||dfdd|dz
  dz  d|| _        t        j
                  |fi || _        t        j                  d      | _        || _	        y )Nr   r   FrG   )r   r   r   Tr   )
r!   r"   r#   r$   rp   r&   rq   r(   r)   r2   )	r,   rv   rw   r   r2   r   r   r.   r/   s	           r0   r"   zDlaRoot.__init__   s     /II
  1_*
 
	 ..44GGD)	 r1   
x_childrenc                     | j                  t        j                  |d            }| j                  |      }| j                  r||d   z  }| j                  |      }|S )Nr   r   )rp   rA   rk   rq   r2   r)   )r,   ry   r7   s      r0   r9   zDlaRoot.forward   sO    IIeii
A./GGAJ==AAIIaLr1   r;   )r<   r=   r>   r@   boolr"   r   rA   rB   r9   rC   rD   s   @r0   ru   ru      sK     !! ! 	!
 !0$u||"4 r1   ru   c                        e Zd Z	 	 	 	 	 	 	 	 	 	 ddedeej                     dedededededed	ed
ededef fdZdde	e
j                     de	ee
j                        fdZ xZS )DlaTreelevelsblockrv   rw   r   r   rI   rJ   
level_rootroot_dimroot_kernel_sizeroot_shortcutc           	         ||d}t         |           |
dk(  rd|z  }
|	r|
|z  }
|dkD  rt        j                  ||      nt        j                         | _        t        j                         | _        t        d|||d|}|dk(  r ||||fi || _         |||dfi || _	        ||k7  rHt        j                  t        j                  ||fdddd|t        j                  |fi |      | _        t        |
|||fi || _        nY|j                  t        ||	             t!        |dz
  ||||fd
di|| _        t!        |dz
  |||fd
|
|z   i|| _	        d | _        |	| _        |
| _        || _        y )Nr   r   rG   r   )r   )r   rI   rJ   F)r   r   r   )r   r   r    )r!   r"   r#   	MaxPool2dIdentity
downsampleprojectdicttree1tree2
Sequentialr$   r&   ru   rootupdater}   r   r   r~   )r,   r~   r   rv   rw   r   r   rI   rJ   r   r   r   r   r   r   r.   cargsr/   s                    r0   r"   zDlaTree.__init__  s   " /q=<'H#HAG!",,vf=QSQ\Q\Q^{{}]hKJ]Z\]Q;{L&JEJDJ|\1FFDJl*  "}}IIk<cQqW\c`bcNN<626 8  ,8H-^[]^DILL/?}]^ 
  DJ !
	
 "L0 DJ DI$ r1   r2   r3   c                 b   |g }| j                  |      }| j                  |      }| j                  r|j                  |       | j	                  ||      }| j
                  )| j                  |      }| j                  ||g|z         }|S |j                  |       | j                  |d |      }|S r5   )r   r   r   r_   r   r   r   )r,   r7   r2   r3   bottomx1x2s          r0   r9   zDlaTree.forwardE  s    H#<<'??OOF#ZZ8$99 BB		2r(X-.A  OOB

2tX.Ar1   )
r   r   r   rL   Fr   r   FNNr;   )r<   r=   r>   r@   r   r#   Moduler{   r"   r   rA   rB   r   r9   rC   rD   s   @r0   r}   r}     s       $$%"';; 		?; 	;
 ; ; ; ; ; ; ; ";  ;z8ELL#9 HUYZ_ZfZfUgLh r1   r}   c                       e Zd Zddddddeddd	d	fd
eedf   deedf   dededededededeej                     de
def fdZd&dedededede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fd!Zd" Zd'd#e
fd$Zd% Z xZS )*r         r   avgr   rL   Fg        Nr~   .channelsoutput_stridenum_classesin_chansglobal_poolrI   rJ   r   shortcut_root	drop_ratec           
         ||d}t         |           || _        || _        || _        || _        || _        |dk(  sJ t        j                  t        j                  ||d   fddddd|t        j                  |d   fi |t        j                  d	
            | _         | j                  |d   |d   |d   fi || _         | j                  |d   |d   |d   fddi|| _        t!        d|||
d|}t#        |d   |	|d   |d   dfddi|| _        t#        |d   |	|d   |d   dfdd	i|| _        t#        |d   |	|d   |d   dfdd	i|| _        t#        |d   |	|d   |d   dfdd	i|| _        t!        |d   dd      t!        |d   dd      t!        |d   dd      t!        |d   dd      t!        |d   dd      t!        |d   dd      g| _        |d   x| _        | _        t3        | j.                  | j                  f|d	|d|\  | _        | _        | _        |rt        j:                  d      nt        j<                         | _        | jA                         D ]  }tC        |t        j                        ri|jD                  d   |jD                  d   z  |jF                  z  }|jH                  jJ                  jM                  dtO        jP                  d|z               tC        |t        j                        s|jH                  jJ                  jS                  d       |jT                  jJ                  jW                           y )Nr   r   r      r   r   F)r   r   r   r   Tr   r   rG   )rI   rJ   r   r   rr      level0)num_chs	reductionmodulelevel1level2rs   level3   level4level5rg   )	pool_typeuse_convr   g       @r   ),r!   r"   r   r   r   rI   rJ   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   rw   weightdatanormal_rO   sqrtfill_r   zero_)r,   r~   r   r   r   r   r   rI   rJ   r   r   r   r   r   r.   r   mnr/   s                     r0   r"   zDLA.__init__W  sJ     / & &$"""--IIhb1aV[b_abNN8A;-"-GGD!

 ,d++HQK!fQiVSUV+d++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&!!#	$r1   r   r   ra   r   r   c                    ||d}g }	t        |      D ]b  }
|	j                  t        j                  ||fd|
dk(  r|nd|d|d|t        j                  |fi |t        j
                  d      g       |}d t        j                  |	 S )	Nr   r   r   r   Fr   Tr   )r^   extendr#   r$   r&   r(   r   )r,   r   r   ra   r   r   r   r   r.   r   ro   s              r0   r   zDLA._make_conv_level  s    /u 	ANN			 !"%&!V6$%	 	 v,,%' ( H	 }}g&&r1   c                 ,    t        d|rdng d      }|S )Nz^base_layer^level(\d+)))z^level(\d+)\.tree(\d+)N)z^level(\d+)\.root)rG   )r   )r   )stemblocks)r   )r,   coarsematchers      r0   group_matcherzDLA.group_matcher  s     %+> 2
 r1   c                     |rJ d       y )Nz$gradient checkpointing not supportedr   )r,   enables     r0   set_grad_checkpointingzDLA.set_grad_checkpointing  s    AAAz6r1   returnc                     | j                   S r5   )r   )r,   s    r0   get_classifierzDLA.get_classifier  s    wwr1   c                     || _         t        | j                  | j                   |d      \  | _        | _        |rt        j                  d      | _        y t        j                         | _        y )NT)r   r   r   )	r   r
   r   r   r   r#   r   r   r   )r,   r   r   s      r0   reset_classifierzDLA.reset_classifier  sR    &$5t//;QU%W!$'(3rzz!}r1   c                     | j                  |      }| j                  |      }| j                  |      }| j                  |      }| j	                  |      }| j                  |      }| j                  |      }|S r5   )r   r   r   r   r   r   r   r,   r7   s     r0   forward_featureszDLA.forward_features  sc    OOAKKNKKNKKNKKNKKNKKNr1   
pre_logitsc                     | j                  |      }| j                  |      }|r| j                  |      S | j                  |      }| j                  |      S r5   )r   r   r   r   )r,   r7   r   s      r0   forward_headzDLA.forward_head  sL    QNN1<<?"GGAJ||Ar1   c                 J    | j                  |      }| j                  |      }|S r5   )r   r   r   s     r0   r9   zDLA.forward  s'    !!!$a r1   r:   F)T)r   )r<   r=   r>   rX   r   r@   strr   r#   r   r{   floatr"   r   rA   jitignorer   r   r   r   r   r   r9   rC   rD   s   @r0   r   r   V  sl   
 "$#$  %3"'"?$#s(O?$ CHo?$ 	?$
 ?$ ?$ ?$ ?$ ?$ 		??$  ?$ ?$B' 'c '# 's 'be '( YY
 
 YYB B YY		  GC Gc G$ r1   c                 @    t        t        | |fdt        d      d|S )NF)r   rG   r   rr   r   )out_indices)pretrained_strictfeature_cfg)r   r   r   )variant
pretrainedkwargss      r0   _create_dlar     s4      _5  r1   c                 2    | dddddt         t        dddd	|S )
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     r0   _cfgr     s2    =vJ%.B$D^  r1   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           	      X    t        ddt        dd      }t        d| fi t        |fi |S )Nr   r   r   rG   r   r   r   r            i   r      r~   r   r   rI   rJ   dla60_res2netr   rX   r   r   r   
model_argss      r0   r   r     s7    !,I!<J 
Qd:6P6PQQr1   c           	      X    t        ddt        dd      }t        d| fi t        |fi |S )Nr   r   rs   rr   r   dla60_res2nextr  r  s      r0   r  r    s8    !,I!;J 'RtJ7Q&7QRRr1   c           	      \    t        g dg dt              }t        d| fi t        |fi |S )Nr   r   r   rG   rG   r   )r   r   rL   r   r   r   r~   r   r   dla34)r   r   r   r  s      r0   r	  r	    s1    !,GxYJw
Id:.H.HIIr1   c           	      \    t        g dg dt              }t        d| fi t        |fi |S )Nr  r   r   rL   rL   r   r   r  dla46_cr   rF   r   r  s      r0   r  r    s1    !,Fm]Jy*KZ0J60JKKr1   c           	      `    t        g dg dt        dd      }t        d| fi t        |fi |S )Nr  r  r   rr   r   dla46x_cr  r  s      r0   r  r  #  7    !,F;J z:Lj1KF1KLLr1   c           	      `    t        g dg dt        dd      }t        d| fi t        |fi |S )Nr   r  r   rr   r   dla60x_cr  r  s      r0   r  r  +  r  r1   c           	      \    t        g dg dt              }t        d| fi t        |fi |S )Nr   r   r  dla60r  r  s      r0   r  r  3  s3    !,IJ w
Id:.H.HIIr1   c           	      `    t        g dg dt        dd      }t        d| fi t        |fi |S )Nr   r   r   rr   r   dla60xr  r  s      r0   r  r  ;  s7    !,I;J xJtJ/I&/IJJr1   c           	      ^    t        g dg dt        d      }t        d| fi t        |fi |S )Nr   r   r   r   rr   r   r   Tr~   r   r   r   dla102r  r  s      r0   r  r  C  5    !,I41J xJtJ/I&/IJJr1   c           	      b    t        g dg dt        ddd      }t        d| fi t        |fi |S )Nr  r   r   rr   Tr~   r   r   rI   rJ   r   dla102xr  r  s      r0   r  r  K  s:    !,IOJ y*KZ0J60JKKr1   c           	      b    t        g dg dt        ddd      }t        d| fi t        |fi |S )Nr  r   rL   rr   Tr  dla102x2r  r  s      r0   r   r   S  s:    !,IOJ z:Lj1KF1KLLr1   c           	      ^    t        g dg dt        d      }t        d| fi t        |fi |S )N)r   r   rG   r   r   r   r   Tr  dla169r  r  s      r0   r"  r"  [  r  r1   r   ) )+r?   rO   typingr   r   r   r   rA   torch.nnr#   	timm.datar   r	   timm.layersr
   _builderr   	_registryr   r   __all__r   r   rF   rX   ru   r}   r   r   r   default_cfgsr   r  r	  r  r  r  r  r  r  r  r   r"  r   r1   r0   <module>r,     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r1   