Ë
    éÓ^jòS  ã                   ó�  — d Z ddlZddlmZmZ ddlmZ ddlmZm	Z	m
Z
 ddlZddl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mZ ddlmZm Z  ddl!m"Z"m#Z# e G d„ d«      «       Z$e G d„ d«      «       Z%dHd„Z& G d„ dejN                  «      Z( G d„ dejN                  «      Z) G d„ dejN                  «      Z* G d„ dejN                  «      Z+ G d„ dejN                  «      Z, G d„ dejN                  «      Z-dId„Z.dHd„Z/ e  e/d d!¬"«       e/d#d$¬"«       e/d%d!¬"«       e/d&d!¬"«       e/d'd!¬"«       e/d(d!d)d*¬+«       e/d,d!d-d*¬+«       e/d.d!d/d*¬+«       e/d0d1¬"«       e/d2d1d)d*¬+«       e/d3d1d-d*¬+«       e/d4d1d/d*¬+«       e/d5d6d)d*¬+«       e/d7d6d-d*¬+«       e/d8d6d/d*¬+«      d9œ«      Z0edJd:e"fd;„«       Z1edJd:e"fd<„«       Z2edJd:e"fd=„«       Z3edJd:e"fd>„«       Z4edJd:e"fd?„«       Z5edJd:e"fd@„«       Z6edJd:e"fdA„«       Z7edJd:e"fdB„«       Z8edJd:e"fdC„«       Z9edJd:e"fdD„«       Z:edJd:e"fdE„«       Z;edJd:e"fdF„«       Z<edJd:e"fdG„«       Z=y)Kab   ViTamin

Paper: Designing Scalable Vison Models in the Vision-Language Era
A family of model weights on Huggingface: https://huggingface.co/collections/jienengchen/vitamin-family-661048126b72debdaca060bf

@inproceedings{chen2024vitamin,
  title={ViTamin: Designing Scalable Vision Models in the Vision-language Era},
  author={Chen, Jieneng and Yu, Qihang and Shen, Xiaohui and Yuille, Alan and Chen, Liang-Chieh},
  booktitle={Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition},
  year={2024}
}

Based on Apache 2.0 licensed code at https://github.com/ViTamin/ViTamin

Modifications and timm support by Jieneng Chen 2024

