Ë
    éÓ^j¯H  ã                   óü  — d Z ddl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ZmZ ddlmZmZmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZ dgZ G d„ dej@                  «      Z! G d„ dejD                  «      Z# G d„ dejD                  «      Z$ G d„ dejD                  «      Z% G d„ dejD                  «      Z&d„ Z'd(d„Z(d)d„Z) e e)d¬«       e)d¬«       e)d¬«       e)d¬«       e)dd¬«       e)dd¬«       e)dd¬«       e)dd¬«      dœ«      Z*ed(de&fd „«       Z+ed(de&fd!„«       Z,ed(de&fd"„«       Z-ed(de&fd#„«       Z.ed(de&fd$„«       Z/ed(de&fd%„«       Z0ed(de&fd&„«       Z1ed(de&fd'„«       Z2y)*a€   Pooling-based Vision Transformer (PiT) in PyTorch

A PyTorch implement of Pooling-based Vision Transformers as described in
'Rethinking Spatial Dimensions of Vision Transformers' - https://arxiv.org/abs/2103.16302

This code was adapted from the original version at https://github.com/naver-ai/pit, original copyright below.

Modifications for timm by / Copyright 2020 Ross Wightman
é    N)Úpartial)ÚListÚOptionalÚSequenceÚTupleÚUnionÚTypeÚAny)Únn©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)Útrunc_normal_Ú	to_2tupleÚcalculate_drop_path_ratesé   )Úbuild_model_with_cfg)Úfeature_take_indices)Úregister_modelÚgenerate_default_cfgs)ÚBlockÚPoolingVisionTransformerc                   ó„   — e Zd ZdZdeej                  ej                  f   deej                  ej                  f   fd„Zy)ÚSequentialTuplezI This module exists to work around torchscript typing issues list -> listÚxÚreturnc                 ó$   — | D ]
  } ||«      }Œ |S ©N© )Úselfr   Úmodules      úZ/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/pit.pyÚforwardzSequentialTuple.forward#   s   € Øò 	ˆFÙ�q“	‰Að	àˆó    N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚTensorr#   r   r$   r"   r   r   !   s?   „ ÙSð˜˜uŸ|™|¨U¯\©\Ð9Ñ:ð ¸uÀUÇ\Á\ÐSX×S_ÑS_ÐE_Ñ?`ô r$   r   c                   óú   ‡ — e Zd Z	 	 	 	 	 	 	 ddededededee   dededeee      d	eee	j                        fˆ fd
„Zdeej                  ej                  f   deej                  ej                  f   fd„Zˆ xZS )ÚTransformerÚbase_dimÚdepthÚheadsÚ	mlp_ratioÚpoolÚ	proj_dropÚ	attn_dropÚdrop_path_probÚ
norm_layerc                 óN  •— |
|dœ}t         ‰| �  «        ||z  }|| _        |	r	 |	|fi |¤Žnt        j                  «       | _        t        j                  t        |«      D �cg c]2  }t        d|||d||||   t        t        j                  d¬«      dœ|¤Ž‘Œ4 c}Ž | _        y c c}w )N©ÚdeviceÚdtypeTç�íµ ÷Æ°>)Úeps)ÚdimÚ	num_headsr0   Úqkv_biasr2   r3   Ú	drop_pathr5   r   )ÚsuperÚ__init__r1   r   ÚIdentityÚnormÚ
SequentialÚranger   r   Ú	LayerNormÚblocks)r    r-   r.   r/   r0   r1   r2   r3   r4   r5   r8   r9   ÚddÚ	embed_dimÚiÚ	__class__s                  €r"   rA   zTransformer.__init__*   sµ   ø€ ð ¨Ñ/ˆÜ‰ÑÔØ˜uÑ$ˆ	àˆŒ	Ù3=‘J˜yÑ/¨BÒ/Ä2Ç;Á;Ã=ˆŒ	Ü—m‘mô ˜5“\ö&#ð ô ð 
ØØØ#ØØ#Ø#Ø(¨Ñ+Ü"¤2§<¡<°TÔ:ñ
ð ó
ò&#ð $ˆ�ùò &#s   Á!7B"r   r   c                 óÂ  — |\  }}|j                   d   }| j                  �| j                  ||«      \  }}|j                   \  }}}}|j                  d«      j                  dd«      }t	        j
                  ||fd¬«      }| j                  |«      }| j                  |«      }|d d …d |…f   }|d d …|d …f   }|j                  dd«      j                  ||||«      }||fS )Nr   é   )r<   )	Úshaper1   ÚflattenÚ	transposer)   ÚcatrC   rG   Úreshape)r    r   Ú
