Ë
    éÓ^jú£  ã                   ó6  — d Z ddgZddlmZmZmZmZmZ ddlm	Z	 ddl
Z
ddlmZ ddlmc mZ ddlmZmZ ddlmZmZmZ d	d
lmZ d	dlmZ d	dlmZ d	dlmZ d	dlm Z m!Z! ddde"xs e#xs e$fd„Z%dede"xs e#xs e$de&de&fd„Z'de&xs e#e&df   de&xs e#e&df   fd„Z( G d„ dejR                  «      Z* G d„ dejR                  «      Z+ G d„ dejR                  «      Z, G d„ dejR                  «      Z- G d „ d!ejR                  «      Z. G d"„ d#ejR                  «      Z/ ee/«        G d$„ d%ejR                  «      Z0 G d&„ d'ejR                  «      Z1	 	 	 	 dfd(e&d)e&d*e&d+e2d,e3d-e3d.e4d/e3fd0„Z5 G d1„ d2ejl                  «      Z7 G d3„ d4ejR                  «      Z8 G d5„ d6ejR                  «      Z9 G d7„ d8ejR                  «      Z: G d9„ dejR                  «      Z; G d:„ dejR                  «      Z<dgd;„Z= e!i d< e=d=¬>«      “d? e=d=¬>«      “d@ e=d=dAdBdC¬D«      “dE e=d=dFdGdC¬D«      “dH e=d=¬>«      “dI e=d=dAdBdC¬D«      “dJ e=d=dFdGdC¬D«      “dK e=d=¬>«      “dL e=d=dAdBdC¬D«      “dM e=d=dFdGdC¬D«      “dN e=d=dC¬O«      “dP e=d=dC¬O«      “dQ e=d=dAdBdC¬D«      “dR e=d=dFdGdC¬D«      “dS e=d=dTdUdC¬D«      “dV e=d=dC¬O«      “dW e=d=dAdBdC¬D«      “ e=d=dXdYdC¬D«       e=d=dTdUdC¬D«      dZœ¥«      Z>dhd[„Z?dhd\„Z@e dhd]„«       ZAe dhd^„«       ZBe dhd_„«       ZCe dhd`„«       ZDe dhda„«       ZEe dhdb„«       ZFe dhdc„«       ZGy)ia   EfficientViT (by MIT Song Han's Lab)

Paper: `Efficientvit: Enhanced linear attention for high-resolution low-computation visual recognition`
    - https://arxiv.org/abs/2205.14756

Adapted from official impl at https://github.com/mit-han-lab/efficientvit
ÚEfficientVitÚEfficientVitLargeé    )ÚListÚOptionalÚTupleÚTypeÚUnion)ÚpartialN©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)ÚSelectAdaptivePool2dÚcreate_conv2dÚGELUTanhé   )Úbuild_model_with_cfg)Úfeature_take_indices)Úregister_notrace_module)Úcheckpoint_seq)Úregister_modelÚgenerate_default_cfgsÚxc                 ó€   — t        | t        t        f«      rt        | «      S t        |«      D �cg c]  }| ‘Œ c}S c c}w ©N)Ú
isinstanceÚlistÚtupleÚrange)r   Úrepeat_timeÚ_s      úg/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/efficientvit_mit.pyÚval2listr"      s2   € Ü�!”dœE�]Ô#Ü�A‹wˆÜ˜[Ó)Ö*�!ŠAÒ*Ð*ùÒ*s   ¯	;Úmin_lenÚ
idx_repeatc                 óª   — t        | «      } t        | «      dkD  r+t        |t        | «      z
  «      D �cg c]  }| |   ‘Œ	 c}| || t        | «      S c c}w )Nr   )r"   Úlenr   r   )r   r#   r$   r    s       r!   Ú	val2tupler'       sN   € ä�‹€AÜ
ˆ1ƒv�‚zÜ;@ÀÌ3ÈqË6ÑAQÓ;RÖ#S°a A j£MÒ#Sˆˆ*�ZÐ ä�‹8€Oùò $Ts   ³AÚkernel_size.Úreturnc                 ó˜   — t        | t        «      r"t        | D �cg c]  }t        |«      ‘Œ c}«      S | dz  dkD  sJ d«       ‚| dz  S c c}w )Né   r   z kernel size should be odd number)r   r   Úget_same_padding)r(   Úkss     r!   r,   r,   )   sQ   € Ü�+œuÔ%Ü°[ÖA¨rÔ& rÕ*ÒAÓBÐBà˜Q‰ Ò"ÐFÐ$FÓFÐ"Ø˜aÑÐùò Bs   šAc                   óà   ‡ — e Zd Zddddddej                  ej
                  ddf
dededeeeeef   f   d	ed
edede	de
deeej                        deeej                        fˆ fd„Zd„ Zˆ xZS )ÚConvNormActé   r   Fç        NÚin_channelsÚout_channelsr(   ÚstrideÚdilationÚgroupsÚbiasÚdropoutÚ
norm_layerÚ	act_layerc           	      ó2  •— ||dœ}t         ‰| �  «        t        j                  |d¬«      | _        t        ||f|||||dœ|¤Ž| _        |	r
 |	dd|i|¤Žnt        j                  «       | _        |