Reference:
https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/vision_transformer.py
https://github.com/huggingface/pytorch-image-models/blob/main/timm/models/vision_transformer_hybrid.py
é    N)Ú	dataclassÚfield)Úpartial)ÚOptionalÚUnionÚTuple©ÚOPENAI_CLIP_MEANÚOPENAI_CLIP_STD)Úcreate_act_layerÚget_norm_layerÚget_norm_act_layerÚcreate_conv2dÚmake_divisibleÚDropPathÚHybridEmbedé   )Úbuild_model_with_cfg)Únamed_applyÚcheckpoint_seq)Úregister_modelÚgenerate_default_cfgs)ÚVisionTransformerÚcheckpoint_filter_fnc                   óÊ   — e Zd ZU dZeed<   dZeed<   dZe	ed<   dZ
e	ed<   d	Zeed
<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZeed<   dZee   ed<   dZeed<   y)Ú
VitConvCfgç      @Úexpand_ratioTÚexpand_outputé   Úkernel_sizer   Ú
group_sizeFÚpre_norm_actÚdwÚstride_modeÚavg2Ú	pool_typeÚdownsample_pool_typeÚgeluÚ	act_layerÚ Ú
norm_layergñhãˆµøä>Únorm_epsÚdown_shortcutÚmlpN)Ú__name__Ú
__module__Ú__qualname__r   ÚfloatÚ__annotations__r   Úboolr!   Úintr"   r#   r%   Ústrr'   r(   r*   r,   r-   r.   r   r/   © ó    ú^/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/vitamin.pyr   r   '   s‰   … à€L�%ÓØ€M�4ÓØ€K�ÓØ€J�ÓØ€L�$ÓØ€K�ÓØ€IˆsÓØ &Ð˜#Ó&Ø€IˆsÓØ€J�ÓØ€HˆeÓØ$(€M�8˜D‘>Ó(Ø€CˆÔr9   r   c                   óž   — e Zd ZU dZeeeeedf   f   df   ed<   dZeeeeedf   f   df   ed<   dZ	eed<    e
e¬«      Zeed	<   d
Zeed<   y)ÚVitCfg)é`   éÀ   é€  é   .Ú	embed_dim)é   r    é   rB   Údepthsé@   Ú
stem_width)Údefault_factoryÚconv_cfgr+   Ú	head_typeN)r0   r1   r2   rA   r   r   r6   r4   rD   rF   r   r   rH   rI   r7   r8   r9   r:   r<   r<   8   sq   … à9L€Iˆu�U˜3  c¨3 h¡Ð/Ñ0°#Ð5Ñ6ÓLØ6B€FˆE�%˜˜U 3¨ 8™_Ð,Ñ-¨sÐ2Ñ3ÓBØ€J�ÓÙ °Ô<€HˆjÓ<Ø€IˆsÔr9   r<   c                 óž  — t        | t        j                  «      r³| j                  d   | j                  d   z  | j                  z  }|| j
                  z  }t        j                  j                  | j                  dt        j                  d|z  «      «       | j                  �*t        j                  j                  | j                  «       y y y )Nr   r   ç       @)Ú
isinstanceÚnnÚConv2dr!   Úout_channelsÚgroupsÚinitÚnormal_ÚweightÚmathÚsqrtÚbiasÚzeros_)ÚmoduleÚnameÚschemeÚfan_outs       r:   Ú
_init_convr\   A   s–   € Ü�&œ"Ÿ)™)Ô$Ø×$Ñ$ QÑ'¨&×*<Ñ*<¸QÑ*?Ñ?À&×BUÑBUÑUˆØ�F—M‘MÑ!ˆÜ
�‰�‰˜Ÿ™ q¬$¯)©)°C¸'±MÓ*BÔCØ�;‰;Ð"Ü�G‰G�N‰N˜6Ÿ;™;Õ'ð #ð	 %r9   c                   óL   ‡ — e Zd Z	 	 	 	 	 	 d	dedededededefˆ fd„Zd„ Zˆ xZ	S )
ÚStemÚin_chsÚout_chsr*   r,   r-   rV   c	                 óü   •— ||dœ}	t         ‰| �  «        t        t        ||«      |¬«      }
|| _        t        ||dfd|dœ|	¤Ž| _         |
|fi |	¤Ž| _        t        ||dfd|dœ|	¤Ž| _        t        t        | «       y )N©ÚdeviceÚdtype©Úepsr    rB   ©ÚstriderV   r   )ÚsuperÚ__init__r   r   r`   r   Úconv1Únorm1Úconv2r   r\   )Úselfr_   r`   r*   r,   r-   rV   rc   rd   ÚddÚnorm_act_layerÚ	__class__s              €r:   rj   zStem.__init__K   s‰   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ Ô!3°JÀ	Ó!JÐPXÔYˆØˆŒä" 6¨7°AÐQ¸aÀdÑQÈbÑQˆŒ
Ù# GÑ2¨rÑ2ˆŒ
Ü" 7¨G°QÐR¸qÀtÑRÈrÑRˆŒ
ä”J Õ%r9   c                 ól   — | j                  |«      }| j                  |«      }| j                  |«      }|S ©N)rk   rl   rm   ©rn   Úxs     r:   ÚforwardzStem.forwarda   s.   € Ø�J‰J�q‹MˆØ�J‰J�q‹MˆØ�J‰J�q‹MˆØˆr9   )r)   Úlayernorm2dç�íµ ÷Æ°>TNN)
r0   r1   r2   r6   r7   r3   r5   rj   rv   Ú__classcell__©rq   s   @r:   r^   r^   J   s[   ø„ ð
 $Ø+Ø"ØØØñ&àð&ð ð&ð ð	&ð
 ð&ð ð&ð õ&ö,r9   r^   c            	       ó@   ‡ — e Zd Z	 	 	 	 ddedededefˆ fd„Zd„ Zˆ xZS )ÚDownsample2dÚdimÚdim_outr'   rV   c                 óä   •— ||dœ}t         ‰| �  «        t        j                  dddd¬«      | _        ||k7  r t        j
                  ||dfd|i|¤Ž| _        y t        j                  «       | _        y )Nrb   r    rB   r   F)r!   rh   ÚpaddingÚcount_include_padrV   )ri   rj   rM   Ú	AvgPool2dÚpoolrN   ÚexpandÚIdentity)	rn   r}   r~   r'   rV   rc   rd   ro   rq   s	           €r:   rj   zDownsample2d.__init__i   sc   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜ—L‘L¨Q°qÀ!ÐW\Ô]ˆŒ	à�'Š>ÜŸ)™) C¨°!ÑE¸$ÐEÀ"ÑEˆD�KäŸ+™+›-ˆD�Kr9   c                 óJ   — | j                  |«      }| j                  |«      }|S rs   )rƒ   r„   rt   s     r:   rv   zDownsample2d.forward{   s!   € Ø�I‰I�a‹LˆØ�K‰K˜‹NˆØˆr9   )r&   TNN)	r0   r1   r2   r6   r7   r5   rj   rv   ry   rz   s   @r:   r|   r|   h   sA   ø„ ð
 $ØØØñ(àð(ð ð(ð ð	(ð
 õ(ö$r9   r|   c                   óN   ‡ — e Zd ZdZ	 	 	 	 	 	 	 d	dededededef
ˆ fd„Zd„ Zˆ xZS )
ÚStridedConvz downsample 2d as well
    r!   rh   r€   Úin_chansrA   c                 ó´   •— ||dœ}t         ‰
| �  «        t        t        d«      d¬«      }	t	        j
                  ||f|||dœ|¤Ž| _         |	|fi |¤Ž| _        y )Nrb   rw   rx   re   )r!   rh   r€   )ri   rj   r   r   rM   rN   ÚprojÚnorm)rn   r!   rh   r€   r‰   rA   rc   rd   ro   r,   rq   s             €r:   rj   zStridedConv.__init__„   s_   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜœ^¨MÓ:ÀÔEˆ
ä—I‘I˜h¨	Ðq¸{ÐSYÐcjÑqÐnpÑqˆŒ	Ù˜xÑ.¨2Ñ.ˆ�	r9   c                 óJ   — | j                  |«      }| j                  |«      }|S rs   )rŒ   r‹   rt   s     r:   rv   zStridedConv.forward•   s!   € Ø�I‰I�a‹LˆØ�I‰I�a‹LˆØˆr9   )r    rB   r   r    r@   NN)r0   r1   r2   Ú__doc__r6   rj   rv   ry   rz   s   @r:   rˆ   rˆ   �   sY   ø„ ñð  !ØØØØ ØØñ/àð/ð ð/ð ð	/ð
 ð/ð õ/ö"r9   rˆ   c                   ój   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 ddededededededed	ed
efˆ fd„Zdd„Zd„ Z	ˆ xZ
S )ÚMbConvLNBlockzL Pre-Norm Conv Block - 1x1 - kxk - 1x1, w/ inverted bottleneck (expand)
    r_   r`   rh   Ú	drop_pathr!   r,   r-   r*   r   c                 óÒ  •— |
