U
    ¯Ê¹jvH  ã                   @   sF  d Z ddlmZ ddl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 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mZ dgZG dd„ deƒZdadd„Zdbdd„Zeeddd�eddd�eddd�eddddd�edddd �edd!dd �edd"dd �edd#dddd$�edd%d�edd&ddd�edd'd�edd(d�edd)ddd�edd*d�edd+ddd�edd,d�edd-dd.�edd/ddd�edd0dd.�edd1dd.�edd2ddd�edd3dd.�edd4ddd�edd5dd.�d6œƒZedced7œd8d9„ƒZedded7œd:d;„ƒZedeed7œd<d=„ƒZ edfed7œd>d?„ƒZ!edged7œd@dA„ƒZ"edhed7œdBdC„ƒZ#edied7œdDdE„ƒZ$edjed7œdFdG„ƒZ%edked7œdHdI„ƒZ&edled7œdJdK„ƒZ'edmed7œdLdM„ƒZ(edned7œdNdO„ƒZ)edoed7œdPdQ„ƒZ*edped7œdRdS„ƒZ+edqed7œdTdU„ƒZ,edred7œdVdW„ƒZ-ee.dXdYdZd[d\d]d^d_d`œƒ dS )sa[   DeiT - Data-efficient Image Transformers

DeiT model defs and weights from https://github.com/facebookresearch/deit, original copyright below

paper: `DeiT: Data-efficient Image Transformers` - https://arxiv.org/abs/2012.12877

paper: `DeiT III: Revenge of the ViT` - https://arxiv.org/abs/2204.07118

Modifications copyright 2021, Ross Wightman
é    )Úpartial)ÚSequenceÚUnionN)Únn©ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)Úresample_abs_pos_embed)ÚVisionTransformerÚtrunc_normal_Úcheckpoint_filter_fné   )Úbuild_model_with_cfg)Úcheckpoint_seq)Úgenerate_default_cfgsÚregister_modelÚregister_model_deprecationsÚVisionTransformerDistilledc                       sˆ   e Zd ZdZ‡ fdd„Zd‡ fdd„	Zejjddd	„ƒZ	ejjd
d„ ƒZ
ddd„Zejjddd„ƒZdd„ Zdeejdœdd„Z‡  ZS )r   z· Vision Transformer w/ Distillation Token and Head

    Distillation token & head support for `DeiT: Data-efficient Image Transformers`
        - https://arxiv.org/abs/2012.12877
    c                    s¨   |  dd¡}tƒ j||ddi—Ž | jdks0t‚d| _t t 	dd| j
¡¡| _t t 	d| jj| j | j
¡¡| _| jdkrŠt | j
| j¡nt ¡ | _d| _|  |¡ d S )	NÚweight_initÚ Úskip)Útokené   r   r   F)ÚpopÚsuperÚ__init__Úglobal_poolÚAssertionErrorÚnum_prefix_tokensr   Ú	ParameterÚtorchZzerosÚ	embed_dimÚ
dist_tokenZpatch_embedZnum_patchesÚ	pos_embedÚnum_classesÚLinearÚIdentityÚ	head_distÚdistilled_trainingÚinit_weights)ÚselfÚargsÚkwargsr   ©Ú	__class__© úO/var/www/html/bwave/python/venv/lib/python3.8/site-packages/timm/models/deit.pyr   $   s    ÿ$z#VisionTransformerDistilled.__init__r   c                    s    t | jdd� tƒ j|d� d S )Ng{®Gáz”?)Ústd)Úmode)r   r"   r   r)   )r*   r2   r-   r/   r0   r)   2   s    z'VisionTransformerDistilled.init_weightsFc                 C   s   t dddgd�S )Nz+^cls_token|pos_embed|patch_embed|dist_token)z^blocks\.(\d+)N)z^norm)iŸ† )ÚstemÚblocks)Údict)r*   Zcoarser/   r/   r0   Úgroup_matcher6   s    þþz(VisionTransformerDistilled.group_matcherc                 C   s   | j | jfS ©N©Úheadr'   )r*   r/   r/   r0   Úget_classifier?   s    z)VisionTransformerDistilled.get_classifierNc                 C   sL   || _ |dkrt | j|¡nt ¡ | _|dkr>t | j| j ¡nt ¡ | _d S )Nr   )r$   r   r%   r!   r&   r9   r'   )r*   r$   r   r/   r/   r0   Úreset_classifierC   s     z+VisionTransformerDistilled.reset_classifierTc                 C   s
   || _ d S r7   )r(   )r*   Úenabler/   r/   r0   Úset_distilled_trainingH   s    z1VisionTransformerDistilled.set_distilled_trainingc                 C   sÜ   | j rD|j\}}}}t| j||f| jr*dn| jd�}| |d|¡}n| j}| jr’|| }tj| j	 
