§
    ù²Åjè€  ã                   óð  — U d dl Z d dlmZ d dlmZ d dl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Zm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mZ d	dlmZmZ g d¢Z  G d„ de
¦  «        Z! G d„ de¦  «        Z" G d„ dej#        ¦  «        Z$ G d„ dej#        ¦  «        Z% G d„ dej#        ¦  «        Z&de'de'de'de'de'dee         de(ded e&fd!„Z)d"eiZ*ee+ef         e,d#<   i e*¥d$d%d&œ¥Z- G d'„ d(e¦  «        Z. G d)„ d*e¦  «        Z/ G d+„ d,e¦  «        Z0 G d-„ d.e¦  «        Z1 G d/„ d0e¦  «        Z2 e¦   «          ed1e.j3        f¬2¦  «        dd3d4œdee.         de(ded e&fd5„¦   «         ¦   «         Z4 e¦   «          ed1e/j3        f¬2¦  «        dd3d4œdee/         de(ded e&fd6„¦   «         ¦   «         Z5 e¦   «          ed1e0j3        f¬2¦  «        dd3d4œdee0         de(ded e&fd7„¦   «         ¦   «         Z6 e¦   «          ed1e1j3        f¬2¦  «        dd3d4œdee1         de(ded e&fd8„¦   «         ¦   «         Z7 e¦   «          ed9¬2¦  «        dd3d4œdee2         de(ded e&fd:„¦   «         ¦   «         Z8	 	 dCd=e'de'd>d?d@e+dAe(d d?fdB„Z9dS )Dé    N)ÚOrderedDict)Úpartial)ÚAnyÚCallableÚDictÚListÚ
NamedTupleÚOptionalé   )ÚConv2dNormActivationÚMLP)ÚImageClassificationÚInterpolationMode)Ú_log_api_usage_onceé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interface)ÚVisionTransformerÚViT_B_16_WeightsÚViT_B_32_WeightsÚViT_L_16_WeightsÚViT_L_32_WeightsÚViT_H_14_WeightsÚvit_b_16Úvit_b_32Úvit_l_16Úvit_l_32Úvit_h_14c                   ó’   — e Zd ZU eed<   eed<   eed<   ej        Zedej	        f         ed<   ej
        Zedej	        f         ed<   dS )ÚConvStemConfigÚout_channelsÚkernel_sizeÚstride.Ú
norm_layerÚactivation_layerN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__ÚnnÚBatchNorm2dr(   r   ÚModuleÚReLUr)   © ó    úVC:\Projects\Historical\venv\Lib\site-packages\torchvision/models/vision_transformer.pyr$   r$       sn   € € € € € € ØÐÐÑØÐÐÑØ€K€K�KØ+-¬>€J�˜˜bœi˜Ô(Ð9Ð9Ñ9Ø13´Ð�h˜s B¤I˜~Ô.Ð8Ð8Ñ8Ð8Ð8r4   r$   c                   ó>   ‡ — e Zd ZdZdZdededefˆ fd„Zˆ fd„Zˆ xZ	S )ÚMLPBlockzTransformer MLP block.r   Úin_dimÚmlp_dimÚdropoutc                 óp  •— t          ¦   «                              |||gt          j        d |¬¦  «         |                      ¦   «         D ]m}t          |t          j        ¦  «        rQt          j                             |j	        ¦  «         |j
        �&t          j                             |j
        d¬¦  «         Œnd S )N)r)   Úinplacer:   ç�íµ ÷Æ°>©Ústd)ÚsuperÚ__init__r/   ÚGELUÚmodulesÚ
isinstanceÚLinearÚinitÚxavier_uniform_ÚweightÚbiasÚnormal_)Úselfr8   r9   r:   ÚmÚ	__class__s        €r5   rA   zMLPBlock.__init__-   sŸ   ø€ Ý‰Œ×Ò˜ '¨6Ð!2ÅRÄWÐVZÐdkÐÑlÔlÐlà—’‘”ð 	6ð 	6ˆAÝ˜!�RœYÑ'Ô'ð 6Ý”×'Ò'¨¬Ñ1Ô1Ð1Ø”6Ð%Ý”G—O’O A¤F°�OÑ5Ô5Ð5øð		6ð 	6r4   c           	      ó*  •— |                      dd ¦  «        }|�|dk     rLt          d¦  «        D ]<}	dD ]7}
|› d|	dz   › d|
› �}|› d|	z  › d|
› �}||v r|                     |¦  «        ||<   Œ8Œ=t          ¦   «                              |||||||¦  «         d S )NÚversionr   )rH   rI   Úlinear_r   ú.é   )ÚgetÚrangeÚpopr@   Ú_load_from_state_dict)rK   Ú
state_dictÚprefixÚlocal_metadataÚstrictÚmissing_keysÚunexpected_keysÚ
error_msgsrO   ÚiÚtypeÚold_keyÚnew_keyrM   s                €r5   rV   zMLPBlock._load_from_state_dict6   sï   ø€ ð !×$Ò$ Y°Ñ5Ô5ˆàˆ?˜g¨šk˜kå˜1‘X”Xð Fð F�Ø.ð Fð F�DØ!'Ð<Ð<°°!±Ð<Ð<°dÐ<Ð<�GØ!'Ð5¨¨1©Ð5Ð5¨tÐ5Ð5�GØ *Ð,Ð,Ø.8¯nªn¸WÑ.EÔ.E˜
 7Ñ+øð	Fõ 	‰Œ×%Ò%ØØØØØØØñ	
