
    Ng]H                        d Z ddlmZ ddl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mZmZ dgZ G d de          Zd^dZd_dZ ei d 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/          d0 edd1          d2 edd3dd          d4 edd5          d6 edd7dd          d8 edd9          d: edd;d<           edd=dd           edd>d<           edd?d<           edd@dd           eddAd<           eddBdd           eddCd<          dD          Zed`dEefdF            Zed`dEefdG            Zed`dEefdH            Zed`dEefdI            Zed`dEefdJ            Zed`dEefdK            Z ed`dEefdL            Z!ed`dEefdM            Z"ed`dEefdN            Z#ed`dEefdO            Z$ed`dEefdP            Z%ed`dEefdQ            Z&ed`dEefdR            Z'ed`dEefdS            Z(ed`dEefdT            Z)ed`dEefdU            Z* ee+d:dVdWdXdYdZd[d\d]           dS )aa[   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)OptionalN)nnIMAGENET_DEFAULT_MEANIMAGENET_DEFAULT_STD)resample_abs_pos_embed)VisionTransformertrunc_normal_checkpoint_filter_fn   )build_model_with_cfg)generate_default_cfgsregister_modelregister_model_deprecationsVisionTransformerDistilledc                        e Zd ZdZ fdZd fd	Zej        j        dd            Z	ej        j        de
j        fd            Zdd
edee         fdZej        j        dd            Zd Zddedej        fdZ x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                 :   |                     dd          } t                      j        |i |ddi | j        dv sJ d| _        t          j        t          j        dd| j	                            | _
        t          j        t          j        d| j        j        | j        z   | j	                            | _        | j        dk    rt          j        | j	        | j                  nt          j                    | _        d| _        |                     |           d S )	Nweight_init skip)token   r   r   F)popsuper__init__global_poolnum_prefix_tokensr   	Parametertorchzeros	embed_dim
dist_tokenpatch_embednum_patches	pos_embednum_classesLinearIdentity	head_distdistilled_traininginit_weights)selfargskwargsr   	__class__s       L/var/www/html/ai-engine/env/lib/python3.11/site-packages/timm/models/deit.pyr   z#VisionTransformerDistilled.__init__#   s	   jj33$=&==f====:----!",u{1a'H'HIIK4+7$:PPRVR`aac cHLHX[\H\H\4>43CDDDbdbmbobo"'+&&&&&    r   c                 x    t          | j        d           t                                          |           d S )Ng{Gz?)std)mode)r   r#   r   r,   )r-   r5   r0   s     r1   r,   z'VisionTransformerDistilled.init_weights1   s9    do3////$'''''r2   Fc                 (    t          dddg          S )Nz+^cls_token|pos_embed|patch_embed|dist_token)z^blocks\.(\d+)N)z^norm)i )stemblocks)dict)r-   coarses     r1   group_matcherz(VisionTransformerDistilled.group_matcher5   s'    ?)$&
 
 
 	
r2   returnc                     | j         | j        fS Nheadr*   )r-   s    r1   get_classifierz)VisionTransformerDistilled.get_classifier>   s    y$.((r2   Nr'   r   c                     || _         |dk    rt          j        | j        |          nt          j                    | _        |dk    rt          j        | j        | j                   nt          j                    | _        d S )Nr   )r'   r   r(   r"   r)   r@   r*   )r-   r'   r   s      r1   reset_classifierz+VisionTransformerDistilled.reset_classifierB   sj    &>IAooBIdnk:::SUS^S`S`	HSVW4>43CDDD]_]h]j]jr2   Tc                     || _         d S r>   )r+   )r-   enables     r1   set_distilled_trainingz1VisionTransformerDistilled.set_distilled_trainingG   s    "(r2   c                    | j         rK|j        \  }}}}t          | j        ||f| j        rdn| j                  }|                    |d|          }n| j        }| j        ri||z   }t          j        | j	        
                    |j        d         dd          | j        
                    |j        d         dd          |fd          }nht          j        | j	        
                    |j        d         dd          | j        
                    |j        d         dd          |fd          }||z   }|                     |          S )Nr   )r   r   )dim)dynamic_img_sizeshaper	   r&   no_embed_classr   viewr    cat	cls_tokenexpandr#   pos_drop)r-   xBHWCr&   s          r1   
