
    khH                        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-      d. edd/      d0 edd1dd      d2 edd3      d4 edd5dd      d6 edd7      d8 edd9d:       edd;dd       edd<d:       edd=d:       edd>dd       edd?d:       edd@dd       eddAd:      dB      Zed^dCefdD       Zed^dCefdE       Zed^dCefdF       Zed^dCefdG       Zed^dCefdH       Zed^dCefdI       Z ed^dCefdJ       Z!ed^dCefdK       Z"ed^dCefdL       Z#ed^dCefdM       Z$ed^dCefdN       Z%ed^dCefdO       Z&ed^dCefdP       Z'ed^dCefdQ       Z(ed^dCefdR       Z)ed^dCefdS       Z* ee+d8dTdUdVdWdXdYdZd[       y)_a[   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                   8    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                 x   |j                  dd      }t        |   |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kD  r*t        j                  | j                  | j                        nt        j                          | _        d| _        | j'                  |       y )	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/teggl/fontify/venv/lib/python3.12/site-packages/timm/models/deit.pyr   z#VisionTransformerDistilled.__init__#   s    jj3$=&=f=:---!",,u{{1a'HIKK4++77$:P:PPRVR`R`acHLHXHX[\H\4>>43C3CDbdbmbmbo"'+&    c                 T    t        | j                  d       t        |   |       y )Ng{Gz?)std)mode)r   r#   r   r,   )r-   r5   r0   s     r1   r,   z'VisionTransformerDistilled.init_weights1   s!    doo3/$'r2   c                      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                 2    | j                   | j                  fS Nheadr*   )r-   s    r1   get_classifierz)VisionTransformerDistilled.get_classifier>   s    yy$..((r2   r'   r   c                 *   || _         |dkD  r t        j                  | j                  |      nt        j                         | _        |dkD  r0t        j                  | j                  | j                         | _        y t        j                         | _        y )Nr   )r'   r   r(   r"   r)   r@   r*   )r-   r'   r   s      r1   reset_classifierz+VisionTransformerDistilled.reset_classifierB   se    &>IAoBIIdnnk:SUS^S^S`	HSVW4>>43C3CD]_]h]h]jr2   c                     || _         y r>   )r+   )r-   enables     r1   set_distilled_trainingz1VisionTransformerDistilled.set_distilled_trainingG   s
    "(r2   c                    | j                   rn|j                  \  }}}}| j                  j                  }t	        | j
                  ||f|| j                  rdn| j                        }|j                  |d|      }n| j
                  }| j                  rp||z   }t        j                  | j                  j                  |j                  d   dd      | j                  j                  |j                  d   dd      |fd      }not        j                  | j                  j                  |j                  d   dd      | j                  j                  |j                  d   dd      |fd      }||z   }| j                  |      S )Nr   )new_sizeold_sizer   r   )dim)dynamic_img_sizeshaper$   	grid_sizer	   r&   no_embed_classr   viewr    cat	cls_tokenexpandr#   pos_drop)r-   xBHWCprev_grid_sizer&   s           r1   
_pos_embedz%VisionTransformerDistilled._pos_embedK   sV     JAq!Q!--77N.Q''+':':!@V@V	I q"a AI IA		%%aggaj"b9&&qwwqz2r: 	A 		%%aggaj"b9&&qwwqz2r: 	A
 IA}}Qr2   
pre_logitsc                    |d d df   |d d df   }}|r||z   dz  S | j                  |      }| j                  |      }| j                  r.| j                  r"t        j
                  j                         s||fS ||z   dz  S )Nr   r   r   )r@   r*   r+   trainingr    jitis_scripting)r-   rU   r\   x_dists       r1   forward_headz'VisionTransformerDistilled.forward_headl   s    adGQq!tW6J!##IIaL'""t}}UYY=S=S=Uf9 J!##r2   r   Fr>   )T)__name__