cls_tokensÚtoken_lengthÚBÚCÚHÚWs           r"   r#   zTransformer.forwardL   sá   € Ø‰ˆˆ:Ø!×'Ñ'¨Ñ*ˆØ�9‰9Ð Ø ŸI™I a¨Ó4‰MˆAˆzà—W‘W‰
ˆˆ1ˆa�Ø�I‰I�a‹L×"Ñ" 1 aÓ(ˆÜ�I‰I�z 1�o¨1Ô-ˆà�I‰I�a‹LˆØ�K‰K˜‹Nˆà’q˜-˜<˜-Ð'Ñ(ˆ
ØŠa�‘ÐÑˆØ�K‰K˜˜1Ó×%Ñ% a¨¨A¨qÓ1ˆà�*ˆ}Ðr$   )Nç        rY   NNNN)r%   r&   r'   ÚintÚfloatr   r
   r   r	   r   ÚModulerA   r   r)   r*   r#   Ú__classcell__©rK   s   @r"   r,   r,   )   sÌ   ø„ ð #'Ø!Ø!Ø48Ø48ØØñ $àð $ð ð $ð ð	 $ð
 ð $ð ˜3‘-ð $ð ð $ð ð $ð % T¨%¡[Ñ1ð $ð !  b§i¡i¡Ñ1õ $ðD˜˜uŸ|™|¨U¯\©\Ð9Ñ:ð ¸uÀUÇ\Á\ÐSX×S_ÑS_ÐE_Ñ?`÷ r$   r,   c            	       óv   ‡ — e Zd Z	 	 	 ddedededefˆ fd„Zdeej                  ej                  f   fd„Z	ˆ xZ
S )	ÚPoolingÚ
in_featureÚout_featureÚstrideÚpadding_modec           	      ó´   •— ||dœ}t         ‰| �  «        t        j                  ||f|dz   |dz  |||dœ|¤Ž| _        t        j
                  ||fi |¤Ž| _        y )Nr7   r   rM   )Úkernel_sizeÚpaddingrc   rd   Úgroups)r@   rA   r   ÚConv2dÚconvÚLinearÚfc)	r    ra   rb   rc   rd   r8   r9   rH   rK   s	           €r"   rA   zPooling.__init__a   sq   ø€ ð ¨Ñ/ˆÜ‰ÑÔä—I‘IØØð	
ð  ™
Ø˜a‘KØØ%Øñ	
ð ñ	
ˆŒ	ô —)‘)˜J¨Ñ:°rÑ:ˆ�r$   r   c                 óN   — | j                  |«      }| j                  |«      }||fS r   )rj   rl   )r    r   Ú	cls_tokens      r"   r#   zPooling.forwardy   s'   € Ø�I‰I�a‹LˆØ—G‘G˜IÓ&ˆ	Ø�)ˆ|Ðr$   )ÚzerosNN)r%   r&   r'   rZ   ÚstrrA   r   r)   r*   r#   r]   r^   s   @r"   r`   r`   `   sW   ø„ ð !(ØØñ;àð;ð ð;ð ð	;ð
 õ;ð0 u¨U¯\©\¸5¿<¹<Ð-GÑ'H÷ r$   r`   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 )
ÚConvEmbeddingÚin_channelsÚout_channelsÚimg_sizeÚ
patch_sizerc   rg   c	                 óø  •— ||dœ}	t         ‰
| �  «        |}t        |«      | _        t        |«      | _        t        j                  | j                  d   d|z  z   | j                  d   z
  |z  dz   «      | _        t        j                  | j                  d   d|z  z   | j                  d   z
  |z  dz   «      | _        | j                  | j                  f| _	        t        j                  ||f|||ddœ|	¤Ž| _        y )Nr7   r   rM   r   T)rf   rc   rg   Úbias)r@   rA   r   ru   rv   ÚmathÚfloorÚheightÚwidthÚ	grid_sizer   ri   rj   )r    rs   rt   ru   rv   rc   rg   r8   r9   rH   rK   s             €r"   rA   zConvEmbedding.__init__€   sø   ø€ ð ¨Ñ/ˆÜ‰ÑÔØˆÜ! (Ó+ˆŒÜ# JÓ/ˆŒÜ—j‘j $§-¡-°Ñ"2°Q¸±[Ñ"@À4Ç?Á?ÐSTÑCUÑ"UÐY_Ñ!_ÐbcÑ!cÓdˆŒÜ—Z‘Z §¡¨qÑ!1°A¸±KÑ!?À$Ç/Á/ÐRSÑBTÑ!TÐX^Ñ ^ÐabÑ bÓcˆŒ
ØŸ+™+ t§z¡zÐ2ˆŒä—I‘IØØð
ð #ØØØñ
ð ñ
ˆ�	r$   c                 ó(   — | j                  |«      }|S r   )rj   ©r    r   s     r"   r#   zConvEmbedding.forwardž   s   € Ø�I‰I�a‹LˆØˆr$   )éà   é   é   r   NN)r%   r&   r'   rZ   rA   r#   r]   r^   s   @r"   rr   rr      s[   ø„ ð
  Ø ØØØØñ
àð
ð ð
ð ð	
ð
 ð
ð ð
ð õ
ö<r$   rr   c            #       ó   ‡ — e Zd ZdZ	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d)dededededee   dee   dee   d	ed
ededededededededef"ˆ fd„Z	d„ Z
ej                  j                  d„ «       Zej                  j                  d*d„«       Zej                  j                  d*d„«       Zdej$                  fd„Zd+d
edee   fd„Z	 	 	 	 	 d,dej,                  deeeee   f      dededed edeeej,                     eej,                  eej,                     f   f   fd!„Z	 	 	 d-deeee   f   d"ed#efd$„Zd%„ Zd.d&edej,                  fd'„Zd(„ Zˆ xZS )/r   z¤ Pooling-based Vision Transformer

    A PyTorch implement of 'Rethinking Spatial Dimensions of Vision Transformers'
        - https://arxiv.org/abs/2103.16302
    ru   rv   rc   Ú	stem_typeÚ	base_dimsr.   r/   r0   Únum_classesÚin_chansÚglobal_poolÚ	distilledÚ	drop_rateÚpos_drop_drateÚproj_drop_rateÚattn_drop_rateÚdrop_path_ratec           
      ó  •— t         ‰| �  «        ||dœ}|dv sJ ‚|| _        || _        |d   |d   z  }|	| _        |
