Ë
    éÓ^j�t  ã                   ó  — d Z dgZddlZddlmZ ddlmZmZmZm	Z	m
Z
mZ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mZ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%m&Z& ddl'm(Z(m)Z)  G d„ dej                  jT                  «      Z+ G d„ dejX                  «      Z- G d„ dejX                  «      Z. G d„ dejX                  «      Z/ G d„ dejX                  «      Z0 G d„ dejX                  «      Z1 G d„ dej                  jX                  «      Z2 G d„ dejX                  «      Z3 e#e3«        G d„ dejX                  «      Z4 G d „ dejX                  «      Z5d!„ Z6d6d"„Z7 e) e7d#d$¬%«       e7d#¬&«       e7d#¬&«       e7d#d$¬%«       e7d#¬&«       e7d#¬&«       e7d#d$¬%«       e7d#¬&«       e7d#¬&«       e7d#d'd(d)¬*«       e7d#d+d,d)d-¬.«      d/œ«      Z8d7d0„Z9e(d7d1„«       Z:e(d7d2„«       Z;e(d7d3„«       Z<e(d7d4„«       Z=e(d7d5„«       Z>y)8zÓ TinyViT

Paper: `TinyViT: Fast Pretraining Distillation for Small Vision Transformers`
    - https://arxiv.org/abs/2207.10666

Adapted from official impl at https://github.com/microsoft/Cream/tree/main/TinyViT
ÚTinyVité    N)Úpartial)ÚDictÚListÚOptionalÚTupleÚUnionÚTypeÚAny©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)ÚLayerNorm2dÚNormMlpClassifierHeadÚDropPathÚtrunc_normal_Úresize_rel_pos_bias_table_levitÚuse_fused_attnÚcalculate_drop_path_ratesé   )Úbuild_model_with_cfg)Úfeature_take_indices)Úregister_notrace_module)Ú
checkpointÚcheckpoint_seq)Úregister_modelÚgenerate_default_cfgsc                   ó€   ‡ — e Zd Z	 	 	 	 	 	 	 	 ddedededededededefˆ fd	„Z ej                  «       d
„ «       Zˆ xZ	S )ÚConvNormÚin_chsÚout_chsÚksÚstrideÚpadÚdilationÚgroupsÚbn_weight_initc           	      ó   •— |	|
dœ}t         ‰| �  «        t        j                  |||||||fddi|¤Ž| _        t        j
                  |fi |¤Ž| _        t        j                  j                  j                  | j                  j                  |«       t        j                  j                  j                  | j                  j                  d«       y )N©ÚdeviceÚdtypeÚbiasFr   )ÚsuperÚ__init__ÚnnÚConv2dÚconvÚBatchNorm2dÚbnÚtorchÚinitÚ	constant_Úweightr,   )Úselfr    r!   r"   r#   r$   r%   r&   r'   r*   r+   ÚddÚ	__class__s               €ú_/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/tiny_vit.pyr.   zConvNorm.__init__   s—   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ—I‘I˜f g¨r°6¸3ÀÈ&ÑcÐW\ÐcÐ`bÑcˆŒ	Ü—.‘. Ñ/¨BÑ/ˆŒÜ�‰�‰×Ñ §¡§¡°Ô?Ü�‰�‰×Ñ §¡§¡¨aÕ0ó    c           	      óB  — | j                   | j                  }}|j                  |j                  |j                  z   dz  z  }|j                  |d d …d d d f   z  }|j
                  |j                  |j                  z  |j                  |j                  z   dz  z  z
  }t        j                  j                  |j                  d«      | j                   j                  z  |j                  d«      |j                  dd  | j                   j                  | j                   j                  | j                   j                  | j                   j                  ¬«      }|j                  j                   j#                  |«       |j
                  j                   j#                  |«       |S )Ng      à?r   r   é   )r#   Úpaddingr%   r&   )r1   r3   r7   Úrunning_varÚepsr,   Úrunning_meanr4   r/   r0   Úsizer&   Úshaper#   r?   r%   ÚdataÚcopy_)r8   Úcr3   ÚwÚbÚms         r;   ÚfusezConvNorm.fuse2   s5  € à—	‘	˜4Ÿ7™7ˆ2ˆØ�I‰I˜Ÿ™¨"¯&©&Ñ0°SÑ8Ñ8ˆØ�H‰H�qš˜D $¨Ð,Ñ-Ñ-ˆØ�G‰G�b—o‘o¨¯	©	Ñ1Ø�^‰^˜bŸf™fÑ$¨Ñ,ñ-ñ -ˆä�H‰H�O‰OØ�F‰F�1‹I˜Ÿ	™	×(Ñ(Ñ(¨!¯&©&°«)°Q·W±W¸Q¸R°[Ø—9‘9×#Ñ#¨T¯Y©Y×->Ñ->ÈÏÉ×I[ÑI[Ðdh×dmÑdm×dtÑdtð ó vˆð 	
�‰�‰×Ñ˜AÔØ	�‰�‰×Ñ˜!ÔØˆr<   )r   r   r   r   r   r   NN)
Ú__name__Ú
__module__Ú__qualname__ÚintÚfloatr.   r4   Úno_gradrK   Ú__classcell__©r:   s   @r;   r   r      sŒ   ø„ ð
 ØØØØØ$%ØØñ1àð1ð ð1ð ð	1ð
 ð1ð ð1ð ð1ð ð1ð "õ1ð( €U‡]�]ƒ_ñó ôr<   r   c                   óR   ‡ — e Zd Z	 	 ddededeej                     fˆ fd„Zd„ Zˆ xZ	S )Ú