|dœ}t         ‰| �  «        |||c| _        | _        | _        t        ||	z  «      }t        t        ||«      |¬«      }|dk(  rt        ||fdddœ|¤Ž| _	        n>||k7  r t        j                  ||dfddi|¤Ž| _	        nt        j                  «       | _	         ||fd	d
i|¤Ž| _        t        j                  «       | _        t        ||dfdddœ|¤Ž| _        t#        |d¬«      | _        t        |||f|d|ddœ|¤Ž| _        t#        |d¬«      | _        t        ||dfddi|¤Ž| _        |dkD  rt-        |«      | _        y t        j                  «       | _        y )Nrb   re   rB   ÚavgT)r'   rV   r   rV   Ú	apply_actFrg   )Úinplace)rh   ÚdilationrP   rV   ç        )ri   rj   rh   r_   r`   r   r   r   r|   ÚshortcutrM   rN   r…   Úpre_normÚdownr   Ú	conv1_1x1r   Úact1Ú	conv2_kxkÚact2Ú	conv3_1x1r   r‘   )rn   r_   r`   rh   r‘   r!   r,   r-   r*   r   rc   rd   ro   Úmid_chsÚprenorm_act_layerrq   s                  €r:   rj   zMbConvLNBlock.__init__ž   sl  ø€ ð ¨Ñ/ˆÜ‰ÑÔØ17¸ÀÐ.ˆŒ�T”[ $¤,Ü  ¨<Ñ!7Ó8ˆÜ#Ô$6°zÀ9Ó$MÐS[Ô\Ðà�QŠ;Ü(¨°Ð[ÀEÐPTÑ[ÐXZÑ[ˆD�MØ�wÒÜŸI™I f¨g°qÑJ¸tÐJÀrÑJˆD�MäŸK™K›MˆDŒMá)¨&ÑH¸EÐHÀRÑHˆŒÜ—K‘K“MˆŒ	Ü& v¨w¸ÐUÀ!È$ÑUÐRTÑUˆŒÜ$ Y¸Ô=ˆŒ	Ü&Ø�W˜kðgØ28À1ÈWÐ[_ñgØceñgˆŒä$ Y¸Ô=ˆŒ	Ü& w°¸ÑLÀÐLÈÑLˆŒØ09¸B²œ )Ó,ˆ�ÄBÇKÁKÃMˆ�r9   c                 ó:   — t        t        t        |¬«      | «       y )N)rZ   )r   r   r\   )rn   rZ   s     r:   Úinit_weightszMbConvLNBlock.init_weightsÄ   s   € Ü”GœJ¨vÔ6¸Õ=r9   c                 ó>  — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j	                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      |z   }|S rs   )	r˜   r™   rš   r›   rœ   r�   rž   rŸ   r‘   )rn   ru   r˜   s      r:   rv   zMbConvLNBlock.forwardÇ   s�   € Ø—=‘= Ó#ˆà�M‰M˜!ÓˆØ�I‰I�a‹Lˆð �N‰N˜1ÓˆØ�I‰I�a‹Lˆð �N‰N˜1ÓˆØ�I‰I�a‹Lˆð �N‰N˜1ÓˆØ�N‰N˜1Ó Ñ(ˆàˆr9   )	r   r—   r    rw   rx   r)   r   NN©r+   )r0   r1   r2   rŽ   r6   r3   r7   rj   r£   rv   ry   rz   s   @r:   r�   r�   ›   s—   ø„ ñð Ø!Ø Ø+Ø"Ø#Ø"%ØØñ#Ràð#Rð ð#Rð ð	#Rð
 ð#Rð ð#Rð ð#Rð ð#Rð ð#Rð  õ#RóL>ör9   r�   c            	       óT   ‡ — e Zd ZdZ	 	 	 	 ddedeeeeef   f   defˆ fd„Zd„ Z	ˆ xZ
S )ÚMbConvStagesz3 MobileConv for stage 1 and stage 2 of ViTamin
    ÚcfgÚimg_sizer‰   c                 ór  •— ||dœ}t         ‰| �  «        d| _        t        d	||j                  dœ|¤Ž| _        g }t        |j                  «      | _        t        |j                  d d «      D ]~  \  }}	|dkD  r|j                  |dz
     n|j                  }