ô 	
ð 	
ð 	
ð 	
r4   )
r*   r+   r,   Ú__doc__Ú_versionr-   ÚfloatrA   rV   Ú__classcell__©rM   s   @r5   r7   r7   (   sv   ø€ € € € € Ø Ð à€Hð6˜sð 6¨Sð 6¸5ð 6ð 6ð 6ð 6ð 6ð 6ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r4   r7   c                   óš   ‡ — e Zd ZdZ eej        d¬¦  «        fdededededed	e	d
e
j        j        f         fˆ fd„Zde
j        fd„Zˆ xZS )ÚEncoderBlockzTransformer encoder block.r=   ©ÚepsÚ	num_headsÚ
hidden_dimr9   r:   Úattention_dropoutr(   .c                 ó.  •— t          ¦   «                              ¦   «          || _         ||¦  «        | _        t	          j        |||d¬¦  «        | _        t	          j        |¦  «        | _         ||¦  «        | _	        t          |||¦  «        | _        d S )NT)r:   Úbatch_first)r@   rA   rk   Úln_1r/   ÚMultiheadAttentionÚself_attentionÚDropoutr:   Úln_2r7   Úmlp)rK   rk   rl   r9   r:   rm   r(   rM   s          €r5   rA   zEncoderBlock.__init__Y   sŽ   ø€ õ 	‰Œ×ÒÑÔÐØ"ˆŒð �J˜zÑ*Ô*ˆŒ	Ý Ô3°JÀ	ÐSdÐrvÐwÑwÔwˆÔÝ”z 'Ñ*Ô*ˆŒð �J˜zÑ*Ô*ˆŒ	Ý˜J¨°Ñ9Ô9ˆŒˆˆr4   Úinputc                 ó\  — t          j        |                     ¦   «         dk    d|j        › �¦  «         |                      |¦  «        }|                      |||d¬¦  «        \  }}|                      |¦  «        }||z   }|                      |¦  «        }|                      |¦  «        }||z   S )NrR   ú2Expected (batch_size, seq_length, hidden_dim) got F)Úneed_weights)	ÚtorchÚ_assertÚdimÚshaperp   rr   r:   rt   ru   )rK   rv   ÚxÚ_Úys        r5   ÚforwardzEncoderBlock.forwardn   sž   € ÝŒ�e—i’i‘k”k QÒ&Ð(jÐ]bÔ]hÐ(jÐ(jÑkÔkÐkØ�IŠI�eÑÔˆØ×"Ò" 1 a¨¸Ð"Ñ?Ô?‰ˆˆ1Ø�LŠL˜‰OŒOˆØ�‰Iˆà�IŠI�a‰LŒLˆØ�HŠH�Q‰KŒKˆØ�1‰uˆr4   ©r*   r+   r,   rb   r   r/   Ú	LayerNormr-   rd   r   rz   r1   rA   ÚTensorr�   re   rf   s   @r5   rh   rh   V   sÃ   ø€ € € € € Ø$Ð$ð 6=°W¸R¼\ÈtÐ5TÑ5TÔ5Tð:ð :àð:ð ð:ð ð	:ð
 ð:ð !ð:ð ˜S %¤(¤/Ð1Ô2ð:ð :ð :ð :ð :ð :ð*	˜Uœ\ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r4   rh   c                   ó¢   ‡ — e Zd ZdZ eej        d¬¦  «        fdededededed	ed
ede	de
j        j        f         fˆ fd„Zde
j        fd„Zˆ xZS )ÚEncoderz?Transformer Model Encoder for sequence to sequence translation.r=   ri   Ú
seq_lengthÚ
num_layersrk   rl   r9   r:   rm   r(   .c	           	      óÂ  •— t          ¦   «                              ¦   «          t          j        t	          j        d||¦  «                             d¬¦  «        ¦  «        | _        t          j        |¦  «        | _	        t          ¦   «         }	t          |¦  «        D ]}
t          ||||||¦  «        |	d|
› �<   Œt          j        |	¦  «        | _         ||¦  «        | _        d S )Nr   g{®Gáz”?r>   Úencoder_layer_)r@   rA   r/   Ú	Parameterrz   ÚemptyrJ   Úpos_embeddingrs   r:   r   rT   rh   Ú
SequentialÚlayersÚln)rK   r‡   rˆ   rk   rl   r9   r:   rm   r(   r�   r^   rM   s              €r5   rA   zEncoder.__init__}   sÚ   ø€ õ 	‰Œ×ÒÑÔÐõ  œ\­%¬+°a¸ÀZÑ*PÔ*P×*XÒ*XÐ]aÐ*XÑ*bÔ*bÑcÔcˆÔÝ”z 'Ñ*Ô*ˆŒÝ.9©m¬mˆÝ�zÑ"Ô"ð 	ð 	ˆAÝ+7ØØØØØ!Øñ,ô ,ˆFÐ' AÐ'Ð'Ñ(Ð(õ ”m FÑ+Ô+ˆŒØ�*˜ZÑ(Ô(ˆŒˆˆr4   rv   c                 óò   — t          j        |                     ¦   «         dk    d|j        › �¦  «         || j        z   }|                      |                      |                      |¦  «        ¦  «        ¦  «        S )NrR   rx   )rz   r{   r|   r}   r�   r�   r�   r:   )rK   rv   s     r5   r�   zEncoder.forwardš   se   € ÝŒ�e—i’i‘k”k QÒ&Ð(jÐ]bÔ]hÐ(jÐ(jÑkÔkÐkØ˜Ô*Ñ*ˆØ�wŠw�t—{’{ 4§<¢<°Ñ#6Ô#6Ñ7Ô7Ñ8Ô8Ð8r4   r‚   rf   s   @r5   r†   r†   z   s×   ø€ € € € € ØIÐIð 6=°W¸R¼\ÈtÐ5TÑ5TÔ5Tð)ð )àð)ð ð)ð ð	)ð
 ð)ð ð)ð ð)ð !ð)ð ˜S %¤(¤/Ð1Ô2ð)ð )ð )ð )ð )ð )ð:9˜Uœ\ð 9ð 9ð 9ð 9ð 9ð 9ð 9ð 9r4   r†   c                   ó  ‡ — e Zd ZdZdddd eej        d¬¦  «        dfdeded	ed
