
    NgH                        d Z ddlZddlmZmZ ddlZddlmZ ddlmc 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           e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+dS )+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IMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)create_classifier   )build_model_with_cfg)register_modelgenerate_default_cfgsDLAc                   n     e Zd ZdZd fd	Zd	deej                 deeej                          fdZ	 xZ
S )
DlaBasicz	DLA Basicr	   c           	      |   t          t          |                                            t          j        ||d||d|          | _        t          j        |          | _        t          j        d          | _	        t          j        ||dd|d|          | _
        t          j        |          | _        || _        d S )N   Fkernel_sizestridepaddingbiasdilationTinplacer	   )superr   __init__nnConv2dconv1BatchNorm2dbn1ReLUreluconv2bn2r   )selfinplanesplanesr   r   _	__class__s         K/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/dla.pyr   zDlaBasic.__init__   s    h&&(((Yf!8%(L L L
 >&))GD)))	YFhUXG G G
 >&))    Nshortcutchildrenc                    ||}|                      |          }|                     |          }|                     |          }|                     |          }|                     |          }||z  }|                     |          }|S N)r   r    r"   r#   r$   r%   xr,   r-   outs        r*   forwardzDlaBasic.forward'   su    Hjjmmhhsmmiinnjjoohhsmmxiinn
r+   r	   r	   NN)__name__
__module____qualname____doc__r   r   torchTensorr   r3   __classcell__r)   s   @r*   r   r      s        O      8EL#9 HUYZ_ZfUgLh        r+   r   c                   r     e Zd ZdZdZd
 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	   @   c           
      L   t          t          |                                            || _        t	          t          j        ||dz  z            |z            }|| j        z  }t          j	        ||dd          | _
        t          j        |          | _        t          j	        ||d||d||          | _        t          j        |          | _        t          j	        ||dd          | _        t          j        |          | _        t          j        d          | _        d S )	NrA   r	   Fr   r   r   )r   r   r   r   r   groupsTr   )r   r?   r   r   intmathfloor	expansionr   r   r   r   r    r#   r$   conv3bn3r!   r"   )	r%   r&   	outplanesr   r   cardinality
base_width
mid_planesr)   s	           r*   r   zDlaBottleneck.__init__<   s   mT""++---Ib$ABB[PQQ
4>1
YxOOO
>*--Y
8%(S^` ` `
 >*--Yz9!%PPP
>),,GD)))			r+   Nr,   r-   c                    ||}|                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }||z  }|                     |          }|S r/   )r   r    r"   r#   r$   rI   rJ   r0   s        r*   r3   zDlaBottleneck.forwardL   s    Hjjmmhhsmmiinnjjoohhsmmiinnjjoohhsmmxiinn
r+   )r	   r	   r	   rA   r5   r6   r7   r8   r9   rH   r   r   r:   r;   r   r3   r<   r=   s   @r*   r?   r?   8   s        I* * * * * *  8EL#9 HUYZ_ZfUgLh        r+   r?   c                   r     e Zd ZdZdZd 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
    r@   r	         c                    t          t          |                                            |dk    | _        || _        t          t          j        ||dz  z            |z            }|| j        z  }|| _	        t          j        |||z  dd          | _        t          j        ||z            | _        t          d|dz
            }	g }
g }t!          |	          D ]X}|
                    t          j        ||d||||d                     |                    t          j        |                     Yt          j        |
          | _        t          j        |          | _        | j        rt          j        d|d          nd | _        t          j        ||z  |dd          | _        t          j        |          | _        t          j        d	          | _        d S )
Nr	   rA   FrC   r   )r   r   r   r   rD   r   )r   r   r   Tr   )r   rR   r   is_firstscalerE   rF   rG   rH   widthr   r   r   r   r    maxrangeappend
ModuleListconvsbns	AvgPool2dpoolrI   rJ   r!   r"   )r%   r&   rK   r   r   rW   rL   rM   rN   num_scale_convsr]   r^   r(   r)   s                r*   r   zDlaBottle2neck.__init__g   s   nd##,,...

Ib$ABB[PQQ
4>1

Yxe);QVWWW
>*u"455a++'' 	3 	3ALLJAx(;]bd d d e e e JJr~j112222]5))
=%%MQ]dBLQvqIIII`d	YzE19!RWXXX
>),,GD)))			r+   Nr,   r-   c                 b   ||}|                      |          }|                     |          }|                     |          }t          j        || j        d          }g }|d         }t          t          | j        | j	                            D ]i\  }\  }	}
|dk    s| j
        r	||         }n|||         z   } |	|          } |