PatchEmbedr    r!   Ú	act_layerc                 ó²   •— ||dœ}t         ‰| �  «        d| _        t        ||dz  dddfi |¤Ž| _         |«       | _        t        |dz  |dddfi |¤Ž| _        y )Nr)   é   r>   é   r   )r-   r.   r#   r   Úconv1ÚactÚconv2)r8   r    r!   rV   r*   r+   r9   r:   s          €r;   r.   zPatchEmbed.__init__B   sd   ø€ ð ¨Ñ/ˆÜ‰ÑÔØˆŒÜ˜f g°¡l°A°q¸!ÑB¸rÑBˆŒ
Ù“;ˆŒÜ˜g¨™l¨G°Q¸¸1ÑCÀÑCˆ�
r<   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S ©N)rZ   r[   r\   ©r8   Úxs     r;   ÚforwardzPatchEmbed.forwardQ   s.   € Ø�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�J‰J�q‹MˆØˆr<   ©NN©
rL   rM   rN   rO   r
   r/   ÚModuler.   ra   rR   rS   s   @r;   rU   rU   A   s=   ø„ ð ØñDàðDð ðDð ˜BŸI™I‘õ	Dör<   rU   c                   óZ   ‡ — e Zd Z	 	 ddedededeej                     def
ˆ fd„Zd„ Z	ˆ xZ
S )	ÚMBConvr    r!   Úexpand_ratiorV   Ú	drop_pathc                 ón  •— ||dœ}t         ‰
| �  «        t        ||z  «      }	t        ||	fddi|¤Ž| _         |«       | _        t        |	|	fddd|	dœ|¤Ž| _         |«       | _        t        |	|fdddœ|¤Ž| _         |«       | _	        |dkD  rt        |«      | _        y t        j                  «       | _        y )Nr)   r"   r   rY   ©r"   r#   r$   r&   ç        )r"   r'   )r-   r.   rO   r   rZ   Úact1r\   Úact2Úconv3Úact3r   r/   ÚIdentityrh   )r8   r    r!   rg   rV   rh   r*   r+   r9   Úmid_chsr:   s             €r;   r.   zMBConv.__init__Y   s³   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ�f˜|Ñ+Ó,ˆÜ˜f gÑ:°!Ð:°rÑ:ˆŒ
Ù“KˆŒ	Ü˜g wÐ\°1¸QÀAÈgÑ\ÐY[Ñ\ˆŒ
Ù“KˆŒ	Ü˜g wÐO°1ÀSÑOÈBÑOˆŒ
Ù“KˆŒ	Ø09¸B²œ )Ó,ˆ�ÄBÇKÁKÃMˆ�r<   c                 ó  — |}| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }||z  }| j                  |«      }|S r^   )rZ   rl   r\   rm   rn   rh   ro   )r8   r`   Úshortcuts      r;   ra   zMBConv.forwardn   sq   € ØˆØ�J‰J�q‹MˆØ�I‰I�a‹LˆØ�J‰J�q‹MˆØ�I‰I�a‹LˆØ�J‰J�q‹MˆØ�N‰N˜1ÓˆØ	ˆX‰ˆØ�I‰I�a‹LˆØˆr<   rb   )rL   rM   rN   rO   rP   r
   r/   rd   r.   ra   rR   rS   s   @r;   rf   rf   X   sS   ø„ ð ØñRàðRð ðRð  ð	Rð
 ˜BŸI™I‘ðRð õRö*
r<   rf   c                   óR   ‡ — e Zd Z	 	 ddededeej                     fˆ fd„Zd„ Zˆ xZ	S )ÚPatchMergingÚdimÚout_dimrV   c                 óÞ   •— ||dœ}t         ‰| �  «        t        ||dddfi |¤Ž| _         |«       | _        t        ||dddfd|i|¤Ž| _         |«       | _        t        ||dddfi |¤Ž| _        y )Nr)   r   r   rY   r>   r&   )r-   r.   r   rZ   rl   r\   rm   rn   )r8   rv   rw   rV   r*   r+   r9   r:   s          €r;   r.   zPatchMerging.__init__|   s|   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ˜c 7¨A¨q°!Ñ:°rÑ:ˆŒ
Ù“KˆŒ	Ü˜g w°°1°aÑNÀÐNÈ2ÑNˆŒ
Ù“KˆŒ	Ü˜g w°°1°aÑ>¸2Ñ>ˆ�
r<   c                 ó°   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }|S r^   )rZ   rl   r\   rm   rn   r_   s     r;   ra   zPatchMerging.forwardŒ   sH   € Ø�J‰J�q‹MˆØ�I‰I�a‹LˆØ�J‰J�q‹MˆØ�I‰I�a‹LˆØ�J‰J�q‹MˆØˆr<   rb   rc   rS   s   @r;   ru   ru   {   s9   ø„ ð Øñ?àð?ð ð?ð ˜BŸI™I‘õ	?ö r<   ru   c                   ón   ‡ — e Zd Z	 	 	 	 ddededeej                     deee	e   f   def
ˆ fd„Z
d„ Zˆ xZS )	Ú	ConvLayerrv   ÚdepthrV   rh   Úconv_expand_ratioc                 óô   •— ||dœ}t         ‰
| �  «        || _        || _        t	        j
                  t        |«      D �	cg c]'  }	t        ||||t        |t        «      r||	   n|fi |¤Ž‘Œ) c}	Ž | _
        y c c}	w ©Nr)   )r-   r.   rv   r|   r/   Ú
SequentialÚrangerf   Ú
isinstanceÚlistÚblocks)r8   rv   r|   rV   rh   r}   r*   r+   r9   Úir:   s             €r;   r.   zConvLayer.__init__–   sˆ   ø€ ð ¨Ñ/ˆÜ‰ÑÔØˆŒØˆŒ
Ü—m‘mô ˜5“\ö
&
ð ô ØØØ!ØÜ *¨9´dÔ ;�	˜!’Àñð óò
&
ð 
ˆ�ùò 
&
s   ¿,A5c                 ó(   — | j                  |«      }|S r^   )r„   r_   s     r;   ra   zConvLayer.forward°   s   € Ø�K‰K˜‹NˆØˆr<   )rk   ç      @NN)rL   rM   rN   rO   r
   r/   rd   r	   rP   r   r.   ra   rR   rS   s   @r;   r{   r{   •   sa   ø„ ð 46Ø')ØØñàðð ðð ˜BŸI™I‘ð	ð
 ˜U D¨¡KÐ/Ñ0ðð  %õö4r<   r{   c                   ó¶   ‡ — e Zd Zddej                  ej
                  dddfdedee   dee   deej                     deej                     de
fˆ fd	„Zd
„ Zˆ xZS )ÚNormMlpNrk   Úin_featuresÚhidden_featuresÚout_featuresÚ
norm_layerrV   Údropc	                 óP  •— ||dœ}	t         ‰
| �  «        |xs |}|xs |} ||fi |	¤Ž| _        t        j                  ||fi |	¤Ž| _         |«       | _        t        j                  |«      | _        t        j                  ||fi |	¤Ž| _	        t        j                  |«      | _
        y r   )r-   r.   Únormr/   ÚLinearÚfc1r[   ÚDropoutÚdrop1Úfc2Údrop2)r8   rŠ   r‹   rŒ   r�   rV   rŽ   r*   r+   r9   r:   s             €r;   r.   zNormMlp.__init__¶   s–   ø€ ð ¨Ñ/ˆÜ‰ÑÔØ#Ò2 {ˆØ)Ò8¨[ˆÙ˜{Ñ1¨bÑ1ˆŒ	Ü—9‘9˜[¨/Ñ@¸RÑ@ˆŒÙ“;ˆŒÜ—Z‘Z Ó%ˆŒ
Ü—9‘9˜_¨lÑA¸bÑAˆŒÜ—Z‘Z Ó%ˆ�
r<   c                 óÒ   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }|S r^   )r�   r’   r[   r”   r•   r–   r_   s     r;   ra   zNormMlp.forwardÌ   sU   € Ø�I‰I�a‹LˆØ�H‰H�Q‹KˆØ�H‰H�Q‹KˆØ�J‰J�q‹MˆØ�H‰H�Q‹KˆØ�J‰J�q‹MˆØˆr<   )rL   rM   rN   r/   Ú	LayerNormÚGELUrO   r   r
   rd   rP   r.   ra   rR   rS   s   @r;   r‰   r‰   µ   s~   ø„ ð .2Ø*.Ø*,¯,©,Ø)+¯©ØØØñ&àð&ð & c™]ð&ð # 3™-ð	&ð
 ˜RŸY™Y™ð&ð ˜BŸI™I‘ð&ð õ&ö,r<   r‰   c                   ó6  ‡ — e Zd ZU ej                  j
                  e   ed<   ee	ej                  f   ed<   	 	 	 	 	 ddededededeeef   f
ˆ fd„Z ej                  «       dˆ fd	„	«       Zd
ej                   dej                  fd„Zd„ Zdd„Zdd„Zdd„Zˆ xZS )Ú	AttentionÚ
fused_attnÚattention_bias_cacherv   Úkey_dimÚ	num_headsÚ
attn_ratioÚ
resolutionc                 óD  •— ||dœ}t         ‰| �  «        t        |t        «      rt	        |«      dk(  sJ ‚|| _        |dz  | _        || _        t        ||z  «      | _	        | j                  |z  | _
        || _        || _        t        «       | _        t        j                   |fi |¤Ž| _        t        j$                  ||| j                  d|z  z   z  fi |¤Ž| _        t        j$                  | j                  |fi |¤Ž| _        |d   |d   z  }	|d   |d   z  }
t*        j                  j-                  t+        j.                  ||
fi |¤Ž«      | _        | j3                  dt+        j.                  |	|	f|t*        j4                  ¬«      d¬«       i | _        | j9                  «        y )	Nr)   r>   g      à¿r   r   Úattention_bias_idxsF)Ú
persistent)r-   r.   r‚   ÚtupleÚlenrŸ   Úscalerž   rO   Úval_dimrw   r    r¡   r   rœ   r/   r˜   r�   r‘   ÚqkvÚprojr4   Ú	ParameterÚemptyÚattention_biasesÚregister_bufferÚlongr�   Úreset_parameters)r8   rv   rž   rŸ   r    r¡   r*   r+   r9   ÚNÚnum_offsetsr:   s              €r;   r.   zAttention.__init__Ú   su  ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ˜*¤eÔ,´°Z³ÀAÒ1EÐEÐEØ"ˆŒØ ‘_ˆŒ
ØˆŒÜ˜:¨Ñ/Ó0ˆŒØ—|‘| iÑ/ˆŒØ$ˆŒØ$ˆŒÜ(Ó*ˆŒä—L‘L Ñ+¨Ñ+ˆŒ	Ü—9‘9˜S )¨t¯|©|¸aÀ'¹kÑ/IÑ"JÑQÈbÑQˆŒÜ—I‘I˜dŸl™l¨CÑ6°2Ñ6ˆŒ	à�q‰M˜J q™MÑ)ˆØ  ‘m j°¡mÑ3ˆÜ %§¡× 2Ñ 2´5·;±;¸yÈ+Ñ3\ÐY[Ñ3\Ó ]ˆÔØ×ÑØ!Ü�K‰K˜˜A˜ v´U·Z±ZÔ@Øð 	ô 	
ð
 %'ˆÔ!ð 	×ÑÕr<   c                 óR   •— t         ‰| �  |«       |r| j                  ri | _        y y y r^   )r-   Útrainr�   )r8   Úmoder:   s     €r;   r´   zAttention.train  s)   ø€ ä‰‰�dÔÙ�D×-Ò-Ø(*ˆDÕ%ð .ˆ4r<   r*   Úreturnc                 ó4  — t         j                  j                  «       s| j                  r| j                  d d …| j
                  f   S t        |«      }|| j                  vr*| j                  d d …| j
                  f   | j                  |<   | j                  |   S r^   )r4   ÚjitÚ
is_tracingÚtrainingr­   r£   Ústrr�   )r8   r*   Ú
device_keys      r;   Úget_attention_biaseszAttention.get_attention_biases  sƒ   € Ü�9‰9×ÑÔ! T§]¢]Ø×(Ñ(ª¨D×,DÑ,DÐ)DÑEÐEä˜V›ˆJØ ×!:Ñ!:Ñ:Ø8<×8MÑ8MÊaÐQU×QiÑQiÐNiÑ8j�×)Ñ)¨*Ñ5Ø×,Ñ,¨ZÑ8Ð8r<   c                 ó  — | j                  |j                  «      }|j                  \  }}}| j                  |«      }| j	                  |«      }|j                  ||| j                  d«      j                  | j                  | j                  | j                  gd¬«      \  }}}	|j                  dddd«      }|j                  dddd«      }|	j                  dddd«      }	| j                  rt        j                  |||	|¬«      }n@|| j                  z  }||j                  dd«      z  }
|
|z   }
|
j!                  d¬«      }
|
|	z  }|j                  dd«      j#                  ||| j$                  «      }| j'                  |«      }|S )	NéÿÿÿÿrY   )rv   r   r>   r   )Ú	attn_maskéþÿÿÿ)r½   r*   rD   r�   r©   ÚviewrŸ   Úsplitrž   r¨   Úpermuterœ   ÚFÚscaled_dot_product_attentionr§   Ú	transposeÚsoftmaxÚreshaperw   rª   )r8   r`   Ú	attn_biasÚBr±   Ú_r©   ÚqÚkÚvÚattns              r;   ra   zAttention.forward  sW  € Ø×-Ñ-¨a¯h©hÓ7ˆ	Ø—'‘'‰ˆˆ1ˆaà�I‰I�a‹LˆØ�h‰h�q‹kˆà—(‘(˜1˜a §¡°Ó4×:Ñ:¸D¿L¹LÈ$Ï,É,ÐX\×XdÑXdÐ;eÐklÐ:Óm‰ˆˆ1ˆaà�I‰I�a˜˜A˜qÓ!ˆØ�I‰I�a˜˜A˜qÓ!ˆØ�I‰I�a˜˜A˜qÓ!ˆà�?Š?Ü×.Ñ.¨q°!°QÀ)ÔL‰Aà�D—J‘J‘ˆAØ�q—{‘{ 2 rÓ*Ñ*ˆDØ˜)Ñ#ˆDØ—<‘< B�<Ó'ˆDØ�q‘ˆAØ�K‰K˜˜1Ó×%Ñ% a¨¨D¯L©LÓ9ˆØ�I‰I�a‹LˆØˆr<   c                 óv   — t         j                  j                  | j                  «       | j	                  «        y)z"Initialize parameters and buffers.N)r/   r5   Úzeros_r­   Ú_init_buffers©r8   s    r;   r°   zAttention.reset_parameters)  s$   € ä
�‰�‰�t×,Ñ,Ô-Ø×ÑÕr<   c           	      óH  — | j                   j                  }t        t        j                  t        | j                  d   «      t        | j                  d   «      «      «      }t        |«      }i }g }|D ]W  }|D ]P  }t        |d   |d   z
  «      t        |d   |d   z
  «      f}||vrt        |«      ||<   |j                  ||   «       ŒR ŒY | j                   j                  t        j                  ||t        j                  ¬«      j                  ||«      «       i | _        y)z.Compute and fill non-persistent buffer values.r   r   r)   N)r£   r*   rƒ   Ú	itertoolsÚproductr�   r¡   r¦   ÚabsÚappendrF   r4   Útensorr¯   rÂ   r�   )	r8   r*   Úpointsr±   Úattention_offsetsÚidxsÚp1Úp2Úoffsets	            r;   rÓ   zAttention._init_buffers.  s  € à×)Ñ)×0Ñ0ˆÜ”i×'Ñ'¬¨d¯o©o¸aÑ.@Ó(AÄ5ÈÏÉÐYZÑI[ÓC\Ó]Ó^ˆÜ�‹KˆØÐØˆØò 	7ˆBØò 7�Ü˜b ™e b¨¡e™mÓ,¬c°"°Q±%¸"¸Q¹%±-Ó.@ÐA�ØÐ!2Ñ2Ü03Ð4EÓ0FÐ% fÑ-Ø—‘Ð-¨fÑ5Õ6ñ	7ð	7ð 	× Ñ ×&Ñ&¤u§|¡|°DÀÌuÏzÉzÔ'Z×'_Ñ'_Ð`aÐcdÓ'eÔfØ$&ˆÕ!r<   c                 ó$   — | j                  «        y)z"Initialize non-persistent buffers.N)rÓ   rÔ   s    r;   Úinit_non_persistent_buffersz%Attention.init_non_persistent_buffers>  s   € à×ÑÕr<   )é   rX   )é   rä   NN©T)r¶   N)rL   rM   rN   r4   r¸   ÚFinalÚboolÚ__annotations__r   r»   ÚTensorrO   r   r.   rQ   r´   r*   r½   ra   r°   rÓ   râ   rR   rS   s   @r;   r›   r›   Ö   sÄ   ø… Ø—	‘	—‘ Ñ%Ó%Ø˜s E§L¡LÐ0Ñ1Ó1ð ØØ*2ØØñ% àð% ð ð% ð ð	% ð
 ð% ð ˜c 3˜h™õ% ðN €U‡]�]ƒ_ô+ó ð+ð
