
    Ng)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
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           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           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/          !	  	         e e
ddd	ddd
           edd"d"dddd
d- ed.dd"1          2	  	         edd#dddd
           edddddd
          fddddd- ed.d/          3           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%4          5           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d6 ed78          0           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d6 ed78          3           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d6 ed98          0           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
@           eddA          d- edBddCD          E           e e
ddd	ddd
           edd"dddd
d6 edF8          G           edd#dddd
d- edH          G           edddddd
d e            G          fddddI           e e
ddd	ddd
           edd"dddd
d- edH          G           edd#dddd
d- edH          G           edddddd
d e            G          fddddI          J          Zd~dLZddMZ e edNdOddPdQR           edSdOddPdQdTU           eddPdQV           edWdOddPdQR           edPdQdPX           edYdOdPdQdPZ           ed[dOdPdQdPdT\           ed]dOdPdQdPdT\           ed^dOdPdQdPdT\           ed_dOd`dPdQdTa           edbdOd`dPdQc           edddOddPdQdTU           ededOdfdfdgdhdidhdTj	  	         edkdOddPdQR           edldOddPdQR          dm          Zeddnefdo            Zeddnefdp            Zeddnefdq            Zeddnefdr            Zeddnefds            Zeddnefdt            Zeddnefdu            Zeddnefdv            Zeddnefdw            Zeddnefdx            Zeddnefdy            Zeddnefdz            Zeddnefd{            Z eddnefd|            Z!eddnefd}            Z"d9S )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.
    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#   )r6   r7   	num_heads)	r   r%   r   r   r   r   r   r"   r#   )r   r   r   r    r)   r"   r#   )r6   r7   r0   )r   r   r   r    r)   r+   r"   r#   lambda	   )rN0   `         i       )rd_ratio)	bottle_in
linear_out   gQ?)r6   r7   qk_ratio)r   r   r    
downsampler*   r)   r+   attn_kwargsblock_kwargsr"   r#      )r   r   r   r   r   r   r"   r#   )r7   )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halo2botnet50tsFc                     t          t          | |f|st          |          nt          |         t          d          d|S )NT)flatten_sequential)	model_cfgfeature_cfg)r   r   
model_cfgsdict)variantcfg_variant
pretrainedkwargss       O/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/byoanet.py_create_byoanetrd     sT    *-8U*W%%j>UD111  	      c                 8    | dddddt           t          ddddd	|S )
Ni  r$      rh   rD   rD   gffffff?bicubiczstem.conv1.convzhead.fcF)urlnum_classes
input_size	pool_sizecrop_pctinterpolationmeanstd
first_conv
classifierr!   min_input_sizer   )rk   rb   s     rc   _cfgrv     s:    4}SY9%.B'y!]   re   zshttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/botnet26t_c1_256-167a0e9f.pthztimm/)r$   r   r   )r5   r5   )rk   	hf_hub_idr!   rm   rn   zxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/sebotnet33ts_a1h2_256-957e3c3e.pthgGz?)rk   rw   r!   rm   rn   ro   )r!   rm   rn   zxhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/eca_botnext26ts_c_256-95a898f6.pth)rm   rn   ru   zuhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/halonet26t_a1h_256-3083328c.pth)rk   rw   rm   rn   ru   zthttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/sehalonet33ts_256-87e053f9.pth)rk   rw   rm   rn   ru   ro   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$   r1   r1   )rk   rw   ru   rm   rn   ro   z|https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-attn-weights/lambda_resnet50ts_a1h_256-b87370f7.pth)rk   rw   ru   rm   rn   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)      ?rx   rx   z	stem.convrg   ri   )	rk   rw   rq   rr   rs   rm   rn   ru   ro   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_in1kreturnc                 J    |                     dd           t          dd| i|S )z4 Bottleneck Transformer w/ ResNet26-T backbone.
    img_sizer   botnet26t_256rJ   ra   )r|   rJ   