|          }|                     |          }|                    |           j| j        dk    rQ| j        /|                    |                     |d                              n|                    |d                    t          j        |d          }|                     |          }|                     |          }||z  }|                     |          }|S )Nr	   r   )r   r    r"   r:   splitrX   	enumeratezipr]   r^   rV   r[   rW   r`   catrI   rJ   )r%   r1   r,   r-   r2   spxspospiconvbns              r*   r3   zDlaBottle2neck.forward   s   Hjjmmhhsmmiinnk#tz1--V&s4:tx'@'@AA 	 	MAzbAvvvV#a&[bBBB2BJJrNNNN:>>y$

499SW--....

3r7###iQjjoohhsmmxiinn
r+   )r	   r	   rS   rT   rS   r5   rP   r=   s   @r*   rR   rR   a   s          I* * * * * *6! !8EL#9 !HUYZ_ZfUgLh ! ! ! ! ! ! ! !r+   rR   c                   @     e Zd Z fdZdeej                 fdZ xZS )DlaRootc           	         t          t          |                                            t          j        ||ddd|dz
  dz            | _        t          j        |          | _        t          j        d          | _	        || _
        d S )Nr	   Fr@   )r   r   r   Tr   )r   ro   r   r   r   rl   r   rm   r!   r"   r,   )r%   in_channelsout_channelsr   r,   r)   s        r*   r   zDlaRoot.__init__   s    gt%%'''IqWX]^H^` ` `	...GD)))	 r+   
x_childrenc                     |                      t          j        |d                    }|                     |          }| j        r||d         z  }|                     |          }|S )Nr	   r   )rl   r:   rg   rm   r,   r"   )r%   rs   r1   s      r*   r3   zDlaRoot.forward   sZ    IIei
A..//GGAJJ= 	AAIIaLLr+   )	r6   r7   r8   r   r   r:   r;   r3   r<   r=   s   @r*   ro   ro      sZ        ! ! ! ! !$u|"4        r+   ro   c                   z     e Zd Z	 	 	 	 	 	 	 	 d
 fd	Zddeej                 deeej                          fd	Z xZ	S )DlaTreer	   rA   Fr   c           	      4   t          t          |                                            |
dk    rd|z  }
|	r|
|z  }
|dk    rt          j        ||          nt          j                    | _        t          j                    | _        t          |||          }|dk    r ||||fi || _	         |||dfi || _
        ||k    rCt          j        t          j        ||ddd          t          j        |                    | _        t          |
|||          | _        nc|                    t          ||                     t          |dz
  ||||fd	di|| _	        t          |dz
  |||fd	|
|z   i|| _
        d | _        |	| _        |