edededededede	e         de
dej        j        f         de	ee                  fˆ fd„Zdej        dej        fd„Zdej        fd„Zˆ xZS )r   z;Vision Transformer as per https://arxiv.org/abs/2010.11929.ç        iè  Nr=   ri   Ú
image_sizeÚ
patch_sizerˆ   rk   rl   r9   r:   rm   Únum_classesÚrepresentation_sizer(   .Úconv_stem_configsc                 ó
  •— t          ¦   «                              ¦   «          t          | ¦  «         t          j        ||z  dk    d¦  «         || _        || _        || _        || _        || _	        || _
        |	| _        |
| _        || _        |�©t          j        ¦   «         }d}t!          |¦  «        D ]Q\  }}|                     d|› �t%          ||j        |j        |j        |j        |j        ¬¦  «        ¦  «         |j        }ŒR|                     dt          j        ||d¬¦  «        ¦  «         || _        nt          j        d|||¬	¦  «        | _        ||z  d
z  }t          j        t          j        dd|¦  «        ¦  «        | _        |dz  }t9          ||||||||¦  «        | _        || _        t?          ¦   «         }|
€t          j         ||	¦  «        |d<   nFt          j         ||
¦  «        |d<   t          j!        ¦   «         |d<   t          j         |
|	¦  «        |d<   t          j        |¦  «        | _"        tG          | j        t          j        ¦  «        r¨| j        j$        | j        j        d         z  | j        j        d         z  }t          j%         &                    | j        j'        tQ          j)        d|z  ¦  «        ¬¦  «         | j        j*        �)t          j%         +                    | j        j*        ¦  «         nÄ| j        j,        �¸tG          | j        j,        t          j        ¦  «        r”t          j%         -                    | j        j,        j'        dtQ          j)        d| j        j,        j        z  ¦  «        ¬¦  «         | j        j,        j*        �.t          j%         +                    | j        j,        j*        ¦  «         t]          | j"        d¦  «        r¨tG          | j"        j/        t          j         ¦  «        r„| j"        j/        j0        }t          j%         &                    | j"        j/        j'        tQ          j)        d|z  ¦  «        ¬¦  «         t          j%         +                    | j"        j/        j*        ¦  «         tG          | j"        j1        t          j         ¦  «        r^t          j%         +                    | j"        j1        j'        ¦  «         t          j%         +                    | j"        j1        j*        ¦  «         d S d S )Nr   z&Input shape indivisible by patch size!rR   Úconv_bn_relu_)Úin_channelsr%   r&   r'   r(   r)   Ú	conv_lastr   )r›   r%   r&   )r›   r%   r&   r'   r   ÚheadÚ
pre_logitsÚactr>   r“   g       @)Úmeanr?   )2r@   rA   r   rz   r{   r”   r•   rl   r9   rm   r:   r–   r—   r(   r/   rŽ   Ú	enumerateÚ
add_moduler   r%   r&   r'   r)   ÚConv2dÚ	conv_projr‹   ÚzerosÚclass_tokenr†   Úencoderr‡   r   rE   ÚTanhÚheadsrD   r›   rF   Útrunc_normal_rH   ÚmathÚsqrtrI   Úzeros_rœ   rJ   Úhasattrrž   Úin_featuresr�   )rK   r”   r•   rˆ   rk   rl   r9   r:   rm   r–   r—   r(   r˜   Úseq_projÚprev_channelsr^   Úconv_stem_layer_configr‡   Úheads_layersÚfan_inrM   s                       €r5   rA   zVisionTransformer.__init__£   sn  ø€ õ 	‰Œ×ÒÑÔÐÝ˜DÑ!Ô!Ð!ÝŒ�j :Ñ-°Ò2Ð4\Ñ]Ô]Ð]Ø$ˆŒØ$ˆŒØ$ˆŒØˆŒØ!2ˆÔØˆŒØ&ˆÔØ#6ˆÔ Ø$ˆŒàÐ(å”}‘”ˆHØˆMÝ-6Ð7HÑ-IÔ-Ið Dð DÑ)�Ð)Ø×#Ò#Ø' AÐ'Ð'Ý(Ø$1Ø%;Ô%HØ$:Ô$FØ5Ô<Ø#9Ô#DØ)?Ô)Pðñ ô ñ
ô 
ð 
ð !7Ô C��Ø×ÒØ�RœY°=ÈzÐghÐiÑiÔiñô ð ð )1ˆDŒNˆNåœYØ¨JÀJÐWaðñ ô ˆDŒNð ! JÑ.°1Ñ4ˆ
õ œ<­¬°A°q¸*Ñ(EÔ(EÑFÔFˆÔØ�a‰ˆ
åØØØØØØØØñ	
ô 	
ˆŒð %ˆŒå4?±M´MˆØÐ&Ý#%¤9¨Z¸Ñ#EÔ#EˆL˜Ñ Ð å)+¬°:Ð?RÑ)SÔ)SˆL˜Ñ&Ý"$¤'¡)¤)ˆL˜ÑÝ#%¤9Ð-@À+Ñ#NÔ#NˆL˜Ñ å”] <Ñ0Ô0ˆŒ
å�d”n¥b¤iÑ0Ô0ð 	>à”^Ô/°$´.Ô2LÈQÔ2OÑOÐRVÔR`ÔRlÐmnÔRoÑoˆFÝŒG×!Ò! $¤.Ô"7½T¼YÀqÈ6ÁzÑ=RÔ=RÐ!ÑSÔSÐSØŒ~Ô"Ð.Ý”—’˜tœ~Ô2Ñ3Ô3Ð3øØŒ^Ô%Ð1µjÀÄÔAYÕ[]Ô[dÑ6eÔ6eÐ1åŒG�OŠOØ”Ô(Ô/°c½t¼yÈÈtÌ~ÔOgÔOtÑItÑ?uÔ?uð ñ ô ð ð Œ~Ô'Ô,Ð8Ý”—’˜tœ~Ô7Ô<Ñ=Ô=Ð=å�4”:˜|Ñ,Ô,ð 	7µ¸D¼JÔ<QÕSUÔS\Ñ1]Ô1]ð 	7Ø”ZÔ*Ô6ˆFÝŒG×!Ò! $¤*Ô"7Ô">ÅDÄIÈaÐRXÉjÑDYÔDYÐ!ÑZÔZÐZÝŒG�NŠN˜4œ:Ô0Ô5Ñ6Ô6Ð6å�d”j”o¥r¤yÑ1Ô1ð 	1ÝŒG�NŠN˜4œ:œ?Ô1Ñ2Ô2Ð2ÝŒG�NŠN˜4œ:œ?Ô/Ñ0Ô0Ð0Ð0Ð0ð	1ð 	1r4   r~   Úreturnc                 ó~  — |j         \  }}}}| j        }t          j        || j        k    d| j        › d|› d�¦  «         t          j        || j        k    d| j        › d|› d�¦  «         ||z  }||z  }|                      |¦  «        }|                     || j        ||z  ¦  «        }|                     ddd¦  «        }|S )NzWrong image height! Expected z	 but got ú!zWrong image width! Expected r   r   r   )	r}   r•   rz   r{   r”   r¤   Úreshaperl   Úpermute)	rK   r~   ÚnÚcÚhÚwÚpÚn_hÚn_ws	            r5   Ú_process_inputz VisionTransformer._process_input  sÔ   € Ø”W‰
ˆˆ1ˆa�ØŒOˆÝŒ�a˜4œ?Ò*Ð,jÈDÌOÐ,jÐ,jÐfgÐ,jÐ,jÐ,jÑkÔkÐkÝŒ�a˜4œ?Ò*Ð,iÈ4Ì?Ð,iÐ,iÐefÐ,iÐ,iÐ,iÑjÔjÐjØ�1‰fˆØ�1‰fˆð �NŠN˜1ÑÔˆà�IŠI�a˜œ¨#°©)Ñ4Ô4ˆð �IŠI�a˜˜AÑÔˆàˆr4   c                 ó  — |                       |¦  «        }|j        d         }| j                             |dd¦  «        }t	          j        ||gd¬¦  «        }|                      |¦  «        }|d d …df         }|                      |¦  «        }|S )Nr   éÿÿÿÿr   ©r|   )rÁ   r}   r¦   Úexpandrz   Úcatr§   r©   )rK   r~   rº   Úbatch_class_tokens       r5   r�   zVisionTransformer.forward!  s�   € à×Ò Ñ"Ô"ˆØŒG�AŒJˆð !Ô,×3Ò3°A°r¸2Ñ>Ô>ÐÝŒIÐ(¨!Ð,°!Ð4Ñ4Ô4ˆà�LŠL˜‰OŒOˆð ˆaˆaˆa�ˆdŒGˆà�JŠJ�q‰MŒMˆàˆr4   )r*   r+   r,   rb   r   r/   rƒ   r-   rd   r
   r   rz   r1   r   r$   rA   r„   rÁ   r�   re   rf   s   @r5   r   r       sV  ø€ € € € € ØEÐEð Ø#&ØØ-1Ø5<°W¸R¼\ÈtÐ5TÑ5TÔ5TØ<@ðg1ð g1àðg1ð ðg1ð ð	g1ð
 ðg1ð ðg1ð ðg1ð ðg1ð !ðg1ð ðg1ð & cœ]ðg1ð ˜S %¤(¤/Ð1Ô2ðg1ð $ D¨Ô$8Ô9ðg1ð g1ð g1ð g1ð g1ð g1ðR ¤ð °´ð ð ð ð ð*˜œð ð ð ð ð ð ð ð r4   r   r•   rˆ   rk   rl   r9   ÚweightsÚprogressÚkwargsrµ   c           
      óž  — |�ut          |dt          |j        d         ¦  «        ¦  «         |j        d         d         |j        d         d         k    sJ ‚t          |d|j        d         d         ¦  «         |                     dd¦  «        }t	          d|| ||||dœ|¤Ž}	|r*|	                     |                     |d	¬
¦  «        ¦  «         |	S )Nr–   Ú
categoriesÚmin_sizer   r   r”   éà   )r”   r•   rˆ   rk   rl   r9   T)rÉ   Ú
check_hashr3   )r   ÚlenÚmetarU   r   Úload_state_dictÚget_state_dict)
r•   rˆ   rk   rl   r9   rÈ   rÉ   rÊ   r”   Úmodels
             r5   Ú_vision_transformerrÕ   4  sò   € ð ÐÝ˜f mµS¸¼ÀlÔ9SÑ5TÔ5TÑUÔUÐUØŒ|˜JÔ'¨Ô*¨g¬l¸:Ô.FÀqÔ.IÒIÐIÐIÐIÝ˜f l°G´LÀÔ4LÈQÔ4OÑPÔPÐPØ—’˜L¨#Ñ.Ô.€Jåð ØØØØØØðð ð ðð €Eð ð ZØ×Ò˜g×4Ò4¸hÐSWÐ4ÑXÔXÑYÔYÐYà€Lr4   rÌ   Ú_COMMON_METAz(https://github.com/facebookresearch/SWAGz:https://github.com/facebookresearch/SWAG/blob/main/LICENSE)ÚrecipeÚlicensec                   ó(  — e Zd Z ed eed¬¦  «        i e¥dddddd	d
œiddddœ¥¬¦  «        Z ed eeddej	        ¬¦  «        i e
¥dddddd
œiddddœ¥¬¦  «        Z ed eeddej	        ¬¦  «        i e
¥ddddddd
œidddd œ¥¬¦  «        ZeZd!S )"r   z9https://download.pytorch.org/models/vit_b_16-c867db91.pthrÎ   ©Ú	crop_sizeièê(©rÎ   rÎ   zNhttps://github.com/pytorch/vision/tree/main/references/classification#vit_b_16úImageNet-1KgøSã¥›DT@g1¬ZÔW@©zacc@1zacc@5gªñÒMb�1@gÃõ(\�¤t@ú²
                These weights were trained from scratch by using a modified version of `DeIT
                <https://arxiv.org/abs/2012.12877>`_'s training recipe.
            ©Ú
num_paramsrÍ   r×   Ú_metricsÚ_opsÚ
_file_sizeÚ_docs©ÚurlÚ
transformsrÑ   z>https://download.pytorch.org/models/vit_b_16_swag-9ac1b537.pthé€  ©rÛ   Úresize_sizeÚinterpolationiè^-)ré   ré   gú~j¼tSU@gš™™™™iX@gË¡E¶ó½K@gî|?5^¶t@úË
                These weights are learnt via transfer learning by end-to-end fine-tuning the original
                `SWAG <https://arxiv.org/abs/2201.08371>`_ weights on ImageNet-1K data.
            ©rá   rÍ   râ   rã   rä   rå   zAhttps://download.pytorch.org/models/vit_b_16_lc_swag-4e70ced5.pthú+https://github.com/pytorch/vision/pull/5793gbX9´xT@gìQ¸…X@úã
                These weights are composed of the original frozen `SWAG <https://arxiv.org/abs/2201.08371>`_ trunk
                weights and a linear classifier learnt on top of them trained on ImageNet-1K data.
            ©r×   rá   rÍ   râ   rã   rä   rå   N©r*   r+   r,   r   r   r   rÖ   ÚIMAGENET1K_V1r   ÚBICUBICÚ_COMMON_SWAG_METAÚIMAGENET1K_SWAG_E2E_V1ÚIMAGENET1K_SWAG_LINEAR_V1ÚDEFAULTr3   r4   r5   r   r   _  sš  € € € € € Ø�GØGØ�7Ð.¸#Ð>Ñ>Ô>ð
Øð
à"Ø"ØfàØ#Ø#ð ð  ðð Ø!ðð
ð 
ð 
ðñ ô €Mð, %˜WØLØ�7ØØØØ+Ô3ð	
ñ 
ô 
ð
Øð
à"Ø"àØ#Ø#ð ð  ðð Ø!ðð
ð 
ð 
ðñ ô Ðð4 !( ØOØ�7ØØØØ+Ô3ð	
ñ 
ô 
ð
Øð
àCØ"Ø"àØ#Ø#ð ð  ðð Ø!ðð
ð 
ð 
ð!ñ !ô !Ðð6 €G€G€Gr4   r   c                   óf   — e Zd Z ed eed¬¦  «        i e¥dddddd	d
œiddddœ¥¬¦  «        ZeZdS )r   z9https://download.pytorch.org/models/vit_b_32-d86f8d99.pthrÎ   rÚ   iè1BrÜ   zNhttps://github.com/pytorch/vision/tree/main/references/classification#vit_b_32rÝ   gî|?5^úR@gçû©ñÒW@rÞ   g‰A`åÐ¢@g‹lçû©	u@rß   rà   ræ   N©	r*   r+   r,   r   r   r   rÖ   ró   rø   r3   r4   r5   r   r   ®  s‹   € € € € € Ø�GØGØ�7Ð.¸#Ð>Ñ>Ô>ð
Øð
à"Ø"ØfàØ#Ø#ð ð  ðð Ø!ðð
ð 
ð 
ðñ ô €Mð, €G€G€Gr4   r   c                   ó*  — e Zd Z ed eedd¬¦  «        i e¥ddddd	d
dœiddddœ¥¬¦  «        Z ed eeddej	        ¬¦  «        i e
¥ddddddœiddddœ¥¬¦  «        Z ed eeddej	        ¬¦  «        i e
¥dddddddœiddd d!œ¥¬¦  «        ZeZd"S )#r   z9https://download.pytorch.org/models/vit_l_16-852ce7e3.pthrÎ   éò   )rÛ   rë   iè§#rÜ   zNhttps://github.com/pytorch/vision/tree/main/references/classification#vit_l_16rÝ   gî|?5^êS@gF¶óýÔ¨W@rÞ   g×£p=
ÇN@g;ßO�$’@a  
                These weights were trained from scratch by using a modified version of TorchVision's
                `new training recipe
                <https://pytorch.org/blog/how-to-train-state-of-the-art-models-using-torchvision-latest-primitives/>`_.
            rà   ræ   z>https://download.pytorch.org/models/vit_l_16_swag-4f3808c9.pthé   rê   iè—0)rý   rý   gj¼t“V@gTã¥›Ä X@g²�ï§ÆŸv@gyé&11’@rí   rî   zAhttps://download.pytorch.org/models/vit_l_16_lc_swag-4d563306.pthrï   gÓMbXIU@g^ºI[X@rð   rñ   Nrò   r3   r4   r5   r   r   È  sœ  € € € € € Ø�GØGØ�7Ð.¸#È3ÐOÑOÔOð
Øð
à#Ø"ØfàØ#Ø#ð ð  ðð Ø"ðð
ð 
ð 
ðñ ô €Mð. %˜WØLØ�7ØØØØ+Ô3ð	
ñ 
ô 
ð
Øð
à#Ø"àØ#Ø#ð ð  ðð Ø"ðð
ð 
ð 
ðñ ô Ðð4 !( ØOØ�7ØØØØ+Ô3ð	
ñ 
ô 
ð
Øð
àCØ#Ø"àØ#Ø#ð ð  ðð Ø"ðð
ð 
ð 
ð!ñ !ô !Ðð6 €G€G€Gr4   r   c                   óf   — e Zd Z ed eed¬¦  «        i e¥dddddd	d
œiddddœ¥¬¦  «        ZeZdS )r   z9https://download.pytorch.org/models/vit_l_32-c7638314.pthrÎ   rÚ   iè[ErÜ   zNhttps://github.com/pytorch/vision/tree/main/references/classification#vit_l_32rÝ   g‘í|?5>S@g®GázDW@rÞ   g¨ÆK7‰Á.@gžï§ÆËE’@rß   rà   ræ   Nrú   r3   r4   r5   r   r     s‹   € € € € € Ø�GØGØ�7Ð.¸#Ð>Ñ>Ô>ð
Øð
à#Ø"ØfàØ#Ø"ð ð  ðð Ø"ðð
ð 
ð 
ðñ ô €Mð, €G€G€Gr4   r   c                   óÔ   — e Zd Z ed eeddej        ¬¦  «        i e¥dddddd	œid
dddœ¥¬¦  «        Z	 ed eeddej        ¬¦  «        i e¥ddddddd	œiddddœ¥¬¦  «        Z
e	ZdS )r   z>https://download.pytorch.org/models/vit_h_14_swag-80465313.pthé  rê   ièýÁ%)r   r   rÝ   gÙÎ÷S#V@g#Ûù~j¬X@rÞ   gÛù~j¼Å�@g¨ÆK7Iá¢@rí   rî   ræ   zAhttps://download.pytorch.org/models/vit_h_14_lc_swag-c1eb923e.pthrÎ   rï   iè@¬%rÜ   gZd;ßOmU@g…ëQ¸nX@g=
×£péd@gºIkÖ¢@rð   rñ   N)r*   r+   r,   r   r   r   r   rô   rõ   rö   r÷   rø   r3   r4   r5   r   r   2  s"  € € € € € Ø$˜WØLØ�7ØØØØ+Ô3ð	
ñ 
ô 
ð
Øð
à#Ø"àØ#Ø#ð ð  ðð Ø"ðð
ð 
ð 
ðñ ô Ðð4 !( ØOØ�7ØØØØ+Ô3ð	
ñ 
ô 
ð
Øð
àCØ#Ø"àØ#Ø#ð ð  ðð Ø"ðð
ð 
ð 
ð!ñ !ô !Ðð6 %€G€G€Gr4   r   Ú
pretrained)rÈ   T)rÈ   rÉ   c                 ó^   — t                                | ¦  «        } t          dddddd| |dœ|¤ŽS )a­  
    Constructs a vit_b_16 architecture from
    `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale <https://arxiv.org/abs/2010.11929>`_.

    Args:
        weights (:class:`~torchvision.models.ViT_B_16_Weights`, optional): The pretrained
            weights to use. See :class:`~torchvision.models.ViT_B_16_Weights`
            below for more details and possible values. By default, no pre-trained weights are used.
        progress (bool, optional): If True, displays a progress bar of the download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.vision_transformer.VisionTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vision_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.ViT_B_16_Weights
        :members:
    é   é   é   é   ©r•   rˆ   rk   rl   r9   rÈ   rÉ   r3   )r   ÚverifyrÕ   ©rÈ   rÉ   rÊ   s      r5   r   r   k  óR   € õ( ×%Ò% gÑ.Ô.€Gåð 	ØØØØØØØð	ð 	ð ð	ð 	ð 	r4   c                 ó^   — t                                | ¦  «        } t          dddddd| |dœ|¤ŽS )a­  
    Constructs a vit_b_32 architecture from
    `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale <https://arxiv.org/abs/2010.11929>`_.

    Args:
        weights (:class:`~torchvision.models.ViT_B_32_Weights`, optional): The pretrained
            weights to use. See :class:`~torchvision.models.ViT_B_32_Weights`
            below for more details and possible values. By default, no pre-trained weights are used.
        progress (bool, optional): If True, displays a progress bar of the download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.vision_transformer.VisionTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vision_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.ViT_B_32_Weights
        :members:
    é    r  r  r  r  r3   )r   r  rÕ   r	  s      r5   r   r   �  r
  r4   c                 ó^   — t                                | ¦  «        } t          dddddd| |dœ|¤ŽS )a­  
    Constructs a vit_l_16 architecture from
    `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale <https://arxiv.org/abs/2010.11929>`_.

    Args:
        weights (:class:`~torchvision.models.ViT_L_16_Weights`, optional): The pretrained
            weights to use. See :class:`~torchvision.models.ViT_L_16_Weights`
            below for more details and possible values. By default, no pre-trained weights are used.
        progress (bool, optional): If True, displays a progress bar of the download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.vision_transformer.VisionTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vision_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.ViT_L_16_Weights
        :members:
    r  é   é   é   r  r3   )r   r  rÕ   r	  s      r5   r    r    ¯  óR   € õ( ×%Ò% gÑ.Ô.€Gåð 	ØØØØØØØð	ð 	ð ð	ð 	ð 	r4   c                 ó^   — t                                | ¦  «        } t          dddddd| |dœ|¤ŽS )a­  
    Constructs a vit_l_32 architecture from
    `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale <https://arxiv.org/abs/2010.11929>`_.

    Args:
        weights (:class:`~torchvision.models.ViT_L_32_Weights`, optional): The pretrained
            weights to use. See :class:`~torchvision.models.ViT_L_32_Weights`
            below for more details and possible values. By default, no pre-trained weights are used.
        progress (bool, optional): If True, displays a progress bar of the download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.vision_transformer.VisionTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vision_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.ViT_L_32_Weights
        :members:
    r  r  r  r  r  r  r3   )r   r  rÕ   r	  s      r5   r!   r!   Ñ  r  r4   )r  Nc                 ó^   — t                                | ¦  «        } t          dddddd| |dœ|¤ŽS )a­  
    Constructs a vit_h_14 architecture from
    `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale <https://arxiv.org/abs/2010.11929>`_.

    Args:
        weights (:class:`~torchvision.models.ViT_H_14_Weights`, optional): The pretrained
            weights to use. See :class:`~torchvision.models.ViT_H_14_Weights`
            below for more details and possible values. By default, no pre-trained weights are used.
        progress (bool, optional): If True, displays a progress bar of the download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.vision_transformer.VisionTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vision_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.ViT_H_14_Weights
        :members:
    é   r  r  i   i   r  r3   )r   r  rÕ   r	  s      r5   r"   r"   ó  r  r4   ÚbicubicFr”   Úmodel_statezOrderedDict[str, torch.Tensor]Úinterpolation_modeÚreset_headsc                 ó6  — |d         }|j         \  }}}|dk    rt          d|j         › �¦  «        ‚| |z  dz  dz   }	|	|k    �rV|dz  }|	dz  }	|dd…dd…dd…f         }