t        |j                  |   «      D �cg c]  }t        d	|dk(  r|
n|	|	|dk(  rdnddœ|¤Ž‘Œ! }}|t        j                  |Ž gz  }Œ€ t        j                  |Ž | _        t!        d	d|j                  d   |j                  d   dœ|¤Ž| _        y c c}w )
Nrb   F)r_   r`   rB   r   r   )r_   r`   rh   )rh   r‰   rA   r8   )ri   rj   Úgrad_checkpointingr^   rF   ÚstemÚlenrA   Ú
num_stagesÚ	enumerateÚrangerD   r�   rM   Ú
SequentialÚstagesrˆ   rƒ   )rn   r¨   r©   r‰   rc   rd   ro   r²   Úsr}   Ústage_in_chsÚdÚblocksrq   s                €r:   rj   zMbConvStages.__init__ß   s_  ø€ ð ¨Ñ/ˆÜ‰ÑÔØ"'ˆÔäð 
ØØ—N‘Nñ
ð ñ
ˆŒ	ð ˆÜ˜cŸm™mÓ,ˆŒÜ §¡¨b¨qÐ 1Ó2ò 	/‰FˆAˆsØ12°1²˜3Ÿ=™=¨¨1©Ò-¸#¿.¹.ˆLô ˜sŸz™z¨!™}Ó-öð ô ð Ø-.°ªT™\°sØ!Ø"# q¢&™Q¨añð ó	ðˆFð ð ”r—}‘} fÐ-Ð.Ñ.‰Fð	/ô —m‘m VÐ,ˆŒäð 
ØØ—]‘] 1Ñ%Ø—m‘m AÑ&ñ
ð ñ	
ˆ�	ùòs   Â0$D4c                 óî   — | j                  |«      }| j                  r5t        j                  j	                  «       st        | j                  |«      }n| j                  |«      }| j                  |«      }|S rs   )r¬   r«   ÚtorchÚjitÚis_scriptingr   r²   rƒ   rt   s     r:   rv   zMbConvStages.forward  sV   € Ø�I‰I�a‹LˆØ×"Ò"¬5¯9©9×+AÑ+AÔ+CÜ˜tŸ{™{¨AÓ.‰Aà—‘˜A“ˆAØ�I‰I�a‹LˆØˆr9   )éà   r    NN)r0   r1   r2   rŽ   r<   r   r6   r   rj   rv   ry   rz   s   @r:   r§   r§   Ü   sO   ø„ ñð
 58ØØØñ'