_pos_embedz%VisionTransformerDistilled._pos_embedK   s_     		'JAq!Q.A'+':"V!!@V  I
 q"a  AAI 	 IA	%%agaj"b99&&qwqz2r:: 	  AA 	%%agaj"b99&&qwqz2r:: 	  A
 IA}}Qr2   
pre_logitsc                 
   |d d df         |d d df         }}|r||z   dz  S |                      |          }|                     |          }| j        r)| j        r"t          j                                        s||fS ||z   dz  S )Nr   r   r   )r@   r*   r+   trainingr    jitis_scripting)r-   rR   rX   x_dists       r1   forward_headz'VisionTransformerDistilled.forward_headj   s    aaadGQqqq!tW6 	$J!##IIaLL''" 	$t} 	$UY=S=S=U=U 	$f9 J!##r2   r   Fr>   )T)__name__
__module____qualname____doc__r   r,   r    r[   ignorer;   r   ModulerA   intr   strrC   rF   rW   boolTensorr^   __classcell__)r0   s   @r1   r   r      sE        ' ' ' ' '( ( ( ( ( ( Y
 
 
 
 Y)	 ) ) ) )k kC khsm k k k k
 Y) ) ) )     >$ $$ $5< $ $ $ $ $ $ $ $r2   Fc                     |                     dd          }|rt          nt          }t          || |ft	          t
          d          t          |d          d|}|S )Nout_indices   T)adapt_layer_scalegetter)rm   feature_cls)pretrained_filter_fnfeature_cfg)r   r   r
   r   r   r   r9   )variant