� |
d¬«      | _	        y t        j                  «       | _	        y )N©ÚdeviceÚdtypeF©Úinplace)r(   r4   r5   r6   r7   Únum_featuresT© )
ÚsuperÚ__init__ÚnnÚDropoutr8   r   ÚconvÚIdentityÚnormÚact)Úselfr2   r3   r(   r4   r5   r6   r7   r8   r9   r:   r=   r>   ÚddÚ	__class__s                 €r!   rD   zConvNormAct.__init__2   s¡   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ—z‘z '°5Ô9ˆŒÜ!ØØð	
ð $ØØØØñ	
ð ñ	
ˆŒ	ñ DN‘JÑ?¨LÐ?¸BÒ?ÔSU×S^ÑS^ÓS`ˆŒ	Ø.7Ð.C‘9 TÔ*ˆ�ÌÏÉËˆ�ó    c                 óŽ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }|S r   )r8   rG   rI   rJ   ©rK   r   s     r!   ÚforwardzConvNormAct.forwardQ   s;   € Ø�L‰L˜‹OˆØ�I‰I�a‹LˆØ�I‰I�a‹LˆØ�H‰H�Q‹KˆØˆrN   )Ú__name__Ú
__module__Ú__qualname__rE   ÚBatchNorm2dÚReLUÚintr	   r   ÚboolÚfloatr   r   ÚModulerD   rQ   Ú__classcell__©rM   s   @r!   r/   r/   1   sÎ   ø„ ð
 89ØØØØØØ46·N±NØ35·7±7ØØñWàðWð ðWð ˜s E¨#¨s¨(¡OÐ3Ñ4ð	Wð
 ðWð ðWð ðWð ðWð ðWð !  b§i¡i¡Ñ1ðWð    R§Y¡Y¡Ñ0õWö>rN   r/   c                   ó.  ‡ — e Zd Zdddej                  ej
                  dfddfdedededed	eee	eef   f   d
ee
ej                     e	ee
ej                        df   f   dee
ej                     e	ee
ej                        df   f   fˆ fd„Zd„ Zˆ xZS )ÚDSConvr0   r   FNr2   r3   r(   r4   Úuse_biasr9   .r:   c
                 óø   •— ||	dœ}
t         ‰| �  «        t        |d«      }t        |d«      }t        |d«      }t        ||||f||d   |d   |d   dœ|
¤Ž| _        t        ||df|d   |d   |d   dœ|
¤Ž| _        y )Nr<   r+   r   )r6   r9   r:   r7   r   ©r9   r:   r7   )rC   rD   r'   r/   Ú
depth_convÚ
point_conv)rK   r2   r3   r(   r4   r_   r9   r:   r=   r>   rL   rM   s              €r!   rD   zDSConv.__init__Z   s¼   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ˜X qÓ)ˆÜ˜z¨1Ó-ˆ
Ü˜i¨Ó+ˆ	ä%ØØØØð	

ð
 Ø! !‘}Ø ‘lØ˜!‘ñ

ð ñ

ˆŒô &ØØØð
ð " !‘}Ø ‘lØ˜!‘ñ
ð ñ
ˆ�rN   c                 óJ   — | j                  |«      }| j                  |«      }|S r   )rb   rc   rP   s     r!   rQ   zDSConv.forward�   s#   € Ø�O‰O˜AÓˆØ�O‰O˜AÓˆØˆrN   )rR   rS   rT   rE   rU   ÚReLU6rW   r	   rX   r   r   rZ   r   rD   rQ   r[   r\   s   @r!   r^   r^   Y   sá   ø„ ð
  !ØØ7<ØXZ×XfÑXfØXZ×X`ÑX`ÐbfÐWgØØñ%
àð%
ð ð%
ð ð	%
ð
 ð%
ð ˜D %¨¨d¨
Ñ"3Ð3Ñ4ð%
ð ˜d 2§9¡9™o¨u°X¸dÀ2Ç9Á9¹oÑ5NÐPSÐ5SÑ/TÐTÑUð%
ð ˜T "§)¡)™_¨e°H¸TÀ"Ç)Á)¹_Ñ4MÈsÐ4RÑ.SÐSÑTõ%
öNrN   r^   c                   ó@  ‡ — e Zd Zdddddej                  ej
                  dfddf	dedededed	ee   d
ede	e
ee
e
f   f   de	eej                     eeeej                        df   f   de	eej                     eeeej                        df   f   fˆ fd„Zd„ Zˆ xZS )Ú	ConvBlockr0   r   NFr2   r3   r(   r4   Úmid_channelsÚexpand_ratior_   r9   .r:   c                 ó  •— |
|dœ}t         ‰| �  «        t        |d«      }t        |d«      }t        |	d«      }	|xs t        ||z  «      }t	        ||||f|d   |	d   |d   dœ|¤Ž| _        t	        |||df|d   |	d   |d   dœ|¤Ž| _        y )Nr<   r+   r   ra   r   )rC   rD   r'   Úroundr/   Úconv1Úconv2©rK   r2   r3   r(   r4   rh   ri   r_   r9   r:   r=   r>   rL   rM   s                €r!   rD   zConvBlock.__init__ˆ   sÐ   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ˜X qÓ)ˆÜ˜z¨1Ó-ˆ
Ü˜i¨Ó+ˆ	Ø#ÒH¤u¨[¸<Ñ-GÓ'Hˆä ØØØØð		
ð
 " !‘}Ø ‘lØ˜!‘ñ	
ð ñ	
ˆŒ
ô !ØØØØð		
ð
 " !‘}Ø ‘lØ˜!‘ñ	
ð ñ	
ˆ�
rN   c                 óJ   — | j                  |«      }| j                  |«      }|S r   )rl   rm   rP   s     r!   rQ   zConvBlock.forward²   s!   € Ø�J‰J�q‹MˆØ�J‰J�q‹MˆØˆrN   ©rR   rS   rT   rE   rU   re   rW   r   rY   r	   rX   r   r   rZ   rD   rQ   r[   r\   s   @r!   rg   rg   ‡   sÿ   ø„ ð
  !ØØ*.Ø"#Ø7<ØXZ×XfÑXfØXZ×X`ÑX`ÐbfÐWgØØñ(
àð(
ð ð(
ð ð	(
ð
 ð(
ð # 3™-ð(
ð  ð(
ð ˜D %¨¨d¨
Ñ"3Ð3Ñ4ð(
ð ˜d 2§9¡9™o¨u°X¸dÀ2Ç9Á9¹oÑ5NÐPSÐ5SÑ/TÐTÑUð(
ð ˜T "§)¡)™_¨e°H¸TÀ"Ç)Á)¹_Ñ4MÈsÐ4RÑ.SÐSÑTõ(
öTrN   rg   c                   óV  ‡ — e Zd Zdddddej                  ej
                  ej
                  dfddf	dededed	ed
ee   dede	e
ee
df   f   de	eej                     eeeej                        df   f   de	eej                     eeeej                        df   f   fˆ fd„Zd„ Zˆ xZS )ÚMBConvr0   r   Né   Fr2   r3   r(   r4   rh   ri   r_   .r9   r:   c           	      ó^  •— |
|dœ}t         ‰| �  «        t        |d«      }t        |d«      }t        |	d«      }	|xs t        ||z  «      }t	        ||dfd|d   |	d   |d   dœ|¤Ž| _        t	        |||f|||d   |	d   |d   dœ|¤Ž| _        t	        ||df|d   |	d   |d   dœ|¤Ž| _        y )	Nr<   r0   r   r   )r4   r9   r:   r7   ©r4   r6   r9   r:   r7   r+   ra   )rC   rD   r'   rk   r/   Úinverted_convrb   rc   rn   s                €r!   rD   zMBConv.__init__¹   s  ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ˜X qÓ)ˆÜ˜z¨1Ó-ˆ
Ü˜i¨Ó+ˆ	Ø#ÒH¤u¨[¸<Ñ-GÓ'Hˆä(ØØØð	
ð Ø! !‘}Ø ‘lØ˜!‘ñ	
ð ñ	
ˆÔô &ØØØð

ð ØØ! !‘}Ø ‘lØ˜!‘ñ

ð ñ

ˆŒô &ØØØð
ð " !‘}Ø ‘lØ˜!‘ñ
ð ñ
ˆ�rN   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S r   )rv   rb   rc   rP   s     r!   rQ   zMBConv.forwardí   s3   € Ø×Ñ˜qÓ!ˆØ�O‰O˜AÓˆØ�O‰O˜AÓˆØˆrN   rp   r\   s   @r!   rr   rr   ¸   s  ø„ ð
  !ØØ*.Ø"#Ø6;ØXZ×XfÑXfØXZ×X`ÑX`Ðbd×bjÑbjÐlpÐWqØØñ2
àð2
ð ð2
ð ð	2
ð
 ð2
ð # 3™-ð2
ð  ð2
ð ˜D %¨¨c¨	Ñ"2Ð2Ñ3ð2
ð ˜d 2§9¡9™o¨u°X¸dÀ2Ç9Á9¹oÑ5NÐPSÐ5SÑ/TÐTÑUð2
ð ˜T "§)¡)™_¨e°H¸TÀ"Ç)Á)¹_Ñ4MÈsÐ4RÑ.SÐSÑTõ2
öhrN   rr   c                   óF  ‡ — e Zd Zddddddej                  ej
                  dfddf
dededed	ed
ee   dedede	e
ee
df   f   de	eej                     eeeej                        df   f   de	eej                     eeeej                        df   f   fˆ fd„Zd„ Zˆ xZS )ÚFusedMBConvr0   r   Nrs   Fr2   r3   r(   r4   rh   ri   r6   r_   .r9   r:   c           	      ó  •— ||dœ}t         ‰| �  «        t        |d«      }t        |	d«      }	t        |
d«      }
|xs t        ||z  «      }t	        |||f|||	d   |
d   |d   dœ|¤Ž| _        t	        ||df|	d   |
d   |d   dœ|¤Ž| _        y )Nr<   r+   r   ru   r   ra   )rC   rD   r'   rk   r/   Úspatial_convrc   )rK   r2   r3   r(   r4   rh   ri   r6   r_   r9   r:   r=   r>   rL   rM   s                 €r!   rD   zFusedMBConv.__init__õ   sÑ   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ˜X qÓ)ˆÜ˜z¨1Ó-ˆ
Ü˜i¨Ó+ˆ	Ø#ÒH¤u¨[¸<Ñ-GÓ'Hˆä'ØØØð

ð ØØ! !‘}Ø ‘lØ˜!‘ñ

ð ñ

ˆÔô &ØØØð
ð " !‘}Ø ‘lØ˜!‘ñ
ð ñ
ˆ�rN   c                 óJ   — | j                  |«      }| j                  |«      }|S r   )r{   rc   rP   s     r!   rQ   zFusedMBConv.forward   s%   € Ø×Ñ˜aÓ ˆØ�O‰O˜AÓˆØˆrN   rp   r\   s   @r!   ry   ry   ô   s  ø„ ð
  !ØØ*.Ø"#ØØ6;ØXZ×XfÑXfØXZ×X`ÑX`ÐbfÐWgØØñ)
àð)
ð ð)
ð ð	)
ð
 ð)
ð # 3™-ð)
ð  ð)
ð ð)
ð ˜D %¨¨c¨	Ñ"2Ð2Ñ3ð)
ð ˜d 2§9¡9™o¨u°X¸dÀ2Ç9Á9¹oÑ5NÐPSÐ5SÑ/TÐTÑUð)
ð ˜T "§)¡)™_¨e°H¸TÀ"Ç)Á)¹_Ñ4MÈsÐ4RÑ.SÐSÑTõ)
öVrN   ry   c                   óz  ‡ — e Zd ZdZdddddej
                  fdej                  ddddfd	ed
edee   de	dede
eeedf   f   de
eej                     eeeej                        df   f   de
eej                     eeeej                        df   f   deej                     deedf   de	fˆ fd„Zd„ Zd„ Zˆ xZS )ÚLiteMLAz(Lightweight multi-scale linear attentionNç      ð?é   F©NN)é   çñhãˆµøä>r2   r3   ÚheadsÚheads_ratioÚdimr_   .r9   r:   Úkernel_funcÚscalesÚepsc                 ó®  •— ||dœ}t         ‰| �  «        || _        |xs t        ||z  |z  «      }||z  }t	        |d«      }t	        |d«      }t	        |d«      }|| _        t        |d|z  df|d   |d   |d   dœ|¤Ž| _        t        j                  |
D �cg c]l  }t        j                  t        j                  d|z  d|z  |ft        |«      d|z  |d   dœ|¤Žt        j                  d|z  d|z  dfd|z  |d   dœ|¤Ž«      ‘Œn c}«      | _         |	d	¬
«      | _        t        |dt        |
«      z   z  |df|d   |d   |d   dœ|¤Ž| _        y c c}w )Nr<   r+   r0   r   r   )r7   r9   r:   )Úpaddingr6   r7   )r6   r7   Fr?   )rC   rD   r‰   rW   r'   r†   r/   ÚqkvrE   Ú
ModuleListÚ
SequentialÚConv2dr,   Úaggregr‡   r&   Úproj)rK   r2   r3   r„   r…   r†   r_   r9   r:   r‡   rˆ   r‰   r=   r>   rL   Ú	total_dimÚscalerM   s                    €r!   rD   zLiteMLA.__init__)  s´  ø€ ð  ¨Ñ/ˆÜ‰ÑÔØˆŒØÒ>œ˜[¨CÑ/°+Ñ=Ó>ˆØ˜C‘Kˆ	Ü˜X qÓ)ˆÜ˜z¨1Ó-ˆ
Ü˜i¨Ó+ˆ	àˆŒÜØØ�	‰MØð
ð ˜!‘Ø! !‘}Ø ‘lñ
ð ñ
ˆŒô —m‘mð  ö%
ð ô �M‰MÜ—	‘	Ø˜	‘MØ˜	‘MØðô -¨UÓ3Ø˜y™=Ø! !™ñð ñô —	‘	˜!˜i™-¨¨Y©¸ÐdÀ!ÀeÁ)ÐRZÐ[\ÑR]ÑdÐacÑdõò%
ó ˆŒñ '¨uÔ5ˆÔäØ˜œS ›[™Ñ)ØØð
ð ˜!‘Ø! !‘}Ø ‘lñ
ð ñ
ˆ�	ùò#%
s   ÂA1Ec                 ó  — |j                   }|j                  «       |j                  «       |j                  «       }}}|j                  dd«      |z  }||z  }|dd d…f   |ddd …f   | j                  z   z  }|j	                  |«      S )Néÿÿÿÿéþÿÿÿ.)r>   rY   Ú	transposer‰   Úto)rK   ÚqÚkÚvr>   ÚkvÚouts          r!   Ú_attnzLiteMLA._attng  s   € Ø—‘ˆØ—'‘'“)˜QŸW™W›Y¨¯©«	ˆaˆ1ˆØ�[‰[˜˜RÓ  1Ñ$ˆØ�"‰fˆØ�#�s˜�s�(‰m˜s 3¨© 8™}¨t¯x©xÑ7Ñ8ˆØ�v‰v�e‹}ÐrN   c                 óN  — |j                   \  }}}}| j                  |«      }|g}| j                  D ]  }|j                   ||«      «       Œ t	        j
                  |d¬«      }|j                  |dd| j                  z  ||z  «      j                  dd«      }|j                  dd¬«      \  }	}
}| j                  |	«      }	| j                  |
«      }
t        j                  |ddd¬	«      }t        j                  j                  «       sHt	        j                  |j                   j"                  d
¬«      5  | j%                  |	|
|«      }d d d «       n| j%                  |	|
|«      }j                  dd«      j                  |d||«      }| j'                  |«      }|S # 1 sw Y   Œ@xY w)Nr   )r†   r•   r0   r–   )r   r   Úconstantr   )ÚmodeÚvalueF)Údevice_typeÚenabled)ÚshaperŒ   r�   ÚappendÚtorchÚcatÚreshaper†   r—   Úchunkr‡   ÚFÚpadÚjitÚis_scriptingÚautocastr=   Útyperž   r‘   )rK   r   ÚBr    ÚHÚWrŒ   Úmulti_scale_qkvÚopr™   rš   r›   r�   s                r!   rQ   zLiteMLA.forwardo  s{  € Ø—W‘W‰
ˆˆ1ˆa�ð �h‰h�q‹kˆØ˜%ˆØ—+‘+ò 	,ˆBØ×"Ñ"¡2 c£7Õ+ð	,äŸ)™) O¸Ô;ˆØ)×1Ñ1°!°R¸¸T¿X¹X¹ÀqÈ1ÁuÓM×WÑWÐXZÐ\^Ó_ˆØ!×'Ñ'¨¨rÐ'Ó2‰ˆˆ1ˆað ×Ñ˜QÓˆØ×Ñ˜QÓˆÜ�E‰E�!�V *°BÔ7ˆä�y‰y×%Ñ%Ô'Ü—‘¨A¯H©H¯M©MÀ5ÔIñ *Ø—j‘j  A qÓ)�÷*ð *ð —*‘*˜Q  1Ó%ˆCð �m‰m˜B Ó#×+Ñ+¨A¨r°1°aÓ8ˆØ�i‰i˜‹nˆØˆ
÷*ð *ús   Ä4FÆF$)rR   rS   rT   Ú__doc__rE   rU   rV   rW   r   rY   r	   rX   r   r   rZ   rD   rž   rQ   r[   r\   s   @r!   r~   r~   &  s/  ø„ Ù2ð $(Ø!$ØØ6;ØY]Ð_a×_mÑ_mÐXnØWcØ+-¯7©7Ø&*ØØØñ<
àð<
ð ð<
ð ˜C‘=ð	<
ð
 ð<
ð ð<
ð ˜D %¨¨c¨	Ñ"2Ð2Ñ3ð<
ð ˜d 2§9¡9™o¨u°X¸dÀ2Ç9Á9¹oÑ5NÐPSÐ5SÑ/TÐTÑUð<
ð ˜T "§)¡)™_¨e°H¸TÀ"Ç)Á)¹_Ñ4MÈsÐ4RÑ.SÐSÑTð<
ð ˜bŸi™i™ð<
ð ˜#˜s˜(‘Oð<
ð õ<
ò|örN   r~   c                   óª   ‡ — e Zd Zdddej                  ej
                  ddfdedededed	eej                     d
eej                     fˆ fd„Z
d„ Zˆ xZS )ÚEfficientVitBlockr   é    é   Nr2   r…   Úhead_dimri   r9   r:   c	                 ó  •— ||dœ}	t         ‰
| �  «        t        t        d||||d |fdœ|	¤Žt	        j
                  «       «      | _        t        t        d|||dd d |f||d fdœ|	¤Žt	        j
                  «       «      | _        y )Nr<   )r2   r3   r…   r†   r9   ©TTF)r2   r3   ri   r_   r9   r:   rB   )	rC   rD   ÚResidualBlockr~   rE   rH   Úcontext_modulerr   Úlocal_module)rK   r2   r…   r»   ri   r9   r:   r=   r>   rL   rM   s             €r!   rD   zEfficientVitBlock.__init__�  s®   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ+Üð Ø'Ø(Ø'ØØ  *Ð-ñð ñô �K‰K‹Mó

ˆÔô *Üð Ø'Ø(Ø)Ø,Ø  $¨
Ð3Ø$ i°Ð6ñð ñô �K‰K‹Mó
ˆÕrN   c                 óJ   — | j                  |«      }| j                  |«      }|S r   )r¿   rÀ   rP   s     r!   rQ   zEfficientVitBlock.forwardµ  s'   € Ø×Ñ Ó"ˆØ×Ñ˜aÓ ˆØˆrN   )rR   rS   rT   rE   rU   Ú	HardswishrW   rY   r   rZ   rD   rQ   r[   r\   s   @r!   r¸   r¸   �  sw   ø„ ð "%ØØ"#Ø*,¯.©.Ø)+¯©ØØñ#
àð#
ð ð#
ð ð	#
ð
  ð#
ð ˜RŸY™Y™ð#
ð ˜BŸI™I‘õ#
öJrN   r¸   c                   ó†   ‡ — e Zd Z	 	 ddeej
                     deej
                     deej
                     fˆ fd„Zd„ Zˆ xZS )r¾   ÚmainÚshortcutÚpre_normc                 óx   •— t         ‰| �  «        |�|nt        j                  «       | _        || _        || _        y r   )rC   rD   rE   rH   rÆ   rÄ   rÅ   )rK   rÄ   rÅ   rÆ   rM   s       €r!   rD   zResidualBlock.__init__¼  s2   ø€ ô 	‰ÑÔØ$,Ð$8™¼b¿k¹k»mˆŒØˆŒ	Ø ˆ�rN   c                 ó†   — | j                  | j                  |«      «      }| j                  �|| j                  |«      z   }|S r   )rÄ   rÆ   rÅ   )rK   r   Úress      r!   rQ   zResidualBlock.forwardÇ  s;   € Ø�i‰i˜Ÿ™ aÓ(Ó)ˆØ�=‰=Ð$Ø˜Ÿ™ aÓ(Ñ(ˆCØˆ
rN   r�   )	rR   rS   rT   r   rE   rZ   rD   rQ   r[   r\   s   @r!   r¾   r¾   »  sL   ø„ ð -1Ø,0ñ		!à˜2Ÿ9™9Ñ%ð	!ð ˜rŸy™yÑ)ð	!ð ˜rŸy™yÑ)õ		!örN   r¾   r2   r3   r4   ri   r9   r:   Ú
fewer_normÚ
block_typec
                 ó>  — ||	dœ}
|dv sJ ‚|dk(  rE|dk(  r t        d
| |||rdnd|rd |fn||d fdœ|
¤Ž}|S t        d
| |||rdnd|rd |fn||d fdœ|
¤Ž}|S |dk(  r#t        d
| ||||rdnd|rd d |fn|||d fd	œ|
¤Ž}|S t        d
| ||||rdnd|rd |fn||d fd	œ|
¤Ž}|S )Nr<   )ÚdefaultÚlargeÚfusedr   rÍ   )TFF)r2   r3   r4   r_   r9   r:   r½   )r2   r3   r4   ri   r_   r9   r:   rB   )r^   rg   rr   ry   )r2   r3   r4   ri   r9   r:   rÊ   rË   r=   r>   rL   Úblocks               r!   Úbuild_local_blockrÑ   Î  sY  € ð  UÑ	+€BØÐ6Ñ6Ð6Ð6Ø�qÒØ˜Ò"Üð Ø'Ø)ØÙ*4™¸%Ù1;˜D *Ñ-ÀØ$ dÐ+ñð ñˆEðT €LôA ð Ø'Ø)ØÙ*4™¸%Ù1;˜D *Ñ-ÀØ$ dÐ+ñð ñˆEð@ €Lð- ˜Ò"Üð 	Ø'Ø)ØØ)Ù0:Ñ,ÀÙ7A˜D $¨
Ñ3ÀzØ$ i°Ð6ñ	ð ñ	ˆEð* €Lô  ð 	Ø'Ø)ØØ)Ù*4™¸%Ù1;˜D *Ñ-ÀØ$ dÐ+ñ	ð ñ	ˆEð €LrN   c                   ót   ‡ — e Zd Z	 	 	 ddedededeej                     deej                     defˆ fd„Zˆ xZ	S )	ÚStemÚin_chsÚout_chsÚdepthr9   r:   rË   c	                 ó0  •— t         ‰| �  «        ||dœ}	d| _        | j                  dt	        ||fdd||dœ|	¤Ž«       d}
t        |«      D ]I  }| j                  d|
› �t        t        d
||dd|||d	œ|	¤Žt        j                  «       «      «       |
dz  }
ŒK y )Nr<   r+   Úin_convr0   )r(   r4   r9   r:   r   rÉ   r   )r2   r3   r4   ri   r9   r:   rË   rB   )
rC   rD   r4   Ú
add_moduler/   r   r¾   rÑ   rE   rH   )rK   rÔ   rÕ   rÖ   r9   r:   rË   r=   r>   rL   Ú
stem_blockr    rM   s               €r!   rD   zStem.__init__  sÓ   ø€ ô 	‰ÑÔØ¨Ñ/ˆØˆŒà�‰ØÜØØðð ØØ%Ø#ñð ñô	
ð ˆ
Ü�u“ò 	ˆAØ�O‰O˜c * Ð.´Ü!ð 	Ø 'Ø!(ØØ!"Ø)Ø'Ø)ñ	ð ñ	ô —‘“ó1ô ð ˜!‰O‰Jñ	rN   )rÍ   NN)
rR   rS   rT   rW   r   rE   rZ   ÚstrrD   r[   r\   s   @r!   rÓ   rÓ     sb   ø„ ð (ØØñ*àð*ð ð*ð ð	*ð
 ˜RŸY™Y™ð*ð ˜BŸI™I‘ð*ð ÷*ñ *rN   rÓ   c                   ó‚   ‡ — e Zd Z	 	 	 ddedededeej                     deej                     dededefˆ fd	„Z	d
„ Z
ˆ xZS )ÚEfficientVitStagerÔ   rÕ   rÖ   r9   r:   ri   r»   Ú	vit_stagec                 óœ  •— |	|
dœ}t         ‰| �  «        t        t        d||d||||dœ|¤Žd «      g}|}|r1t	        |«      D ]"  }|j                  t        d|||||dœ|¤Ž«       Œ$ nNt	        d|«      D ]?  }|j                  t        t        d||d|||dœ|¤Žt        j                  «       «      «       ŒA t        j                  |Ž | _
        y )Nr<   r+   )r2   r3   r4   ri   r9   r:   rÊ   ©r2   r»   ri   r9   r:   r   )r2   r3   r4   ri   r9   r:   rB   ©rC   rD   r¾   rÑ   r   r¦   r¸   rE   rH   rŽ   Úblocks)rK   rÔ   rÕ   rÖ   r9   r:   ri   r»   rÞ   r=   r>   rL   râ   r    ÚirM   s                  €r!   rD   zEfficientVitStage.__init__:  s  ø€ ð ¨Ñ/ˆÜ‰ÑÔÜÜð 	Ø"Ø$ØØ)Ø%Ø#Ø$ñ	ð ñ	ð ó
ð ˆð ˆáä˜5“\ò 
�Ø—‘Ü%ð Ø$*Ø!)Ø%1Ø#-Ø"+ñð ñõ	ñ
ô ˜1˜e“_ò �Ø—‘œmÜ%ð Ø$*Ø%,Ø Ø%1Ø#-Ø"+ñð ñô —K‘K“Móõ ðô —m‘m VÐ,ˆ�rN   c                 ó$   — | j                  |«      S r   ©râ   rP   s     r!   rQ   zEfficientVitStage.forwardw  ó   € Ø�{‰{˜1‹~ÐrN   )FNN)rR   rS   rT   rW   r   rE   rZ   rY   rX   rD   rQ   r[   r\   s   @r!   rÝ   rÝ   9  sw   ø„ ð $ØØñ;-àð;-ð ð;-ð ð	;-ð
 ˜RŸY™Y™ð;-ð ˜BŸI™I‘ð;-ð  ð;-ð ð;-ð õ;-özrN   rÝ   c                   ó„   ‡ — e Zd Z	 	 	 	 ddedededeej                     deej                     dededefˆ fd	„Zd
„ Z	ˆ xZ
S )ÚEfficientVitLargeStagerÔ   rÕ   rÖ   r9   r:   r»   rÞ   rÊ   c                 óÀ  •— |	|
dœ}t         ‰| �  «        t        t        d||d|rdnd|||xs ||rdnddœ|¤Žd «      g}|}|r1t	        |«      D ]"  }|j                  t        d||d||d	œ|¤Ž«       Œ$ nSt	        |«      D ]E  }|j                  t        t        d||d
d||||rdnddœ|¤Žt        j                  «       «      «       ŒG t        j                  |Ž | _
        y )Nr<   r+   é   é   rÍ   rÏ   )r2   r3   r4   ri   r9   r:   rÊ   rË   rs   rà   r   rº   rB   rá   )rK   rÔ   rÕ   rÖ   r9   r:   r»   rÞ   rÊ   r=   r>   rL   râ   r    rã   rM   s                  €r!   rD   zEfficientVitLargeStage.__init__|  s1  ø€ ð ¨Ñ/ˆÜ‰ÑÔÜÜð 
Ø"Ø$ØÙ#,™R°"Ø%Ø#Ø$Ò2¨
Ù(2™9¸ñ
ð ñ
ð ó
ð ˆð ˆáä˜5“\ò 
�Ø—‘Ü%ð Ø$*Ø!)Ø%&Ø#-Ø"+ñð ñõ	ñ
ô ˜5“\ò �Ø—‘œmÜ%ð 
Ø$*Ø%,Ø Ø%&Ø#-Ø"+Ø#-Ù0:¡9Àñ
ð ñ
ô —K‘K“Móõ ðô  —m‘m VÐ,ˆ�rN   c                 ó$   — | j                  |«      S r   rå   rP   s     r!   rQ   zEfficientVitLargeStage.forward¼  ræ   rN   )FFNN)rR   rS   rT   rW   r   rE   rZ   rX   rD   rQ   r[   r\   s   @r!   rè   rè   {  sz   ø„ ð $Ø$ØØñ>-àð>-ð ð>-ð ð	>-ð
 ˜RŸY™Y™ð>-ð ˜BŸI™I‘ð>-ð ð>-ð ð>-ð õ>-ö@rN   rè   c                   óà   ‡ — e Zd Zddej                  ej
                  ddddfdedee   ded	ed
e	ej                     dee	ej                        dedefˆ fd„Zddedee   fd„Zddefd„Zˆ xZS )ÚClassifierHeadéè  r1   Úavgrƒ   Nr2   ÚwidthsÚnum_classesr8   r9   r:   Ú	pool_typeÚnorm_epsc                 ó<  •— |	|
dœ}t         ‰| �  «        || _        |d   | _        |sJ d«       ‚t	        ||d   df||dœ|¤Ž| _        t        |d¬«      | _        t        j                  t        j                  |d   |d   fd	d
i|¤Žt        j                  |d   fd|i|¤Ž|�	 |d¬«      nt        j                  «       t        j                  |d
¬«      |dkD  r&t        j                  |d   |fd	di|¤Ž«      | _        y t        j                  «       «      | _        y )Nr<   r•   úCannot disable poolingr   r   )r9   r:   T©ró   Úflattenr7   Fr‰   r?   )rC   rD   rñ   rA   r/   rØ   r   Úglobal_poolrE   rŽ   ÚLinearÚ	LayerNormrH   rF   Ú
classifier)rK   r2   rñ   rò   r8   r9   r:   ró   rô   r=   r>   rL   rM   s               €r!   rD   zClassifierHead.__init__Á  s  ø€ ð ¨Ñ/ˆÜ‰ÑÔØˆŒØ" 2™JˆÔáÐ2Ð2Ó2ˆyÜ" ;°°q±	¸1ÐoÈÐ_hÑoÐlnÑoˆŒÜ/¸)ÈTÔRˆÔÜŸ-™-Ü�I‰I�f˜Q‘i ¨¡Ñ=°Ð=¸"Ñ=Ü�L‰L˜ ™Ñ7¨Ð7°BÑ7Ø'0Ð'<‰I˜dÕ#Ä"Ç+Á+Ã-Ü�J‰J�w¨Ô.ØBMÐPQÂ/ŒB�I‰I�f˜Q‘i Ñ>°4Ð>¸2Ñ>ó
ˆ�ô
 XZ×WbÑWbÓWdó
ˆ�rN   c                 óê   — |�|sJ d«       ‚t        |d¬«      | _        |dkD  r0t        j                  | j                  |d¬«      | j
                  d<   y t        j                  «       | j
                  d<   y )Nrö   Tr÷   r   )r7   r•   )r   rù   rE   rú   rA   rü   rH   )rK   rò   ró   s      r!   ÚresetzClassifierHead.resetÞ  sc   € ØÐ ÙÐ6Ð6Ó6�9Ü3¸iÐQUÔWˆDÔØ˜Š?Ü"$§)¡)¨D×,=Ñ,=¸{ÐQUÔ"VˆD�O‰O˜BÒä"$§+¡+£-ˆD�O‰O˜BÒrN   Ú
pre_logitsc                 ó  — | j                  |«      }| j                  |«      }|rV | j                  d   |«      } | j                  d   |«      } | j                  d   |«      } | j                  d   |«      }|S | j                  |«      }|S )Nr   r   r+   r0   )rØ   rù   rü   ©rK   r   rÿ   s      r!   rQ   zClassifierHead.forwardç  s’   € Ø�L‰L˜‹OˆØ×Ñ˜QÓˆÙà"�—‘ Ñ" 1Ó%ˆAØ"�—‘ Ñ" 1Ó%ˆAØ"�—‘ Ñ" 1Ó%ˆAØ"�—‘ Ñ" 1Ó%ˆAð ˆð —‘ Ó"ˆAØˆrN   r   ©F)rR   rS   rT   rE   rU   rÂ   rW   r   rY   r   rZ   r   rÛ   rD   rþ   rX   rQ   r[   r\   s   @r!   rî   rî   À  s´   ø„ ð
  $ØØ*,¯.©.Ø35·<±<Ø"Ø"ØØñ
àð
ð ˜‘Ið
ð ð	
ð
 ð
ð ˜RŸY™Y™ð
ð    R§Y¡Y¡Ñ0ð
ð ð
ð õ
ñ:0 ð 0°¸#±ó 0ñ T÷ rN   rî   c                   ó¼  ‡ — e Zd Zdddddej                  ej
                  ddddddfd	ed
eedf   deedf   dedede	ej                     de	ej                     dedeedf   dedefˆ fd„Zej                  j                  d)d„«       Zej                  j                  d*d„«       Zej                  j                  dej                  fd„«       Zd+dedee   fd„Z	 	 	 	 	 d,dej*                  deeeee   f      dededed edeeej*                     eej*                  eej*                     f   f   fd!„Z	 	 	 d-deeee   f   d"ed#efd$„Zd%„ Zd)d&efd'„Zd(„ Zˆ xZS ).r   r0   rB   r¹   rº   rð   r1   rï   NÚin_chansrñ   .Údepthsr»   ri   r9   r:   rù   Úhead_widthsÚ	drop_raterò   c                 ó¬  •— ||dœ}t         ‰| �  «        d| _        || _        || _        || _        t        ||d   |d   ||fi |¤Ž| _        | j                  j                  }g | _	        t        j                  «       | _        |d   }t        t        |dd  |dd  «      «      D ]d  \  }\  }}| j                  j                  t!        ||f||||||dk\  dœ|¤Ž«       |dz  }|}| xj                  t#        ||d|› �¬«      gz  c_	        Œf || _        t'        | j$                  f|	||
| j                  d	œ|¤Ž| _        | j(                  j$                  | _        y )
Nr<   Fr   r   r+   )rÖ   r9   r:   ri   r»   rÞ   ústages.©Únum_chsÚ	reductionÚmodule)rñ   rò   r8   ró   )rC   rD   Úgrad_checkpointingrù   rò   r  rÓ   Ústemr4   Úfeature_inforE   rŽ   ÚstagesÚ	enumerateÚzipr¦   rÝ   ÚdictrA   rî   ÚheadÚhead_hidden_size)rK   r  rñ   r  r»   ri   r9   r:   rù   r  r  rò   r=   r>   rL   r4   r2   rã   ÚwÚdrM   s                       €r!   rD   zEfficientVit.__init__ö  s�  ø€ ð  ¨Ñ/ˆÜ‰ÑÔØ"'ˆÔØ&ˆÔØ&ˆÔØ ˆŒô ˜ 6¨!¡9¨f°Q©i¸ÀYÑUÐRTÑUˆŒ	Ø—‘×!Ñ!ˆð ˆÔÜ—m‘m“oˆŒØ˜Q‘iˆÜ"¤3 v¨a¨b z°6¸!¸"°:Ó#>Ó?ò 	e‰IˆA‰v��1Ø�K‰K×ÑÔ0ØØð
 ð Ø%Ø#Ø)Ø!Ø˜q™&ñ
 ð ñ
 ô 
ð �a‰KˆFØˆKØ×Ò¤$¨{ÀfÐW^Ð_`Ð^aÐUbÔ"cÐ!dÑdÖð	eð  (ˆÔÜ"Ø×Ñð
àØ#ØØ×&Ñ&ñ
ð ñ
ˆŒ	ð !%§	¡	× 6Ñ 6ˆÕrN   c                 ó,   — t        d|rdnddg¬«      }|S ©Nz^stemz^stages\.(\d+))z^stages\.(\d+).downsample)r   )z^stages\.(\d+)\.\w+\.(\d+)N)r  râ   ©r  ©rK   ÚcoarseÚmatchers      r!   Úgroup_matcherzEfficientVit.group_matcher0  ó'   € äØÙ(.Ñ$Ø4Ø5ð5ô
ˆð ˆrN   c                 ó   — || _         y r   ©r  ©rK   Úenables     r!   Úset_grad_checkpointingz#EfficientVit.set_grad_checkpointing;  ó
   € à"(ˆÕrN   r)   c                 ó4   — | j                   j                  d   S ©Nr•   ©r  rü   ©rK   s    r!   Úget_classifierzEfficientVit.get_classifier?  ó   € à�y‰y×#Ñ# BÑ'Ð'rN   c                 óJ   — || _         | j                  j                  ||«       y r   ©rò   r  rþ   ©rK   rò   rù   s      r!   Úreset_classifierzEfficientVit.reset_classifierC  ó   € Ø&ˆÔØ�	‰	�‰˜ [Õ1rN   r   ÚindicesrI   Ú