__module____qualname____doc__r   r,   r    r_   ignorer;   r   ModulerA   intr   strrC   rF   r[   boolTensorrb   __classcell__)r0   s   @r1   r   r      s    '( YY
 
 YY)		 ) )kC khsm k
 YY) ) B$$ $5<< $r2   c                     |j                  dd      }|rt        nt        }t        || |ft	        t
        d      t        |d      d|}|S )Nout_indices   T)adapt_layer_scalegetter)rq   feature_cls)pretrained_filter_fnfeature_cfg)r   r   r
   r   r   r   r9   )variant
pretrained	distilledr/   rq   	model_clsmodels          r1   _create_deitr}   z   s]    **]A.K.7*=NI  %%9TR[hG E Lr2   c                 2    | ddd dddt         t        ddd|S )	Ni  )rr      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      s2    =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)rr     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           	      R    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.
             rr   
patch_sizer"   depth	num_headsry   )deit_tiny_patch16_224r9   r}   ry   r/   
model_argsr|   s       r1   r   r      s7    
 s"JJfZf4PZKe^dKefELr2   c           	      R    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   ry   )deit_small_patch16_224r   r   s       r1   r   r      s7    
 s"JJgjgDQ[Lf_eLfgELr2   c           	      R    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   ry   )deit_base_patch16_224r   r   s       r1   r   r     7    
 s"KJfZf4PZKe^dKefELr2   c           	      R    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   ry   )deit_base_patch16_384r   r   s       r1   r   r     r   r2   c           	      V    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   rr   r   Try   rz   )deit_tiny_distilled_patch16_224r   r   s       r1   r   r     sG    
 s"JJ)p6@DpTXYcTngmTnpELr2   c           	      V    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   Tr   ) deit_small_distilled_patch16_224r   r   s       r1   r   r   '  sG    
 s"JJ*q7ATqUYZdUohnUoqELr2   c           	      V    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   Tr   )deit_base_distilled_patch16_224r   r   s       r1   r   r   2  G    
 s"KJ)p6@DpTXYcTngmTnpELr2   c           	      V    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   Tr   )deit_base_distilled_patch16_384r   r   s       r1   r   r   =  r   r2   c           	      V    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   rO   init_valuesry   )deit3_small_patch16_224r   r   s       r1   r   r   H  =    
 s"Z^lpqJhzhTR\Mg`fMghELr2   c           	      V    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   ry   )deit3_small_patch16_384r   r   s       r1   r   r   R  r   r2   c           	      V    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   ry   )deit3_medium_patch16_224r   r   s       r1   r   r   \  s=    
 s"Z^lpqJi
idS]NhagNhiELr2   c           	      V    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   ry   )deit3_base_patch16_224r   r   s       r1   r   r   f  =    
 s"[_mqrJgjgDQ[Lf_eLfgELr2   c           	      V    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   ry   )deit3_base_patch16_384r   r   s       r1   r   r   p  r   r2   c           	      V    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   ry   )deit3_large_patch16_224r   r   s       r1   r   r   z  =    
 t2\`nrsJhzhTR\Mg`fMghELr2   c           	      V    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   ry   )deit3_large_patch16_384r   r   s       r1   r   r     r   r2   c           	      V    t        dddddd      }t        d	d| it        |fi |}|S )
r      i       r   Tr   r   ry   )deit3_huge_patch14_224r   r   s       r1   r   r     s=    
 t2\`nrsJgjgDQ[Lf_eLf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)FFrc   rd   ),rh   	functoolsr   typingr   r    r   	timm.datar   r   timm.layersr	   timm.models.vision_transformerr
   r   r   _builderr   	_registryr   r   r   __all__r   r}   r   default_cfgsr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   re    r2   r1   <module>r      s  	     A . a a * Y Y'
([$!2 [$| % ^&#TT&V^&
 %dU'W^& $TT&V^& $TT 3&0^&  .t^(0*!^&( /_(1*)^&0 .t^(0*1^&8 .t^ 3(	0*9^&D &tI(KE^&J &tI 3(0K^&R 'J)LS^&X %dH'JY^&^ %dH 3'0_^&f &tI(Kg^&l &tI 3(0m^&t %dH'Ju^&| /J1}^&D 15J 310 26K2 04I0 04I 300 15J1 15J 310 04L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   