U
    ¯Ê¹jc`  ã                   @   s   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	 zddlm
Z
 W n  ek
rh   ddlm
Z
 Y nX ddlZddlmZ ddlmZ ddlmZ ddlmZmZ dd	lmZmZmZmZmZmZmZ d
dlm Z  d
dl!m"Z" d
dl#m$Z$m%Z% d
dl&m'Z' dgZ(e )e*¡Z+G dd„ dej,ƒZ-G dd„ dej,ƒZ.G dd„ dej,ƒZ/G dd„ dej,ƒZ0G dd„ dej,ƒZ1dJdd„Z2dKdd„Z3e$e3dd d!d"�e3dd#d$�e3d%d d&�e3d'd d&�e3d(d d&�e3d)d d&�e3d*d d&�e3d+d d&�e3ƒ e3d,d d&�e3ƒ e3d-d d&�e3ƒ d.œƒZ4e%dLe1d/œd0d1„ƒZ5e%dMe1d/œd2d3„ƒZ6e%dNe1d/œd4d5„ƒZ7e%dOe1d/œd6d7„ƒZ8e%dPe1d/œd8d9„ƒZ9e%dQe1d/œd:d;„ƒZ:e%dRe1d/œd<d=„ƒZ;e%dSe1d/œd>d?„ƒZ<e%dTe1d/œd@dA„ƒZ=e%dUe1d/œdBdC„ƒZ>e%dVe1d/œdDdE„ƒZ?e%dWe1d/œdFdG„ƒZ@e%dXe1d/œdHdI„ƒZAdS )Yz¦ Relative Position Vision Transformer (ViT) in PyTorch

NOTE: these models are experimental / WIP, expect changes

Hacked together by / Copyright 2022, Ross Wightman
é    N)Úpartial)ÚOptionalÚTupleÚTypeÚUnion)ÚLiteral)ÚFinal)Ú
checkpoint©ÚIMAGENET_INCEPTION_MEANÚIMAGENET_INCEPTION_STD)Ú
PatchEmbedÚMlpÚDropPathÚ	RelPosMlpÚ
RelPosBiasÚuse_fused_attnÚ	LayerTypeé   )Úbuild_model_with_cfg)Únamed_apply)Úgenerate_default_cfgsÚregister_model)Úget_init_weights_vitÚVisionTransformerRelPosc                       sR   e Zd ZU ee ed< ddddddejf‡ fdd„	Zde	e
j dœd	d
„Z‡  ZS )ÚRelPosAttentionÚ
fused_attné   FNç        c	           	         sÆ   t ƒ  ¡  || dkstdƒ‚|| _|| | _| jd | _tƒ | _tj	||d |d�| _
|rf|| jƒnt ¡ | _|r~|| jƒnt ¡ | _|r–||d�nd | _t |¡| _t 	||¡| _t |¡| _d S )Nr   z$dim should be divisible by num_headsg      à¿é   )Zbias©Ú	num_heads)ÚsuperÚ__init__ÚAssertionErrorr!   Úhead_dimÚscaler   r   ÚnnÚLinearÚqkvÚIdentityÚq_normÚk_normÚrel_posÚDropoutÚ	attn_dropÚprojÚ	proj_drop)	ÚselfÚdimr!   Úqkv_biasÚqk_normÚrel_pos_clsr/   r1   Ú
norm_layer©Ú	__class__© úd/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/models/vision_transformer_relpos.pyr#   %   s    

zRelPosAttention.__init__©Úshared_rel_posc                 C   s@  |j \}}}|  |¡ ||d| j| j¡ ddddd¡}| d¡\}}}	|  |¡}|  |¡}| j	r°| j
d k	rv| j
 ¡ }
n|d k	r„|}
nd }
tjjj|||	|
| jr¦| jjndd�}nb|| j }|| dd	¡ }| j
d k	rä| j
||d
�}n|d k	rô|| }|jd	d�}|  |¡}||	 }| dd¡ |||¡}|  |¡}|  |¡}|S )Nr   é   r   r   é   r   )Z	attn_maskZ	dropout_péþÿÿÿéÿÿÿÿr<   ©r3   )Úshaper)   Zreshaper!   r%   ZpermuteZunbindr+   r,   r   r-   Úget_biasÚtorchr'   Z
functionalZscaled_dot_product_attentionZtrainingr/   Úpr&   Z	transposeZsoftmaxr0   r1   )r2   Úxr=   ÚBÚNÚCr)   ÚqÚkÚvZ	attn_biasÚattnr:   r:   r;   Úforward?   s>    *


  ý




zRelPosAttention.forward)N)Ú__name__Ú
__module__Ú__qualname__r   ÚboolÚ__annotations__r'   Ú	LayerNormr#   r   rE   ÚTensorrO   Ú__classcell__r:   r:   r8   r;   r   "   s   
÷r   c                       s&   e Zd Zd‡ fdd„	Zdd„ Z‡  ZS )Ú
LayerScaleçñhãˆµøä>Fc                    s*   t ƒ  ¡  || _t |t |¡ ¡| _d S ©N)r"   r#   Úinplacer'   Ú	ParameterrE   ZonesÚgamma)r2   r3   Úinit_valuesr[   r8   r:   r;   r#   e   s    
zLayerScale.__init__c                 C   s   | j r| | j¡S || j S rZ   )r[   Zmul_r]   ©r2   rG   r:   r:   r;   rO   j   s    zLayerScale.forward)rY   F)rP   rQ   rR   r#   rO   rW   r:   r:   r8   r;   rX   d   s   rX   c                
       sL   e Zd Zddddddddejejf
‡ fdd„	Zd
eej	 dœdd	„Z
‡  ZS )ÚRelPosBlockç      @FNr   c              	      s¼   t ƒ  ¡  ||ƒ| _t||||||	|d�| _|r<t||d�nt ¡ | _|
dkrVt	|
ƒnt ¡ | _
||ƒ| _t|t|| ƒ||d�| _|r”t||d�nt ¡ | _|
dkr®t	|
ƒnt ¡ | _d S )N©r4   r5   r6   r/   r1   )r^   r   ©Zin_featuresZhidden_featuresÚ	act_layerZdrop)r"   r#   Únorm1r   rN   rX   r'   r*   Úls1r   Ú
drop_path1Únorm2r   ÚintÚmlpÚls2Ú
drop_path2©r2   r3   r!   Ú	mlp_ratior4   r5   r6   r^   r1   r/   Ú	drop_pathrd   r7   r8   r:   r;   r#   p   s,    

ù	

üzRelPosBlock.__init__r<   c              
   C   sH   ||   |  | j|  |¡|d�¡¡ }||  |  |  |  |¡¡¡¡ }|S ©Nr<   )rg   rf   rN   re   rl   rk   rj   rh   ©r2   rG   r=   r:   r:   r;   rO   ˜   s    $ zRelPosBlock.forward)N)rP   rQ   rR   r'   ÚGELUrU   r#   r   rE   rV   rO   rW   r:   r:   r8   r;   r`   n   s   ó(r`   c                
       sT   e Zd Zddddddddejejf
‡ fdd„	Zdd„ Zdee	j
 d	œd
d„Z‡  ZS )ÚResPostRelPosBlockra   FNr   c              	      s–   t ƒ  ¡  || _t||||||	|d�| _||ƒ| _|
dkrBt|
ƒnt ¡ | _	t
|t|| ƒ||d�| _||ƒ| _|
dkr€t|
ƒnt ¡ | _|  ¡  d S )Nrb   r   rc   )r"   r#   r^   r   rN   re   r   r'   r*   rg   r   ri   rj   rh   rl   Úinit_weightsrm   r8   r:   r;   r#       s,    
ù	

ü
zResPostRelPosBlock.__init__c                 C   s6   | j d k	r2tj | jj| j ¡ tj | jj| j ¡ d S rZ   )r^   r'   ÚinitZ	constant_re   Úweightrh   ©r2   r:   r:   r;   rt   É   s    
zResPostRelPosBlock.init_weightsr<   c              	   C   s<   ||   |  | j||d�¡¡ }||  |  |  |¡¡¡ }|S rp   )rg   re   rN   rl   rh   rj   rq   r:   r:   r;   rO   Ï   s    zResPostRelPosBlock.forward)N)rP   rQ   rR   r'   rr   rU   r#   rt   r   rE   rV   rO   rW   r:   r:   r8   r;   rs   ž   s   ó)rs   c                       s\  e Zd ZdZddddddddd	d
dddddddddddddeddefeeeeef f eeeeef f eee	d eeee
eeee
 eeeee ee
e
e
e
e	d eeej ee ee eej dœ‡ fdd„Zd-dd„Zdd„ Zejjdd„ ƒZejjd.dd„ƒZejjd/dd „ƒZejjd!d"„ ƒZd0ed#œd$d%„Zd&d'„ Zd1ed(œd)d*„Zd+d,„ Z‡  Z S )2r   ah   Vision Transformer w/ Relative Position Bias

    Differing from classic vit, this impl
      * uses relative position index (swin v1 / beit) or relative log coord + mlp (swin v2) pos embed
      * defaults to no class token (can be enabled)
      * defaults to global avg pool for head (can be changed)
      * layer-scale (residual branch gain) enabled
    éà   é   r   éè  Úavgé   é   ra   TFç�íµ ÷Æ°>rj   Nr   Úskip)Ú r{   ÚtokenÚmap)r   ÚjaxÚmocor€   )Úimg_sizeÚ
patch_sizeÚin_chansÚnum_classesÚglobal_poolÚ	embed_dimÚdepthr!   rn   r4   r5   r^   Úclass_tokenÚfc_normÚrel_pos_typeÚrel_pos_dimr=   Ú	drop_rateÚproj_drop_rateÚattn_drop_rateÚdrop_path_rateÚweight_initÚfix_initÚembed_layerr7   rd   Úblock_fnc                    sä  t ƒ  ¡  |dkst‚|s&|dks&t‚ˆp6ttjdd�‰ˆ p@tj‰ || _|| _ˆ | _	| _
|rbdnd| _d| _||||ˆd�| _| jj}t|| jd	�}| d
¡rÊ|r¬||d< d|kr¼d|d< ttf|Ž‰nttf|Ž‰d| _|rðˆˆd�| _d‰|�rt t d| jˆ¡¡nd| _dd„ t d||¡D ƒ‰t ‡ ‡‡‡‡‡‡‡‡‡	‡
‡‡fdd„t|ƒD ƒ¡| _|�snˆˆƒnt ¡ | _|�r†ˆˆƒnt ¡ | _t |¡| _ |dk�r´t !| j
|¡nt ¡ | _"|dk�rÒ|  #|¡ |�rà|  $¡  dS )aE  
        Args:
            img_size: input image size
            patch_size: patch size
            in_chans: number of input channels
            num_classes: number of classes for classification head
            global_pool: type of global pooling for final sequence (default: 'avg')
            embed_dim: embedding dimension
            depth: depth of transformer
            num_heads: number of attention heads
            mlp_ratio: ratio of mlp hidden dim to embedding dim
            qkv_bias: enable bias for qkv if True
            qk_norm: Enable normalization of query and key in attention
            init_values: layer-scale init values
            class_token: use class token (default: False)
            fc_norm: use pre classifier norm instead of pre-pool
            rel_pos_type: type of relative position
            shared_rel_pos: share relative pos across all blocks
            drop_rate: dropout rate
            proj_drop_rate: projection dropout rate
            attn_drop_rate: attention dropout rate
            drop_path_rate: stochastic depth rate
            weight_init: weight init scheme
            fix_init: apply weight initialization fix (scaling w/ layer index)
            embed_layer: patch embedding layer
            norm_layer: normalization layer
            act_layer: MLP activation layer
        ©r€   r{   r�   r�   r~   )Úepsr   r   F)r…   r†   r‡   rŠ   )Zwindow_sizeZprefix_tokensrj   Z
hidden_dimZswinÚmodeNr    c                 S   s   g | ]}|  ¡ ‘qS r:   )Úitem)Ú.0rG   r:   r:   r;   Ú
<listcomp>>  s     z4VisionTransformerRelPos.__init__.<locals>.<listcomp>c                    s0   g | ](}ˆˆˆˆˆˆ
ˆˆˆ	ˆˆ| ˆˆ d �‘qS ))r3   r!   rn   r4   r5   r6   r^   r1   r/   ro   r7   rd   r:   )rœ   Úi©rd   r’   r—   ZdprrŠ   r^   rn   r7   r!   r‘   r5   r4   r6   r:   r;   r�   ?  s   òôr   )%r"   r#   r$   r   r'   rU   rr   rˆ   r‰   Znum_featuresrŠ   Únum_prefix_tokensÚgrad_checkpointingÚpatch_embedZ	grid_sizeÚdictÚ
startswithr   r   r=   r\   rE   ZzerosÚ	cls_tokenZlinspaceZ
ModuleListÚrangeÚblocksr*   Únormr�   r.   Ú	head_dropr(   Úheadrt   Úfix_init_weight)r2   r…   r†   r‡   rˆ   r‰   rŠ   r‹   r!   rn   r4   r5   r^   rŒ   r�   rŽ   r�   r=   r�   r‘   r’   r“   r”   r•   r–   r7   rd   r—   Z	feat_sizeZrel_pos_argsr8   rŸ   r;   r#   ß   sT    :

ü
"&ñ
"

z VisionTransformerRelPos.__init__r€   c                 C   s:   |dkst ‚| jd k	r(tjj| jdd� tt|ƒ| ƒ d S )N)rƒ   r„   r€   r~   )Ústd)r$   r¥   r'   ru   Znormal_r   r   )r2   rš   r:   r:   r;   rt   [  s    
z$VisionTransformerRelPos.init_weightsc                 C   sL   dd„ }t | jƒD ]4\}}||jjjj|d ƒ ||jjjj|d ƒ qd S )Nc                 S   s   |   t d| ¡¡ d S )Ng       @)Zdiv_ÚmathÚsqrt)ÚparamZ	_layer_idr:   r:   r;   Úrescaleb  s    z8VisionTransformerRelPos.fix_init_weight.<locals>.rescaler   )Ú	enumerater§   rN   r0   rv   Údatarj   Zfc2)r2   r°   Zlayer_idÚlayerr:   r:   r;   r«   a  s    z'VisionTransformerRelPos.fix_init_weightc                 C   s   dhS )Nr¥   r:   rw   r:   r:   r;   Úno_weight_decayi  s    z'VisionTransformerRelPos.no_weight_decayc                 C   s   t dddgd�S )Nz^cls_token|patch_embed)z^blocks\.(\d+)N)z^norm)iŸ† )Ústemr§   )r£   )r2   Zcoarser:   r:   r;   Úgroup_matcherm  s    þz%VisionTransformerRelPos.group_matcherc                 C   s
   || _ d S rZ   )r¡   )r2   Úenabler:   r:   r;   Úset_grad_checkpointingt  s    z.VisionTransformerRelPos.set_grad_checkpointingc                 C   s   | j S rZ   )rª   rw   r:   r:   r;   Úget_classifierx  s    z&VisionTransformerRelPos.get_classifier)rˆ   c                 C   sD   || _ |d k	r |dkst‚|| _|dkr6t | j|¡nt ¡ | _d S )Nr˜   r   )rˆ   r$   r‰   r'   r(   rŠ   r*   rª   )r2   rˆ   r‰   r:   r:   r;   Úreset_classifier|  s
    z(VisionTransformerRelPos.reset_classifierc                 C   s–   |   |¡}| jd k	r8tj| j |jd dd¡|fdd�}| jd k	rL| j ¡ nd }| jD ]0}| j	rztj
 ¡ szt|||d�}qV|||d�}qV|  |¡}|S )Nr   rA   r   rB   r<   )r¢   r¥   rE   ÚcatÚexpandrC   r=   rD   r§   r¡   ÚjitZis_scriptingr	   r¨   )r2   rG   r=   Zblkr:   r:   r;   Úforward_featuresƒ  s    

$

z(VisionTransformerRelPos.forward_features)Ú
pre_logitsc                 C   sd   | j r>| j dkr.|d d …| jd …f jdd�n|d d …df }|  |¡}|  |¡}|rZ|S |  |¡S )Nr{   r   rB   r   )r‰   r    Úmeanr�   r©   rª   )r2   rG   r¿   r:   r:   r;   Úforward_head‘  s
    8

z$VisionTransformerRelPos.forward_headc                 C   s   |   |¡}|  |¡}|S rZ   )r¾   rÁ   r_   r:   r:   r;   rO   ˜  s    

zVisionTransformerRelPos.forward)r€   )F)T)N)F)!rP   rQ   rR   Ú__doc__r   r`   r   ri   r   r   ÚfloatrS   r   Ústrr   r'   ÚModuler   r#   rt   r«   rE   r½   Úignorer´   r¶   r¸   r¹   rº   r¾   rÁ   rO   rW   r:   r:   r8   r;   r   Õ   sŽ   ää|


Fc                 K   s(   |  dd ¡rtdƒ‚tt| |f|Ž}|S )NZfeatures_onlyz<features_only not implemented for Vision Transformer models.)ÚgetÚRuntimeErrorr   r   )ÚvariantÚ
pretrainedÚkwargsÚmodelr:   r:   r;   Ú!_create_vision_transformer_relposž  s    rÍ   r€   c                 K   s    | ddd dddt tdddœ|–S )	Nrz   )r   rx   rx   gÍÌÌÌÌÌì?ZbicubicTzpatch_embed.projrª   )Úurlrˆ   Ú
input_sizeZ	pool_sizeZcrop_pctÚinterpolationZfixed_input_sizerÀ   r¬   Z
first_convÚ
classifierr
   )rÎ   rË   r:   r:   r;   Ú_cfg¦  s          ûúrÒ   z‰https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/vit_replos_base_patch32_plus_rpn_256-sw-dd486f51.pthztimm/)r   é   rÓ   )rÎ   Ú	hf_hub_idrÏ   )r   éð   rÕ   )rÎ   rÏ   z�https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/vit_relpos_small_patch16_224-sw-ec2778b4.pth)rÎ   rÔ   z‚https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/vit_relpos_medium_patch16_224-sw-11c174af.pthz€https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/vit_relpos_base_patch16_224-sw-49049aed.pthz‚https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/vit_srelpos_small_patch16_224-sw-6cdb8849.pthzƒhttps://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/vit_srelpos_medium_patch16_224-sw-ad702b8c.pthz†https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/vit_relpos_medium_patch16_cls_224-sw-cfe8e259.pthz‡https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/vit_relpos_base_patch16_gapcls_224-sw-1a341d6c.pthz†https://github.com/rwightman/pytorch-image-models/releases/download/v0.1-tpu-weights/vit_relpos_medium_patch16_rpn_224-sw-5d2befd8.pth)z,vit_relpos_base_patch32_plus_rpn_256.sw_in1kz*vit_relpos_base_patch16_plus_240.untrainedz$vit_relpos_small_patch16_224.sw_in1kz%vit_relpos_medium_patch16_224.sw_in1kz#vit_relpos_base_patch16_224.sw_in1kz%vit_srelpos_small_patch16_224.sw_in1kz&vit_srelpos_medium_patch16_224.sw_in1kz)vit_relpos_medium_patch16_cls_224.sw_in1kz)vit_relpos_base_patch16_cls_224.untrainedz*vit_relpos_base_patch16_clsgap_224.sw_in1kz*vit_relpos_small_patch16_rpn_224.untrainedz)vit_relpos_medium_patch16_rpn_224.sw_in1kz)vit_relpos_base_patch16_rpn_224.untrained)Úreturnc                 K   s0   t ddddtd�}tdd| it |f|Ž—Ž}|S )	z` ViT-Base (ViT-B/32+) w/ relative log-coord position and residual post-norm, no class token
    é    é€  r}   é   )r†   rŠ   r‹   r!   r—   Ú$vit_relpos_base_patch32_plus_rpn_256rÊ   )rÚ   ©r£   rs   rÍ   ©rÊ   rË   Z