stop_earlyÚ
output_fmtÚintermediates_onlyc                 óà  — |dv sJ d«       ‚g }t        t        | j                  «      |«      \  }}	| j                  |«      }t        j
                  j                  «       s|s| j                  }
n| j                  d|	dz    }
t        |
«      D ]Z  \  }}| j                  r+t        j
                  j                  «       st        |
|«      }n ||«      }||v sŒJ|j                  |«       Œ\ |r|S ||fS ©aï   Forward features that returns intermediates.

        Args:
            x: Input image tensor
            indices: Take last n blocks if int, all if None, select matching indices if sequence
            norm: Apply norm layer to compatible intermediates
            stop_early: Stop iterating over blocks when last desired intermediate hit
            output_fmt: Shape of intermediate feature outputs
            intermediates_only: Only return intermediate features
        Returns:

        )ÚNCHWzOutput shape must be NCHW.Nr   ©r   r&   r  r  r§   r­   r®   r  r  r   r¦   ©rK   r   r2  rI   r3  r4  r5  ÚintermediatesÚtake_indicesÚ	max_indexr  Úfeat_idxÚstages                r!   Úforward_intermediatesz"EfficientVit.forward_intermediatesG  óæ   € ð* ˜YÑ&ÐDÐ(DÓDÐ&ØˆÜ"6´s¸4¿;¹;Ó7GÈÓ"QÑˆ�ið �I‰I�a‹Lˆä�9‰9×!Ñ!Ô#©:Ø—[‘[‰Fà—[‘[  )¨a¡-Ð0ˆFä(¨Ó0ò 	(‰OˆH�eØ×&Ò&¬u¯y©y×/EÑ/EÔ/GÜ" 6¨1Ó-‘á˜!“H�Ø˜<Ò'Ø×$Ñ$ QÕ'ð	(ñ Ø Ð à�-ÐÐrN   Ú
prune_normÚ
prune_headc                 ó    — t        t        | j                  «      |«      \  }}| j                  d|dz    | _        |r| j                  dd«       |S ©z@ Prune layers not required for specified intermediates.
        Nr   r   Ú ©r   r&   r  r0  ©rK   r2  rB  rC  r<  r=  s         r!   Úprune_intermediate_layersz&EfficientVit.prune_intermediate_layersu  óM   € ô #7´s¸4¿;¹;Ó7GÈÓ"QÑˆ�iØ—k‘k . 9¨q¡=Ð1ˆŒÙØ×!Ñ! ! RÔ(ØÐrN   c                 óÎ   — | j                  |«      }| j                  r6t        j                  j	                  «       st        | j                  |«      }|S | j                  |«      }|S r   ©r  r  r§   r­   r®   r   r  rP   s     r!   Úforward_featureszEfficientVit.forward_featuresƒ  óR   € Ø�I‰I�a‹LˆØ×"Ò"¬5¯9©9×+AÑ+AÔ+CÜ˜tŸ{™{¨AÓ.ˆAð ˆð —‘˜A“ˆAØˆrN   rÿ   c                 óN   — |r| j                  ||¬«      S | j                  |«      S ©N)rÿ   ©r  r  s      r!   Úforward_headzEfficientVit.forward_head‹  ó%   € Ù6@ˆt�y‰y˜ zˆyÓ2ÐRÀdÇiÁiÐPQÃlÐRrN   c                 óJ   — | j                  |«      }| j                  |«      }|S r   ©rM  rR  rP   s     r!   rQ   zEfficientVit.forwardŽ  ó'   € Ø×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆrN   r  ©Tr   ©NFFr8  F©r   FT)rR   rS   rT   rE   rU   rÂ   rW   r   rY   r   rZ   rÛ   rD   r§   r­   Úignorer  r%  r+  r   r0  ÚTensorr	   r   rX   r@  rI  rM  rR  rQ   r[   r\   s   @r!   r   r   õ  s6  ø„ ð Ø&(Ø&(ØØ"#Ø*,¯.©.Ø)+¯©Ø$Ø+-Ø"Ø#ØØñ87àð87ð ˜#˜s˜(‘Oð87ð ˜#˜s˜(‘Oð	87ð
 ð87ð  ð87ð ˜RŸY™Y™ð87ð ˜BŸI™I‘ð87ð ð87ð ˜s C˜x™ð87ð ð87ð õ87ðt ‡Y�Y×Ñòó ðð ‡Y�Y×Ñò)ó ð)ð ‡Y�Y×Ñð( §	¡	ò (ó ð(ñ2¨Cð 2¸hÀs¹mó 2ð 8<ØØ$Ø$Ø',ñ, à�|‰|ð, ð ˜e C¨¨c© NÑ3Ñ4ð, ð ð	, ð
 ð, ð ð, ð !%ð, ð 
ˆt�E—L‘LÑ! 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#JÐJÑ	Kó, ð` ./Ø$Ø#ñ	à˜3  S¡	˜>Ñ*ðð ðð ó	òñS¨$ó SörN   c                   ó¨  ‡ — e Zd Zddddej                  edddddddfd	ed
eedf   deedf   dedeej                     deej                     de
deedf   dededefˆ fd„Zej                  j                  d)d„«       Zej                  j                  d*d„«       Zej                  j                  dej                  fd„«       Zd+dedee
   fd„Z	 	 	 	 	 d,dej*                  deeeee   f      dedede
d edeeej*                     eej*                  eej*                     f   f   fd!„Z	 	 	 d-deeee   f   d"ed#efd$„Zd%„ Zd)d&efd'„Zd(„ Zˆ xZS ).r   r0   rB   r¹   rð   r1   rï   gH¯¼šò×z>Nr  rñ   .r  r»   r9   r:   rù   r  r  rò   rô   c                 ó
  •— ||dœ}t         ‰| �  «        d| _        || _        |
| _        || _        || _        t        || j                  ¬«      }t        ||d   |d   ||fddi|¤Ž| _	        | j                  j                  }g | _        t        j                  «       | _        |d   }t        t!        |dd  |dd  «      «      D ]g  \  }\  }}| j                  j#                  t%        ||f|||||dk\  |d	k\  d
œ|¤Ž«       |d	z  }|}| xj                  t'        ||d|› �¬«      gz  c_        Œi || _        t+        | j(                  f||
|	| j                  || j                  dœ|¤Ž| _        | j,                  j(                  | _        y )Nr<   F)r‰   r   rË   rÎ   r   r0   r+   )rÖ   r9   r:   r»   rÞ   rÊ   r	  r
  )rñ   rò   r8   ró   r:   rô   )rC   rD   r  rù   rò   r  rô   r
   rÓ   r  r4   r  rE   rŽ   r  r  r  r¦   rè   r  rA   rî   r  r  )rK   r  rñ   r  r»   r9   r:   rù   r  r  rò   rô   r=   r>   rL   r4   r2   rã   r  r  rM   s                       €r!   rD   zEfficientVitLarge.__init__•  sº  ø€ ð  ¨Ñ/ˆÜ‰ÑÔØ"'ˆÔØ&ˆÔØ&ˆÔØ ˆŒØ ˆŒÜ˜Z¨T¯]©]Ô;ˆ