àð'
ð ˜C  s¨C x¡Ð0Ñ1ð'
ð õ	'
öRr9   r§   c                   óR   ‡ — e Zd Z	 	 	 	 	 	 d	dedededee   dedefˆ fd„Zd„ Z	ˆ xZ
S )
ÚGeGluMlpÚin_featuresÚhidden_featuresr*   r,   rV   Údropc	                 óP  •— ||dœ}	t         ‰
| �  «        t        t        |xs d«      d¬«      } ||fi |	¤Ž| _        t        j                  ||fd|i|	¤Ž| _        t        |«      | _	        t        j                  ||fd|i|	¤Ž| _
        t        j                  ||fd|i|	¤Ž| _        y )Nrb   Ú	layernormrx   re   rV   )ri   rj   r   r   rŒ   rM   ÚLinearÚw0r   ÚactÚw1Úw2)rn   r¾   r¿   r*   r,   rV   rÀ   rc   rd   ro   rq   s             €r:   rj   zGeGluMlp.__init__  s¡   ø€ ð ¨Ñ/ˆÜ‰ÑÔÜœ^¨JÒ,E¸+ÓFÈDÔQˆ
á˜{Ñ1¨bÑ1ˆŒ	Ü—)‘)˜K¨ÑJ¸tÐJÀrÑJˆŒÜ# IÓ.ˆŒÜ—)‘)˜K¨ÑJ¸tÐJÀrÑJˆŒÜ—)‘)˜O¨[ÑJ¸tÐJÀrÑJˆ�r9   c                 ó®   — | j                  |«      }| j                  | j                  |«      «      | j                  |«      z  }| j	                  |«      }|S rs   )rŒ   rÅ   rÄ   rÆ   rÇ   rt   s     r:   rv   zGeGluMlp.forward(  sD   € Ø�I‰I�a‹LˆØ�H‰H�T—W‘W˜Q“ZÓ  4§7¡7¨1£:Ñ-ˆØ�G‰G�A‹JˆØˆr9   )r)   NTr—   NN)r0   r1   r2   r6   r7   r   r5   r3   rj   rv   ry   rz   s   @r:   r½   r½     sf   ø„ ð
 $Ø(,ØØØØñKàðKð !ðKð ð	Kð
 ! ™ðKð ðKð õKö*r9   r½   c                 óJ  — |j                  dd«      }|€J ‚|j                  dd «      |j                  dd «      dœ}t        d||j                  dd«      dœ|¤Ž}t        t        |d¬	«      |d
