
    ^j                     (   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	Z	m
Z
 ddlmZ ddlmZmZ ddlmZ g 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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eddefd       Z y)z Res2Net and Res2NeXt
Adapted from Official Pytorch impl at: https://github.com/gasvn/Res2Net/
Paper: `Res2Net: A New Multi-scale Backbone Architecture` - https://arxiv.org/abs/1904.01169
    N)OptionalTypeIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD   )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ej                  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e   de
ej                     dee
ej                        dee
ej                        f fdZd Zd Z xZS )Bottle2neckzj Res2Net/Res2NeXT Bottleneck
    Adapted from https://github.com/gasvn/Res2Net/blob/master/res2net.py
       r   N   inplanesplanesstride
downsamplecardinality
base_widthscaledilationfirst_dilation	act_layer
norm_layer
attn_layerc                    ||d}t         |           || _        |dkD  xs |d u| _        t	        d|dz
        | _        t        t        j                  ||dz  z              |z  }|| _	        || j                  z  }|	xs |}	t        j                  |||z  fddd|| _         |||z  fi || _        g }g }t        | j
                        D ]G  }|j!                  t        j                  ||fd||	|	|dd|       |j!                   ||fi |       I t        j"                  |      | _        t        j"                  |      | _        | j                  rt        j(                  d|d      | _        nd | _        t        j                  ||z  |fddd|| _         ||fi || _        |	 ||fi |nd | _         |
d	
      | _        || _        y )N)devicedtyper   g      P@F)kernel_sizebias   )r    r   paddingr   groupsr!   )r    r   r#   T)inplace)super__init__r   is_firstmax
num_scalesintmathfloorwidth	expansionnnConv2dconv1bn1rangeappend
ModuleListconvsbns	AvgPool2dpoolconv3bn3serelur   )selfr   r   r   r   r   r   r   r   r   r   r   r   r   r   _ddr.   	outplanesr7   r8   i	__class__s                         ^/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/res2net.pyr'   zBottle2neck.__init__   s   $ /

<j&<a+DJJvd):;<=K
T^^+	'38YYxXAEXUWX
eem2r2t' 	0ALL
 &'"
 
 
 JJz%.2./	0 ]]5)
==%==61MDIDIYYuu}iYQUYVXY
i.2.1;1G*Y-"-Td+	$    c                     t        | j                  dd       4t        j                  j	                  | j                  j
                         y y )Nweight)getattrr<   r0   initzeros_rH   )r?   s    rE   zero_init_lastzBottle2neck.zero_init_lastV   s2    488Xt,8GGNN488??+ 9rF   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!                  |      }| j"                  | j#                  |      }| j$                  | j%                  |      }||z  }| j                  |      }|S )Nr   r   )r2   r3   r>   torchsplitr.   	enumeratezipr7   r8   r(   r5   r   r:   catr;   r<   r=   r   )
r?   xshortcutoutspxsposprC   convbns
             rE   forwardzBottle2neck.forwardZ   s~   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77''#,C??&q)Hxiin
rF   )__name__
__module____qualname____doc__r/   r0   ReLUr+   r   Moduler   r'   rL   r\   __classcell__)rD   s   @rE   r   r      s     I .2  ,0)+4848;%;% ;% 	;%
 !+;% ;% ;% ;% ;% %SM;% BII;% !bii1;% !bii1;%z,&rF   r   c                 &    t        t        | |fi |S )N)r	   r   )variant
pretrainedkwargss      rE   _create_res2netrh      s    FvFFrF   c                 2    | dddddt         t        dddd	|S )
Ni  )r"      rj   )   rk   g      ?bilinearr2   fcunknown)urlnum_classes
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierlicenser   )ro   rg   s     rE   _cfgrz      s3    =vJ%.BT  rF   ztimm/)	hf_hub_idzconv1.0)r{   rw   )	zres2net50_26w_4s.in1kzres2net50_48w_2s.in1kzres2net50_14w_8s.in1kzres2net50_26w_6s.in1kzres2net50_26w_8s.in1kzres2net101_26w_4s.in1kzres2next50.in1kzres2net50d.in1kzres2net101d.in1kreturnc           	      n    t        t        g ddt        d            }t        d| fi t        |fi |S )z)Constructs a Res2Net-50 26w4s model.
    r"   r      r"   r   r   r   blocklayersr   
block_argsres2net50_26w_4sdictr   rh   rf   rg   
model_argss      rE   r   r      ;     ,2$UV-YJ-zXT*=WPV=WXXrF   c           	      n    t        t        g ddt        d            }t        d| fi t        |fi |S )z*Constructs a Res2Net-101 26w4s model.
    r"   r      r"   r   r   r   r   res2net101_26w_4sr   r   s      rE   r   r      s;     -B4VW=ZJ.
Yd:>XQW>XYYrF   c           	      n    t        t        g ddt        d            }t        d| fi t        |fi |S )z)Constructs a Res2Net-50 26w6s model.
    r~   r   r   r   r   res2net50_26w_6sr   r   s      rE   r   r      r   rF   c           	      n    t        t        g ddt        d            }t        d| fi t        |fi |S )z)Constructs a Res2Net-50 26w8s model.
    r~   r      r   r   res2net50_26w_8sr   r   s      rE   r   r      r   rF   c           	      n    t        t        g ddt        d            }t        d| fi t        |fi |S )z)Constructs a Res2Net-50 48w2s model.
    r~   0      r   r   res2net50_48w_2sr   r   s      rE   r   r      r   rF   c           	      n    t        t        g ddt        d            }t        d| fi t        |fi |S )z)Constructs a Res2Net-50 14w8s model.
    r~      r   r   r   res2net50_14w_8sr   r   s      rE   r   r      r   rF   c           	      p    t        t        g dddt        d            }t        d| fi t        |fi |S )zConstruct Res2NeXt-50 4s
    r~   r   r   r   )r   r   r   r   r   
res2next50r   r   s      rE   r   r      s=     ,1!X\cdXegJ<RtJ7Q&7QRRrF   c                 t    t        t        g dddddt        d            }t        d	| fi t        |fi |S )
Construct Res2Net-50
    r~   r   deepT    r   r   r   r   r   	stem_typeavg_down
stem_widthr   
res2net50dr   r   s      rE   r   r      sA     ,2"A@J <RtJ7Q&7QRRrF   c                 t    t        t        g dddddt        d            }t        d	| fi t        |fi |S )
r   r   r   r   Tr   r   r   r   res2net101dr   r   s      rE   r   r      sA     -B&"A@J =*SZ8R68RSSrF   )F) )!r`   r,   typingr   r   rO   torch.nnr0   	timm.datar   r   _builderr	   	_registryr
   r   resnetr   __all__rb   r   rh   rz   default_cfgsr   r   r   r   r   r   r   r   r    rF   rE   <module>r      s    !   A * < 
m")) m`G	 %!G4!G4!G4!G4!G4"W5g.g)Dw9E
& 
 YF Y Y ZV Z Z YF Y Y YF Y Y YF Y Y YF Y Y Sf S S Sf S S Tv T TrF   