ô ˜ 6¨!¡9¨f°Q©i¸ÀYÑiÐ[bÐiÐfhÑiˆŒ	Ø—‘×!Ñ!ˆð ˆÔÜ—m‘m“oˆŒØ˜Q‘iˆÜ"¤3 v¨a¨b z°6¸!¸"°:Ó#>Ó?ò 	e‰IˆA‰v��1Ø�K‰K×ÑÔ5ØØð
 ð Ø%Ø#Ø!Ø˜q™&Ø ™6ñ
 ð ñ
 ô 
ð �a‰KˆFØˆKØ×Ò¤$¨{ÀfÐW^Ð_`Ð^aÐUbÔ"cÐ!dÑdÖð	eð  (ˆÔÜ"Ø×Ñð	
àØ#ØØ×&Ñ&ØØ—]‘]ñ	
ð ñ	
ˆŒ	ð !%§	¡	× 6Ñ 6ˆÕrN   c                 ó,   — t        d|rdnddg¬«      }|S r  r  r  s      r!   r  zEfficientVitLarge.group_matcherÓ  r   rN   c                 ó   — || _         y r   r"  r#  s     r!   r%  z(EfficientVitLarge.set_grad_checkpointingÞ  r&  rN   r)   c                 ó4   — | j                   j                  d   S r(  r)  r*  s    r!   r+  z EfficientVitLarge.get_classifierâ  r,  rN   c                 óJ   — || _         | j                  j                  ||«       y r   r.  r/  s      r!   r0  z"EfficientVitLarge.reset_classifieræ  r1  rN   r   r2  rI   r3  r4  r5  c                 óà  — |dv sJ d«       ‚g }t        t        | j                  «      |«      \  }}	| j                  |«      }t        j
                  j                  «       s|s| j                  }
n| j                  d|	dz    }
t        |
«      D ]Z  \  }}| j                  r+t        j
                  j                  «       st        |
|«      }n ||«      }||v sŒJ|j                  |«       Œ\ |r|S ||fS r7  r9  r:  s                r!   r@  z'EfficientVitLarge.forward_intermediatesê  rA  rN   rB  rC  c                 ó    — t        t        | j                  «      |«      \  }}| j                  d|dz    | _        |r| j                  dd«       |S rE  rG  rH  s         r!   rI  z+EfficientVitLarge.prune_intermediate_layers  rJ  rN   c                 óÎ   — | j                  |«      }| j                  r6t        j                  j	                  «       st        | j                  |«      }|S | j                  |«      }|S r   rL  rP   s     r!   rM  z"EfficientVitLarge.forward_features&  rN  rN   rÿ   c                 óN   — |r| j                  ||¬«      S | j                  |«      S rP  rQ  r  s      r!   rR  zEfficientVitLarge.forward_head.  rS  rN   c                 óJ   — | j                  |«      }| j                  |«      }|S r   rU  rP   s     r!   rQ   zEfficientVitLarge.forward1  rV  rN   r  rW  r   rX  rY  )rR   rS   rT   rE   rU   r   rW   r   r   rZ   rÛ   rY   rD   r§   r­   rZ  r  r%  r+  r   r0  r[  r	   r   rX   r@  rI  rM  rR  rQ   r[   r\   s   @r!   r   r   ”  s2  ø„ ð Ø"$Ø"$ØØ&(§n¡nØ%-Ø Ø')ØØØØØñ<7àð<7ð �c˜3�h‘ð<7ð �c˜3�h‘ð	<7ð
 ð<7ð ˜Ÿ™‘Oð<7ð ˜Ÿ	™	‘?ð<7ð ð<7ð ˜3 ˜8‘_ð<7ð ð<7ð ð<7ð õ<7ð| ‡Y�Y×Ñòó ðð ‡Y�Y×Ñò)ó ð)ð ‡Y�Y×Ñð( §	¡	ò (ó ð(ñ2¨Cð 2¸hÀs¹mó 2ð 8<ØØ$Ø$Ø',ñ, à�|‰|ð, ð ˜e C¨¨c© NÑ3Ñ4ð, ð ð	, ð
 ð, ð ð, ð !%ð, ð 
ˆt�E—L‘LÑ! 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#JÐJÑ	Kó, ð` ./Ø$Ø#ñ	à˜3  S¡	˜>Ñ*ðð ðð ó	òñS¨$ó SörN   c                 ó0   — | dt         t        dddddddœ
|¥S )	Nrï   zstem.in_conv.convzhead.classifier.4gffffffî?z
apache-2.0)r0   éà   rh  )é   ri  )
Úurlrò   ÚmeanÚstdÚ
first_convrü   Úcrop_pctÚlicenseÚ
input_sizeÚ	pool_sizer   )rj  Úkwargss     r!   Ú_cfgrs  7  s4   € àØÜ%Ü#Ø)Ø)ØØØ#Øñð ðð rN   zefficientvit_b0.r224_in1kztimm/)Ú	hf_hub_idzefficientvit_b1.r224_in1kzefficientvit_b1.r256_in1k)r0   é   ru  )r€   r€   r   )rt  rp  rq  rn  zefficientvit_b1.r288_in1k)r0   é   rv  )é	   rw  zefficientvit_b2.r224_in1kzefficientvit_b2.r256_in1kzefficientvit_b2.r288_in1kzefficientvit_b3.r224_in1kzefficientvit_b3.r256_in1kzefficientvit_b3.r288_in1kzefficientvit_l1.r224_in1k)rt  rn  zefficientvit_l2.r224_in1kzefficientvit_l2.r256_in1kzefficientvit_l2.r288_in1kzefficientvit_l2.r384_in1k)r0   é€  rx  )é   ry  zefficientvit_l3.r224_in1kzefficientvit_l3.r256_in1k)r0   é@  rz  )é
   r{  )zefficientvit_l3.r320_in1kzefficientvit_l3.r384_in1kc                 óh   — |j                  dd«      }t        t        | |fdt        d|¬«      i|¤Ž}|S ©NÚout_indices)r   r   r+   r0   Úfeature_cfgT)Úflatten_sequentialr~  )Úpopr   r   r  ©ÚvariantÚ
