Ë
    [²j|}  ã                   óN  — 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	 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jB                  «      Z" G d„ dejB                  «      Z# G d„ dejB                  «      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«      Z/ G d-„ d.e«      Z0 G d/„ d0e«      Z1 e«        ed1e-jd                  f¬2«      dd3d4œde	e-   de&ded e$fd5„«       «       Z3 e«        ed1e.jd                  f¬2«      dd3d4œde	e.   de&ded e$fd6„«       «       Z4 e«        ed1e/jd                  f¬2«      dd3d4œde	e/   de&ded e$fd7„«       «       Z5 e«        ed1e0jd                  f¬2«      dd3d4œde	e0   de&ded e$fd8„«       «       Z6 e«        ed9¬2«      dd3d4œde	e1   de&ded e$fd:„«       «       Z7	 	 dAd;e%de%d<d=d>e*d?e&d d=fd@„Z8y)Bé    N)ÚOrderedDict)Úpartial)ÚAnyÚCallableÚ
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<   y)ÚConvStemConfigÚout_channelsÚkernel_sizeÚstride.Ú
norm_layerÚactivation_layerN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__ÚnnÚBatchNorm2dr&   r   ÚModuleÚReLUr'   © ó    úd/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torchvision/models/vision_transformer.pyr"   r"       sJ   … ØÓØÓØƒKØ+-¯>©>€J�˜˜bŸi™i˜Ñ(Ó9Ø13·±Ð�h˜s B§I¡I˜~Ñ.Ô8r2   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 |¬«       | j	                  «       D ]~  }t        |t        j                  «      sŒt        j                  j                  |j                  «       |j                  €ŒTt        j                  j                  |j                  d¬«       Œ€ y )N)r'   Úinplacer8   ç�íµ ÷Æ°>©Ústd)ÚsuperÚ__init__r-   ÚGELUÚmodulesÚ
isinstanceÚLinearÚinitÚxavier_uniform_ÚweightÚbiasÚnormal_)Úselfr6   r7   r8   ÚmÚ	__class__s        €r3   r?   zMLPBlock.__init__-   s�   ø€ Ü‰Ñ˜ '¨6Ð!2ÄRÇWÁWÐVZÐdkÐÔlà—‘“ò 	6ˆAÜ˜!œRŸY™YÕ'Ü—‘×'Ñ'¨¯©Ô1Ø—6‘6Ñ%Ü—G‘G—O‘O A§F¡F°�OÕ5ñ		6r2   c           	      óô   •— |j                  dd «      }|�|dk  rIt        d«      D ];  }	dD ]4  }
|› d|	dz   › d|
› �}|› d|	z  › d|
› �}||v sŒ!|j                  |«      ||<   Œ6 Œ= t        ‰| �  |||||||«       y )NÚversionr	   )rF   rG   Úlinear_r   ú.é   )ÚgetÚrangeÚpopr>   Ú_load_from_state_dict)rI   Ú
state_dictÚprefixÚlocal_metadataÚstrictÚmissing_keysÚunexpected_keysÚ
error_msgsrM   ÚiÚtypeÚold_keyÚnew_keyrK   s                €r3   rT   zMLPBlock._load_from_state_dict6   s¹   ø€ ð !×$Ñ$ Y°Ó5ˆàˆ?˜g¨škä˜1“Xò F�Ø.ò F�DØ!' ¨°°!±¨u°A°d°VÐ<�GØ!' ¨¨1©¨¨Q¨t¨fÐ5�GØ *Ò,Ø.8¯n©n¸WÓ.E˜
 7Ò+ñ	FðFô 	‰Ñ%ØØØØØØØõ	
