
    ^joJ                        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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)OptionalTypeN)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                    |j                  dd      }t        |   |i |ddi | j                  dv sJ |j	                  dd       |j	                  dd       d}d| _        t        j                  t        j                  d	d	| j                  fi |      | _        t        j                  t        j                  d	| j                  j                  | j
                  z   | j                  fi |      | _        | j                  d
kD  r+t        j                   | j                  | j                  fi |nt        j"                         | _        d| _        |dk(  rdn|| _        |dk7  r| j+                  d       y y )Nweight_init skip)tokendevicedtype)r   r      r   r   Freset)needs_reset)popsuper__init__global_poolgetnum_prefix_tokensr   	Parametertorchempty	embed_dim
dist_tokenpatch_embednum_patches	pos_embednum_classesLinearIdentity	head_distdistilled_trainingweight_init_modeinit_weights)selfargskwargsr   dd	__class__s        [/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/models/deit.pyr!   z#VisionTransformerDistilled.__init__#   sD   jj3$=&=f=:---

8T2VZZQU=VW!",,u{{1a'N2'NOKK4++77$:P:PPRVR`R`gdfgiNRN^N^abNb4>>43C3CJrJhjhshshu"'+6&+@k& %0 !    c                 v    |xs | j                   }t        | j                  d       t        |   ||       y )Ng{Gz?)std)moder   )r2   r   r)   r    r3   )r4   r=   r   r8   s      r9   r3   z'VisionTransformerDistilled.init_weights5   s3    ,t,,doo3/$K@r:   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)r4   coarses     r9   group_matcherz(VisionTransformerDistilled.group_matcher:   s    ?)$&
 	
r:   returnc                 2    | j                   | j                  fS Nheadr0   )r4   s    r9   get_classifierz)VisionTransformerDistilled.get_classifierC   s    yy$..((r:   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/   rH   r0   )r4   r-   r"   s      r9   reset_classifierz+VisionTransformerDistilled.reset_classifierG   se    &>IAoBIIdnnk:SUS^S^S`	HSVW4>>43C3CD]_]h]h]jr:   c                     || _         y rF   )r1   )r4   enables     r9   set_distilled_trainingz1VisionTransformerDistilled.set_distilled_trainingL   s
    "(r:   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)r4   xBHWCprev_grid_sizer,   s           r9   
_pos_embedz%VisionTransformerDistilled._pos_embedP   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r:   
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   )rH   r0   r1   trainingr&   jitis_scripting)r4   r]   rd   x_dists       r9   forward_headz'VisionTransformerDistilled.forward_headq   s    adGQq!tW6J!##IIaL'""t}}UYY=S=S=Uf9 J!##r:   )r   TFrF   )T)__name__
__module____qualname____doc__r!   r3   r&   rg   ignorerC   r   ModulerI   intr   strrK   rN   rc   boolTensorrj   __classcell__)r8   s   @r9   r   r      s    1$A
 YY
 
 YY)		 ) )kC khsm k
 YY) ) B$$ $5<< $r:   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)rx   feature_cls)pretrained_filter_fnfeature_cfg)r   r   r   r   r   r   rA   )variant
pretrained	distilledr6   rx   	model_clsmodels          r9   _create_deitr      s]    **]A.K.7*=NI  %%9TR[hG E Lr:   c                 4    | ddd dddt         t        dddd	|S )
Ni  )ry      r   g?bicubicTzpatch_embed.projrH   z
apache-2.0)urlr-   
input_size	pool_sizecrop_pctinterpolationfixed_input_sizemeanr<   
first_conv
classifierlicenser   )r   r6   s     r9   _cfgr      s5    =t%.B(  r:   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)ry     r   g      ?)r   r   r   r   z'deit_tiny_distilled_patch16_224.fb_in1kzPhttps://dl.fbaipublicfiles.com/deit/deit_tiny_distilled_patch16_224-b40b3cf7.pthrG   )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_in1krD   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.
             ry   
patch_sizer(   depth	num_headsr   )deit_tiny_patch16_224rA   r   r   r6   
model_argsr   s       r9   r   r      s7    
 s"JJfZf4PZKe^dKefELr:   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   r   )deit_small_patch16_224r   r   s       r9   r   r     s7    
 s"JJgjgDQ[Lf_eLfgELr:   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   r   )deit_base_patch16_224r   r   s       r9   r   r     7    
 s"KJfZf4PZKe^dKefELr:   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   r   )deit_base_patch16_384r   r   s       r9   r   r     r   r:   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   ry   r   Tr   r   )deit_tiny_distilled_patch16_224r   r   s       r9   r   r   "  sG    
 s"JJ)p6@DpTXYcTngmTnpELr:   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       r9   r   r   -  sG    
 s"JJ*q7ATqUYZdUohnUoqELr:   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       r9   r   r   8  G    
 s"KJ)p6@DpTXYcTngmTnpELr:   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       r9   r   r   C  r   r:   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   rW   init_valuesr   )deit3_small_patch16_224r   r   s       r9   r   r   N  =    
 s"Z^lpqJhzhTR\Mg`fMghELr:   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   r   )deit3_small_patch16_384r   r   s       r9   r   r   X  r   r:   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   r   )deit3_medium_patch16_224r   r   s       r9   r   r   b  s=    
 s"Z^lpqJi
idS]NhagNhiELr:   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   r   )deit3_base_patch16_224r   r   s       r9   r   r   l  =    
 s"[_mqrJgjgDQ[Lf_eLfgELr:   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   r   )deit3_base_patch16_384r   r   s       r9   r   r   v  r   r:   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   r   )deit3_large_patch16_224r   r   s       r9   r   r     =    
 t2\`nrsJhzhTR\Mg`fMghELr:   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   r   )deit3_large_patch16_384r   r   s       r9   r   r     r   r:   c           	      V    t        dddddd      }t        d	d| it        |fi |}|S )
r      i       r   Tr   r   r   )deit3_huge_patch14_224r   r   s       r9   r   r     s=    
 t2\`nrsJgjgDQ[Lf_eLfgELr:   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)FF)r   rk   )-ro   	functoolsr   typingr   r   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   rl    r:   r9   <module>r      s  	  !   A . a a * Y Y'
(`$!2 `$F	 % ^&#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	' 	r:   