setdefaultrd   ra   rb   s     rc   r|   r|   \  s4     j#&&&YYJYRXYYYre   c                     t          dd| i|S )zY Bottleneck Transformer w/ a ResNet33-t backbone, SE attn for non Halo blocks, SiLU,
    sebotnet33ts_256rK   ra   )r   rK   rd   r   s     rc   r   r   d  s     __*_X^___re   c                 J    |                     dd           t          dd| i|S )z> Bottleneck Transformer w/ ResNet50-T backbone, silu act.
    r{   r   botnet50ts_256rL   ra   )r   rL   r}   r   s     rc   r   r   k  s4     j#&&&[[j[TZ[[[re   c                 J    |                     dd           t          dd| i|S )z> Bottleneck Transformer w/ ResNet26-T backbone, silu act.
    r{   r   eca_botnext26ts_256rM   ra   )r   rM   r}   r   s     rc   r   r   s  s5     j#&&&eePZe^deeere   c                     t          dd| i|S )za HaloNet-H1. Halo attention in all stages as per the paper.
    NOTE: This runs very slowly!
    rN   ra   )rN   r   r   s     rc   rN   rN   {  s    
 IIJI&IIIre   c                     t          dd| i|S )zJ HaloNet w/ a ResNet26-t backbone. Halo attention in final two stages
    rO   ra   )rO   r   r   s     rc   rO   rO     s     IIJI&IIIre   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.
    rP   ra   )rP   r   r   s     rc   rP   rP          LLzLVLLLre   c                     t          dd| i|S )zT HaloNet w/ a ResNet50-t backbone, silu act. Halo attention in final two stages
    rQ   ra   )rQ   r   r   s     rc   rQ   rQ     s     JJZJ6JJJre   c                     t          dd| i|S )zT HaloNet w/ a ResNet26-t backbone, silu act. Halo attention in final two stages
    rR   ra   )rR   r   r   s     rc   rR   rR          OO*OOOOre   c                     t          dd| i|S )zG Lambda-ResNet-26-T. Lambda layers w/ conv pos in last two stages.
    rS   ra   )rS   r   r   s     rc   rS   rS     r   re   c                     t          dd| i|S )zR Lambda-ResNet-50-TS. SiLU act. Lambda layers w/ conv pos in last two stages.
    rT   ra   )rT   r   r   s     rc   rT   rT     s     PP:PPPPre   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   rU   ra   )rU   r}   r   s     rc   rU   rU     s3     j#&&&UU
UfUUUre   c                     t          dd| i|S )z Halo + RegNetZ
    rV   ra   )rV   r   r   s     rc   rV   rV     r   re   c                     t          dd| i|S )z3 Combo Attention (Lambda + Halo + Bot) Network
    lamhalobotnet50ts_256rW   ra   )r   rW   r   r   s     rc   r   r     s     iiT^ibhiiire   c                     t          dd| i|S )z1 Combo Attention (Halo + Halo + Bot) Network
    halo2botnet50ts_256rX   ra   )r   rX   r   r   s     rc   r   r     s     eePZe^deeere   )NF)r&   )F)#__doc__	timm.datar   r   _builderr   	_registryr   r	   byobnetr
   r   r   r   __all__r^   r]   rd   rv   default_cfgsr|   r   r   r   rN   rO   rP   rQ   rR   rS   rT   rU   rV   r   r    re   rc   <module>r      s    B A A A A A A A * * * * * * < < < < < < < < I I I I I I I I I I I I
 TkKXcQ1FFFKXcQ1FFF$;qDARSX\]]]K[AqTJJJ	
 $   KXcQ1FFF$;A3!sVW\]bfggg$;A3!tWX]^cghhhKqDA!FFF	
 $    {KXcQ1FFF$;1STUZ[`deee$;qDARSX\]]]$;qDARSX\]]]	
 $    KKXcQ2$GGGKXcQ2$GGG$;qDARTY]^^^K[ArdKKK	
 $r***  " {K[AqQ3GGGK[AaCHHHK[B#qSIIIK[AaCHHH	
 a888   {KXcQ1FFFKXcQ1FFF$;qDARSX\]]]K[AqTJJJ	
 a888   +KXcQ1FFF$;A3!sVW\]bfggg$;A3!tWX]^cghhhKqDA!FFF	
 a888    KXcQ1FFF-Q!saARV &VWcd9e9e9eg g g $;qDARSX\]]]$;qDARSX\]]]
 a888    ![KXcQ2$GGGKXcQ2$GGG$;qDARTY]^^^K[ArdKKK	
 a"EEE    ![KXcQ1FFFKXcQ1FFF$;qDARSX\]]]K[AqTJJJ	
     "kKXcQ1FFF$;1STUZ[`deee$;qDARSX\]]]$;qDARSX\]]]	
     ';KXcQ1FFFKXcQ1FFF$;qDARSX\]]]K[AqTJJJ	
     +KXbA"CCCKXbA"CCC$;1cUV[]bcdddKqC1BBB	
 D$'''TDT:::a$GGG!  ( "kKXcQ1FFF-cQ1 (44":::G G G -daA$ &9J9J9JL L L -daA$ ,ttvvG G G
 !  $  KKXcQ1FFF-cQ1 &9J9J9JL L L -daA$ &9J9J9JL L L -daA$ ,ttvvG G G
 !  wm m m
`       %$!T B-6K K K "& G-6TX"Z "Z "Z !%-6!K !K !K#'4 G-6$K $K $K
 !DMV\ijjj4 D F=R R R #d C F=[_a a a !D F F=[_a a a !% H F=[_!a !a !a
 !% H$&[_!a !a !a #'$ K$&#R #R #R '+d J-6TX'Z 'Z 'Z
 #d G/=F[hsw	y y y '+d L-6'K 'K 'K %)D J-6%K %K %Ku>& >& > >B Z Z Z Z Z Z ` `G ` ` ` ` \ \' \ \ \ \ f fw f f f f J Jg J J J J J Jg J J J J M M M M M M K Kw K K K K P PG P P P P P PG P P P P Q QW Q Q Q Q V V' V V V V M M M M M M j j j j j j f fw f f f f f fre   