Ë
    éÓ^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ˆØ'Ò3¨8ˆÙ�F˜Q’J¡(ØˆJØ‰FàˆJØˆŒ
ä—Y‘Y˜x¨ÐVÀ!È%ÑVÐSUÑVˆŒ
Ù˜kÑ0¨RÑ0ˆŒÙ dÔ+ˆŒ	ØCMÐPQÂ>ÑV_œŸ™ a¨¸QÕ?ÐeiˆŒà�:‰:˜Š?Ü"ØØðð ØØ&Ø'Ø"ØØ%Ø%ñð ñˆDŒJô —{‘{“}ˆDŒHÜ Ÿk™k›mˆDŒOÜŸ™›ˆD�IäŸ™ØØð
ð ØØ&Ø'Ø"Øñ
ð ñ
ˆDŒJñ " +Ñ4°Ñ4ˆDŒHØ.8Ð.D™jœlÌ"Ï+É+Ë-ˆDŒOÙ!¨$Ô/ˆDŒIØBLÈqÂ.ÑYbœŸ™ Q¨
¸AÕ>ÐhlˆŒä—Y‘Y˜{¨F°Q©JÐXÀAÈEÑXÐUWÑXˆŒ
Ù˜f q™jÑ/¨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   € Ü�4—8‘8˜X tÓ,Ð8Ü�G‰G�N‰N˜4Ÿ8™8Ÿ?™?Õ+ð 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ø   € Øˆà�j‰j˜‹mˆØ�h‰h�s‹mˆØ�i‰i˜‹nˆà�>‰>Ð%Ø—.‘. Ó%ˆCà�j‰j˜‹oˆØ�h‰h�s‹mˆØ�o‰o˜cÓ"ˆØ�i‰i˜‹nˆà�=‰=Ð$Ø—-‘- Ó$ˆCà�j‰j˜‹oˆØ�h‰h�s‹mˆà�>‰>Ð%Ø—‘˜qÓ!ˆAà�?‰?Ð&Ø—‘ qÓ)ˆHàˆx‰ˆØ�i‰i˜‹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Ø)+¯©Ø*,¯.©.Ø48Ø26Ø48Ø-1ØØñ-R#àðR#ð ðR#ð ð	R#ð
 ! §¡Ñ+ðR#ð ðR#ð ðR#ð ðR#ð ðR#ð ðR#ð ðR#ð ðR#ð ðR#ð % S™MðR#ð ˜BŸI™I‘ðR#ð  ˜RŸY™Y™ð!R#ð" !  b§i¡i¡Ñ1ð#R#ð$ ˜t B§I¡I™Ñ/ð%R#ð& !  b§i¡i¡Ñ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°$À2ÐSTÜ˜a T°UÔ;ô=€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°$À2ÐSTÜ˜a T°UÔ;ô=€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°$À2ÐSTÜ˜a T°UÔ;ô=€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°$À2ÐSTÜ˜a T°UÔ;ô=€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°$À2ÐSTÜ˜a T°TÔ:ô<€Lô Ñg¸JÐgÌ$È|ÑJfÐ_eÑJfÑ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ñ ØØ ¨H¸uÐT]ô_ñ ØØ ¨H¸uÐT]ô_ñ  $ØØô !ñ  $ØØô !ñ!&ó €ð, ñ`¨fò `ó ð`ð ñ`¨fò `ó ð`ð ñ`¨fò `ó ð`ð ña¨vò aó ðað ña¨vò aó ðað ña¨vò aó ðað ñh°fò hó ðhð ñh°fò hó ñhrF   