
    kh%                        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y%)(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                   ~     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  }|xs |}|r|dkD  s|
r|}d}nd}|| _        t        j                  ||dd      | _         ||      | _         |d      | _	        |dkD  r|	rt        j                  d|d	      nd | _        | j                  dk\  rft        ||d|||||||

      | _        t        j                         | _        t        j                         | _        t        j                         | _        n_t        j                  ||d||||d      | _         ||      | _        | |       nt        j                         | _         |d      | _        |dkD  r|	st        j                  d|d	      nd | _        t        j                  ||dz  dd      | _         ||dz        | _         |d      | _        || _        y )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/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/resnest.pyr   zResNestBottleneck.__init__   s   , 	/1q   !!!   &J$456D'38FQJ(JFJ
YYx!%P
k*d+	CMPQ>V_aQ?ei::?"[aP^'5U_lvxDJ {{}DH kkmDODI[aP^'%IDJ "+.DH.8.Djl"++-DO!$/DIBLq.YbQ
A>hlYY{FQJAER
fQh'd+	$    c                     t        | j                  dd       4t        j                  j	                  | j                  j
                         y y )Nweight)getattrr-   r   initzeros_rC   )r0   s    r@   zero_init_lastz ResNestBottleneck.zero_init_lastW   s2    488Xt,8GGNN488??+ 9rA   c                    |}| j                  |      }| j                  |      }| j                  |      }| j                  | j                  |      }| j	                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  | j                  |      }| j                  |      }| j                  |      }| j                  | j                  |      }||z  }| j                  |      }|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mhhsmiin>>%..%Cjjohhsmooc"iin==$--$Cjjohhsm??&q)Hxiin
rA   )__name__
__module____qualname____doc__	expansionr   ReLUBatchNorm2dr   rG   rM   __classcell__)r?   s   @r@   r   r      s\     I gg~~)=%~,rA   r   c                 &    t        t        | |fi |S rI   )r	   r   )variant
pretrainedkwargss      r@   _create_resnestrZ   x   s"     	 rA   c                 0    | 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   )r`   rY   s     r@   _cfgrj      s0    =vJ%.Bt  rA   ztimm/)	hf_hub_id)r      rl   )   rm   )rk   rb   rc   )r   @  rn   )
   ro   gJ+?bicubic)rk   rb   rc   rd   re   )r     rq   )   rr   gV-?)rk   re   )zresnest14d.gluon_in1kzresnest26d.gluon_in1kzresnest50d.in1kzresnest101e.in1kzresnest200e.in1kzresnest269e.in1kzresnest50d_4s2x40d.in1kzresnest50d_1s4x24d.in1kreturnc                 z    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_argsrX   )
resnest14ddictr   rZ   rX   rY   model_kwargss      r@   r   r      K     R$2STaTU;=L _J_$|B^W]B^__rA   c                 z    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.
    )rw   rw   rw   rw   ru   rv   Tr   r   rw   Frx   ry   rX   )
resnest26dr   r   s      r@   r   r      r   rA   c                 z    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   ru   rv   Tr   r   rw   Frx   ry   rX   )
resnest50dr   r   s      r@   r   r      sK    
 R$2STaTU;=L _J_$|B^W]B^__rA   c                 z    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   ru   r   Tr   rw   Frx   ry   rX   )resnest101er   r   s      r@   r   r      sK    
 R$2STaTU;=L `Z`4C_X^C_``rA   c                 z    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   ru   r   Tr   rw   Frx   ry   rX   )resnest200er   r   s      r@   r   r      K    
 R$2STaTU;=L `Z`4C_X^C_``rA   c                 z    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   rm   ru   r   Tr   rw   Frx   ry   rX   )resnest269er   r   s      r@   r   r      r   rA   c                 z    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   ru   rv   T(   rw   r   rx   ry   rX   )resnest50d_4s2x40dr   r   s      r@   r   r      K     R$2STaTT:<L gJg$|Jf_eJfggrA   c                 z    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   ru   rv   Tr   r   r   rx   ry   rX   )resnest50d_1s4x24dr   r   s      r@   r   r      r   rA   N)F) )rQ   torchr   	timm.datar   r   timm.layersr   _builderr	   	_registryr
   r   resnetr   Moduler   rZ   rj   default_cfgsr   r   r   r   r   r   r   r    rA   r@   <module>r      s    A ! * < c		 cL %!G4!G4g. F4  HuT]_  HuT]_  $ !  $ !!& , `f ` ` `f ` ` `f ` ` av a a av a a av a a hf h h hf h hrA   