Ë
    éÓ^jCM  ã                    ó  — d Z ddlmZmZ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mZmZmZ g Z e e edd	d
ddd¬«       edd	dd	dd¬«       edd	dd	dd¬«       edd	dd	dd¬«      fddddd e«       ¬«       e edd	d
ddd¬«       edd	gddd	dd¬«       edd	gddd	dd¬«       edd	dd	dd¬«      fddddd d!d e«       ¬"«	       e eddd
ddd¬«       edd#d#dd	dd¬«       edd$dd	dd¬«       edddd	dd¬«      fdddddd e«       ¬%«       e edd	d
dd&d¬«       edd	dd	d&d¬«       edd	dd	d&d¬«       edd	dd	d&d¬«      fdddddd'd ed&¬(«      ¬)«	       e edddddd*¬«       eddd+d	dd*¬«       edd,d
d	dd*¬«       edddd	dd*¬«      fdd-dd. ed/d¬0«      ¬1«       e edd	d
ddd¬«       edd	dd	dd¬«       edd	dd	dd¬«       edd	dd	dd¬«      fdddd. ed/d	¬0«      ¬1«       e edd	d
ddd¬«       edd	gddd	dd¬«       edd	gddd	dd¬«       edd	dd	dd¬«      fddddd d!d. ed/d¬0«      ¬"«	       e eddd
ddd¬«       edd#d#dd	ddd. ed/dd#¬2«      ¬3«	       edd$dd	dd¬«       edddd	dd¬«      fddddd. ed/d¬0«      ¬4«       e edd	d
dd&d¬«       edd	dd	d&d¬«       edd	dd	d&d¬«       edd	dd	d&d¬«      fddddd'd. ed/d	d&¬5«      ¬6«       e edd	d
ddd¬«       edd	dd	dd¬«       edd	dd	dd¬«       edd	dd	dd¬«      fdddd7 ed8¬9«      ¬1«       e eddd
ddd¬«       edd#d#dd	dd¬«       edd$dd	dd¬«       edddd	dd¬«      fddddd7 ed8¬9«      ¬4«       e edd	d
ddd¬«       edd	dd	dd¬«       edd	dd	dd¬«       edd	dd	dd¬«      fdddd7 ed:¬9«      ¬1«       e edd	d;d	d&d¬«       edd$d<d	d&d¬«       eddd=d>d	d&d¬«       edd	d?d	d&d¬«      fd@ddddd! ed¬A«       edd¬B«      d. edCd	dD¬E«      ¬F«       e eddd
ddd¬«       edd#dd	ddd7 edG¬9«      ¬H«       edd$dd	ddd. ed¬I«      ¬H«       edddd	ddd e«       ¬H«      fdddd¬J«       e eddd
ddd¬«       edd#dd	ddd. ed¬I«      ¬H«       edd$dd	ddd. ed¬I«      ¬H«       edddd	ddd e«       ¬H«      fdddd¬J«      ¬K«      Zd‚dLedMee   dNedOefdP„ZdƒdQedOeeef   fdR„Z e edSdTddUdV¬W«       edXdTddUdVdY¬Z«       eddUdV¬[«       ed\dTddUdV¬W«       edUdVdU¬]«       ed^dTdUdVdU¬_«       ed`dTdUdVdUdY¬a«       edbdTdUdVdUdY¬a«       edcdTdUdVdUdY¬a«       edddTdedUdVdY¬f«       edgdTdedUdV¬h«       edidTddUdVdY¬Z«       edjdTdkdkdldmdndmdY¬o«	       edpdTddUdV¬W«       edqdTddUdV¬W«      drœ«      Zed„dNedOefds„«       Zed„dNedOefdt„«       Zed„dNedOefdu„«       Zed„dNedOefdv„«       Zed„dNedOefdw„«       Zed„dNedOefdx„«       Zed„dNedOefdy„«       Z ed„dNedOefdz„«       Z!ed„dNedOefd{„«       Z"ed„dNedOefd|„«       Z#ed„dNedOefd}„«       Z$ed„dNedOefd~„«       Z%ed„dNedOefd„«       Z&ed„dNedOefd€„«       Z'ed„dNedOefd�„«       Z(y:)…a”   Bring-Your-Own-Attention Network

A flexible network w/ dataclass based config for stacking NN blocks including
self-attention (or similar) layers.

Currently used to implement experimental variants of:
  * Bottleneck Transformers
  * Lambda ResNets
  * HaloNets

Consider all of the models definitions here as experimental WIP and likely to change.