| _        || _        d S )
Nr   r@   r	   r   )r   rL   rM   F)r   r   r   )root_kernel_sizeroot_shortcutroot_dim)r   rv   r   r   	MaxPool2dIdentity
downsampleprojectdicttree1tree2
Sequentialr   r   ro   rootupdate
level_rootr{   levels)r%   r   blockrq   rr   r   r   rL   rM   r   r{   ry   rz   cargsr)   s                 r*   r   zDlaTree.__init__   s    	gt%%'''q==<'H 	$#HAG!",vf====QSQ\Q^Q^{}}hKJWWWQ;;{L&JJEJJDJ|\1FFFFDJl**  "}Ik<QqW\]]]N<00 2  2  ,8H-XXDIILL/?}]]]^^^ 
    DJ !
	 
 "L0  DJ DI$ r+   Nr,   r-   c                    |g }|                      |          }|                     |          }| j        r|                    |           |                     ||          }| j        0|                     |          }|                     ||g|z             }n,|                    |           |                     |d |          }|S r/   )r~   r   r   r[   r   r   r   )r%   r1   r,   r-   bottomx1x2s          r*   r3   zDlaTree.forward   s    H##<<''? 	$OOF###ZZ8$$9 BB		2r(X-..AAOOB

2tX..Ar+   )r	   r	   r	   rA   Fr   r	   Fr5   )
r6   r7   r8   r   r   r:   r;   r   r3   r<   r=   s   @r*   rv   rv      s         8 8 8 8 8 8t 8EL#9 HUYZ_ZfUgLh        r+   rv   c            	            e Zd Zddddddeddf	 fd		Zd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	   rA   Fg        c           
      `   t          t          |                                            || _        || _        || _        || _        |dk    sJ t          j        t          j	        ||d         dddd          t          j
        |d                   t          j        d	                    | _        |                     |d         |d         |d                   | _        |                     |d         |d         |d         d
          | _        t!          |||
          }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        |d|          \  | _        | _        | _        |rt          j        d          nt          j                    | _        |                                  D ]}tC          |t          j	                  rY|j"        d         |j"        d         z  |j#        z  }|j$        j%        &                    dtO          j(        d|z                       utC          |t          j
                  r=|j$        j%        )                    d           |j*        j%        +                                 d S )Nr   r      r	   r   F)r   r   r   r   Tr   r@   rx   )rL   rM   rz   r   rS      level0)num_chs	reductionmodulelevel1level2rT   level3   level4level5rc   )	pool_typeuse_conv	drop_rateg       @),r   r   r   channelsnum_classesrL   rM   r   r   r   r   r!   
base_layer_make_conv_levelr   r   r   rv   r   r   r   r   feature_infonum_featureshead_hidden_sizer   global_pool	head_dropfcFlattenr}   flattenmodules
isinstancer   rr   weightdatanormal_rF   sqrtfill_r   zero_)r%   r   r   output_strider   in_chansr   rL   rM   r   shortcut_rootr   r   mnr)   s                  r*   r   zDLA.__init__  s    	c4!!### &&$""""-Ih1aV[\\\N8A;''GD!!!
 

 ++HQK!fQiPP++HQK!fQiXY+ZZS`aaafQiXa[!ggX]gafggfQiXa[!ffX\f`efffQiXa[!ffX\f`efffQiXa[!ffX\f`eff!(CCC!(CCC!(CCC!(CCC!8DDD!8DDD
 5=RL@D14E!5
 5
 5
1$.$' )4Frz!}}} 	$ 	$A!RY'' $M!$q}Q'77!.H%%a26):):;;;;Ar~.. $##A&&&!!###	$ 	$r+   c                    g }t          |          D ]b}|                    t          j        ||d|dk    r|nd|d|          t          j        |          t          j        d          g           |}ct          j        | S )Nr   r   r	   Fr   Tr   )rZ   extendr   r   r   r!   r   )r%   r&   r'   r]   r   r   r   rk   s           r*   r   zDLA._make_conv_levelB  s    u 	 	ANN	f!%&!VV66$58E E E v&&%%%' ( ( ( HH}g&&r+   c                 4    t          d|rdng d          }|S )Nz^base_layer^level(\d+)))z^level(\d+)\.tree(\d+)N)z^level(\d+)\.root)r@   )r   )r	   )stemblocks)r   )r%   coarsematchers      r*   group_matcherzDLA.group_matcherO  s;    %+ >> 2 2 2
 
 
 r+   Tc                     |r
J d            d S )Nz$gradient checkpointing not supported )r%   enables     r*   set_grad_checkpointingzDLA.set_grad_checkpointing\  s    AAAAAAAAr+   returnc                     | j         S r/   )r   )r%   s    r*   get_classifierzDLA.get_classifier`  s	    wr+   r   r   c                     || _         t          | j        | j         |d          \  | _        | _        |rt          j        d          nt          j                    | _        d S )NT)r   r   r	   )	r   r   r   r   r   r   r   r}   r   )r%   r   r   s      r*   reset_classifierzDLA.reset_classifierd  s]    &$5t/;QU%W %W %W!$'(3Frz!}}}r+   c                 ,   |                      |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|                     |          }|S r/   )r   r   r   r   r   r   r   r%   r1   s     r*   forward_featureszDLA.forward_featuresj  sr    OOAKKNNKKNNKKNNKKNNKKNNKKNNr+   
pre_logitsc                     |                      |          }|                     |          }|r|                     |          S |                     |          }|                     |          S r/   )r   r   r   r   )r%   r1   r   s      r*   forward_headzDLA.forward_headt  s]    QNN1 	#<<??"GGAJJ||Ar+   c                 Z    |                      |          }|                     |          }|S r/   )r   r   r   s     r*   r3   zDLA.forward|  s-    !!!$$a  r+   r4   F)T)r   )r6   r7   r8   rR   r   r   r:   jitignorer   r   r   Moduler   rE   strr   r   boolr   r3   r<   r=   s   @r*   r   r     sZ       
  :$ :$ :$ :$ :$ :$x' ' ' ' Y
 
 
 
 YB B B B Y	    G GC Gc G G G G   $          r+   Fc                 L    t          t          | |fdt          d          d|S )NF)r	   r@   r   rS   r   )out_indices)pretrained_strictfeature_cfg)r
   r   r   )variant
pretrainedkwargss      r*   _create_dlar     sD      _555    r+    c                 4    | dddddt           t          ddd
|S )	Nr   )r      r   )r   r   g      ?bilinearzbase_layer.0r   )
urlr   
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierr   )r   r   s     r*   _cfgr     s5    =vJ%.B$D   r+   ztimm/)	hf_hub_id)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           	      f    t          ddt          dd          }t          d| fi t          |fi |S )Nr	   r	   r	   r@   r   r	   r   r            i   r	      r   r   r   rL   rM   dla60_res2netr   rR   r   r   r   
model_argss      r*   r   r     sM    !,I!< < <J 
QQd:6P6P6P6PQQQr+   c           	      f    t          ddt          dd          }t          d| fi t          |fi |S )Nr   r   rT   rS   r   dla60_res2nextr   r   s      r*   r   r     sN    !,I!; ; ;J 'RRtJ7Q7Q&7Q7QRRRr+   c           	      j    t          g dg dt                    }t          d| fi t          |fi |S )Nr	   r	   r	   r@   r@   r	   )r   r   rA   r   r   r   r   r   r   dla34)r   r   r   r   s      r*   r  r    sU    !!!,G,G,GxY Y YJw
IId:.H.H.H.HIIIr+   c           	      j    t          g dg dt                    }t          d| fi t          |fi |S )Nr   r   r   rA   rA   r   r   r  dla46_cr   r?   r   r   s      r*   r  r    sU    !!!,F,F,Fm] ] ]Jy*KKZ0J0J60J0JKKKr+   c           	      n    t          g dg dt          dd          }t          d| fi t          |fi |S )Nr   r  r   rS   r   dla46x_cr  r   s      r*   r  r    Y    !!!,F,F,F; ; ;J z:LLj1K1KF1K1KLLLr+   c           	      n    t          g dg dt          dd          }t          d| fi t          |fi |S )Nr   r  r   rS   r   dla60x_cr  r   s      r*   r  r    r	  r+   c           	      j    t          g dg dt                    }t          d| fi t          |fi |S )Nr   r   r  dla60r  r   s      r*   r  r    sU    !!!,I,I,I  J w
IId:.H.H.H.HIIIr+   c           	      n    t          g dg dt          dd          }t          d| fi t          |fi |S )Nr   r   r   rS   r   dla60xr  r   s      r*   r  r    sY    !!!,I,I,I; ; ;J xJJtJ/I/I&/I/IJJJr+   c           	      l    t          g dg dt          d          }t          d| fi t          |fi |S )Nr	   r	   r	   r   rS   r	   r   Tr   r   r   r   dla102r  r   s      r*   r  r    W    !!!,I,I,I41 1 1J xJJtJ/I/I&/I/IJJJr+   c           	      p    t          g dg dt          ddd          }t          d| fi t          |fi |S )Nr  r   r   rS   Tr   r   r   rL   rM   r   dla102xr  r   s      r*   r  r    s^    !!!,I,I,IO O OJ y*KKZ0J0J60J0JKKKr+   c           	      p    t          g dg dt          ddd          }t          d| fi t          |fi |S )Nr  r   rA   rS   Tr  dla102x2r  r   s      r*   r  r    s^    !!!,I,I,IO O OJ z:LLj1K1KF1K1KLLLr+   c           	      l    t          g dg dt          d          }t          d| fi t          |fi |S )N)r	   r	   r@   r   r   r	   r   Tr  dla169r  r   s      r*   r  r    r  r+   r   )r   ),r9   rF   typingr   r   r:   torch.nnr   torch.nn.functional
functionalF	timm.datar   r   timm.layersr   _builderr
   	_registryr   r   __all__r   r   r?   rR   ro   rv   r   r   r   default_cfgsr   r   r  r  r  r  r  r  r  r  r  r  r   r+   r*   <module>r'     sD     ! ! ! ! ! ! ! !                 A A A A A A A A ) ) ) ) ) ) * * * * * * < < < < < < < <'    ry   B& & & & &BI & & &RB B B B BRY B B BJ    bi   &I I I I Ibi I I IXz z z z z") z z zz       %$$)))D7+++TG,,,TG,,,$)))4'***4'***D7+++TG,,,4'***$1114'222& &    R R R R R R S S S S J J J J J J L L3 L L L L M MC M M M M M MC M M M M J J J J J J K K# K K K K K K# K K K K L L3 L L L L M MC M M M M K K# K K K K K Kr+   