9¨5¯<©<ð 9¸E¿L¹Ló 9òó2ó
'÷ r<   r›   c                   ó–   ‡ — e Zd ZdZdddddej
                  ddfdeded	ed
ededededeej                     fˆ fd„Z
d„ Zdefd„Zˆ xZS )ÚTinyVitBlocka5   TinyViT Block.

    Args:
        dim (int): Number of input channels.
        num_heads (int): Number of attention heads.
        window_size (int): Window size.
        mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.
        drop (float, optional): Dropout rate. Default: 0.0
        drop_path (float, optional): Stochastic depth rate. Default: 0.0
        local_conv_size (int): the kernel size of the convolution between
                               Attention and MLP. Default: 3
        act_layer: the activation function. Default: nn.GELU
    é   r‡   rk   rY   Nrv   rŸ   Úwindow_sizeÚ	mlp_ratiorŽ   rh   Úlocal_conv_sizerV   c                 óö  •— |	|
dœ}t         ‰| �  «        || _        || _        |dkD  sJ d«       ‚|| _        || _        ||z  dk(  sJ d«       ‚||z  }||f}t        |||fd|dœ|¤Ž| _        |dkD  rt        |«      nt        j                  «       | _        t        d|t        ||z  «      ||dœ|¤Ž| _        |dkD  rt        |«      nt        j                  «       | _        |d	z  }t!        ||f|d||d
œ|¤Ž| _        y )Nr)   r   z"window_size must be greater than 0z"dim must be divisible by num_headsr   )r    r¡   rk   )rŠ   r‹   rV   rŽ   r>   rj   © )r-   r.   rv   rŸ   rí   rî   r›   rÐ   r   r/   rp   Ú
drop_path1r‰   rO   ÚmlpÚ
drop_path2r   Ú
local_conv)r8   rv   rŸ   rí   rî   rŽ   rh   rï   rV   r*   r+   r9   Úhead_dimÚwindow_resolutionr$   r:   s                  €r;   r.   zTinyVitBlock.__init__R  s4  ø€ ð ¨Ñ/ˆÜ‰ÑÔØˆŒØ"ˆŒØ˜QŠÐDÐ DÓDˆØ&ˆÔØ"ˆŒà�Y‰ !Ò#ÐIÐ%IÓIÐ#Ø˜)Ñ#ˆà(¨+Ð6ÐÜØØØð
ð Ø(ñ
ð ñ
ˆŒ	ð 2;¸R²œ( 9Ô-ÄRÇ[Á[Ã]ˆŒäð 
ØÜ  i¡Ó0ØØñ	
ð
 ñ
ˆŒð 2;¸R²œ( 9Ô-ÄRÇ[Á[Ã]ˆŒà Ñ"ˆÜ" 3¨Ðe°ÈÈsÐ[^ÑeÐbdÑeˆ�r<   c           	      ó  — |j                   \  }}}}||z  }|}|| j                  k(  rI|| j                  k(  r:|j                  |||«      }| j                  |«      }|j	                  ||||«      }�n‡| j                  || j                  z  z
  | j                  z  }| j                  || j                  z  z
  | j                  z  }	|dkD  xs |	dkD  }
