
    ^j(                        d Z ddlmZm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
    )OptionalType)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ddfdeded	ed
e	ej                     dedededededededede	e   deej                     deej                     de	eej                        de	eej                        de	eej                        de	ej                     f& fdZd Zd Z xZS )ResNestBottleneckzResNet Bottleneck
       r
   N@   Finplanesplanesstride
downsampleradixcardinality
base_widthavd	avd_firstis_firstreduce_firstdilationfirst_dilation	act_layer
norm_layer
attn_layeraa_layer
drop_block	drop_pathc                    ||d}t         |           |dk(  sJ |J d       |J d       t        ||dz  z        |z  }|xs |}|r|dkD  s|
r|}d}nd}|| _        t	        j
                  ||fddd|| _         ||fi || _         |d	
      | _        |dkD  r|	rt	        j                  d|d      nd | _
        | j                  dk\  rgt        ||fd|||||||d|| _        t	        j                         | _        t	        j                         | _        t	        j                         | _        nat	        j
                  ||fd||||dd|| _         ||fi || _        | |       nt	        j                         | _         |d	
      | _        |dkD  r|	st	        j                  d|d      nd | _        t	        j
                  ||dz  fddd|| _         ||dz  fi || _         |d	
      | _        || _        || _        y )N)devicedtyper
   zattn_layer is not supportedzaa_layer is not supportedg      P@r   F)kernel_sizebiasT)inplace   )padding)r)   r   r-   r   groupsr   r!   
drop_layer)r)   r   r-   r   r.   r*   r   )super__init__intr   r   Conv2dconv1bn1act1	AvgPool2dr   r	   conv2Identitybn2r$   act2avd_lastconv3bn3act3r   r%   )selfr   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r'   r(   ddgroup_width
avd_stride	__class__s                            ^/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/resnest.pyr1   zResNestBottleneck.__init__   s<   0 /q   !@#@@!<!<<&J$456D'38FQJ(JFJ
YYxV!%VSUV
k0R0d+	CMPQ>V_aQ?ei::?" &'"%% DJ {{}DH kkmDODI
 &'"
 
DJ "+44DH.8.Djl"++-DO!$/DIBLq.YbQ
A>hlYY{FQJXAEXUWX
fqj/B/d+	$"    c                     t        | j                  dd       4t        j                  j	                  | j                  j
                         y y )Nweight)getattrr>   r   initzeros_rH   )r@   s    rE   zero_init_lastz ResNestBottleneck.zero_init_lastn   s2    488Xt,8GGNN488??+ 9rF   c                 P   |}| j                  |      }| j                  |      }| j                  |      }| j                  | j                  |      }| j	                  |      }| j                  |      }| j                  |      }| j                  |      }| j                  | j                  |      }| j                  |      }| j                  |      }| j                  | j                  |      }| j                  | j                  |      }||z  }| j                  |      }|S N)r4   r5   r6   r   r8   r:   r$   r;   r<   r=   r>   r%   r   r?   )r@   xshortcutouts       rE   forwardzResNestBottleneck.forwardr   s    jjmhhsmiin>>%..%Cjjohhsmooc"iin==$--$Cjjohhsm>>%q!A??&q)Hxiin
rF   )__name__
__module____qualname____doc__	expansionr   ReLUBatchNorm2dr2   r   Moduleboolr   r1   rL   rR   __classcell__)rD   s   @rE   r   r      s    I .2  #" !,0)+*,..482648-1-R#R# R# 	R#
 !+R# R# R# R# R# R# R# R# R# %SMR# BIIR#  RYY!R#" !bii1#R#$ tBII/%R#& !bii1'R#(  		*)R#h,rF   r   c                 &    t        t        | |fi |S rN   )r   r   )variant
pretrainedkwargss      rE   _create_resnestra      s"     	 rF   c                 2    | dddddt         t        dddd	|S )
Ni  )r,      rc   )   rd   g      ?bilinearzconv1.0fcz
apache-2.0)urlnum_classes
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierlicenser   )rg   r`   s     rE   _cfgrr      s3    =vJ%.Bt  rF   ztimm/)	hf_hub_id)r,      rt   )   ru   )rs   ri   rj   )r,   @  rv   )
   rw   gJ+?bicubic)rs   ri   rj   rk   rl   )r,     ry   )   rz   gV-?)rs   rl   )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   r   r   blocklayers	stem_type
stem_widthavg_downr   r   
block_argsr_   )
resnest14ddictr   ra   r_   r`   model_kwargss      rE   r   r      K     R$2STaTU;=L _J_$|B^W]B^__rF   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.
    )r   r   r   r   r}   r~   Tr   r
   r   Fr   r   r_   )
resnest26dr   r   s      rE   r   r      r   rF   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,   r}   r~   Tr   r
   r   Fr   r   r_   )
resnest50dr   r   s      rE   r   r      sK    
 R$2STaTU;=L _J_$|B^W]B^__rF   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,   r}   r   Tr
   r   Fr   r   r_   )resnest101er   r   s      rE   r   r      sK    
 R$2STaTU;=L `Z`4C_X^C_``rF   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,   r}   r   Tr
   r   Fr   r   r_   )resnest200er   r   s      rE   r   r      K    
 R$2STaTU;=L `Z`4C_X^C_``rF   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   ru   r}   r   Tr
   r   Fr   r   r_   )resnest269er   r   s      rE   r   r      r   rF   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   r}   r~   T(   r   r   r   r   r_   )resnest50d_4s2x40dr   r   s      rE   r   r     K     R$2STaTT:<L gJg$|Jf_eJfggrF   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   r}   r~   Tr   r   r
   r   r   r_   )resnest50d_1s4x24dr   r   s      rE   r   r     r   rF   N)F) )rV   typingr   r   torchr   	timm.datar   r   timm.layersr	   _builderr   	_registryr   r   resnetr   rZ   r   ra   rr   default_cfgsr   r   r   r   r   r   r   r    rF   rE   <module>r      s   "  A ! * < {		 {|	 %!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rF   