|dd…dd…dd…f         }|                     ddd¦  «        }t          t	          j        |¦  «        ¦  «        }||z  |k    rt          d||z  › d|› �¦  «        ‚|                     d|||¦  «        }| |z  }t          j         	                    |||d	¬
¦  «        }|                     d||	¦  «        }|                     ddd¦  «        }t          j        |
|gd¬¦  «        }||d<   |rDt          ¦   «         }|                     ¦   «         D ]\  }}|                     d¦  «        s|||<   Œ |}|S )aŸ  This function helps interpolate positional embeddings during checkpoint loading,
    especially when you want to apply a pre-trained model on images with different resolution.

    Args:
        image_size (int): Image size of the new model.
        patch_size (int): Patch size of the new model.
        model_state (OrderedDict[str, torch.Tensor]): State dict of the pre-trained model.
        interpolation_mode (str): The algorithm used for upsampling. Default: bicubic.
        reset_heads (bool): If true, not copying the state of heads. Default: False.

    Returns:
        OrderedDict[str, torch.Tensor]: A state dict which can be loaded into the new model.
    zencoder.pos_embeddingr   z%Unexpected position embedding shape: r   Nr   zPseq_length is not a perfect square! Instead got seq_length_1d * seq_length_1d = z and seq_length = T)ÚsizeÚmodeÚalign_cornersrÄ   r©   )r}   Ú