model_argsrÌ   r:   r:   r;   rÚ   Ù  s     ÿÿ
ÿrÚ   c                 K   s.   t ddddd�}tdd| it |f|Ž—Ž}|S )	zI ViT-Base (ViT-B/16+) w/ relative log-coord position, no class token
    ry   rØ   r}   rÙ   )r†   rŠ   r‹   r!   Ú vit_relpos_base_patch16_plus_240rÊ   )rÝ   ©r£   rÍ   rÜ   r:   r:   r;   rÝ   ã  s     ÿÿ
ÿrÝ   c                 K   s2   t ddddddd�}td
d	| it |f|Ž—Ž}|S )úH ViT-Base (ViT-B/16) w/ relative log-coord position, no class token
    ry   é€  r}   é   FT©r†   rŠ   r‹   r!   r4   r�   Úvit_relpos_small_patch16_224rÊ   )rã   rÞ   rÜ   r:   r:   r;   rã   í  s     ÿÿ
ÿrã   c                 K   s2   t ddddddd�}td
d	| it |f|Ž—Ž}|S )rß   ry   é   r}   r   FTrâ   Úvit_relpos_medium_patch16_224rÊ   )rå   rÞ   rÜ   r:   r:   r;   rå   ÷  s          ÿ ÿÿ
ÿrå   c                 K   s2   t ddddddd�}td	d| it |f|Ž—Ž}|S )
rß   ry   r|   r}   FTrâ   Úvit_relpos_base_patch16_224rÊ   )ræ   rÞ   rÜ   r:   r:   r;   ræ     s          ÿ ÿÿ
ÿræ   c              
   K   s6   t ddddddddd�}td
