Ë
    éÓ^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 ¨¡Ó+ˆŒÜ”D—J‘J˜v¨°dÑ):Ñ;Ó<Ó=ÀÑKˆØˆŒ
Ø˜TŸ^™^Ñ+ˆ	Ø'Ò3¨8ˆä—Y‘Y˜x¨°©ÐXÀAÈEÑXÐUWÑXˆŒ
Ù˜e e™mÑ2¨rÑ2ˆŒàˆØˆÜ�t—‘Ó'ò 	0ˆAØ�L‰LœŸ™ØØð
ð ØØ&Ø'Ø"Øñ
ð ñ
ô 
ð �J‰J‘z %Ñ.¨2Ñ.Õ/ð	0ô —]‘] 5Ó)ˆŒ
Ü—=‘= Ó%ˆŒØ�=Š=äŸ™°¸6È1ÔMˆD�IàˆDŒIä—Y‘Y˜u u™}¨iÐYÀQÈUÑYÐVXÑ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   € Ü�4—8‘8˜X tÓ,Ð8Ü�G‰G�N‰N˜4Ÿ8™8Ÿ?™?Õ+ð 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~  € Øˆà�j‰j˜‹mˆØ�h‰h�s‹mˆØ�i‰i˜‹nˆä�k‰k˜#˜tŸz™z¨1Ó-ˆØˆØ�‰VˆÜ&¤s¨4¯:©:°t·x±xÓ'@ÓAò 	‰MˆA‰z��bØ�AŠv˜ŸšØ˜‘V‘à˜#˜a™&‘[�Ù�b“ˆBÙ�B“ˆBØ—‘˜2“ˆBØ�J‰J�r�Nð	ð �:‰:˜Š>Ø�y‰yÐ$Ø—
‘
˜4Ÿ9™9 S¨¡WÓ-Õ.à—
‘
˜3˜r™7Ô#Ü�i‰i˜˜QÓˆà�j‰j˜‹oˆØ�h‰h�s‹mˆà�7‰7ÐØ—'‘'˜#“,ˆCà�?‰?Ð&Ø—‘ qÓ)ˆHàˆx‰ˆØ�i‰i˜‹nˆàˆ
rF   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r/   r0   ÚReLUr+   r   ÚModuler   r'   rL   r\   Ú__classcell__)rD   s   @rE   r   r      sî   ø„ ñð €Ið Ø.2Ø Ø ØØØ,0Ø)+¯©Ø48Ø48ØØñ;%àð;%ð ð;%ð ð	;%ð
 ! §¡Ñ+ð;%ð ð;%ð ð;%ð ð;%ð ð;%ð % S™Mð;%ð ˜BŸI™I‘ð;%ð !  b§i¡i¡Ñ1ð;%ð !  b§i¡i¡Ñ1õ;%òz,ö&rF   r   c                 ó&   — t        t        | |fi |¤ŽS )N)r	   r   )ÚvariantÚ
pretrainedÚkwargss      rE   Ú_create_res2netrh   ƒ   s   € Ü¤¨°ÑF¸vÑ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ÑX¼TÀ*Ñ=WÐPVÑ=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;   € ô Ü¢-¸BÌ4ÐVWÌ=ôZ€JäÐ.°
ÑY¼dÀ:Ñ>XÐQWÑ>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\ÐcdÔXeôg€Jä˜<¨ÑR´t¸JÑ7QÈ&Ñ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ô ˜<¨ÑR´t¸JÑ7QÈ&Ñ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¼¸ZÑ8RÈ6Ñ8RÑ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Ù w¸9Ô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   