<   |j                  dd«       t        t        | |ft        t        |d¬«      dœ|¤ŽS )NÚout_indicesr    rc   rd   rb   r‰   )r¨   r‰   F)Úbackboner‹   Úembed_layerÚ
patch_sizer   Úgetter)rÊ   Úfeature_cls)Úpretrained_filter_fnÚfeature_cfgr8   )
ÚpopÚgetr§   r   r   Ú
setdefaultr   r   r   Údict)ÚvariantÚ
pretrainedÚ	embed_cfgÚkwargsrÊ   ro   rË   s          r:   Ú_create_vitaminrÚ   /  sµ   € Ø—*‘*˜]¨AÓ.€KØÐ Ð Ð Ø—J‘J˜x¨Ó.¸¿¹ÀGÈTÓ9RÑ	S€BÜÐT 	°F·J±J¸zÈ1Ó4MÑTÐQSÑT€HÜ#¤K¸(ÈÔO€Fˆ=ÑØ
×Ñ�l AÔ&äÜØØðô 2Ü [¸hÔGñð ñð r9   c                 ó4   — | ddd dddt         t        dddd	œ|¥S )
Niè  )r    r»   r»   gÍÌÌÌÌÌì?ÚbicubicTzpatch_embed.backbone.stem.conv1ÚheadÚmit)ÚurlÚnum_classesÚ
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚfixed_input_sizeÚmeanÚstdÚ
first_convÚ
classifierÚlicenser	   )rß   rÙ   s     r:   Ú_cfgrë   A  s4   € àØ¨=ÀtØ¨ÈÜ ¬Ø7Ø¨ñð ðð r9   zjienengchen/ViTamin-S-LTTr@   )Ú	hf_hub_idrà   zjienengchen/ViTamin-Sr?   zjienengchen/ViTamin-B-LTTzjienengchen/ViTamin-Bzjienengchen/ViTamin-L-224pxzjienengchen/ViTamin-L-256px)r    é   rí   g      ð?)rì   rà   rá   rã   zjienengchen/ViTamin-L-336px)r    éP  rî   zjienengchen/ViTamin-L-384px)r    r?   r?   zjienengchen/ViTamin-L2-224pxé   zjienengchen/ViTamin-L2-256pxzjienengchen/ViTamin-L2-336pxzjienengchen/ViTamin-L2-384pxzjienengchen/ViTamin-XL-256pxé€  zjienengchen/ViTamin-XL-336pxzjienengchen/ViTamin-XL-384px)z%vitamin_small_224.datacomp1b_clip_lttz!vitamin_small_224.datacomp1b_clipz$vitamin_base_224.datacomp1b_clip_lttz vitamin_base_224.datacomp1b_clipz!vitamin_large_224.datacomp1b_clipz!vitamin_large_256.datacomp1b_clipz!vitamin_large_336.datacomp1b_clipz!vitamin_large_384.datacomp1b_clipz"vitamin_large2_224.datacomp1b_clipz"vitamin_large2_256.datacomp1b_clipz"vitamin_large2_336.datacomp1b_clipz"vitamin_large2_384.datacomp1b_clipz"vitamin_xlarge_256.datacomp1b_clipz"vitamin_xlarge_336.datacomp1b_clipz"vitamin_xlarge_384.datacomp1b_clipÚreturnc           
      ó˜   — t        dddt        dd¬«      d¬«      }t        d	d
dt        ddd|¬«      }t	        dd| it        |fi |¤Ž¤Ž}|S )N)rE   é€   r?   ©rB   é   r   rE   rw   rx   ©r,   r-   Ú1d©rA   rD   rF   rH   rI   r?   é   é   rK   Fr“   ©rA   ÚdepthÚ	num_headsÚ	mlp_layerÚ	mlp_ratioÚclass_tokenÚglobal_poolrØ   r×   )Úvitamin_small_224©r<   r   rÕ   r½   rÚ   ©r×   rÙ   rØ   Ú
model_argsÚmodels        r:   r  r  x  sj   € äØ ØØÜØ$Øô
ð ô	€Iô Ø˜R¨1¼ÈBØ u¸	ô€Jô Ñe¸JÐeÌ$ÈzÑJdÐ]cÑJdÑe€EØ€Lr9   c           
      ó˜   — t        dddt        dd¬«      d¬«      }t        d	d
dt        ddd|¬«      }t	        dd| it        |fi |¤Ž¤Ž}|S )N)ró   rí   r@   rô   ró   rw   rx   rö   r÷   rø   r@   rù   é   rK   Fr“   rû   r×   )Úvitamin_base_224r  r  s        r:   r	  r	  Œ  sk   € äØ!ØØÜØ$Øô
ð ô	€Iô Ø˜R¨2¼ÈRØ u¸	ôC€Jô Ñd¸:ÐdÌÈjÑIcÐ\bÑIcÑd€EØ€Lr9   c           
      ó˜   — t        dddt        dd¬«      d¬«      }t        d	d