Hacked together by / copyright Ross Wightman, 2021.
é    )ÚAnyÚDictÚOptional©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STDé   )Úbuild_model_with_cfg)Úregister_modelÚgenerate_default_cfgs)ÚByoBlockCfgÚByoModelCfgÚByobNetÚinterleave_blocksÚbottleé   é   g      Ð?)ÚtypeÚdÚcÚsÚgsÚbri   )r   Ú	self_attni   )Útypesr   r   r   r   r   r   i   é@   ÚtieredÚmaxpoolTÚ
bottleneck)ÚblocksÚstem_chsÚ	stem_typeÚ	stem_poolÚfixed_input_sizeÚself_attn_layerÚself_attn_kwargsé   )r   Úeveryr   r   r   r   r   i   gZd;ßOÕ?)r   r   r   r   r   Ú Úsilui   Úse)	r    r!   r"   r#   Ú	act_layerÚnum_featuresÚ
attn_layerr%   r&   é   é   )r    r!   r"   r#   r,   r$   r%   r&   é   Úeca)Údim_head)	r    r!   r"   r#   r$   r,   r.   r%   r&   g      ð?é€   é
   Ú7x7Úhaloé   )Ú
block_sizeÚ	halo_size)r    r!   r"   r#   r%   r&   )r9   r:   Ú	num_heads)	r   r(   r   r   r   r   r   r%   r&   )r    r!   r"   r#   r,   r%   r&   )r9   r:   r3   )r    r!   r"   r#   r,   r.   r%   r&   Úlambdaé	   )ÚrNé0   é`   é   éÀ   i   é    )Úrd_ratio)Ú	bottle_inÚ
linear_outé   g…ëQ¸Õ?)r9   r:   Úqk_ratio)r    r!   r#   Ú
downsampler-   r,   r.   Úattn_kwargsÚblock_kwargsr%   r&   é   )r   r   r   r   r   r   r%   r&   )r:   )r    r!   r"   r#   r,   )Ú	botnet26tÚsebotnet33tsÚ
botnet50tsÚeca_botnext26tsÚ
halonet_h1Ú
halonet26tÚsehalonet33tsÚhalonet50tsÚeca_halonext26tsÚlambda_resnet26tÚlambda_resnet50tsÚlambda_resnet26rpt_256Úhaloregnetz_bÚlamhalobotnet50tsÚhalo2botnet50tsÚvariantÚcfg_variantÚ
pretrainedÚreturnc                 ód   — t        t        | |f|s	t        |    nt        |   t        d¬«      dœ|¤ŽS )a<  Create a Bring-Your-Own-Attention network model.

    Args:
        variant: Model variant name.
        cfg_variant: Config variant name if different from model variant.
        pretrained: Load pretrained weights.
        **kwargs: Additional model arguments.

    Returns:
        Instantiated ByobNet model.
    T)Úflatten_sequential)Ú	model_cfgÚfeature_cfg)r
   r   Ú
model_cfgsÚdict)r\   r]   r^   Úkwargss       ú^/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/byoanet.pyÚ_create_byoanetrh   	  s@   € ô  Ü�˜*ðá-8”*˜WÒ%¼jÈÑ>UÜ¨DÔ1ñð ñ	ð ó    Úurlc                 ó6   — | dddddt         t        ddddd	d
œ|¥S )zÍGenerate default model configuration.

    Args:
        url: URL for pretrained weights.
        **kwargs: Override default configuration values.

    Returns:
        Model configuration dictionary.
    iè  ©r'   éà   rm   ©rG   rG   gffffffî?Úbicubiczstem.conv1.convzhead.fcFz
