
    0	h                     f   d dl mZ d dlmZ d dlZddlmZmZ  G d de      Zdd	d
ddd d dddej                  dde
dededede
dedededededeee
f   fdZdej                  ddedeee
f   fdZdej                  ddedeee
f   fdZdej                  ddedeee
f   fd Zdej                  ddedeee
f   fd!Zdej                  ddedeee
f   fd"Zdej                  ddedeee
f   fd#Zdej                  ddedeee
f   fd$Zdej                  ddedeee
f   fd%Zy)&    )Enum)UnionN   )_DINOV2_BASE_URL_make_dinov2_model_namec                       e Zd ZdZy)WeightsLVD142MN)__name__
__module____qualname__r
        K/home/cameronsmith/repos/controll3r/MoGe/moge/model/dinov2/hub/backbones.pyr	   r	      s    Gr   r	   	vit_largei     g      ?mlpFg?T)	arch_nameimg_size
patch_sizeinit_values	ffn_layerblock_chunksnum_register_tokensinterpolate_antialiasinterpolate_offset
pretrainedweightsr   r   r   r   r   r   r   r   r   r   r   c           
         ddl m} t        |
t              r
	 t        |
   }
t        | |      }t        ||||||||      } |j                  di |  |j                  |    di |}|	rQt        | ||      }t        d| d| dz   }t        j                  j                  |d      }|j                  |d	
       |S # t
        $ r t        d|
       w xY w)N   )vision_transformerzUnsupported weights: )r   r   r   r   r   r   r   r   /z_pretrain.pthcpu)map_locationT)strictr   )modelsr!   
isinstancestrr	   KeyErrorAssertionErrorr   dictupdate__dict__r   torchhubload_state_dict_from_urlload_state_dict)r   r   r   r   r   r   r   r   r   r   r   kwargsvitsmodel_base_name
vit_kwargsmodelmodel_full_nameurl
state_dicts                      r   _make_dinov2_modelr:      s    4'3	Dg&G .iDO!/3-	J J$DMM)$2z2E1)ZI\]1_$5Q6G}!UUYY77%7P
j6L/  	D #8	!BCC	Ds   	B< <C)r   r   c                      t        dd| |d|S )zP
    DINOv2 ViT-S/14 model (optionally) pretrained on the LVD-142M dataset.
    	vit_smallr   r   r   r   r:   r   r   r2   s      r   dinov2_vits14r@   @        f
T[f_effr   c                      t        dd| |d|S )zP
    DINOv2 ViT-B/14 model (optionally) pretrained on the LVD-142M dataset.
    vit_baser=   r   r>   r?   s      r   dinov2_vitb14rD   G   s     e
zSZe^deer   c                      t        dd| |d|S )zP
    DINOv2 ViT-L/14 model (optionally) pretrained on the LVD-142M dataset.
    r   r=   r   r>   r?   s      r   dinov2_vitl14rF   N   rA   r   c                 "    t        ddd|| d|S )zP
    DINOv2 ViT-g/14 model (optionally) pretrained on the LVD-142M dataset.
    
vit_giant2swiglufused)r   r   r   r   r   r>   r?   s      r   dinov2_vitg14rJ   U   s,      	
  r   c           
      &    t        dd| |dddd|S )z_
    DINOv2 ViT-S/14 model with registers (optionally) pretrained on the LVD-142M dataset.
    r<      T        r   r   r   r   r   r   r   r>   r?   s      r   dinov2_vits14_regrO   b   2      "  r   c           
      &    t        dd| |dddd|S )z_
    DINOv2 ViT-B/14 model with registers (optionally) pretrained on the LVD-142M dataset.
    rC   rL   TrM   rN   r   r>   r?   s      r   dinov2_vitb14_regrR   q   s2      "  r   c           
      &    t        dd| |dddd|S )z_
    DINOv2 ViT-L/14 model with registers (optionally) pretrained on the LVD-142M dataset.
    r   rL   TrM   rN   r   r>   r?   s      r   dinov2_vitl14_regrT      rP   r   c                 (    t        ddd|| dddd|S )z_
    DINOv2 ViT-g/14 model with registers (optionally) pretrained on the LVD-142M dataset.
    rH   rI   rL   TrM   )r   r   r   r   r   r   r   r   r>   r?   s      r   dinov2_vitg14_regrV      s5      	"	 	 	r   )enumr   typingr   r.   utilsr   r   r	   r
   r(   intfloatboolr:   r@   rD   rF   rJ   rO   rR   rT   rV   r   r   r   <module>r]      s      <d  ! "' ##*??++ + 	+
 + + + +  + + + 7C< +\ )-W__ g guWc\7J g )-W__ f fuWc\7J f )-W__ g guWc\7J g )-W__ 
 
uWc\7J 
 -1QXQ`Q` T 5#;N  -1QXQ`Q` T 5#;N  -1QXQ`Q` T 5#;N  -1QXQ`Q` T 5#;N r   