dt        ddd|¬«      }t	        dd| it        |fi |¤Ž¤Ž}|S )N©é    i@  rï   rô   r  rw   rx   rö   r÷   rø   rï   é   é   rK   Fr“   rû   r×   )Úvitamin_large_224r  r  s        r:   r  r  Ÿ  sj   € äØ"ØØÜØ$Øô
ð ô	€Iô Ø˜b¨B¼(ÈbØ u¸	ô€Jô Ñe¸JÐeÌ$ÈzÑJdÐ]cÑJdÑe€EØ€Lr9   c                 óš   — t        dddt        dd¬«      d¬«      }t        d	d
ddt        ddd|¬«	      }t	        dd| it        |fi |¤Ž¤Ž}|S )Nr  rô   r  rw   rx   rö   r÷   rø   rí   rï   r  r  rK   Fr“   ©	r©   rA   rü   rý   rþ   rÿ   r   r  rØ   r×   )Úvitamin_large_256r  r  s        r:   r  r  ³  ón   € äØ"ØØÜØ$Øô
ð ô	€Iô Ø ¨B¸"ÌÐ\^Ø u¸	ôC€Jô Ñe¸JÐeÌ$ÈzÑJdÐ]cÑJdÑe€EØ€Lr9   c                 óš   — t        dddt        dd¬«      d¬«      }t        d	d
ddt        ddd|¬«	      }t	        dd| it        |fi |¤Ž¤Ž}|S )Nr  rô   r  rw   rx   rö   r÷   rø   rî   rï   r  r  rK   Fr“   r  r×   )Úvitamin_large_336r  r  s        r:   r  r  Æ  sm   € äØ"ØØÜØ$Øô
ð ô	€Iô Ø ¨B¸"ÌÐ\^Ø u¸	ô€Jô Ñe¸JÐeÌ$ÈzÑJdÐ]cÑJdÑe€EØ€Lr9   c                 óš   — t        dddt        dd¬«      d¬«      }t        d	d
ddt        ddd|¬«	      }t	        dd| it        |fi |¤Ž¤Ž}|S )Nr  rô   r  rw   rx   rö   r÷   rø   r?   rï   r  r  rK   Fr“   r  r×   )Úvitamin_large_384r  r  s        r:   r  r  Ú  r  r9   c           
      ó˜   — t        dddt        dd¬«      d¬«      }t        d	d
dt        ddd|¬«      }t	        dd| it        |fi |¤Ž¤Ž}|S )Nr  rô   r  rw   rx   rö   r÷   rø   rï   r  r  rK   Fr“   rû   r×   )Úvitamin_large2_224r  r  s        r:   r  r  í  sk   € äØ"ØØÜØ$Øô
ð ô	€Iô Ø˜b¨B¼(ÈbØ u¸	ô€Jô Ñf¸ZÐfÌ4ÐPZÑKeÐ^dÑKeÑf€EØ€Lr9   c                 óš   — t        dddt        dd¬«      d¬«      }t        d	d
ddt        ddd|¬«	      }t	        dd| it        |fi |¤Ž¤Ž}|S )Nr  rô   r  rw   rx   rö   r÷   rø   rí   rï   r  r  rK   Fr“   r  r×   )Úvitamin_large2_256r  r  s        r:   r  r    óo   € äØ"ØØÜØ$Øô
ð ô	€Iô Ø ¨B¸"ÌÐ\^Ø u¸	ôC€Jô Ñf¸ZÐfÌ4ÐPZÑKeÐ^dÑKeÑf€EØ€Lr9   c                 óš   — t        dddt        dd¬«      d¬«      }t        d	d
ddt        ddd|¬«	      }t	        dd| it        |fi |¤Ž¤Ž}|S )Nr  rô   r  rw   rx   rö   r÷   rø   rî   rï   r  r  rK   Fr“   r  r×   )Úvitamin_large2_336r  r  s        r:   r  r    sn   € äØ"ØØÜØ$Øô
ð ô	€Iô Ø ¨B¸"ÌÐ\^Ø u¸	ô€Jô Ñf¸ZÐfÌ4ÐPZÑKeÐ^dÑKeÑf€EØ€Lr9   c                 óš   — t        dddt        dd¬«      d¬«      }t        d	d
ddt        ddd|¬«	      }t	        dd| it        |fi |¤Ž¤Ž}|S )Nr  rô   r  rw   rx   rö   r÷   rø   r?   rï   r  r  rK   Fr“   r  r×   )Úvitamin_large2_384r  r  s        r:   r   r   (  r  r9   c                 óž   — t        dddt        dd¬«      d¬«      }t        d	d
ddt        dddd|¬«
      }t	        	 dd| it        |fi |¤Ž¤Ž}|S )N©r>   r?   rð   rô   r>   rw   rx   rö   r÷   rø   rí   rð   é    r  rK   Fr“   Únone©