pretrainedrr  r~  Úmodels        r!   Ú_create_efficientvitr†  ¢  sG   € Ø—*‘*˜]¨LÓ9€KÜ ÜØØñô ¨D¸kÔJð	ð
 ñ€Eð €LrN   c                 óh   — |j                  dd«      }t        t        | |fdt        d|¬«      i|¤Ž}|S r}  )r�  r   r   r  r‚  s        r!   Ú_create_efficientvit_largerˆ  ®  sG   € Ø—*‘*˜]¨LÓ9€KÜ ÜØØñô ¨D¸kÔJð	ð
 ñ€Eð €LrN   c           	      óN   — t        dddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )N)r€   rë   r¹   é@   é€   )r   r+   r+   r+   r+   rë   )é   i   ©rñ   r  r»   r  r„  )Úefficientvit_b0©r  r†  ©r„  rr  Ú
model_argss      r!   rŽ  rŽ  º  s6   € äØ#¨OÀbÐVbôd€JäÑg¸jÐgÌDÐQ[ÑLfÐ_eÑLfÑgÐgrN   c           	      óN   — t        dddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )N)rë   r¹   rŠ  r‹  ru  )r   r+   r0   r0   rº   rë   )i   i@  r�  r„  )Úefficientvit_b1r�  r�  s      r!   r“  r“  Á  ó6   € äØ%¨oÈÐXdôf€JäÑg¸jÐgÌDÐQ[ÑLfÐ_eÑLfÑgÐgrN   c           	      óN   — t        dddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )N)rê   é0   é`   éÀ   rx  )r   r0   rº   rº   rs   r¹   ©i 	  i 
  r�  r„  )Úefficientvit_b2r�  r�  s      r!   rš  rš  È  r”  rN   c           	      óN   — t        dddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )N©r¹   rŠ  r‹  ru  é   )r   rº   rs   rs   rw  r¹   r™  r�  r„  )Úefficientvit_b3r�  r�  s      r!   rž  rž  Ï  s6   € äØ&¨ÈÐYeôg€JäÑg¸jÐgÌDÐQ[ÑLfÐ_eÑLfÑgÐgrN   c           	      óN   — t        dddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )Nrœ  )r   r   r   rs   rs   r¹   ©i   i€  r�  r„  )Úefficientvit_l1©r  rˆ  r�  s      r!   r¡  r¡  Ö  ó7   € äØ&¨ÈÐYeôg€Jä%ÑmÀJÐmÔRVÐWaÑRlÐekÑRlÑmÐmrN   c           	      óN   — t        dddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )Nrœ  ©r   r+   r+   r€   r€   r¹   r   r�  r„  )Úefficientvit_l2r¢  r�  s      r!   r¦  r¦  Ý  r£  rN   c           	      óN   — t        dddd¬«      }t        dd| it        |fi |¤Ž¤ŽS )N)rŠ  r‹  ru  r�  rŒ  r¥  r¹   )i   i   r�  r„  )Úefficientvit_l3r¢  r�  s      r!   r¨  r¨  ä  s7   € äØ(°È2Ð[gôi€Jä%ÑmÀJÐmÔRVÐWaÑRlÐekÑRlÑmÐmrN   )r   )r   r•   )FrÍ   NN)rF  r  )Hr¶   Ú__all__Útypingr   r   r   r   r	   Ú	functoolsr
   r§   Útorch.nnrE   Útorch.nn.functionalÚ
