
    Ng%                     `   d 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dlmZ  G d	 d
ej                  Zd(dZd)dZ e ed           ed           ed           eddd           eddddd           eddddd           edd           ed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d'S )*a   ResNeSt Models

Paper: `ResNeSt: Split-Attention Networks` - https://arxiv.org/abs/2004.08955

Adapted from original PyTorch impl w/ weights at https://github.com/zhanghang1989/ResNeSt by Hang Zhang

Modified for torchscript compat, and consistency with timm by Ross Wightman
    )nnIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)	SplitAttn   )build_model_with_cfg)register_modelgenerate_default_cfgs)ResNetc                   j     e Zd ZdZdZdddddddddddej        ej        ddddf fd	Zd Z	d	 Z
 xZS )
ResNestBottleneckzResNet Bottleneck
       r   N@   Fc                 @   t          t          |                                            |dk    sJ |J |J |J t          ||dz  z            |z  }|p|}|r|dk    s|
r|}d}nd}|| _        t          j        ||dd          | _         ||          | _         |d          | _	        |dk    r|	rt          j
        d|d	          nd | _        | j        dk    rgt          ||d|||||||

  
        | _        t          j                    | _        t          j                    | _        t          j                    | _        nft          j        ||d||||d          | _         ||          | _        |
 |            nt          j                    | _         |d          | _        |dk    r|	st          j
        d|d	          nd | _        t          j        ||dz  dd          | _         ||dz            | _         |d          | _        || _        d S )Nr   g      P@r   F)kernel_sizebiasT)inplace   )padding)r   strider   dilationgroupsradix
norm_layer
drop_layer)r   r   r   r   r   r   r   )superr   __init__intr   r   Conv2dconv1bn1act1	AvgPool2d	avd_firstr   conv2Identitybn2
drop_blockact2avd_lastconv3bn3act3
downsample)selfinplanesplanesr   r/   r   cardinality
base_widthavdr%   is_firstreduce_firstr   first_dilation	act_layerr   
attn_layeraa_layerr)   	drop_pathgroup_width
avd_stride	__class__s                         O/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/resnest.pyr   zResNestBottleneck.__init__   sj   , 	&&//111q    !!!   &J$4566D'38 	FQJJ(JJFFJ
Yx!%PPP
:k**Id+++	CMPQ>>V_>aQ????ei:??"[aP^'5U_lvx x xDJ {}}DH kmmDODII[aP^'%I I IDJ "z+..DH.8.Djjlll"+--DO!	$///DIBLq..Yb.Q
A>>>>hlY{FQJAERRR
:fQh''Id+++	$    c                     t          | j        dd           +t          j                            | j        j                   d S d S )Nweight)getattrr-   r   initzeros_rC   )r0   s    r@   zero_init_lastz ResNestBottleneck.zero_init_lastW   s<    48Xt,,8GNN48?+++++ 98rA   c                 `   |}|                      |          }|                     |          }|                     |          }| j        |                     |          }|                     |          }|                     |          }|                     |          }|                     |          }| j        |                     |          }| 	                    |          }| 
                    |          }| j        |                     |          }||z  }|                     |          }|S N)r!   r"   r#   r%   r&   r(   r)   r*   r+   r,   r-   r/   r.   )r0   xshortcutouts       r@   forwardzResNestBottleneck.forward[   s    jjmmhhsmmiinn>%..%%Cjjoohhsmmooc""iinn=$--$$Cjjoohhsmm?&q))Hxiinn
rA   )__name__
__module____qualname____doc__	expansionr   ReLUBatchNorm2dr   rG   rM   __classcell__)r?   s   @r@   r   r      s          I g~)=% =% =% =% =% =%~, , ,      rA   r   Fc                 *    t          t          | |fi |S rI   )r	   r   )variant
pretrainedkwargss      r@   _create_resnestrZ   x   s,      	  rA    c                 4    | dddddt           t          ddd
|S )	Ni  )r      r]   )   r^   g      ?bilinearzconv1.0fc)
urlnum_classes
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierr   )ra   rY   s     r@   _cfgrk      s5    =vJ%.Bt   rA   ztimm/)	hf_hub_id)r      rm   )   rn   )rl   rc   rd   )r   @  ro   )
   rp   gJ+?bicubic)rl   rc   rd   re   rf   )r     rr   )   rs   gV-?)rl   rf   )zresnest14d.gluon_in1kzresnest26d.gluon_in1kzresnest50d.in1kzresnest101e.in1kzresnest200e.in1kzresnest269e.in1kzresnest50d_4s2x40d.in1kzresnest50d_1s4x24d.in1kreturnc                     t          t          g ddddddt          ddd	          
          }t          dd| it          |fi |S )z5 ResNeSt-14d model. Weights ported from GluonCV.
    )r   r   r   r   deep    Tr   r      Fr   r5   r%   blocklayers	stem_type