apache-2.0)rj   Únum_classesÚ
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚmeanÚstdÚ
first_convÚ
classifierr$   Úmin_input_sizeÚlicenser   )rj   rf   s     rg   Ú_cfgr{     s9   € ð  4°}ÐSYØ¨9Ü%Ô.BØ'°yØ!°]È|ñð ðð ri   zshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/botnet26t_c1_256-167a0e9f.pthztimm/)r'   r   r   )r8   r8   )rj   Ú	hf_hub_idr$   rq   rr   zxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/sebotnet33ts_a1h2_256-957e3c3e.pthg®Gázî?)rj   r|   r$   rq   rr   rs   )r$   rq   rr   zxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/eca_botnext26ts_c_256-95a898f6.pth)rq   rr   ry   zuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/halonet26t_a1h_256-3083328c.pth)rj   r|   rq   rr   ry   zthttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/sehalonet33ts_256-87e053f9.pth)rj   r|   rq   rr   ry   rs   zwhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/halonet50ts_a1h2_256-f3a3daee.pthzyhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/eca_halonext26ts_c_256-06906299.pthzyhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/lambda_resnet26t_c_256-e5a5c857.pth)r'   r4   r4   )rj   r|   ry   rq   rr   rs   z|https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/lambda_resnet50ts_a1h_256-b87370f7.pth)rj   r|   ry   rq   rr   z{https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/lambda_resnet26rpt_c_256-ab00292d.pthzxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/haloregnetz_c_raa_256-c8ad7616.pth)ç      à?r}   r}   z	stem.convrl   rn   )	rj   r|   ru   rv   rw   rq   rr   ry   rs   z}https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/lamhalobotnet50ts_a1h2_256-fe3d9445.pthz{https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/halo2botnet50ts_a1h2_256-fd9c11a3.pth)zbotnet26t_256.c1_in1kzsebotnet33ts_256.a1h_in1kzbotnet50ts_256.untrainedzeca_botnext26ts_256.c1_in1kzhalonet_h1.untrainedzhalonet26t.a1h_in1kzsehalonet33ts.ra2_in1kzhalonet50ts.a1h_in1kzeca_halonext26ts.c1_in1kzlambda_resnet26t.c1_in1kzlambda_resnet50ts.a1h_in1kzlambda_resnet26rpt_256.c1_in1kzhaloregnetz_b.ra3_in1kzlamhalobotnet50ts_256.a1h_in1kzhalo2botnet50ts_256.a1h_in1kc                 ó@   — |j                  dd«       t        dd| i|¤ŽS )z4 Bottleneck Transformer w/ ResNet26-T backbone.
    Úimg_sizer   r^   )Úbotnet26t_256rM   ©Ú
setdefaultrh   ©r^   rf   s     rg   r€   r€   r  s(   € ð ×Ñ�j #Ô&ÜÑYÀJÐYÐRXÑYÐYri   c                 ó   — t        dd| i|¤ŽS )zY Bottleneck Transformer w/ a ResNet33-t backbone, SE attn for non Halo blocks, SiLU,
    r^   )Úsebotnet33ts_256rN   ©rh   rƒ   s     rg   r…   r…   z  s   € ô Ñ_È*Ð_ÐX^Ñ_Ð_ri   c                 ó@   — |j                  dd«       t        dd| i|¤ŽS )z> Bottleneck Transformer w/ ResNet50-T backbone, silu act.
    r   r   r^   )Úbotnet50ts_256rO   r�   rƒ   s     rg   rˆ   rˆ   �  s(   € ð ×Ñ�j #Ô&ÜÑ[ÀjÐ[ÐTZÑ[Ð[ri   c                 ó@   — |j                  dd«       t        dd| i|¤ŽS )z> Bottleneck Transformer w/ ResNet26-T backbone, silu act.
    r   r   r^   )Úeca_botnext26ts_256rP   r�   rƒ   s     rg   rŠ   rŠ   ‰  s)   € ð ×Ñ�j #Ô&ÜÑeÐPZÐeÐ^dÑeÐeri   c                 ó   — t        dd| i|¤ŽS )za HaloNet-H1. Halo attention in all stages as per the paper.
    NOTE: This runs very slowly!
    r^   )rQ   r†   rƒ   s     rg   rQ   rQ   ‘  s   € ô
 ÑI°JÐIÀ&ÑIÐIri   c                 ó   — t        dd| i|¤ŽS )zJ HaloNet w/ a ResNet26-t backbone. Halo attention in final two stages
    r^   )rR   r†   rƒ   s     rg   rR   rR   ™  s   € ô ÑI°JÐIÀ&ÑIÐIri   c                 ó   — t        dd| i|¤ŽS )zc HaloNet w/ a ResNet33-t backbone, SE attn for non Halo blocks, SiLU, 1-2 Halo in stage 2,3,4.
    r^   )rS   r†   rƒ   s     rg   rS   rS      ó   € ô ÑL°zÐLÀVÑLÐLri   c                 ó   — t        dd| i|¤ŽS )zT HaloNet w/ a ResNet50-t backbone, silu act. Halo attention in final two stages
    r^   )rT   r†   rƒ   s     rg   rT   rT   §  s   € ô ÑJ°ZÐJÀ6ÑJÐJri   c                 ó   — t        dd| i|¤ŽS )zT HaloNet w/ a ResNet26-t backbone, silu act. Halo attention in final two stages
    r^   )rU   r†   rƒ   s     rg   rU   rU   ®  ó   € ô ÑO¸*ÐOÈÑOÐOri   c                 ó   — t        dd| i|¤ŽS )zG Lambda-ResNet-26-T. Lambda layers w/ conv pos in last two stages.
    r^   )rV   r†   rƒ   s     rg   rV   rV   µ  r‘   ri   c                 ó   — t        dd| i|¤ŽS )zR Lambda-ResNet-50-TS. SiLU act. Lambda layers w/ conv pos in last two stages.
    r^   )rW   r†   rƒ   s     rg   rW   rW   ¼  s   € ô ÑP¸:ÐPÈÑPÐPri   c                 ó@   — |j                  dd«       t        dd| i|¤ŽS )zN Lambda-ResNet-26-R-T. Lambda layers w/ rel pos embed in last two stages.
    r   r   r^   )rX   r�   rƒ   s     rg   rX   rX   Ã  s'   € ð ×Ñ�j #Ô&ÜÑUÀ