ValueErrorr¹   r-   r«   r¬   r¸   r/   Ú
functionalÚinterpolaterz   rÆ   r   ÚitemsÚ
startswith)r”   r•   r  r  r  r�   rº   r‡   rl   Únew_seq_lengthÚpos_embedding_tokenÚpos_embedding_imgÚseq_length_1dÚnew_seq_length_1dÚnew_pos_embedding_imgÚnew_pos_embeddingÚmodel_state_copyÚkÚvs                      r5   Úinterpolate_embeddingsr,    sC  € ð*  Ð 7Ô8€MØ -Ô 3Ñ€A€z�:ØˆA‚v€vÝÐVÀÔATÐVÐVÑWÔWÐWà  JÑ.°1Ñ4°qÑ8€Nð
 ˜Ò#Ñ#à�a‰ˆ
Ø˜!ÑˆØ+¨A¨A¨A¨r°¨r°1°1°1¨HÔ5ÐØ)¨!¨!¨!¨Q¨R¨R°°°¨(Ô3Ðð .×5Ò5°a¸¸AÑ>Ô>ÐÝ�DœI jÑ1Ô1Ñ2Ô2ˆØ˜=Ñ(¨JÒ6Ð6Ýð bÐcpð  tAñ  dAð  bð  bð  V`ð  bð  bñô ð ð
 .×5Ò5°a¸À]ÐTaÑbÔbÐØ&¨*Ñ4Ðõ !#¤× 9Ò 9ØØ"Ø#Øð	 !:ñ !
ô !
Ðð !6× =Ò =¸aÀÈ^Ñ \Ô \Ðð !6× =Ò =¸aÀÀAÑ FÔ FÐÝ!œIÐ':Ð<QÐ&RÐXYÐZÑZÔZÐà/@ˆÐ+Ñ,àð 	+ÝALÁÄÐØ#×)Ò)Ñ+Ô+ð ,ð ,‘��1Ø—|’| GÑ,Ô,ð ,Ø*+Ð$ QÑ'øØ*ˆKàÐr4   )r  F):r«   Úcollectionsr   Ú	functoolsr   Útypingr   r   r   r   r	   r
   rz   Útorch.nnr/   Úops.miscr   r   Útransforms._presetsr   r   Úutilsr   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   Ú__all__r$   r7   r1   rh   r†   r   r-   ÚboolrÕ   rÖ   Ústrr.   rõ   r   r   r   r   r   ró   r   r   r    r!   r"   r,  r3   r4   r5   ú<module>r:     s‡  ðØ €€€€Ø #Ð #Ð #Ð #Ð #Ð #Ø Ð Ð Ð Ð Ð Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bà €€€Ø Ð Ð Ð Ð Ð à 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ø HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø BÐ BÐ BÐ BÐ BÐ BÐ BÐ Bðð ð €ð9ð 9ð 9ð 9ð 9�Zñ 9ô 9ð 9ð+
ð +
ð +
ð +
ð +
ˆsñ +
ô +
ð +
ð\!ð !ð !ð !ð !�2”9ñ !ô !ð !ðH#9ð #9ð #9ð #9ð #9ˆbŒiñ #9ô #9ð #9ðLQð Qð Qð Qð Q˜œ	ñ Qô Qð QðhØðàðð ðð ð	ð
 ðð �kÔ"ðð ðð ðð ðð ð ð ðB Ð&ð €ˆd�3˜�8Œnð ð ñ ðØðà8ØKðð ð Ð ðLð Lð Lð Lð L�{ñ Lô Lð Lð^ð ð ð ð �{ñ ô ð ð4Mð Mð Mð Mð M�{ñ Mô Mð Mð`ð ð ð ð �{ñ ô ð ð46%ð 6%ð 6%ð 6%ð 6%�{ñ 6%ô 6%ð 6%ðr €ÑÔØÐ ,Ð0@Ô0NÐ!OÐPÑPÔPØ6:ÈTð ð ð ˜Ð"2Ô3ð Àdð Ð]`ð Ðevð ð ð ñ QÔPñ Ôðð@ €ÑÔØÐ ,Ð0@Ô0NÐ!OÐPÑPÔPØ6:ÈTð ð ð ˜Ð"2Ô3ð Àdð Ð]`ð Ðevð ð ð ñ QÔPñ Ôðð@ €ÑÔØÐ ,Ð0@Ô0NÐ!OÐPÑPÔPØ6:ÈTð ð ð ˜Ð"2Ô3ð Àdð Ð]`ð Ðevð ð ð ñ QÔPñ Ôðð@ €ÑÔØÐ ,Ð0@Ô0NÐ!OÐPÑPÔPØ6:ÈTð ð ð ˜Ð"2Ô3ð Àdð Ð]`ð Ðevð ð ð ñ QÔPñ Ôðð@ €ÑÔØÐÐ!5Ð6Ñ6Ô6Ø6:ÈTð ð ð ˜Ð"2Ô3ð Àdð Ð]`ð Ðevð ð ð ñ 7Ô6ñ ÔððH (ØðKð KØðKàðKð 2ðKð ð	Kð
 ðKð &ðKð Kð Kð Kð Kð Kr4   