functionalr«   Ú	timm.datar   r   Útimm.layersr   r   r   Ú_builderr   Ú	_featuresr   Ú_features_fxr   Ú_manipulater   Ú	_registryr   r   r   r   Úanyr"   rW   r'   r,   rZ   r/   r^   rg   rr   ry   r~   r¸   r¾   rY   rÛ   rX   rÑ   rŽ   rÓ   rÝ   rè   rî   r   r   rs  Údefault_cfgsr†  rˆ  rŽ  r“  rš  rž  r¡  r¦  r¨  rB   rN   r!   ú<module>r¸     s¹  ðñð Ð.Ð
/€ß 5Õ 5Ý ã Ý ß Ð ç Aß EÑ EÝ *Ý +Ý 1Ý 'ß <ñ+�Ò$˜Ò$ ó +ñ�Ò%˜Ò% #ð °ð ÀSó ð  #Ò"8¨¨s°C¨x©ð  ¸SÒ=SÀEÈ#ÈsÈ(ÁOó  ô%�"—)‘)ô %ôP+ˆR�Y‰Yô +ô\.�—	‘	ô .ôb9ˆR�Y‰Yô 9ôx/�"—)‘)ô /ôdcˆb�i‰iô cñL ˜Ô  ô)˜Ÿ	™	ô )ôX�B—I‘Iô ð4 !Ø#ØØñ:Øð:àð:ð ð:ð ð	:ð
 ð:ð ð:ð ð:ð ó:ôz+ˆ2�=‰=ô +ô\?˜Ÿ	™	ô ?ôDB˜RŸY™Yô BôJ2�R—Y‘Yô 2ôj\�2—9‘9ô \ô~`˜Ÿ	™	ô `óFñ  %ð X&Ø¡Øô"ðX&ð  ¡Øô"ð	X&ð  ¡ØØ ¨F¸Sô"ðX&ð  ¡ØØ ¨F¸Sô"ðX&ð  ¡Øô"ðX&ð$  ¡ØØ ¨F¸Sô"ð%X&ð,  ¡ØØ ¨F¸Sô"ð-X&ð4  ¡Øô"ð5X&ð:  ¡ØØ ¨F¸Sô"ð;X&ðB  ¡ØØ ¨F¸Sô"ðCX&ðJ  ¡ØØô"ðKX&ðR  ¡ØØô"ðSX&ðZ  ¡ØØ ¨F¸Sô"ð[X&ðb  ¡ØØ ¨F¸Sô"ðcX&ðj  ¡ØØ ¨H¸sô"ðkX&ðr  ¡ØØô"ðsX&ðz  ¡ØØ ¨F¸Sô"ð{X&ñB "&ØØ ¨H¸sô"ñ "&ØØ ¨H¸sô"òKX&ó X€óv	ó	ð òhó ðhð òhó ðhð òhó ðhð òhó ðhð ònó ðnð ònó ðnð ònó ñnrN   