d	| it |f|Ž—Ž}|S )úO ViT-Base (ViT-B/16) w/ shared relative log-coord position, no class token
    ry   rà   r}   rá   FT©r†   rŠ   r‹   r!   r4   r�   r�   r=   Úvit_srelpos_small_patch16_224rÊ   )ré   rÞ   rÜ   r:   r:   r;   ré     s$          þ ÿÿ
ÿré   c              
   K   s6   t ddddddddd�}td
d	| it |f|Ž—Ž}|S )rç   ry   rä   r}   r   FTrè   Úvit_srelpos_medium_patch16_224rÊ   )rê   rÞ   rÜ   r:   r:   r;   rê     s$          þ ÿÿ
ÿrê   c                 K   s8   t dddddddddd	�	}tdd| it |f|Ž—Ž}|S )zM ViT-Base (ViT-M/16) w/ relative log-coord position, class token present
    ry   rä   r}   r   FrÓ   Tr�   )	r†   rŠ   r‹   r!   r4   r�   r�   rŒ   r‰   Ú!vit_relpos_medium_patch16_cls_224rÊ   )rë   rÞ   rÜ   r:   r:   r;   rë   %  s&           þ ÿÿ
ÿrë   c              	   K   s4   t dddddddd�}td
d	| it |f|Ž—Ž}|S )zM ViT-Base (ViT-B/16) w/ relative log-coord position, class token present
    ry   r|   r}   FTr�   )r†   rŠ   r‹   r!   r4   rŒ   r‰   Úvit_relpos_base_patch16_cls_224rÊ   )rì   rÞ   rÜ   r:   r:   r;   rì   1  s"          ÿ ÿÿ