r2   )
r(   r)   r*   Ú__doc__Ú_versionr+   Úfloatr?   rT   Ú__classcell__©rK   s   @r3   r5   r5   (   s/   ø„ Ù à€Hð6˜sð 6¨Sð 6¸5õ 6÷
ð 
r2   r5   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_dimr7   r8   Úattention_dropoutr&   .c                 óø   •— t         ‰| �  «        || _         ||«      | _        t	        j
                  |||d¬«      | _        t	        j                  |«      | _         ||«      | _	        t        |||«      | _        y )NT)r8   Úbatch_first)r>   r?   ri   Úln_1r-   ÚMultiheadAttentionÚself_attentionÚDropoutr8   Úln_2r5   Úmlp)rI   ri   rj   r7   r8   rk   r&   rK   s          €r3   r?   zEncoderBlock.__init__Y   sn   ø€ ô 	‰ÑÔØ"ˆŒñ ˜zÓ*ˆŒ	Ü ×3Ñ3°JÀ	ÐSdÐrvÔwˆÔÜ—z‘z 'Ó*ˆŒñ ˜zÓ*ˆŒ	Ü˜J¨°Ó9ˆ�r2   Úinputc                 ó6  — t        j                  |j                  «       dk(  d|j                  › �«       | j	                  |«      }| j                  |||d¬«      \  }}| j                  |«      }||z   }| j                  |«      }| j                  |«      }||z   S )NrP   ú2Expected (batch_size, seq_length, hidden_dim) got F)Úneed_weights)	ÚtorchÚ_assertÚdimÚshapern   rp   r8   rr   rs   )rI   rt   ÚxÚ_Úys        r3   ÚforwardzEncoderBlock.forwardn   s�   € Ü�‰�e—i‘i“k QÑ&Ð*\Ð]b×]hÑ]hÐ\iÐ(jÔkØ�I‰I�eÓˆØ×"Ñ" 1 a¨¸Ð"Ó?‰ˆˆ1Ø�L‰L˜‹OˆØ�‰Iˆà�I‰I�a‹LˆØ�H‰H�Q‹KˆØ�1‰uˆr2   ©r(   r)   r*   r`   r   r-   Ú	LayerNormr+   rb   r   rx   r/   r?   ÚTensorr   rc   rd   s   @r3   rf   rf   V   sw   ø„ Ù$ñ 6=¸R¿\¹\ÈtÔ5Tñ:àð:ð ð:ð ð	:ð
 ð:ð !ð:ð ˜S %§(¡(§/¡/Ð1Ñ2õ:ð*	˜UŸ\™\÷ 	r2   rf   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;   rg   Ú
seq_lengthÚ
num_layersri   rj   r7   r8   rk   r&   .c	           	      ó‚  •— t         ‰| �  «        t        j                  t	        j
                  d||«      j                  d¬«      «      | _        t        j                  |«      | _	        t        «       }	t        |«      D ]  }
t        ||||||«      |	d|
› �<   Œ t        j                  |	«      | _         ||«      | _        y )Nr   g{®Gáz”?r<   Úencoder_layer_)r>   r?   r-   Ú	Parameterrx   ÚemptyrH   Úpos_embeddingrq   r8   r   rR   rf   Ú
SequentialÚlayersÚln)rI   r…   r†   ri   rj   r7   r8   rk   r&   r�   r\   rK   s              €r3   r?   zEncoder.__init__}   s°   ø€ ô 	‰ÑÔô  Ÿ\™\¬%¯+©+°a¸ÀZÓ*P×*XÑ*XÐ]aÐ*XÓ*bÓcˆÔÜ—z‘z 'Ó*ˆŒÜ.9«mˆÜ�zÓ"ò 	ˆAÜ+7ØØØØØ!Øó,ˆF�^ A 3Ð'Ò(ð	ô —m‘m FÓ+ˆŒÙ˜ZÓ(ˆ�r2   rt   c                 óæ   — t        j                  |j                  «       dk(  d|j                  › �«       || j                  z   }| j                  | j                  | j                  |«      «      «      S )NrP   rv   )rx   ry   rz   r{   r‹   rŽ   r�   r8   )rI   rt   s     r3   r   zEncoder.forwardš   s\   € Ü�‰�e—i‘i“k QÑ&Ð*\Ð]b×]hÑ]hÐ\iÐ(jÔkØ˜×*Ñ*Ñ*ˆØ�w‰w�t—{‘{ 4§<¡<°Ó#6Ó7Ó8Ð8r2   r€   rd   s   @r3   r„   r„   z   s‹   ø„ ÙIñ 6=¸R¿\¹\ÈtÔ5Tñ)àð)ð ð)ð ð	)ð
 ð)ð ð)ð ð)ð !ð)ð ˜S %§(¡(§/¡/Ð1Ñ2õ)ð:9˜UŸ\™\÷ 9r2   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;   rg   Ú
image_sizeÚ
patch_sizer†   ri   rj   r7   r8   rk   Únum_classesÚrepresentation_sizer&   .Úconv_stem_configsc                 óÜ  •— t         ‰| �  «        t        | «       t        j                  ||z  dk(  d«       || _        || _        || _        || _        || _	        || _
        |	| _        |
| _        || _        |�»t        j                  «       }d}t!        |«      D ]g  \  }}|j#                  d|› �t%        ||j&                  |j(                  |j*                  |j                  |j,                  ¬«      «       |j&                  }Œi |j#                  dt        j.                  ||d¬«      «       || _        nt        j.                  d|||¬	«      | _        ||z  d
z  }t        j2                  t        j4                  dd|«      «      | _        |dz  }t9        ||||||||«      | _        || _        t?        «       }|
€t        j@                  ||	«      |d<   nIt        j@                  ||
«      |d<   t        jB                  «       |d<   t        j@                  |
|	«      |d<   t        j                  |«      | _"        tG        | j0                  t        j.                  «      rá| j0                  jH                  | j0                  j(                  d   z  | j0                  j(                  d   z  }t        jJ                  jM                  | j0                  jN                  tQ        jR                  d|z  «      ¬«       | j0                  jT                  ��Jt        jJ                  jW                  | j0                  jT                  «       �n| j0                  jX                  �ÿtG        | j0                  jX                  t        j.                  «      rÑt        jJ                  j[                  | j0                  jX                  jN                  dtQ        jR                  d| j0                  jX                  j&                  z  «      ¬«       | j0                  jX                  jT                  �=t        jJ                  jW                  | j0                  jX                  jT                  «       t]        | jD                  d«      ràtG        | jD                  j^                  t        j@                  «      r²| jD                  j^                  j`                  }t        jJ                  jM                  | jD                  j^                  jN                  tQ        jR                  d|z  «      ¬«       t        jJ                  jW                  | jD                  j^                  jT                  «       tG        | jD                  jb                  t        j@                  «      r{t        jJ                  jW                  | jD                  jb                  jN                  «       t        jJ                  jW                  | jD                  jb                  jT                  «       y y )Nr   z&Input shape indivisible by patch size!rP   Ú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>   r?   r   rx   ry   r’   r“   rj   r7   rk   r8   r”   r•   r&   r-   rŒ   Ú	enumerateÚ
add_moduler
   r#   r$   r%   r'   ÚConv2dÚ	conv_projr‰   ÚzerosÚclass_tokenr„   Úencoderr…   r   rC   ÚTanhÚheadsrB   r™   rD   Útrunc_normal_rF   ÚmathÚsqrtrG   Úzeros_rš   rH   Úhasattrrœ   Úin_featuresr›   )rI   r’   r“   r†   ri   rj   r7   r8   rk   r”   r•   r&   r–   Úseq_projÚprev_channelsr\   Úconv_stem_layer_configr…   Úheads_layersÚfan_inrK   s                       €r3   r?   zVisionTransformer.__init__£   sX  ø€ ô 	‰ÑÔÜ˜DÔ!Ü�‰�j :Ñ-°Ñ2Ð4\Ô]Ø$ˆŒØ$ˆŒØ$ˆŒØˆŒØ!2ˆÔØˆŒØ&ˆÔØ#6ˆÔ Ø$ˆŒàÐ(ä—}‘}“ˆHØˆMÜ-6Ð7HÓ-Iò DÑ)�Ð)Ø×#Ñ#Ø# A 3Ð'Ü(Ø$1Ø%;×%HÑ%HØ$:×$FÑ$FØ5×<Ñ<Ø#9×#DÑ#DØ)?×)PÑ)Pôô