|
rt        j                  |ddd|	d|f«      }||z   ||	z   }}|| j                  z  }|| j                  z  }|j	                  ||| j                  || j                  |«      j                  dd«      j                  ||z  |z  | j                  | j                  z  |«      }| j                  |«      }|j	                  |||| j                  | j                  |«      j                  dd«      j                  ||||«      }|
r|d d …d |…d |…f   j                  «       }|| j                  |«      z   }|j                  dddd«      }| j                  |«      }|j                  |||«      j                  dd«      }|| j                  | j                  |«      «      z   }|j	                  ||||«      S ©Nr   r>   rY   r   )rD   rí   rÉ   rÐ   rÂ   rÅ   r$   rÇ   Ú
contiguousrò   rÄ   rõ   rô   ró   )r8   r`   rË   ÚHÚWÚCÚLrs   Úpad_bÚpad_rr?   ÚpHÚpWÚnHÚnWs                  r;   ra   zTinyVitBlock.forward�  s~  € Ø—W‘W‰
ˆˆ1ˆa�Ø�‰EˆàˆØ�× Ñ Ò  Q¨$×*:Ñ*:Ò%:Ø—	‘	˜!˜Q Ó"ˆAØ—	‘	˜!“ˆAØ—‘�q˜!˜Q Ó"ŠAà×%Ñ%¨¨D×,<Ñ,<Ñ(<Ñ<À×@PÑ@PÑPˆEØ×%Ñ%¨¨D×,<Ñ,<Ñ(<Ñ<À×@PÑ@PÑPˆEØ˜a‘iÒ, 5¨1¡9ˆGÙÜ—E‘E˜!˜a  A u¨a°Ð7Ó8�ð ˜‘Y  E¡	�ˆBØ�t×'Ñ'Ñ'ˆBØ�t×'Ñ'Ñ'ˆBØ—‘�q˜"˜d×.Ñ.°°D×4DÑ4DÀaÓH×RÑRÐSTÐVWÓX×`Ñ`Ø�B‘˜‘˜T×-Ñ-°×0@Ñ0@Ñ@À!óˆAð —	‘	˜!“ˆAð —‘�q˜"˜b $×"2Ñ"2°D×4DÑ4DÀaÓH×RÑRÐSTÐVWÓX×`Ñ`ÐabÐdfÐhjÐlmÓnˆAáØ’a˜˜!˜˜R˜a˜R�i‘L×+Ñ+Ó-�Ø�t—‘ qÓ)Ñ)ˆà�I‰I�a˜˜A˜qÓ!ˆØ�O‰O˜AÓˆØ�I‰I�a˜˜AÓ×(Ñ(¨¨AÓ.ˆà�—‘ §¡¨£Ó,Ñ,ˆØ�v‰v�a˜˜A˜qÓ!Ð!r<   r¶   c                 ón   — d| j                   › d| j                  › d| j                  › d| j                  › �S )Núdim=z, num_heads=z, window_size=z, mlp_ratio=)rv   rŸ   rí   rî   rÔ   s    r;   Ú
extra_reprzTinyVitBlock.extra_repr©  s@   € Ø�d—h‘h�Z˜|¨D¯N©NÐ+;ð <Ø"×.Ñ.Ð/¨|¸D¿N¹NÐ;KðMð 	Mr<   )rL   rM   rN   Ú__doc__r/   r™   rO   rP   r
   rd   r.   ra   r»   r  rR   rS   s   @r;   rë   rë   C  sŸ   ø„ ñð$  !Ø!ØØ!Ø#$Ø)+¯©ØØñ-fàð-fð ð-fð ð	-fð
 ð-fð ð-fð ð-fð !ð-fð ˜BŸI™I‘õ-fò^&"ðPM˜C÷ Mr<   rë   c                   óÒ   ‡ — e Zd ZdZdddddej
                  ddfdededed	ed
edededeee	e   f   de
eej                        dedeej                     fˆ fd„Zd„ Zdefd„Zˆ xZS )ÚTinyVitStagea   A basic TinyViT layer for one stage.

    Args:
        dim (int): Number of input channels.
        out_dim: the output dimension of the layer
        depth (int): Number of blocks.
        num_heads (int): Number of attention heads.
        window_size (int): Local window size.
        mlp_ratio (float): Ratio of mlp hidden dim to embedding dim.
        drop (float, optional): Dropout rate. Default: 0.0
        drop_path (float | tuple[float], optional): Stochastic depth rate. Default: 0.0
        downsample (nn.Module | None, optional): Downsample layer at the end of the layer. Default: None
        local_conv_size: the kernel size of the depthwise convolution between attention and MLP. Default: 3
        act_layer: the activation function. Default: nn.GELU
    r‡   rk   NrY   rv   rw   r|   rŸ   rí   rî   rŽ   rh   Ú
downsamplerï   rV   c                 ód  •— ||dœ}t         ‰| �  «        || _        || _        |	� |	d|||dœ|¤Ž| _        n t        j                  «       | _        ||k(  sJ ‚t        j                  t        |«      D �cg c]+  }t        d|||||t        |t        «      r||   n||
|dœ|¤Ž‘Œ- c}Ž | _        y c c}w )Nr)   )rv   rw   rV   )rv   rŸ   rí   rî   rŽ   rh   rï   rV   rñ   )r-   r.   r|   rw   r  r/   rp   r€   r�   rë   r‚   rƒ   r„   )r8   rv   rw   r|   rŸ   rí   rî   rŽ   rh   r  rï   rV   r*   r+   r9   r…   r:   s                   €r;   r.   zTinyVitStage.__init__Â  sß   ø€ ð  ¨Ñ/ˆÜ‰ÑÔØˆŒ
ØˆŒð Ð!Ù(ð ØØØ#ñð ñ	ˆD�Oô !Ÿk™k›mˆDŒOØ˜'’>Ð!�>ô —m‘mô ˜5“\ö&#ð ô ð 
ØØ#Ø'Ø#ØÜ*4°YÄÔ*E˜) Aš,È9Ø /Ø#ñ
ð ó
ò&#ð $ˆ�ùò &#s   Á30B-c                 óš   — | j                  |«      }|j                  dddd«      }| j                  |«      }|j                  dddd«      }|S rù   )r  rÄ   r„   r_   s     r;   ra   zTinyVitStage.forwardò  sJ   € Ø�O‰O˜AÓˆØ�I‰I�a˜˜A˜qÓ!ˆØ�K‰K˜‹NˆØ�I‰I�a˜˜A˜qÓ!ˆØˆr<   r¶   c                 ó:   — d| j                   › d| j                  › �S )Nr  z, depth=)rw   r|   rÔ   s    r;   r  zTinyVitStage.extra_reprù  s   € Ø�d—l‘l�^ 8¨D¯J©J¨<Ð8Ð8r<   )rL   rM   rN   r  r/   r™   rO   rP   r	   r   r   r
   rd   r.   ra   r»   r  rR   rS   s   @r;   r
  r
  ±  sÌ   ø„ ñð.  "ØØ35Ø48Ø#$Ø)+¯©ØØñ.$àð.$ð ð.$ð ð	.$ð
 ð.$ð ð.$ð ð.$ð ð.$ð ˜U D¨¡KÐ/Ñ0ð.$ð !  b§i¡i¡Ñ1ð.$ð !ð.$ð ˜BŸI™I‘õ.$ò`ð9˜C÷ 9r<   r
  c                   óN  ‡ — e Zd Zddddddddd	d