stem_widthavg_downr4   r3   
block_args
resnest14drX   )r   dictr   rZ   rX   rY   model_kwargss      r@   r   r      k     R$2STaTU;;;= = =L __J_$|B^B^W]B^B^___rA   c                     t          t          g ddddddt          ddd	          
          }t          dd| it          |fi |S )z5 ResNeSt-26d model. Weights ported from GluonCV.
    )rx   rx   rx   rx   rv   rw   Tr   r   rx   Fry   rz   
resnest26drX   )r   r   r   s      r@   r   r      r   rA   c                     t          t          g ddddddt          ddd	          
          }t          dd| it          |fi |S )z ResNeSt-50d model. Matches paper ResNeSt-50 model, https://arxiv.org/abs/2004.08955
    Since this codebase supports all possible variations, 'd' for deep stem, stem_width 32, avg in downsample.
    r   r      r   rv   rw   Tr   r   rx   Fry   rz   
resnest50drX   )r   r   r   s      r@   r   r      sk    
 R$2STaTU;;;= = =L __J_$|B^B^W]B^B^___rA   c                     t          t          g ddddddt          ddd          	          }t          dd| it          |fi |S )z ResNeSt-101e model. Matches paper ResNeSt-101 model, https://arxiv.org/abs/2004.08955
     Since this codebase supports all possible variations, 'e' for deep stem, stem_width 64, avg in downsample.
    )r   r      r   rv   r   Tr   rx   Fry   rz   resnest101erX   )r   r   r   s      r@   r   r      sk    
 R$2STaTU;;;= = =L ``Z`4C_C_X^C_C_```rA   c                     t          t          g ddddddt          ddd          	          }t          dd| it          |fi |S )z ResNeSt-200e model. Matches paper ResNeSt-200 model, https://arxiv.org/abs/2004.08955
    Since this codebase supports all possible variations, 'e' for deep stem, stem_width 64, avg in downsample.
    )r      $   r   rv   r   Tr   rx   Fry   rz   resnest200erX   )r   r   r   s      r@   r   r      k    
 R$2STaTU;;;= = =L ``Z`4C_C_X^C_C_```rA   c                     t          t          g ddddddt          ddd          	          }t          dd| it          |fi |S )z ResNeSt-269e model. Matches paper ResNeSt-269 model, https://arxiv.org/abs/2004.08955
    Since this codebase supports all possible variations, 'e' for deep stem, stem_width 64, avg in downsample.
    )r      0   rn   rv   r   Tr   rx   Fry   rz   resnest269erX   )r   r   r   s      r@   r   r      r   rA   c                     t          t          g ddddddt          ddd          	          }t          dd| it          |fi |S )z]ResNeSt-50 4s2x40d from https://github.com/zhanghang1989/ResNeSt/blob/master/ablation.md
    r   rv   rw   T(   rx   r   ry   rz   resnest50d_4s2x40drX   )r   r   r   s      r@   r   r      k     R$2STaTT:::< < <L ggJg$|JfJf_eJfJfgggrA   c                     t          t          g ddddddt          ddd          	          }t          dd| it          |fi |S )z]ResNeSt-50 1s4x24d from https://github.com/zhanghang1989/ResNeSt/blob/master/ablation.md
    r   rv   rw   Tr   r   r   ry   rz   resnest50d_1s4x24drX   )r   r   r   s      r@   r   r      r   rA   N)F)r[   )rQ   torchr   	timm.datar   r   timm.layersr   _builderr	   	_registryr
   r   resnetr   Moduler   rZ   rk   default_cfgsr   r   r   r   r   r   r   r    rA   r@   <module>r      sp          A A A A A A A A ! ! ! ! ! ! * * * * * * < < < < < < < <      c c c c c	 c c cL       %$!TG444!TG444tg... F4 4 4  HuT]_ _ _  HuT]_ _ _  $t !  !  !  $t !  !  !!& &  , ` `f ` ` ` ` ` `f ` ` ` ` ` `f ` ` ` ` a av a a a a a av a a a a a av a a a a h hf h h h h h hf h h h h h hrA   