
    kh                        d Z ddl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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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   c                    t         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  dd      | _         |||z        | _        g }g }t!        | j                        D ]E  }|j#                  t        j                  ||d||	|	|d             |j#                   ||             G t        j$                  |      | _        t        j$                  |      | _        | j                  rt        j*                  d|d      | _        nd | _        t        j                  ||z  |dd      | _         ||      | _        | ||      nd | _         |
d	      | _        || _        y )
Nr   g      P@F)kernel_sizebias   )r   stridepaddingdilationgroupsr   )r   r   r   T)inplace)superr   __init__scaleis_firstmax
num_scalesintmathfloorwidth	expansionnnConv2dconv1bn1rangeappend
ModuleListconvsbns	AvgPool2dpoolconv3bn3serelu
downsample)selfinplanesplanesr   r2   cardinality
base_widthr   r   first_dilation	act_layer
norm_layer
attn_layer_r!   	outplanesr*   r+   i	__class__s                      O/var/www/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/res2net.pyr   zBottle2neck.__init__   s     	k4)+

<j&<a+DJJvd):;<=K
T^^+	'38YYxAER
eem,t' 	*ALLu!FN'%I J JJz%()		*
 ]]5)
==%==61MDIDIYYuu}iQUS
i(+5+A*Y'td+	$    c                     t        | j                  dd       4t        j                  j	                  | j                  j
                         y y )Nweight)getattrr/   r#   initzeros_rC   )r3   s    r@   zero_init_lastzBottle2neck.zero_init_lastJ   s2    488Xt,8GGNN488??+ 9rA   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   )r%   r&   r1   torchsplitr!   	enumeratezipr*   r+   r   r(   r   r-   catr.   r/   r0   r2   )
r3   xshortcutoutspxspospr>   convbns
             r@   forwardzBottle2neck.forwardN   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
rA   )__name__
__module____qualname____doc__r"   r#   ReLUr   rG   rW   __classcell__)r?   s   @r@   r   r      sC     I gg0%d,&rA   r   c                 &    t        t        | |fi |S )N)r   r
   )variant
pretrainedkwargss      r@   _create_res2netrb   w   s    FvFFrA   c                 0    | dddddt         t        ddd
|S )	Ni  )r      rd   )   re   g      ?bilinearr%   fc)
urlnum_classes
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierr   )rh   ra   s     r@   _cfgrr   {   s0    =vJ%.BT  rA   ztimm/)	hf_hub_idzconv1.0)rs   rp   )	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layersr7   
block_argsres2net50_26w_4sdictr   rb   r`   ra   
model_argss      r@   r}   r}      ;     ,2$UV-YJ-zXT*=WPV=WXXrA   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   rx   ry   res2net101_26w_4sr~   r   s      r@   r   r      s;     -B4VW=ZJ.
Yd:>XQW>XYYrA   c           	      n    t        t        g ddt        d            }t        d| fi t        |fi |S )z)Constructs a Res2Net-50 26w6s model.
    rv   r   rw   rx   ry   res2net50_26w_6sr~   r   s      r@   r   r      r   rA   c           	      n    t        t        g ddt        d            }t        d| fi t        |fi |S )z)Constructs a Res2Net-50 26w8s model.
    rv   r      rx   ry   res2net50_26w_8sr~   r   s      r@   r   r      r   rA   c           	      n    t        t        g ddt        d            }t        d| fi t        |fi |S )z)Constructs a Res2Net-50 48w2s model.
    rv   0      rx   ry   res2net50_48w_2sr~   r   s      r@   r   r      r   rA   c           	      n    t        t        g ddt        d            }t        d| fi t        |fi |S )z)Constructs a Res2Net-50 14w8s model.
    rv      r   rx   ry   res2net50_14w_8sr~   r   s      r@   r   r      r   rA   c           	      p    t        t        g dddt        d            }t        d| fi t        |fi |S )zConstruct Res2NeXt-50 4s
    rv   r   r   rx   )rz   r{   r7   r6   r|   
res2next50r~   r   s      r@   r   r      s=     ,1!X\cdXegJ<RtJ7Q&7QRRrA   c                 t    t        t        g dddddt        d            }t        d	| fi t        |fi |S )
Construct Res2Net-50
    rv   r   deepT    r   rx   rz   r{   r7   	stem_typeavg_down
stem_widthr|   
res2net50dr~   r   s      r@   r   r      sA     ,2"A@J <RtJ7Q&7QRRrA   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   rx   r   res2net101dr~   r   s      r@   r   r      sA     -B&"A@J =*SZ8R68RSSrA   )F) )r[   r   rJ   torch.nnr#   	timm.datar   r   _builderr   	_registryr   r	   resnetr
   __all__Moduler   rb   rr   default_cfgsr}   r   r   r   r   r   r   r   r    rA   r@   <module>r      s      A * < 
b")) bJ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rA   