dddej                  ddfdedededeedf   deedf   deedf   deedf   dededede	dedede
ej                     fˆ fd„Zd6de	fd„Zd6dej                  de	fd „Zej                   j"                  d!„ «       Zej                   j"                  d"„ «       Zej                   j"                  d7d#„«       Zej                   j"                  d6d$„«       Zej                   j"                  d%ej                  fd&„«       Zd8dedee   fd'„Z	 	 	 	 	 d9d(ej2                  d)eeeee   f      d*e	d+e	d,ed-e	d%eeej2                     eej2                  eej2                     f   f   fd.„Z	 	 	 d:d)eeee   f   d/e	d0e	fd1„Zd2„ Zd7d3e	fd4„Zd5„ Z ˆ xZ!S );r   rY   éè  Úavg)é`   éÀ   é€  i   ©r>   r>   é   r>   )rY   r  é   é   ©rì   rì   rä   rì   r‡   rk   çš™™™™™¹?FNÚin_chansÚnum_classesÚglobal_poolÚ
embed_dims.ÚdepthsrŸ   Úwindow_sizesrî   Ú	drop_rateÚdrop_path_rateÚuse_checkpointÚmbconv_expand_ratiorï   rV   c                 óº  •— t         ‰| �  «        ||dœ}|| _        || _        || _        t        |«      | _        || _        || _        t        d||d   |dœ|¤Ž| _
        t        |