ð !7× CÑ C‘ðDð ×ÑØœRŸY™Y°=ÈzÐghÔiôð )1ˆD�NäŸY™YØ¨JÀJÐWaôˆDŒNð ! JÑ.°1Ñ4ˆ
ô Ÿ<™<¬¯©°A°q¸*Ó(EÓFˆÔØ�a‰ˆ
äØØØØØØØØó	
ˆŒð %ˆŒä4?³MˆØÐ&Ü#%§9¡9¨Z¸Ó#EˆL˜Ò ä)+¯©°:Ð?RÓ)SˆL˜Ñ&Ü"$§'¡'£)ˆL˜ÑÜ#%§9¡9Ð-@À+Ó#NˆL˜Ñ ä—]‘] <Ó0ˆŒ
ä�d—n‘n¤b§i¡iÔ0à—^‘^×/Ñ/°$·.±.×2LÑ2LÈQÑ2OÑOÐRV×R`ÑR`×RlÑRlÐmnÑRoÑoˆFÜ�G‰G×!Ñ! $§.¡.×"7Ñ"7¼T¿Y¹YÀqÈ6ÁzÓ=RÐ!ÔSØ�~‰~×"Ñ"Ñ.Ü—‘—‘˜tŸ~™~×2Ñ2Ö3Ø�^‰^×%Ñ%Ð1´jÀÇÁ×AYÑAYÔ[]×[dÑ[dÔ6eä�G‰G�O‰OØ—‘×(Ñ(×/Ñ/°c¼t¿y¹yÈÈtÏ~É~×OgÑOg×OtÑOtÑItÓ?uð ô ð �~‰~×'Ñ'×,Ñ,Ð8Ü—‘—‘˜tŸ~™~×7Ñ7×<Ñ<Ô=ä�4—:‘:˜|Ô,´¸D¿J¹J×<QÑ<QÔSU×S\ÑS\Ô1]Ø—Z‘Z×*Ñ*×6Ñ6ˆFÜ�G‰G×!Ñ! $§*¡*×"7Ñ"7×">Ñ">ÄDÇIÁIÈaÐRXÉjÓDYÐ!ÔZÜ�G‰G�N‰N˜4Ÿ:™:×0Ñ0×5Ñ5Ô6ä�d—j‘j—o‘o¤r§y¡yÔ1Ü�G‰G�N‰N˜4Ÿ:™:Ÿ?™?×1Ñ1Ô2Ü�G‰G�N‰N˜4Ÿ:™:Ÿ?™?×/Ñ/Õ0ð 2r2   r|   Úreturnc                 ó¬  — |j                   \  }}}}| j                  }t        j                  || j                  k(  d| j                  › d|› d�«       t        j                  || j                  k(  d| j                  › d|› d�«       ||z  }||z  }| j                  |«      }|j                  || j                  ||z  «      }|j                  ddd«      }|S )NzWrong image height! Expected z	 but got ú!zWrong image width! Expected r   r	   r   )	r{   r“   rx   ry   r’   r¢   Úreshaperj   Úpermute)	rI   r|   ÚnÚcÚhÚwÚpÚn_hÚn_ws	            r3   Ú_process_inputz VisionTransformer._process_input  sÑ   € Ø—W‘W‰
ˆˆ1ˆa�Ø�O‰OˆÜ�‰�a˜4Ÿ?™?Ñ*Ð.KÈDÏOÉOÐK\Ð\eÐfgÐehÐhiÐ,jÔkÜ�‰�a˜4Ÿ?™?Ñ*Ð.JÈ4Ï?É?ÐJ[Ð[dÐefÐdgÐghÐ,iÔjØ�1‰fˆØ�1‰fˆð �N‰N˜1Óˆà�I‰I�a˜Ÿ™¨#°©)Ó4ˆð �I‰I�a˜˜AÓˆàˆr2   c                 ó  — | j                  |«      }|j                  d   }| j                  j                  |dd«      }t	        j
                  ||gd¬«      }| j                  |«      }|d d …df   }| j                  |«      }|S )Nr   éÿÿÿÿr   ©rz   )r¿   r{   r¤   Úexpandrx   Úcatr¥   r§   )rI   r|   r¸   Úbatch_class_tokens       r3   r   zVisionTransformer.forward!  s€   € à×Ñ Ó"ˆØ�G‰G�A‰Jˆð !×,Ñ,×3Ñ3°A°r¸2Ó>ÐÜ�I‰IÐ(¨!Ð,°!Ô4ˆà�L‰L˜‹Oˆð Ša�ˆd‰Gˆà�J‰J�q‹Mˆàˆr2   )r(   r)   r*   r`   r   r-   r�   r+   rb   r   r   rx   r/   Úlistr"   r?   r‚   r¿   r   rc   rd   s   @r3   r   r       sù   ø„ ÙEð Ø#&ØØ-1Ù5<¸R¿\¹\ÈtÔ5TØ<@ñ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ðR §¡ð °·±ó ð*˜Ÿ™÷ r2   r   r“   r†   ri   rj   r7   ÚweightsÚprogressÚkwargsr³   c           
      óh  — |�gt        |dt        |j                  d   «      «       |j                  d   d   |j                  d   d   k(  sJ ‚t        |d|j                  d   d   «       |j                  dd«      }t	        d|| ||||dœ|¤Ž}	|r"|	j                  |j                  |d	¬