| _        || _        |rdnd| _        g | _        t        |
||||fi |¤Ž| _
        t        j                  t        j                  d|| j                  j                  | j                  j                   fi |¤Ž«      | _        t        j                  t        j                  d| j                  |fi |¤Ž«      | _        t        j&                  |¬«      | _        g }t+        ||d¬«      }|}t-        t/        |«      «      D ]w  }d }||   ||   z  }|dkD  rt1        ||fd	di|¤Ž}|t3        ||   ||   ||   |f|||||   d
œ|¤Žgz  }|}| xj                  t5        ||dz
  d|z  z  d|› �¬«      gz  c_        Œy t7        |Ž | _        t        j:                  |d   |d   z  fddi|¤Ž| _        |x| _        x| _         | _!        t        j&                  |«      | _"        |	dkD  r!t        jF                  | jB                  |	fi |¤Žnt        jH                  «       | _%        d | _&        |rI|	dkD  r+t        jF                  | jB                  | j                  fi |¤Žnt        jH                  «       | _&        d| _'        tQ        | j"                  d¬«       tQ        | j$                  d¬«       | jS                  | jT                  «       y )Nr7   )Útokenr   rM   r   )ÚpT)Ú	stagewiserc   )r1   r2   r3   r4   útransformers.)Únum_chsÚ	reductionr!   éÿÿÿÿr;   r:   Fg{®Gáz”?)Ústd)+r@   rA   r…   r/   r†   r‡   rˆ   Ú