t        |«      «      }t        j                  «       | _        | j                  j                   }|d   }g | _        t%        | j                  «      D ]Â  }|dk(  rt'        d|||   ||d ||    |dœ|¤Ž}n`||   }|t        |d | «      t        |d |dz    «       }
t)        d||dz
     |||   ||   ||   | j                  |	||
t*        |dœ|¤Ž}|}|dz  }| j                  j-                  |«       | xj"                  t/        ||d|› �¬	«      gz  c_        ŒÄ |d
   x| _        | _        t5        t6        d¬«      }t9        | j0                  |f||dœ|¤Ž| _        | j=                  d¬«       y )Nr)   r   )r    r!   rV   )rv   r|   rV   rh   r}   r   )rv   rw   r|   rŸ   rí   rî   rŽ   rï   rh   r  rV   r>   zstages.)Únum_chsÚ	reductionÚmoduler¿   gñhãˆµøä>)rA   )Ú	pool_typer�   F©Úneeds_resetrñ   )r-   r.   r  r  r  r¦   Ú
num_stagesrî   Úgrad_checkpointingrU   Úpatch_embedr   Úsumr/   r€   Ústagesr#   Úfeature_infor�   r{   r
  ru   rÙ   ÚdictÚnum_featuresÚhead_hidden_sizer   r   r   ÚheadÚinit_weights)r8   r  r  r  r  r  rŸ   r   rî   r!  r"  r#  r$  rï   rV   r*   r+   r9   Údprr#   Úprev_dimÚ	stage_idxÚstagerw   Únorm_layer_cfr:   s                            €r;   r.   zTinyVit.__init__þ  sJ  ø€ ô& 	‰ÑÔØ¨Ñ/ˆà&ˆÔØ ˆŒØˆŒÜ˜f›+ˆŒØ"ˆŒØ"0ˆÔä%ð 
ØØ˜q‘MØñ
ð ñ	
ˆÔô (¨¼¸F»ÓDˆô —m‘m“oˆŒØ×!Ñ!×(Ñ(ˆØ˜a‘=ˆØˆÔÜ˜tŸ™Ó/ò 	jˆIØ˜AŠ~Ü!ð Ø Ø  Ñ+Ø'Ø!Ð"4 6¨)Ñ#4Ð5Ø&9ñð ñ‘ð % YÑ/�Ø!$¤S¨°
°Ð);Ó%<¼SÀÈÈÐUVÉÐAWÓ=XÐ!Y�Ü$ð Ø" 9¨q¡=Ñ1Ø#Ø  Ñ+Ø'¨	Ñ2Ø ,¨YÑ 7Ø"Ÿn™nØ"Ø$3Ø,Ü+Ø'ñð ñ�ð #�Ø˜!‘�Ø�K‰K×Ñ˜uÔ%Ø×Ò¤$¨xÀ6ÐT[Ð\eÐ[fÐRgÔ"hÐ!iÑiÖð=	jðB 5?¸r±NÐBˆÔ˜DÔ1ä¤°Ô6ˆÜ)Ø×ÑØð
ð "Ø$ñ	
ð
 ñ
ˆŒ	ð 	×Ñ eÐÕ,r<   r+  c                 óP   — | j                  t        | j                  |¬«      «       y )Nr*  )Úapplyr   Ú_init_weights)r8   r+  s     r;   r6  zTinyVit.init_weightsY  s   € Ø�
‰
”7˜4×-Ñ-¸;ÔGÕHr<   rJ   c                 ó  — t        |t        j                  «      rOt        |j                  d¬«       |j
                  �+t        j                  j                  |j
                  d«       y y |rt        |d«      r|j                  «        y y y )Ng{®Gáz”?)Ústdr   r°   )