«      «       |	S )Nr”   Ú
categoriesÚmin_sizer   r   r’   éà   )r’   r“   r†   ri   rj   r7   T)rÈ   Ú
check_hashr1   )r   ÚlenÚmetarS   r   Úload_state_dictÚget_state_dict)
r“   r†   ri   rj   r7   rÇ   rÈ   rÉ   r’   Úmodels
             r3   Ú_vision_transformerrÔ   4  sÌ   € ð ÐÜ˜f m´S¸¿¹ÀlÑ9SÓ5TÔUØ�|‰|˜JÑ'¨Ñ*¨g¯l©l¸:Ñ.FÀqÑ.IÒIÐIÐIÜ˜f l°G·L±LÀÑ4LÈQÑ4OÔPØ—‘˜L¨#Ó.€Jäð ØØØØØØñð ñ€Eñ Ø×Ñ˜g×4Ñ4¸hÐSWÐ4ÓXÔYà€Lr2   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y!)"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ÚDEFAULTr1   r2   r3   r   r   _  s#  „ ÙØGÙÐ.¸#Ô>ð
Øð
à"Ø"ØfàØ#Ø#ñ ðð Ø!ðò
ô€Mñ, %ØLÙØØØØ+×3Ñ3ô	
ð
Øð
à"Ø"àØ#Ø#ñ ðð Ø!ðò
ôÐñ4 !(ØOÙØØØØ+×3Ñ3ô	
ð
Øð
àCØ"Ø"àØ#Ø#ñ ðð Ø!ðò
ô!Ðð6 �Gr2   r   c                   óX   — 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y)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÷   r1   r2   r3   r   r   ®  s\   „ ÙØGÙÐ.¸#Ô>ð
Øð
à"Ø"ØfàØ#Ø#ñ ðð Ø!ðò
ô€Mð, �Gr2   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y")#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ñ   r1   r2   r3   r   r   È  s%  „ ÙØGÙÐ.¸#È3ÔOð
Øð
à#Ø"ØfàØ#Ø#ñ ðð Ø"ðò
ô€Mñ. %ØLÙØØØØ+×3Ñ3ô	
ð
Øð
à#Ø"àØ#Ø#ñ ðð Ø"ðò
ôÐñ4 !(ØOÙØØØØ+×3Ñ3ô	
ð
Øð
àCØ#Ø"àØ#Ø#ñ ðð Ø"ðò
ô!Ðð6 �Gr2   r   c                   óX   — 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y)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ù   r1   r2   r3   r   r     s\   „ ÙØGÙÐ.¸#Ô>ð
Øð
à#Ø"ØfàØ#Ø"ñ ðð Ø"ðò
ô€Mð, �Gr2   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y)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÷   r1   r2   r3   r   r   2  sÎ   „ Ù$ØLÙØØØØ+×3Ñ3ô	
ð
Øð
à#Ø"àØ#Ø#ñ ðð Ø"ðò
ôÐñ4 !(ØOÙØØØØ+×3Ñ3ô	
ð
Øð
àCØ#Ø"àØ#Ø#ñ ðð Ø"ðò
ô!Ðð6 %�Gr2   r   Ú
pretrained)rÇ   T)rÇ   rÈ   c                 óR   — t         j                  | «      } 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†   ri   rj   r7   rÇ   rÈ   r1   )r   ÚverifyrÔ   ©rÇ   rÈ   rÉ   s      r3   r   r   k  óE   € ô( ×%Ñ% gÓ.€Gäð 	ØØØØØØØñ	ð ñ	ð 	r2   c                 óR   — t         j                  | «      } 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  r1   )r   r  rÔ   r  s      r3   r   r   �  r	  r2   c                 óR   — t         j                  | «      } 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  r1   )r   r  rÔ   r  s      r3   r   r   ¯  óE   € ô( ×%Ñ% gÓ.€Gäð 	ØØØØØØØñ	ð ñ	ð 	r2   c                 óR   — t         j                  | «      } 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  r1   )r   r  rÔ   r  s      r3   r   r   Ñ  r  r2   )r   Nc                 óR   — t         j                  | «      } 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  r1   )r   r  rÔ   r  s      r3   r    r    ó  r  r2   r’   Úmodel_statezOrderedDict[str, torch.Tensor]Úinterpolation_modeÚreset_headsc                 óì  — |d   }|j                   \  }}}|dk7  rt        d|j                   › �«      ‚| |z  dz  dz   }	|	|k7  �r0|dz  }|	dz  }	|dd…dd…dd…f   }
|dd…dd…dd…f   }|j                  ddd«      }t        t	        j
                  |«      «      }||z  |k7  rt        d||z  › d|› �«      ‚|j                  d|||«      }| |z  }t        j                  j                  |||d	¬