pretrained	distilledr/   rm   	model_clsmodels          r1   _create_deitry   x   s|    **]A..K.7N**=NI  %%9TRRR[hGGG   E Lr2   r   c                 6    | ddd dddt           t          ddd|S )	Ni  )rn      r{   g?bicubicTzpatch_embed.projr@   )urlr'   
input_size	pool_sizecrop_pctinterpolationfixed_input_sizemeanr4   
first_conv
classifierr   )r}   r/   s     r1   _cfgr      s7    =t%.B(   r2   zdeit_tiny_patch16_224.fb_in1kztimm/zFhttps://dl.fbaipublicfiles.com/deit/deit_tiny_patch16_224-a1311bcf.pth)	hf_hub_idr}   zdeit_small_patch16_224.fb_in1kzGhttps://dl.fbaipublicfiles.com/deit/deit_small_patch16_224-cd65a155.pthzdeit_base_patch16_224.fb_in1kzFhttps://dl.fbaipublicfiles.com/deit/deit_base_patch16_224-b5f2ef4d.pthzdeit_base_patch16_384.fb_in1kzFhttps://dl.fbaipublicfiles.com/deit/deit_base_patch16_384-8de9b5d1.pth)rn     r   g      ?)r   r}   r~   r   z'deit_tiny_distilled_patch16_224.fb_in1kzPhttps://dl.fbaipublicfiles.com/deit/deit_tiny_distilled_patch16_224-b40b3cf7.pthr?   )r   r}   r   z(deit_small_distilled_patch16_224.fb_in1kzQhttps://dl.fbaipublicfiles.com/deit/deit_small_distilled_patch16_224-649709d9.pthz'deit_base_distilled_patch16_224.fb_in1kzPhttps://dl.fbaipublicfiles.com/deit/deit_base_distilled_patch16_224-df68dfff.pthz'deit_base_distilled_patch16_384.fb_in1kzPhttps://dl.fbaipublicfiles.com/deit/deit_base_distilled_patch16_384-d0272ac0.pth)r   r}   r~   r   r   zdeit3_small_patch16_224.fb_in1kz;https://dl.fbaipublicfiles.com/deit/deit_3_small_224_1k.pthzdeit3_small_patch16_384.fb_in1kz;https://dl.fbaipublicfiles.com/deit/deit_3_small_384_1k.pthz deit3_medium_patch16_224.fb_in1kz<https://dl.fbaipublicfiles.com/deit/deit_3_medium_224_1k.pthzdeit3_base_patch16_224.fb_in1kz:https://dl.fbaipublicfiles.com/deit/deit_3_base_224_1k.pthzdeit3_base_patch16_384.fb_in1kz:https://dl.fbaipublicfiles.com/deit/deit_3_base_384_1k.pthzdeit3_large_patch16_224.fb_in1kz;https://dl.fbaipublicfiles.com/deit/deit_3_large_224_1k.pthzdeit3_large_patch16_384.fb_in1kz;https://dl.fbaipublicfiles.com/deit/deit_3_large_384_1k.pthzdeit3_huge_patch14_224.fb_in1kz:https://dl.fbaipublicfiles.com/deit/deit_3_huge_224_1k.pthz(deit3_small_patch16_224.fb_in22k_ft_in1kz<https://dl.fbaipublicfiles.com/deit/deit_3_small_224_21k.pth)r   r}   r   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)(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_in1kr<   c           	      ^    t          dddd          }t          dd| it          |fi |}|S )	z DeiT-tiny model @ 224x224 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
             rn   
patch_sizer"   depth	num_headsdeit_tiny_patch16_224ru   )r   r9   ry   ru   r/   
model_argsrx   s       r1   r   r      sI    
 s"JJJJffZf4PZKeKe^dKeKeffELr2   c           	      ^    t          dddd          }t          dd| it          |fi |}|S )	z DeiT-small model @ 224x224 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    r   r   r      r   deit_small_patch16_224ru   )r   r   r   s       r1   r   r      sI    
 s"JJJJggjgDQ[LfLf_eLfLfggELr2   c           	      ^    t          dddd          }t          dd| it          |fi |}|S )z DeiT base model @ 224x224 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    r      r   r   deit_base_patch16_224ru   )r   r   r   s       r1   r   r     I    
 s"KKKJffZf4PZKeKe^dKeKeffELr2   c           	      ^    t          dddd          }t          dd| it          |fi |}|S )z DeiT base model @ 384x384 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    r   r   r   r   deit_base_patch16_384ru   )r   r   r   s       r1   r   r     r   r2   c           	      b    t          dddd          }t          	 d	| ddt          |fi |}|S )
z DeiT-tiny distilled model @ 224x224 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    r   r   r   rn   r   deit_tiny_distilled_patch16_224Tru   rv   )r   r   r   s       r1   r   r     s_    
 s"JJJJ)p6@Dp pTXYcTnTngmTnTnp pELr2   c           	      b    t          dddd          }t          	 d	| ddt          |fi |}|S )
z DeiT-small distilled model @ 224x224 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    r   r   r   r   r    deit_small_distilled_patch16_224Tr   )r   r   r   s       r1   r   r   %  s_    
 s"JJJJ*q7ATq qUYZdUoUohnUoUoq qELr2   c           	      b    t          dddd          }t          	 d| ddt          |fi |}|S )	z DeiT-base distilled model @ 224x224 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    r   r   r   r   deit_base_distilled_patch16_224Tr   )r   r   r   s       r1   r   r   0  _    
 s"KKKJ)p6@Dp pTXYcTnTngmTnTnp pELr2   c           	      b    t          dddd          }t          	 d| ddt          |fi |}|S )	z DeiT-base distilled model @ 384x384 from paper (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    r   r   r   r   deit_base_distilled_patch16_384Tr   )r   r   r   s       r1   r   r   ;  r   r2   c           	      b    t          dddddd          }t          d