r‚   r/   r‘   r   r7   r,   r5   r6   Úhasattrr°   )r8   rJ   r+  s      r;   r>  zTinyVit._init_weights\  se   € Ü�aœŸ™Ô#Ü˜!Ÿ(™(¨Õ,Ø�v‰vÐ!Ü—‘×!Ñ! !§&¡&¨!Õ,ð "áœW QÐ(:Ô;Ø×ÑÕ ð <ˆ[r<   c                 ó   — dhS ©Nr­   rñ   rÔ   s    r;   Úno_weight_decay_keywordsz TinyVit.no_weight_decay_keywordsd  s   € à"Ð#Ð#r<   c                 ón   — | j                  «       j                  «       D �ch c]	  }d|v sŒ|’Œ c}S c c}w rC  )Ú
state_dictÚkeysr_   s     r;   Úno_weight_decayzTinyVit.no_weight_decayh  s.   € àŸ?™?Ó,×1Ñ1Ó3ÖO�aÐ7IÈQÒ7N’ÒOÐOùÒOs   ¡	2«2c                 ó,   — t        d|rdnddg¬«      }|S )Nz^patch_embedz^stages\.(\d+))z^stages\.(\d+).downsample)r   )z^stages\.(\d+)\.\w+\.(\d+)N)Ústemr„   )r2  )r8   ÚcoarseÚmatchers      r;   Úgroup_matcherzTinyVit.group_matcherl  s'   € äØ Ù(.Ñ$Ø4Ø5ð5ô
ˆð ˆr<   c                 ó   — || _         y r^   )r-  )r8   Úenables     r;   Úset_grad_checkpointingzTinyVit.set_grad_checkpointingw  s
   € à"(ˆÕr<   r¶   c                 ó.   — | j                   j                  S r^   )r5  ÚfcrÔ   s    r;   Úget_classifierzTinyVit.get_classifier{  s   € à�y‰y�|‰|Ðr<   c                 óL   — || _         | j                  j                  ||¬«       y )N)r)  )r  r5  Úreset)r8   r  r  s      r;   Úreset_classifierzTinyVit.reset_classifier  s   € Ø&ˆÔØ�	‰	�‰˜¨{ˆÕ;r<   r`   Úindicesr�   Ú
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¦   r0  r.  r4   r¸   Úis_scriptingÚ	enumerater-  r   rÙ   )r8   r`   rW  r�   rX  rY  rZ  ÚintermediatesÚtake_indicesÚ	max_indexr0  Úfeat_idxr:  s                r;   Úforward_intermediateszTinyVit.forward_intermediatesƒ  sé   € ð* ˜YÑ&ÐDÐ(DÓDÐ&ØˆÜ"6´s¸4¿;¹;Ó7GÈÓ"QÑˆ�ið ×Ñ˜QÓˆÜ�9‰9×!Ñ!Ô#©:Ø—[‘[‰Fà—[‘[  )¨a¡-Ð0ˆFä(¨Ó0ò 	(‰OˆH�eØ×&Ò&¬u¯y©y×/EÑ/EÔ/GÜ˜u aÓ(‘á˜!“H�Ø˜<Ò'Ø×$Ñ$ QÕ'ð	(ñ Ø Ð à�-ÐÐr<   Ú
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¦   r0  rV  )r8   rW  rd  re  r`  ra  s         r;   Úprune_intermediate_layersz!TinyVit.prune_intermediate_layers°  sM   € ô #7´s¸4¿;¹;Ó7GÈÓ"QÑˆ�iØ—k‘k . 9¨q¡=Ð1ˆŒÙØ×!Ñ! ! RÔ(ØÐr<   c                 óÎ   — | j                  |«      }| j                  r6t        j                  j	                  «       st        | j                  |«      }|S | j                  |«      }|S r^   )r.  r-  r4   r¸   r]  r   r0  r_   s     r;   Úforward_featureszTinyVit.forward_features¾  sU   € Ø×Ñ˜QÓˆØ×"Ò"¬5¯9©9×+AÑ+AÔ+CÜ˜tŸ{™{¨AÓ.ˆAð ˆð —‘˜A“ˆAØˆr<   Ú
pre_logitsc                 óV   — |r| j                  ||¬«      }|S | j                  |«      }|S )N)rk  )r5  )r8   r`   rk  s      r;   Úforward_headzTinyVit.forward_headÆ  s1   € Ù3=ˆD�I‰I�a JˆIÓ/ˆØˆð DHÇ9Á9ÈQÃ<ˆØˆr<   c                 óJ   — | j                  |«      }| j                  |«      }|S r^   )rj  rm  r_   s     r;   ra   zTinyVit.forwardÊ  s'   € Ø×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆr<   rå   ©Fr^   )NFFr\  F)r   FT)"rL   rM   rN   r/   r™   rO   r»   r   rP   rç   r
   rd   r.   r6  r>  r4   r¸   ÚignorerD  rH  rM  rP  rS  r   rV  ré   r	   r   rc  rh  rj  rm  ra   rR   rS   s   @r;   r   r   ý  sÉ  ø„ ð Ø#Ø$Ø*=Ø&2Ø)7Ø,9Ø!Ø!Ø$'Ø#(Ø),Ø#$Ø)+¯©ØØñ#Y-àðY-ð ðY-ð ð	Y-ð
 ˜c 3˜h™ðY-ð ˜#˜s˜(‘OðY-ð ˜S #˜X‘ðY-ð    S ™/ðY-ð ðY-ð ðY-ð "ðY-ð !ðY-ð "'ðY-ð !ðY-ð ˜BŸI™I‘õY-ñvI¨ó Iñ!˜rŸy™yð !°tó !ð ‡Y�Y×Ññ$ó ð$ð ‡Y�Y×ÑñPó ðPð ‡Y�Y×Ñòó ðð ‡Y�Y×Ñò)ó ð)ð ‡Y�Y×Ñð §	¡	ò ó ðñ<¨Cð <¸hÀs¹mó <ð 8<ØØ$Ø$Ø',ñ+ à�|‰|ð+ ð ˜e C¨¨c© NÑ3Ñ4ð+ ð ð	+ ð
 ð+ ð ð+ ð !%ð+ ð 
ˆt�E—L‘LÑ! 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#JÐJÑ	Kó+ ð^ ./Ø$Ø#ñ	à˜3  S¡	˜>Ñ*ðð ðð ó	òñ¨$ó ör<   c                 ó$  — d| j                  «       v r| d   } |j                  «       }i }| j                  «       D ]S  \  }}|j                  d«      rŒd|v r3t	        |j
                  ||   j                  d d d…   «      j
                  }|||<   ŒU |S )NÚmodelr£   r­   r¿   )rG  rF  ÚitemsÚendswithr   ÚTrD   )rF  rr  Ú	target_sdÚout_dictrÎ   rÏ   s         r;   Úcheckpoint_filter_fnrx  Ð  s›   € Ø�*—/‘/Ó#Ñ#Ø Ñ(ˆ
Ø× Ñ Ó"€IØ€HØ× Ñ Ó"ò ‰ˆˆ1Ø�:‰:Ð+Ô,ØØ Ñ"ä/°·±°Y¸q±\×5GÑ5GÉÈ"ÈÑ5MÓN×PÑPˆAØˆ�Šðð €Or<   c                 ó0   — | dt         t        dddddddœ
|¥S )	Nr  zpatch_embed.conv1.convzhead.fc)rì   rì   )rY   éà   rz  gffffffî?z
apache-2.0)
Úurlr  Úmeanr@  Ú
first_convÚ
classifierÚ	pool_sizeÚ
input_sizeÚcrop_pctÚlicenser   )r{  Úkwargss     r;   Ú_cfgr„  ß  s4   € àØÜ%Ü#Ø.ØØØ#ØØñð ðð r<   ztimm/iQU  )Ú	hf_hub_idr  )r…  )rY   r  r  )r  r  g      ð?)r…  r€  r  r�  )rY   é   r†  )é   r‡  Úsquash)r…  r€  r  r�  Ú	crop_mode)ztiny_vit_5m_224.dist_in22kz"tiny_vit_5m_224.dist_in22k_ft_in1kztiny_vit_5m_224.in1kztiny_vit_11m_224.dist_in22kz#tiny_vit_11m_224.dist_in22k_ft_in1kztiny_vit_11m_224.in1kztiny_vit_21m_224.dist_in22kz#tiny_vit_21m_224.dist_in22k_ft_in1kztiny_vit_21m_224.in1kz#tiny_vit_21m_384.dist_in22k_ft_in1kz#tiny_vit_21m_512.dist_in22k_ft_in1kc                 ór   — |j                  dd«      }t        t        | |ft        d|¬«      t        dœ|¤Ž}|S )NÚout_indices)r   r   r>   rY   T)Úflatten_sequentialr‹  )Úfeature_cfgÚpretrained_filter_fn)Úpopr   r   r2  rx  )ÚvariantÚ
pretrainedrƒ  r‹  rr  s        r;   Ú_create_tiny_vitr’  $  sJ   € Ø—*‘*˜]¨LÓ9€KÜ ÜØØðô ¨D¸kÔJÜ1ñð ñ€Eð €Lr<   c                 ón   — t        g d¢g d¢g d¢g d¢d¬«      }|j                  |«       t        d| fi |¤ŽS )N)é@   é€   é    i@  r  )r>   rX   é   é
   r  rk   ©r  r  rŸ   r   r"  Útiny_vit_5m_224©r2  Úupdater’  ©r‘  rƒ  Úmodel_kwargss      r;   rš  rš  1  s>   € äÚ&ÚÚÚ"Øô€Lð ×Ñ˜ÔÜÐ-¨zÑJ¸\ÑJÐJr<   c                 ón   — t        g d¢g d¢g d¢g d¢d¬«      }|j                  |«       t        d| fi |¤ŽS )N)r”  r•  é   iÀ  r  )r>   rX   rã   rä   r  r  r™  Útiny_vit_11m_224r›  r�  s      r;   r¡  r¡  >  s>   € äÚ&ÚÚÚ"Øô€Lð ×Ñ˜ÔÜÐ.°
ÑK¸lÑKÐKr<   c                 ón   — t        g d¢g d¢g d¢g d¢d¬«      }|j                  |«       t        d| fi |¤ŽS )N©r  r  r  i@  r  ©rY   r  r  é   r  gš™™™™™É?r™  Útiny_vit_21m_224r›  r�  s      r;   r¦  r¦  K  s>   € äÚ&ÚÚ Ú"Øô€Lð ×Ñ˜ÔÜÐ.°
ÑK¸lÑKÐKr<   c                 ón   — t        g d¢g d¢g d¢g d¢d¬«      }|j                  |«       t        d| fi |¤ŽS )Nr£  r  r¤  )r  r  r  r  r  r™  Útiny_vit_21m_384r›  r�  s      r;   r¨  r¨  X  ó>   € äÚ&ÚÚ Ú%Øô€Lð ×Ñ˜ÔÜÐ.°
ÑK¸lÑKÐKr<   c                 ón   — t        g d¢g d¢g d¢g d¢d¬«      }|j                  |«       t        d| fi |¤ŽS )Nr£  r  r¤  )r‡  r‡  é    r‡  r  r™  Útiny_vit_21m_512r›  r�  s      r;   r¬  r¬  e  r©  r<   )rg  ro  )?r  Ú__all__rÖ   Ú	functoolsr   Útypingr   r   r   r   r	   r
   r   r4   Útorch.nnr/   Útorch.nn.functionalÚ
functionalrÅ   Ú	timm.datar   r   Útimm.layersr   r   r   r   r   r   r   Ú_builderr   Ú	_featuresr   Ú_features_fxr   Ú_manipulater   r   Ú	_registryr   r   r€   r   rd   rU   rf   ru   r{   r‰   r›   rë   r
  r   rx  r„  Údefault_cfgsr’  rš  r¡  r¦  r¨  r¬  rñ   r<   r;   ú<module>r»     sN  ðñð ˆ+€ã Ý ß @× @Ñ @ã Ý ß Ð ç A÷^÷ ^ñ ^å *Ý +Ý 1ß 3ß <ô!ˆu�x‰x×"Ñ"ô !ôH�—‘ô ô. ˆR�Y‰Yô  ôF�2—9‘9ô ô4�—	‘	ô ô@ˆb�i‰iô ôBj�—‘—‘ô jôZhM�2—9‘9ô hMñV ˜Ô %ôI9�2—9‘9ô I9ôXPˆb�i‰iô Pòfóñ  %Ù"&Øàô#ñ
 +/Øô+ñ !Øôñ $(Øàô$ñ
 ,0Øô,ñ "Øôñ $(Øàô$ñ
 ,0Øô,ñ "Øôñ ,0Øà ¨H¸sô,ñ
 ,0Øà ¨H¸sÈhô,ñ[2&ó 2€ój
ð ò	Kó ð	Kð ò	Ló ð	Lð ò	Ló ð	Lð ò	Ló ð	Lð ò	Ló ñ	Lr<   