«      }|j                  d||	«      }|j                  ddd«      }t        j                  |
|gd¬«      }||d<   |r;t        «       }|j                  «       D ]  \  }}|j                  d«      rŒ|||<   Œ |}|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Úinterpolaterx   rÄ   r   ÚitemsÚ
startswith)r’   r“   r  r  r  r‹   r¸   r…   rj   Ú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                      r3   Úinterpolate_embeddingsr*    sÿ  € ð*  Ð 7Ñ8€MØ -× 3Ñ 3Ñ€A€z�:ØˆA‚vÜÐ@À×ATÑATÐ@UÐVÓWÐWà  JÑ.°1Ñ4°qÑ8€Nð
 ˜Ó#à�a‰ˆ
Ø˜!ÑˆØ+ªA¨r°¨r²1¨HÑ5ÐØ)ª!¨Q©R²¨(Ñ3Ðð .×5Ñ5°a¸¸AÓ>ÐÜœDŸI™I jÓ1Ó2ˆØ˜=Ñ(¨JÒ6ÜØbÐcpð  tAñ  dAð  cCð  CUð  V`ð  Uað  bóð ð
 .×5Ñ5°a¸À]ÐTaÓbÐØ&¨*Ñ4Ðô !#§¡× 9Ñ 9ØØ"Ø#Øð	 !:ó !
Ðð !6× =Ñ =¸aÀÈ^Ó \Ðð !6× =Ñ =¸aÀÀAÓ FÐÜ!ŸI™IÐ':Ð<QÐ&RÐXYÔZÐà/@ˆÐ+Ñ,áÜALÃÐØ#×)Ñ)Ó+ò ,‘��1Ø—|‘| GÕ,Ø*+Ð$ QÒ'ð,ð +ˆKàÐr2   )ÚbicubicF)9r©   Úcollectionsr   Ú	functoolsr   Útypingr   r   r   r   rx   Útorch.nnr-   Úops.miscr
   r   Útransforms._presetsr   r   Úutilsr   Ú_apir   r   r   Ú_metar   Ú_utilsr   r   Ú__all__r"   r5   r/   rf   r„   r   r+   ÚboolrÔ   rÕ   ÚdictÚstrr,   rô   r   r   r   r   r   rò   r   r   r   r   r    r*  r1   r2   r3   ú<module>r:     sh  ðÜ Ý #Ý ß 6Ó 6ã Ý ç 0ß HÝ 'ß 6Ñ 6Ý 'ß Bò€ô9�Zô 9ô+
ˆsô +
ô\!�2—9‘9ô !ôH#9ˆb�i‰iô #9ôLQ˜Ÿ	™	ô QðhØðàðð ðð ð	ð
 ðð �kÑ"ðð ðð ðð óðB Ð&ð €ˆd�3˜�8‰nó ðØðà8ØKòÐ ôL�{ô Lô^�{ô ô4M�{ô Mô`�{ô ô46%�{ô 6%ñr ÓÙ ,Ð0@×0NÑ0NÐ!OÔPØ6:ÈTò ˜Ð"2Ñ3ð Àdð Ð]`ð Ðevò ó Qó ðñ@ ÓÙ ,Ð0@×0NÑ0NÐ!OÔPØ6:ÈTò ˜Ð"2Ñ3ð Àdð Ð]`ð Ðevò ó Qó ðñ@ ÓÙ ,Ð0@×0NÑ0NÐ!OÔPØ6:ÈTò ˜Ð"2Ñ3ð Àdð Ð]`ð Ðevò ó Qó ðñ@ ÓÙ ,Ð0@×0NÑ0NÐ!OÔPØ6:ÈTò ˜Ð"2Ñ3ð Àdð Ð]`ð Ðevò ó Qó ðñ@ ÓÙÐ!5Ô6Ø6:ÈTò ˜Ð"2Ñ3ð Àdð Ð]`ð Ðevò ó 7ó ððH (ØñKØðKàðKð 2ðKð ð	Kð
 ðKð &ôKr2   