|jd dd¡| j 
|jd dd¡|fdd�}n@tj| j	 
|jd dd¡| j 
|jd dd¡|fdd�}|| }|  |¡S )Nr   )r   éÿÿÿÿr   )Údim)Zdynamic_img_sizeÚshaper	   r#   Úno_embed_classr   Úviewr    ÚcatZ	cls_tokenÚexpandr"   Zpos_drop)r*   ÚxÚBÚHÚWÚCr#   r/   r/   r0   Ú
_pos_embedL   s6    ýýüýüz%VisionTransformerDistilled._pos_embed)Ú
pre_logitsÚreturnc                 C   st   |d d …df |d d …df  }}|r2|| d S |   |¡}|  |¡}| jrd| jrdtj ¡ sd||fS || d S d S )Nr   r   r   )r9   r'   r(   Ztrainingr    ÚjitZis_scripting)r*   rE   rK   Zx_distr/   r/   r0   Úforward_headk   s    "

z'VisionTransformerDistilled.forward_head)r   )F)N)T)F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r)   r    rM   Úignorer6   r:   r;   r=   rJ   ÚboolZTensorrN   Ú__classcell__r/   r/   r-   r0   r      s   

Fc                 K   sD   |  dd ¡rtdƒ‚|rtnt}t|| |fdttdd�i|—Ž}|S )NZfeatures_onlyz<features_only not implemented for Vision Transformer models.Zpretrained_filter_fnT)Zadapt_layer_scale)ÚgetÚRuntimeErrorr   r
   r   r   r   )ÚvariantÚ