num_tokensÚfeature_inforr   Úpatch_embedr   Ú	Parameterr)   Úrandnr{   r|   Ú	pos_embedrn   ÚDropoutÚpos_dropr   rE   Úlenr`   r,   Údictr   ÚtransformersrF   rC   Únum_featuresÚhead_hidden_sizerI   Ú	head_droprk   rB   ÚheadÚ	head_distÚdistilled_trainingr   ÚapplyÚ_init_weights)r    ru   rv   rc   r„   r…   r.   r/   r0   r†   r‡   rˆ   r‰   rŠ   r‹   rŒ   r�   rŽ   r8   r9   rH   rI   r¢   ÚdprÚprev_dimrJ   r1   rK   s                              €r"   rA   z!PoolingVisionTransformer.__init__©   s  ø€ ô, 	‰ÑÔØ¨Ñ/ˆØ˜jÑ(Ð(Ð(à"ˆŒØˆŒ
Ø˜a‘L 5¨¡8Ñ+ˆ	Ø&ˆÔØ ˆŒØ&ˆÔÙ(™!¨aˆŒØˆÔä(¨°9¸hÈ
ÐTZÑaÐ^`ÑaˆÔÜŸ™¤e§k¡k°!°YÀ×@PÑ@P×@WÑ@WÐY]×YiÑYi×YoÑYoÑ&vÐsuÑ&vÓwˆŒÜŸ™¤e§k¡k°!°T·_±_ÀiÑ&VÐSUÑ&VÓWˆŒÜŸ
™
 ^Ô4ˆŒàˆä'¨¸ÈÔNˆØˆÜ”s˜5“zÓ"ò 	uˆAØˆDØ! !™ u¨Q¡xÑ/ˆIØ�1ŠuÜØØñð ðð ñ	�ð œ[Ø˜!‘Ø�a‘Ø�a‘Øð	
ð
 Ø(Ø(Ø" 1™vñ
ð ñ
ð 
ñ 
ˆLð !ˆHØ×Ò¤$¨xÀFÈQÁJÐRSÐUVÑRVÑCVÐanÐopÐnqÐ_rÔ"sÐ!tÑtÖð-	uô0 ,¨\Ð:ˆÔÜ—L‘L ¨2¡°°r±Ñ!:ÑKÀÐKÈÑKˆŒ	ØENÐNˆÔÐN˜DÔ1°D´Nô Ÿ™ IÓ.ˆŒØDOÐRSÂO”B—I‘I˜dŸn™n¨kÑ@¸RÒ@ÔY[×YdÑYdÓYfˆŒ	ØˆŒÙØR]Ð`aÒRaœRŸY™Y t§~¡~°t×7GÑ7GÑNÈ2ÒNÔgi×grÑgrÓgtˆDŒNØ"'ˆÔä�d—n‘n¨#Õ.Ü�d—n‘n¨#Õ.Ø�
‰
�4×%Ñ%Õ&r$   c                 óâ   — t        |t        j                  «      rUt        j                  j	                  |j
                  d«       t        j                  j	                  |j                  d«       y y )Nr   g      ð?)Ú