r©   rA   rü   rý   rþ   rÿ   r   r  Ú	pos_embedrØ   r×   ©Úvitamin_xlarge_256r  r  s        r:   r(  r(  ;  s}   € äØ"ØØÜØ$Øô
ð ô	€Iô Ø ¨B¸"ÌÐ\^Ø u¸È)ôU€Jô ØñSØ)3ðSÜ7;¸JÑ7QÈ&Ñ7QñS€Eà€Lr9   c                 óœ   — t        dddt        dd¬«      d¬«      }t        d	d
ddt        dddd|¬«
      }t	        dd| it        |fi |¤Ž¤Ž}|S )Nr"  rô   r>   rw   rx   rö   r÷   rø   rî   rð   r#  r  rK   Fr“   r$  r%  r×   r'  r  r  s        r:   Úvitamin_xlarge_336r*  O  óq   € äØ"ØØÜØ$Øô
ð ô	€Iô Ø ¨B¸"ÌÐ\^Ø u¸È)ôU€Jô Ñf¸ZÐfÌ4ÐPZÑKeÐ^dÑKeÑf€EØ€Lr9   c                 óœ   — t        dddt        dd¬«      d¬«      }t        d	d
ddt        dddd|¬«
      }t	        dd| it        |fi |¤Ž¤Ž}|S )Nr"  rô   r>   rw   rx   rö   r÷   rø   r?   rð   r#  r  rK   Fr“   r$  r%  r×   )Úvitamin_xlarge_384r  r  s        r:   r-  r-  b  r+  r9   r¥   )FN)F)>rŽ   rT   Údataclassesr   r   Ú	functoolsr   Útypingr   r   r   r¸   Útorch.nnrM   Ú	timm.datar
   r   Útimm.layersr   r   r   r   r   r   r   Ú_builderr   Ú_manipulater   r   Ú	_registryr   r   Úvision_transformerr   r   r   r<   r\   ÚModuler^   r|   rˆ   r�   r§   r½   rÚ   rë   Údefault_cfgsr  r	  r  r  r  r  r  r  r  r   r(  r*  r-  r8   r9   r:   ú<module>r:     se  ðñó* ß (Ý ß )Ñ )ã Ý ç 7÷*÷ *ñ *å *ß 4ß <ß Gð ÷ð ó ðð  ÷ð ó ðó(ôˆ2�9‰9ô ô<�2—9‘9ô ô2�"—)‘)ô ô4>�B—I‘Iô >ôB3�2—9‘9ô 3ôlˆr�y‰yô ó:ó$	ñ %Ù-1Ø-¸3ô.@á)-Ø)°sô*<á,0Ø-¸3ô-@á(,Ø)°sô)<á)-Ø/¸Sô*Bá)-Ø/¸SØ ¨3ô*0ñ *.Ø/¸SØ ¨3ô*0ñ *.Ø/¸SØ ¨3ô*0ñ +/Ø0¸dô+Dá*.Ø0¸dØ ¨3ô+0ñ +/Ø0¸dØ ¨3ô+0ñ +/Ø0¸dØ ¨3ô+0ñ +/Ø0¸dØ ¨3ô+0ñ +/Ø0¸dØ ¨3ô+0ñ +/Ø0¸dØ ¨3ô+0ñK(&ó (€ðV ñÐ5Fò ó ðð& ñÐ4Eò ó ðð$ ñÐ5Fò ó ðð& ñÐ5Fò ó ðð$ ñÐ5Fò ó ðð& ñÐ5Fò ó ðð$ ñÐ6Gò ó ðð& ñÐ6Gò ó ðð$ ñÐ6Gò ó ðð& ñÐ6Gò ó ðð$ ñÐ6Gò ó ðð& ñÐ6Gò ó ðð$ ñÐ6Gò ó ñr9   