pretrainedÚ	distilledr,   Z	model_clsÚmodelr/   r/   r0   Ú_create_deity   s    ý
üûr\   r   c                 K   s    | ddd dddt tdddœ|–S )	Niè  )é   éà   r^   gÍÌÌÌÌÌì?ZbicubicTzpatch_embed.projr9   )Úurlr$   Ú
input_sizeZ	pool_sizeÚcrop_pctÚinterpolationZfixed_input_sizeZmeanr1   Z
first_convÚ
classifierr   )r_   r,   r/   r/   r0   Ú_cfg‡   s          ûúrd   ztimm/zFhttps://dl.fbaipublicfiles.com/deit/deit_tiny_patch16_224-a1311bcf.pth)Ú	hf_hub_idr_   zGhttps://dl.fbaipublicfiles.com/deit/deit_small_patch16_224-cd65a155.pthzFhttps://dl.fbaipublicfiles.com/deit/deit_base_patch16_224-b5f2ef4d.pthzFhttps://dl.fbaipublicfiles.com/deit/deit_base_patch16_384-8de9b5d1.pth)r]   é€  rf   g      ð?)re   r_   r`   ra   zPhttps://dl.fbaipublicfiles.com/deit/deit_tiny_distilled_patch16_224-b40b3cf7.pthr8   )re   r_   rc   zQhttps://dl.fbaipublicfiles.com/deit/deit_small_distilled_patch16_224-649709d9.pthzPhttps://dl.fbaipublicfiles.com/deit/deit_base_distilled_patch16_224-df68dfff.pthzPhttps://dl.fbaipublicfiles.com/deit/deit_base_distilled_patch16_384-d0272ac0.pth)re   r_   r`   ra   rc   z;https://dl.fbaipublicfiles.com/deit/deit_3_small_224_1k.pthz;https://dl.fbaipublicfiles.com/deit/deit_3_small_384_1k.pthz<https://dl.fbaipublicfiles.com/deit/deit_3_medium_224_1k.pthz:https://dl.fbaipublicfiles.com/deit/deit_3_base_224_1k.pthz:https://dl.fbaipublicfiles.com/deit/deit_3_base_384_1k.pthz;https://dl.fbaipublicfiles.com/deit/deit_3_large_224_1k.pthz;https://dl.fbaipublicfiles.com/deit/deit_3_large_384_1k.pthz:https://dl.fbaipublicfiles.com/deit/deit_3_huge_224_1k.pthz<https://dl.fbaipublicfiles.com/deit/deit_3_small_224_21k.pth)re   r_   ra   z<https://dl.fbaipublicfiles.com/deit/deit_3_small_384_21k.pthz=https://dl.fbaipublicfiles.com/deit/deit_3_medium_224_21k.pthz;https://dl.fbaipublicfiles.com/deit/deit_3_base_224_21k.pthz;https://dl.fbaipublicfiles.com/deit/deit_3_base_384_21k.pthz<https://dl.fbaipublicfiles.com/deit/deit_3_large_224_21k.pthz<https://dl.fbaipublicfiles.com/deit/deit_3_large_384_21k.pthz>https://dl.fbaipublicfiles.com/deit/deit_3_huge_224_21k_v1.pth)zdeit_tiny_patch16_224.fb_in1kzdeit_small_patch16_224.fb_in1kzdeit_base_patch16_224.fb_in1kzdeit_base_patch16_384.fb_in1kz'deit_tiny_distilled_patch16_224.fb_in1kz(deit_small_distilled_patch16_224.fb_in1kz'deit_base_distilled_patch16_224.fb_in1kz'deit_base_distilled_patch16_384.fb_in1kzdeit3_small_patch16_224.fb_in1kzdeit3_small_patch16_384.fb_in1kz deit3_medium_patch16_224.fb_in1kzdeit3_base_patch16_224.fb_in1kzdeit3_base_patch16_384.fb_in1kzdeit3_large_patch16_224.fb_in1kzdeit3_large_patch16_384.fb_in1kzdeit3_huge_patch14_224.fb_in1kú(deit3_small_patch16_224.fb_in22k_ft_in1kú(deit3_small_patch16_384.fb_in22k_ft_in1kú)deit3_medium_patch16_224.fb_in22k_ft_in1kú'deit3_base_patch16_224.fb_in22k_ft_in1kú'deit3_base_patch16_384.fb_in22k_ft_in1kú(deit3_large_patch16_224.fb_in22k_ft_in1kú(deit3_large_patch16_384.fb_in22k_ft_in1kú'deit3_huge_patch14_224.fb_in22k_ft_in1k)rL   c                 K   s.   t ddddd�}tdd| it |f|Ž—Ž}|S )	z• DeiT-tiny model @ 224x224 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    é   éÀ   é   r]   ©Ú
patch_sizer!   ÚdepthÚ	num_headsÚdeit_tiny_patch16_224rY   )rv   ©r5   r\   ©rY   r,   Z
model_argsr[   r/   r/   r0   rv   ó   s    rv   c                 K   s.   t ddddd�}tdd| it |f|Ž—Ž}|S )	z– DeiT-small model @ 224x224 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    ro   rf   rq   é   rr   Údeit_small_patch16_224rY   )rz   rw   rx   r/   r/   r0   rz   ý   s    rz   c                 K   s.   t ddddd�}tdd| it |f|Ž—Ž}|S )z• DeiT base model @ 224x224 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    ro   é   rq   rr   Údeit_base_patch16_224rY   )r|   rw   rx   r/   r/   r0   r|     s    r|   c                 K   s.   t ddddd�}tdd| it |f|Ž—Ž}|S )z• DeiT base model @ 384x384 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    ro   r{   rq   rr   Údeit_base_patch16_384rY   )r}   rw   rx   r/   r/   r0   r}     s    r}   c                 K   s0   t ddddd�}td	| ddœt |f|Ž—Ž}|S )
zŸ DeiT-tiny distilled model @ 224x224 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    ro   rp   rq   r]   rr   Údeit_tiny_distilled_patch16_224T©rY   rZ   )r~   rw   rx   r/   r/   r0   r~     s     ÿ ÿ
ÿr~   c                 K   s0   t ddddd�}td	| ddœt |f|Ž—Ž}|S )
z  DeiT-small distilled model @ 224x224 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    ro   rf   rq   ry   rr   Ú deit_small_distilled_patch16_224Tr   )r€   rw   rx   r/   r/   r0   r€   &  s     ÿ ÿ
ÿr€   c                 K   s0   t ddddd�}td| ddœt |f|Ž—Ž}|S )	zŸ DeiT-base distilled model @ 224x224 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    ro   r{   rq   rr   Údeit_base_distilled_patch16_224Tr   )r�   rw   rx   r/   r/   r0   r�   1  s     ÿ ÿ
ÿr�   c                 K   s0   t ddddd�}td| ddœt |f|Ž—Ž}|S )	zŸ DeiT-base distilled model @ 384x384 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    ro   r{   rq   rr   Údeit_base_distilled_patch16_384Tr   )r‚   rw   rx   r/   r/   r0   r‚   <  s     ÿ ÿ
ÿr‚   c                 K   s2   t ddddddd�}td
d	| it |f|Ž—Ž}|S )z˜ DeiT-3 small model @ 224x224 from paper (https://arxiv.org/abs/2204.07118).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    ro   rf   rq   ry   Tç�íµ ÷Æ°>©rs   r!   rt   ru   rA   Zinit_valuesÚdeit3_small_patch16_224rY   )r…   rw   rx   r/   r/   r0   r…   G  s    r…   c                 K   s2   t ddddddd�}td
d	| it |f|Ž—Ž}|S )z˜ DeiT-3 small model @ 384x384 from paper (https://arxiv.org/abs/2204.07118).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    ro   rf   rq   ry   Trƒ   r„   Údeit3_small_patch16_384rY   )r†   rw   rx   r/   r/   r0   r†   Q  s    r†   c                 K   s2   t ddddddd�}td
d	| it |f|Ž—Ž}|S )zŽ DeiT-3 medium model @ 224x224 (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    ro   i   rq   é   Trƒ   r„   Údeit3_medium_patch16_224rY   )rˆ   rw   rx   r/   r/   r0   rˆ   [  s    rˆ   c                 K   s2   t ddddddd�}td	d| it |f|Ž—Ž}|S )
z— DeiT-3 base model @ 224x224 from paper (https://arxiv.org/abs/2204.07118).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    ro   r{   rq   Trƒ   r„   Údeit3_base_patch16_224rY   )r‰   rw   rx   r/   r/   r0   r‰   e  s    r‰   c                 K   s2   t ddddddd�}td	d| it |f|Ž—Ž}|S )
ú— DeiT-3 base model @ 384x384 from paper (https://arxiv.org/abs/2204.07118).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    ro   r{   rq   Trƒ   r„   Údeit3_base_patch16_384rY   )r‹   rw   rx   r/   r/   r0   r‹   o  s    r‹   c                 K   s2   t ddddddd�}td	d| it |f|Ž—Ž}|S )
z˜ DeiT-3 large model @ 224x224 from paper (https://arxiv.org/abs/2204.07118).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    ro   é   é   Trƒ   r„   Údeit3_large_patch16_224rY   )rŽ   rw   rx   r/   r/   r0   rŽ   y  s    rŽ   c                 K   s2   t ddddddd�}td	d| it |f|Ž—Ž}|S )
z˜ DeiT-3 large model @ 384x384 from paper (https://arxiv.org/abs/2204.07118).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    ro   rŒ   r�   Trƒ   r„   Údeit3_large_patch16_384rY   )r�   rw   rx   r/   r/   r0   r�   ƒ  s    r�   c                 K   s2   t ddddddd�}td
d	| it |f|Ž—Ž}|S )rŠ   é   i   é    ro   Trƒ   r„   Údeit3_huge_patch14_224rY   )r’   rw   rx   r/   r/   r0   r’   �  s    r’   rg   rh   ri   rj   rk   rl   rm   rn   )Z deit3_small_patch16_224_in21ft1kZ deit3_small_patch16_384_in21ft1kZ!deit3_medium_patch16_224_in21ft1kZdeit3_base_patch16_224_in21ft1kZdeit3_base_patch16_384_in21ft1kZ deit3_large_patch16_224_in21ft1kZ deit3_large_patch16_384_in21ft1kZdeit3_huge_patch14_224_in21ft1k)FF)r   )F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)F)/rR   Ú	functoolsr   Útypingr   r   r    r   Z	timm.datar   r   Ztimm.layersr	   Ztimm.models.vision_transformerr
   r   r   Z_builderr   Z_manipulater   Ú	_registryr   r   r   Ú__all__r   r\   rd   Zdefault_cfgsrv   rz   r|   r}   r~   r€   r�   r‚   r…   r†   rˆ   r‰   r‹   rŽ   r�   r’   rO   r/   r/   r/   r0   Ú<module>   sf  \

þþþ ýýýý üþ ýþþ ýþ ýþý ýýý ýý ýý¦a				



								ø