isinstancer   rF   ÚinitÚ	constant_rx   Úweight)r    Úms     r"   rª   z&PoolingVisionTransformer._init_weightsý   sE   € Ü�aœŸ™Ô&Ü�G‰G×Ñ˜aŸf™f aÔ(Ü�G‰G×Ñ˜aŸh™h¨Õ,ð 'r$   c                 ó
   — ddhS )Nr�   rn   r   ©r    s    r"   Úno_weight_decayz(PoolingVisionTransformer.no_weight_decay  s   € à˜[Ð)Ð)r$   c                 ó   — || _         y r   )r¨   ©r    Úenables     r"   Úset_distilled_trainingz/PoolingVisionTransformer.set_distilled_training  s
   € à"(ˆÕr$   c                 ó   — |rJ d«       ‚y )Nz$gradient checkpointing not supportedr   r·   s     r"   Úset_grad_checkpointingz/PoolingVisionTransformer.set_grad_checkpointing
  s   € áÐAÐAÓAˆz�6r$   r   c                 ób   — | j                   �| j                  | j                   fS | j                  S r   )r§   r¦   r´   s    r"   Úget_classifierz'PoolingVisionTransformer.get_classifier  s)   € Ø�>‰>Ð%Ø—9‘9˜dŸn™nÐ,Ð,à—9‘9Ðr$   c                 ó6  — || _         |�|| _        t        | j                  d«      r | j                  j                  j
                  nd }t        | j                  d«      r | j                  j                  j                  nd }|dkD  r#t        j                  | j                  |||¬«      nt        j                  «       | _        | j                  �L|dkD  r-t        j                  | j                  | j                   ||¬«      nt        j                  «       | _        y y )Nr±   r   r7   )r†   rˆ   Úhasattrr¦   r±   r8   r9   r   rk   rI   rB   r§   )r    r†   rˆ   r8   r9   s        r"   Úreset_classifierz)PoolingVisionTransformer.reset_classifier  sà   € Ø&ˆÔØÐ"Ø*ˆDÔÜ,3°D·I±I¸xÔ,H�—‘×!Ñ!×(Ò(ÈdˆÜ*1°$·)±)¸XÔ*F�—	‘	× Ñ ×&Ò&ÈDˆØZeÐhiÒZi”B—I‘I˜dŸn™n¨kÀ&ÐPUÕVÔoq×ozÑozÓo|ˆŒ	Ø�>‰>Ð%ØhsÐvwÒhwœRŸY™Y t§~¡~°t×7GÑ7GÐPVÐ^cÕdÔ}÷  ~Iñ  ~Ió  ~KˆD�Nð &r$   r   ÚindicesrC   Ú
stop_earlyÚ
output_fmtÚintermediates_onlyc                 óh  — |dv sJ d«       ‚g }t        t        | j                  «      |«      \  }}	| j                  |«      }| j	                  || j
                  z   «      }| j                  j                  |j                  d   dd«      }
t        | j                  «      dz
  }t        j                  j                  «       s|s| j                  }n| j                  d|	dz    }t        |«      D ](  \  }} |||
f«      \  }}
||v sŒ|j                  |«       Œ* |r|S |k(  r| j                  |
«      }
|
|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.r   r–   r   N)r   r    r¢   rš   rŸ   r�   rn   ÚexpandrN   r)   ÚjitÚis_scriptingÚ	enumerateÚappendrC   )r    r   rÁ   rC   rÂ   rÃ   rÄ   ÚintermediatesÚtake_indicesÚ	max_indexrS   Úlast_idxÚstagesÚfeat_idxÚstages                  r"   Úforward_intermediatesz.PoolingVisionTransformer.forward_intermediates  s6  € ð* ˜YÑ&ÐDÐ(DÓDÐ&ØˆÜ"6´s¸4×;LÑ;LÓ7MÈwÓ"WÑˆ�ið ×Ñ˜QÓˆØ�M‰M˜!˜dŸn™nÑ,Ó-ˆØ—^‘^×*Ñ*¨1¯7©7°1©:°r¸2Ó>ˆ
ä�t×(Ñ(Ó)¨AÑ-ˆÜ�9‰9×!Ñ!Ô#©:Ø×&Ñ&‰Fà×&Ñ& ~¨	°A©Ð6ˆFä(¨Ó0ò 	(‰OˆH�eÙ! 1 j /Ó2‰MˆAˆzØ˜<Ò'Ø×$Ñ$ QÕ'ð	(ñ
 Ø Ð à�xÒØŸ™ :Ó.ˆJà˜=Ð(Ð(r$   Ú
prune_normÚ
prune_headc                 óÖ   — t        t        | j                  «      |«      \  }}| j                  d|dz    | _        |rt        j                  «       | _        |r| j                  dd«       |S )z@ Prune layers not required for specified intermediates.
        Nr   r   Ú )r   r    r¢   r   rB   rC   rÀ   )r    rÁ   rÔ   rÕ   rÍ   rÎ   s         r"   Úprune_intermediate_layersz2PoolingVisionTransformer.prune_intermediate_layersO  sb   € ô #7´s¸4×;LÑ;LÓ7MÈwÓ"WÑˆ�iØ ×-Ñ-¨n¨y¸1©}Ð=ˆÔÙÜŸ™›ˆDŒIÙØ×!Ñ! ! RÔ(ØÐr$   c                 ó  — | j                  |«      }| j                  || j                  z   «      }| j                  j	                  |j
                  d   dd«      }| j                  ||f«      \  }}| j                  |«      }|S )Nr   r–   )rš   rŸ   r�   rn   rÇ   rN   r¢   rC   )r    r   rS   s      r"   Úforward_featuresz)PoolingVisionTransformer.forward_features_  su   € Ø×Ñ˜QÓˆØ�M‰M˜!˜dŸn™nÑ,Ó-ˆØ—^‘^×*Ñ*¨1¯7©7°1©:°r¸2Ó>ˆ