ÿrì   c              	   K   s4   t dddddddd�}td	d| it |f|Ž—Ž}|S )
a   ViT-Base (ViT-B/16) w/ relative log-coord position, class token present
    NOTE this config is a bit of a mistake, class token was enabled but global avg-pool w/ fc-norm was not disabled
    Leaving here for comparisons w/ a future re-train as it performs quite well.
    ry   r|   r}   FT)r†   rŠ   r‹   r!   r4   r�   rŒ   Ú"vit_relpos_base_patch16_clsgap_224rÊ   )rí   rÞ   rÜ   r:   r:   r;   rí   <  s"          ÿ ÿÿ
ÿrí   c                 K   s2   t dddddtd�}td	d| it |f|Ž—Ž}|S )
ú_ ViT-Base (ViT-B/16) w/ relative log-coord position and residual post-norm, no class token
    ry   rà   r}   rá   F©r†   rŠ   r‹   r!   r4   r—   Ú vit_relpos_small_patch16_rpn_224rÊ   )rð   rÛ   rÜ   r:   r:   r;   rð   I  s          ÿ ÿÿ
ÿrð   c                 K   s2   t dddddtd�}td	d| it |f|Ž—Ž}|S )
rî   ry   rä   r}   r   Frï   Ú!vit_relpos_medium_patch16_rpn_224rÊ   )rñ   rÛ   rÜ   r:   r:   r;   rñ   T  s          ÿ ÿÿ
ÿrñ   c                 K   s2   t dddddtd�}tdd| it |f|Ž—Ž}|S )	rî   ry   r|   r}   Frï   Úvit_relpos_base_patch16_rpn_224rÊ   )rò   rÛ   rÜ   r:   r:   r;   rò   _  s          ÿ ÿÿ
ÿrò   )F)r€   )F)F)F)F)F)F)F)F)F)F)F)F)F)BrÂ   Úloggingr­   Ú	functoolsr   Útypingr   r   r   r   r   ÚImportErrorÚtyping_extensionsrE   Ztorch.nnr'   Z	torch.jitr   Ztorch.utils.checkpointr	   Z	timm.datar   r   Ztimm.layersr   r   r   r   r   r   r   Z_builderr   Z_manipulater   Ú	_registryr   r   Zvision_transformerr   Ú__all__Ú	getLoggerrP   Z_loggerrÅ   r   rX   r`   rs   r   rÍ   rÒ   Zdefault_cfgsrÚ   rÝ   rã   rå   ræ   ré   rê   rë   rì   rí   rð   rñ   rò   r:   r:   r:   r;   Ú<module>   sÂ   $
B
07 J

ý
þþþþþþþþÜ(			