ÐUÈfÑUÐUri   c                 ó   — t        dd| i|¤ŽS )z Halo + RegNetZ
    r^   )rY   r†   rƒ   s     rg   rY   rY   Ë  rŽ   ri   c                 ó   — t        dd| i|¤ŽS )z3 Combo Attention (Lambda + Halo + Bot) Network
    r^   )Úlamhalobotnet50ts_256rZ   r†   rƒ   s     rg   r—   r—   Ò  s   € ô ÑiÐT^ÐiÐbhÑiÐiri   c                 ó   — t        dd| i|¤ŽS )z1 Combo Attention (Halo + Halo + Bot) Network
    r^   )Úhalo2botnet50ts_256r[   r†   rƒ   s     rg   r™   r™   Ù  s   € ô ÑeÐPZÐeÐ^dÑeÐeri   )NF)r)   )F))Ú__doc__Útypingr   r   r   Ú	timm.datar   r   Ú_builderr
   Ú	_registryr   r   Úbyobnetr   r   r   r   Ú__all__re   rd   ÚstrÚboolrh   r{   Údefault_cfgsr€   r…   rˆ   rŠ   rQ   rR   rS   rT   rU   rV   rW   rX   rY   r—   r™   © ri   rg   ú<module>r¥      s¿  ðñ÷ 'Ñ &ç AÝ *ß <ß IÓ Ià
€ñ áá˜X¨¨c°Q¸1ÀÔFÙ˜X¨¨c°Q¸1ÀÔFÙÐ$;¸qÀDÈAÐRSÐX\Ô]Ù˜[¨A°¸¸qÀTÔJð	
ð ØØØØ$Ù›ôñ á˜X¨¨c°Q¸1ÀÔFÙÐ$;ÀAÀ3È!ÈsÐVWÐ\]ÐbfÔgÙÐ$;ÀAÀ3È!ÈtÐWXÐ]^ÐcgÔhÙ˜ q¨D°A¸!ÀÔFð	
ð ØØØØØØ$Ù›ôñ  á˜X¨¨c°Q¸1ÀÔFÙÐ$;À1ÈÈSÐTUÐZ[Ð`dÔeÙÐ$;¸qÀDÈAÐRSÐX\Ô]ÙÐ$;¸qÀDÈAÐRSÐX\Ô]ð	
ð ØØØØØ$Ù›ôñ  á˜X¨¨c°Q¸2À$ÔGÙ˜X¨¨c°Q¸2À$ÔGÙÐ$;¸qÀDÈAÐRTÐY]Ô^Ù˜[¨A°¸¸rÀdÔKð	
ð ØØØØØØ$Ù rÔ*ôñ" á˜[¨A°°q¸QÀ3ÔGÙ˜[¨A°¸¸aÀCÔHÙ˜[¨B°#¸¸qÀSÔIÙ˜[¨A°¸¸aÀCÔHð	
ð ØØàÙ¨°aÔ8ôñ á˜X¨¨c°Q¸1ÀÔFÙ˜X¨¨c°Q¸1ÀÔFÙÐ$;¸qÀDÈAÐRSÐX\Ô]Ù˜[¨A°¸¸qÀTÔJð	
ð ØØØÙ¨°aÔ8ôñ á˜X¨¨c°Q¸1ÀÔFÙÐ$;ÀAÀ3È!ÈsÐVWÐ\]ÐbfÔgÙÐ$;ÀAÀ3È!ÈtÐWXÐ]^ÐcgÔhÙ˜ q¨D°A¸!ÀÔFð	
ð ØØØØØØÙ¨°aÔ8ôñ  á˜X¨¨c°Q¸1ÀÔFÙØ-°Q¸!¸sÀaÈAÐRVØ &¹ÈÐVWÐcdÔ9eôgñ Ð$;¸qÀDÈAÐRSÐX\Ô]ÙÐ$;¸qÀDÈAÐRSÐX\Ô]ð
ð ØØØØÙ¨°aÔ8ôñ  !á˜X¨¨c°Q¸2À$ÔGÙ˜X¨¨c°Q¸2À$ÔGÙÐ$;¸qÀDÈAÐRTÐY]Ô^Ù˜[¨A°¸¸rÀdÔKð	
ð ØØØØØÙ¨°aÀ"ÔEôñ  !á˜X¨¨c°Q¸1ÀÔFÙ˜X¨¨c°Q¸1ÀÔFÙÐ$;¸qÀDÈAÐRSÐX\Ô]Ù˜[¨A°¸¸qÀTÔJð	
ð ØØØ Ù œôñ "á˜X¨¨c°Q¸1ÀÔFÙÐ$;À1ÈÈSÐTUÐZ[Ð`dÔeÙÐ$;¸qÀDÈAÐRSÐX\Ô]ÙÐ$;¸qÀDÈAÐRSÐX\Ô]ð	
ð ØØØØ Ù œôñ 'á˜X¨¨c°Q¸1ÀÔFÙ˜X¨¨c°Q¸1ÀÔFÙÐ$;¸qÀDÈAÐRSÐX\Ô]Ù˜[¨A°¸¸qÀTÔJð	
ð ØØØ Ù œôñ á˜X¨¨b°A¸"ÀÔCÙ˜X¨¨b°A¸"ÀÔCÙÐ$;À1ÈÈcÐUVÐ[]ÐbcÔdÙ˜ q¨C°1¸ÀÔBð	
ð ØØØØØÙ $Ô'Ù D°TÔ:ØÙ¨°aÀ$ÔGô!ñ( "á˜X¨¨c°Q¸1ÀÔFÙØ-°°c¸QÀ1ÈØ (¹4À"¼:ôGñ Ø-°°d¸aÀAÈ$Ø &¹ÈÔ9JôLñ Ø-°°d¸aÀAÈ$Ø ,¹t»vôGð
ð ØØØô!ñ$  á˜X¨¨c°Q¸1ÀÔFÙØ-°°c¸QÀ1ÈØ &¹ÈÔ9JôLñ Ø-°°d¸aÀAÈ$Ø &¹ÈÔ9JôLñ Ø-°°d¸aÀAÈ$Ø ,¹t»vôGð
ð ØØØô!ôwm€
ñ`˜Sð ¨x¸©}ð ÐQUð Ðlsó ñ(ˆcð  T¨#¨s¨(¡^ó ñ( %á!ð BØØ¨-À6ôKñ "&ð GØØ¨-À6ÐTXô"Zñ !%Ø¨-À6ô!Ká#'ð GØØ¨-À6ô$Kñ
 !¨MÀVÐ\iÔjÙð DØØ ¨FÀ=ôRñ #ð CØØ ¨FÀ=Ð[_ôañ !ð FØØ ¨FÀ=Ð[_ôañ !%ð HØØ ¨FÀ=Ð[_ô!añ
 !%ð HØØ$°È&Ð[_ô!añ #'ð KØØ$°È&ô#Rñ '+ð JØØ¨-À6ÐTXô'Zñ
 #ð GØØ /Ø¨=ÀFÐ[hÐswô	yñ '+ð LØØ¨-À6ô'Kñ %)ð JØØ¨-À6ô%Kñu>&ó >€ðB ñZ˜dð Z¸ò Zó ðZð ñ` ð `¸Gò `ó ð`ð ñ\˜tð \¸'ò \ó ð\ð ñf Dð f¸wò fó ðfð ñJ˜4ð J°gò Jó ðJð ñJ˜4ð J°gò Jó ðJð ñM˜dð M¸ò Mó ðMð ñK˜Dð K°wò Kó ðKð ñP ð P¸Gò Pó ðPð ñP ð P¸Gò Pó ðPð ñQ $ð Q¸Wò Qó ðQð ñV tð VÀ'ò Vó ðVð ñM˜dð M¸ò Mó ðMð ñj dð jÀò jó ðjð ñf Dð f¸wò fó ñfri   