Ø×)Ñ)¨1¨j¨/Ó:‰ˆˆ:Ø—Y‘Y˜zÓ*ˆ
ØÐr$   Ú
pre_logitsc                 óì  — | j                   �«| j                  dk(  sJ ‚|d d …df   |d d …df   }}| j                  |«      }| j                  |«      }|s"| j                  |«      }| j                  |«      }| j                  r.| j
                  r"t        j                  j                  «       s||fS ||z   dz  S | j                  dk(  r	|d d …df   }| j                  |«      }|s| j                  |«      }|S )Nr�   r   r   rM   )	r§   rˆ   r¥   r¦   r¨   Útrainingr)   rÈ   rÉ   )r    r   rÛ   Úx_dists       r"   Úforward_headz%PoolingVisionTransformer.forward_headg  sê   € Ø�>‰>Ð%Ø×#Ñ# wÒ.Ð.Ð.Øš!˜Q˜$™ ¢1 a 4¡ˆvˆAØ—‘˜qÓ!ˆAØ—^‘^ FÓ+ˆFÙØ—I‘I˜a“L�ØŸ™¨Ó/�Ø×&Ò&¨4¯=ª=ÄÇÁ×AWÑAWÔAYà˜&�yÐ ð ˜F™
 aÑ'Ð'à×Ñ 7Ò*Ø’a˜�d‘G�Ø—‘˜qÓ!ˆAÙØ—I‘I˜a“L�ØˆHr$   c                 óJ   — | j                  |«      }| j                  |«      }|S r   )rÚ   rß   r   s     r"   r#   z PoolingVisionTransformer.forward~  s'   € Ø×!Ñ! !Ó$ˆØ×Ñ˜aÓ ˆØˆr$   )r€   r�   r‚   Úoverlap©é0   rã   rã   ©rM   é   é   ©rM   ræ   r‚   ræ   éè  é   r�   FrY   rY   rY   rY   rY   NN)Tr   )NFFrÆ   F)r   FT©F) r%   r&   r'   r(   rZ   rp   r   r[   ÚboolrA   rª   r)   rÈ   Úignorerµ   r¹   r»   r   r\   r½   r   rÀ   r*   r   r   r   rÓ   rØ   rÚ   rß   r#   r]   r^   s   @r"   r   r   £   s�  ø„ ñð  Ø ØØ&Ø'3Ø#,Ø#,Ø Ø#ØØ&Ø#Ø!Ø$&Ø$&Ø$&Ø$&ØØñ)R'àðR'ð ðR'ð ð	R'ð
 ðR'ð   ‘}ðR'ð ˜C‘=ðR'ð ˜C‘=ðR'ð ðR'ð ðR'ð ðR'ð ðR'ð ðR'ð ðR'ð "ðR'ð  "ð!R'ð" "ð#R'ð$ "õ%R'òh-ð
 ‡Y�Y×Ññ*ó ð*ð ‡Y�Y×Ñò)ó ð)ð ‡Y�Y×ÑòBó ðBð §	¡	ó ñK¨Cð K¸hÀs¹mó Kð 8<ØØ$Ø$Ø',ñ/)à�|‰|ð/)ð ˜e C¨¨c© NÑ3Ñ4ð/)ð ð	/)ð
 ð/)ð ð/)ð !%ð/)ð 