d	| it          |fi |}|S )z DeiT-3 small model @ 224x224 from paper (https://arxiv.org/abs/2204.07118).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    r   r   r   r   Tư>r   r"   r   r   rL   init_valuesdeit3_small_patch16_224ru   )r   r   r   s       r1   r   r   F  O    
 s"Z^lpqqqJhhzhTR\MgMg`fMgMghhELr2   c           	      b    t          dddddd          }t          d
d	| it          |fi |}|S )z DeiT-3 small model @ 384x384 from paper (https://arxiv.org/abs/2204.07118).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    r   r   r   r   Tr   r   deit3_small_patch16_384ru   )r   r   r   s       r1   r   r   P  r   r2   c           	      b    t          dddddd          }t          d
d	| it          |fi |}|S )z DeiT-3 medium model @ 224x224 (https://arxiv.org/abs/2012.12877).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    r   i   r      Tr   r   deit3_medium_patch16_224ru   )r   r   r   s       r1   r   r   Z  sO    
 s"Z^lpqqqJii
idS]NhNhagNhNhiiELr2   c           	      b    t          dddddd          }t          d	d| it          |fi |}|S )
z DeiT-3 base model @ 224x224 from paper (https://arxiv.org/abs/2204.07118).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    r   r   r   Tr   r   deit3_base_patch16_224ru   )r   r   r   s       r1   r   r   d  O    
 s"[_mqrrrJggjgDQ[LfLf_eLfLfggELr2   c           	      b    t          dddddd          }t          d	d| it          |fi |}|S )
 DeiT-3 base model @ 384x384 from paper (https://arxiv.org/abs/2204.07118).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    r   r   r   Tr   r   deit3_base_patch16_384ru   )r   r   r   s       r1   r   r   n  r   r2   c           	      b    t          dddddd          }t          d	d| it          |fi |}|S )
z DeiT-3 large model @ 224x224 from paper (https://arxiv.org/abs/2204.07118).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    r         Tr   r   deit3_large_patch16_224ru   )r   r   r   s       r1   r   r   x  O    
 t2\`nrsssJhhzhTR\MgMg`fMgMghhELr2   c           	      b    t          dddddd          }t          d	d| it          |fi |}|S )
z DeiT-3 large model @ 384x384 from paper (https://arxiv.org/abs/2204.07118).
    ImageNet-1k weights from https://github.com/facebookresearch/deit.
    r   r   r   Tr   r   deit3_large_patch16_384ru   )r   r   r   s       r1   r   r     r   r2   c           	      b    t          dddddd          }t          d
d	| it          |fi |}|S )r      i       r   Tr   r   deit3_huge_patch14_224ru   )r   r   r   s       r1   r   r     sO    
 t2\`nrsssJggjgDQ[LfLf_eLfLfggELr2   r   r   r   r   r   r   r   ) deit3_small_patch16_224_in21ft1k deit3_small_patch16_384_in21ft1k!deit3_medium_patch16_224_in21ft1kdeit3_base_patch16_224_in21ft1kdeit3_base_patch16_384_in21ft1k deit3_large_patch16_224_in21ft1k deit3_large_patch16_384_in21ft1kdeit3_huge_patch14_224_in21ft1k)FFr_   r`   ),rd   	functoolsr   typingr   r    r   	timm.datar   r   timm.layersr	   timm.models.vision_transformerr
   r   r   _builderr   	_registryr   r   r   __all__r   ry   r   default_cfgsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   ra    r2   r1   <module>r      s  	 	                    A A A A A A A A . . . . . . a a a a a a a a a a * * * * * * Y Y Y Y Y Y Y Y Y Y'
(Y$ Y$ Y$ Y$ Y$!2 Y$ Y$ Y$x       %$ ^&#TTT&V &V &V^&
 %ddU'W 'W 'W^& $TTT&V &V &V^& $TTT 3&0 &0 &0^&  .tt^(0* 0* 0*!^&( /_(1* 1* 1*)^&0 .tt^(0* 0* 0*1^&8 .tt^ 3(	0* 0* 0*9^&D &ttI(K (K (KE^&J &ttI 3(0 (0 (0K^&R 'J)L )L )LS^&X %ddH'J 'J 'JY^&^ %ddH 3'0 '0 '0_^&f &ttI(K (K (Kg^&l &ttI 3(0 (0 (0m^&t %ddH'J 'J 'Ju^&| /J1 1 1}^&D 15J 310 10 10 26K2 2 2 04tI0 0 0 04tI 300 00 00 15J1 1 1 15J 310 10 10 04tL0 0 0u^& ^& ^& ^ ^B  9J      :K      9J      9J      C]      D^      C]      C]      ;L      ;L      <M      :K      :K      ;L      ;L      :K      H(R(R)T'P'P(R(R'P	' 	' 	 	 	 	 	r2   