ˆt�E—L‘LÑ! 5¨¯©°t¸E¿L¹LÑ7IÐ)IÑ#JÐJÑ	Kó/)ðf ./Ø$Ø#ñ	à˜3  S¡	˜>Ñ*ðð ðð ó	ò ñ¨$ð ¸5¿<¹<ó ö.r$   c                 ó”   — i }t        j                  d«      }| j                  «       D ]  \  }}|j                  d„ |«      }|||<   Œ |S )z preprocess checkpoints zpools\.(\d)\.c                 óD   — dt        | j                  d«      «      dz   › d�S )Nr“   r   z.pool.)rZ   Úgroup)Úexps    r"   ú<lambda>z&checkpoint_filter_fn.<locals>.<lambda>�  s"   €  }´S¸¿¹À1»Ó5FÈÑ5JÐ4KÈ6Ð%R€ r$   )ÚreÚcompileÚitemsÚsub)Ú
state_dictÚmodelÚout_dictÚp_blocksÚkÚvs         r"   Úcheckpoint_filter_fnrü   „  sV   € à€HÜ�z‰zÐ*Ó+€HØ× Ñ Ó"ò ‰ˆˆ1ð
 �L‰LÑRÐTUÓVˆØˆ�Šðð €Or$   c                 óš   — t        t        d«      «      }|j                  d|«      }t        t        | |ft
        t        d|¬«      dœ|¤Ž}|S )Nré   Úout_indicesÚhook)Úfeature_clsrþ   )Úpretrained_filter_fnÚfeature_cfg)ÚtuplerE   Úpopr   r   rü   r¡   )ÚvariantÚ
pretrainedÚkwargsÚdefault_out_indicesrþ   r÷   s         r"   Ú_create_pitr	  ’  sY   € Ü¤ a£›/ÐØ—*‘*˜]Ð,?Ó@€Kä Ü ØØðô 2Ü V¸ÔEñð ñ€Eð €Lr$   c                 ó4   — | ddd dddt         t        dddd	œ|¥S )
Nrè   )ré   r€   r€   gÍÌÌÌÌÌì?ÚbicubicTzpatch_embed.convr¦   z
apache-2.0)Úurlr†   Ú
input_sizeÚ	pool_sizeÚcrop_pctÚinterpolationÚfixed_input_sizeÚmeanr—   Ú
first_convÚ
classifierÚlicenser   )r  r  s     r"   Ú_cfgr  ¡  s5   € àØ¨=ÀtØ¨ÈÜ%Ô.BØ(¸Øñð ðð r$   ztimm/)Ú	hf_hub_id)r¦   r§   )r  r  )zpit_ti_224.in1kzpit_xs_224.in1kzpit_s_224.in1kzpit_b_224.in1kzpit_ti_distilled_224.in1kzpit_xs_distilled_224.in1kzpit_s_distilled_224.in1kzpit_b_distilled_224.in1kr   c           	      ó^   — t        ddg d¢g d¢g d¢d¬«      }t        d| fi t        |fi |¤Ž¤ŽS )	Né   é   ©é@   r  r  ©ré   rå   ræ   ©ræ   r‚   r�   ræ   ©rv   rc   r…   r.   r/   r0   Ú	pit_b_224©r¡   r	  ©r  r  Ú
model_argss      r"   r   r   Â  ó<   € äØØÚÚÚØô€Jô �{ JÑM´$°zÑ2LÀVÑ2LÑMÐMr$   c           	      ó^   — t        ddg d¢g d¢g d¢d¬«      }t        d| fi t        |fi |¤Ž¤ŽS )	Nr�   r‚   râ   rä   ©ré   rå   é   ræ   r  Ú	pit_s_224r!  r"  s      r"   r(  r(  Ï  r$  r$   c           	      ó^   — t        ddg d¢g d¢g d¢d¬«      }t        d| fi t        |fi |¤Ž¤ŽS )	Nr�   r‚   râ   rä   rç   ræ   r  Ú
pit_xs_224r!  r"  s      r"   r*  r*  Ü  ó<   € äØØÚÚÚØô€Jô �| ZÑN´4¸
Ñ3MÀfÑ3MÑNÐNr$   c           	      ó^   — t        ddg d¢g d¢g d¢d¬«      }t        d| fi t        |fi |¤Ž¤ŽS )	Nr�   r‚   ©é    r.  r.  rä   rç   ræ   r  Ú
pit_ti_224r!  r"  s      r"   r/  r/  é  r+  r$   c           	      ó`   — t        ddg d¢g d¢g d¢dd¬«      }t        d	| fi t        |fi |¤Ž¤ŽS )
Nr  r  r  r  r  ræ   T©rv   rc   r…   r.   r/   r0   r‰   Úpit_b_distilled_224r!  r"  s      r"   r2  r2  ö  ó@   € äØØÚÚÚØØô€Jô Ð,¨jÑW¼DÀÑ<VÈvÑ<VÑWÐWr$   c           	      ó`   — t        ddg d¢g d¢g d¢dd¬«      }t        d	| fi t        |fi |¤Ž¤ŽS )
Nr�   r‚   râ   rä   r&  ræ   Tr1  Úpit_s_distilled_224r!  r"  s      r"   r5  r5    r3  r$   c           	      ó`   — t        ddg d¢g d¢g d¢dd¬«      }t        d	| fi t        |fi |¤Ž¤ŽS )
Nr�   r‚   râ   rä   rç   ræ   Tr1  Úpit_xs_distilled_224r!  r"  s      r"   r7  r7    óA   € äØØÚÚÚØØô€Jô Ð-¨zÑX¼TÀ*Ñ=WÐPVÑ=WÑXÐXr$   c           	      ó`   — t        ddg d¢g d¢g d¢dd¬«      }t        d	| fi t        |fi |¤Ž¤ŽS )
Nr�   r‚   r-  rä   rç   ræ   Tr1  Úpit_ti_distilled_224r!  r"  s      r"   r:  r:     r8  r$   rê   )r×   )3r(   ry   rò   Ú	functoolsr   Útypingr   r   r   r   r   r	   r
   r)   r   Ú	timm.datar   r   Útimm.layersr   r   r   Ú_builderr   Ú	_featuresr   Ú	_registryr   r   Úvision_transformerr   Ú__all__rD   r   r\   r,   r`   rr   r   rü   r	  r  Údefault_cfgsr   r(  r*  r/  r2  r5  r7  r:  r   r$   r"   ú<module>rE     s  ðñó Û 	Ý ß D× DÑ Dã Ý ç Aß KÑ KÝ *Ý +ß <Ý %ð &Ð
&€ô�b—m‘mô ô4�"—)‘)ô 4ônˆb�i‰iô ô>!�B—I‘Iô !ôH^˜rŸy™yô ^òBóó	ñ %á gÔ.Ù gÔ.Ù WÔ-Ù WÔ-Ù!%ØØ(ô"*ñ "&ØØ(ô"*ñ !%ØØ(ô!*ñ !%ØØ(ô!*ñ&ó €ð* ñ	NÐ-Eò 	Nó ð	Nð ñ	NÐ-Eò 	Nó ð	Nð ñ	OÐ.Fò 	Oó ð	Oð ñ	OÐ.Fò 	Oó ð	Oð ñ
XÐ7Oò 
Xó ð
Xð ñ
XÐ7Oò 
Xó ð
Xð ñ
YÐ8Pò 
Yó ð
Yð ñ
YÐ8Pò 
Yó ñ
Yr$   