o
    i                     @   s  d dl mZ d dlmZ d dlZddlmZmZ G d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dZdej	ddedeee
f fdd Zdej	ddedeee
f fd!d"Zdej	ddedeee
f fd#d$Zdej	ddedeee
f fd%d&Zdej	ddedeee
f fd'd(Zdej	ddedeee
f fd)d*Zdej	ddedeee
f fd+d,Zdej	ddedeee
f fd-d.ZdS )/    )Enum)UnionN   )_DINOV2_BASE_URL_make_dinov2_model_namec                   @   s   e Zd ZdZdS )WeightsLVD142MN)__name__
__module____qualname__r    r   r   :/data/cameron/moge_repo/moge/model/dinov2/hub/backbones.pyr      s    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              
   K   s   ddl m} t|
tr zt|
 }
W n ty   td|
 w t| |}t||||||||d}|j	di | |j
|  di |}|	ret| ||}td| d| d }tjj|dd}|j|d	d
 |S )N   )vision_transformerzUnsupported weights: )r   r   r   r   r   r   r   r   /z_pretrain.pthZcpu)Zmap_locationT)strictr   )Zmodelsr   
isinstancestrr   KeyErrorAssertionErrorr   dictupdate__dict__r   torchhubZload_state_dict_from_urlZload_state_dict)r   r   r   r   r   r   r   r   r   r   r   kwargsZvitsZmodel_base_nameZ
vit_kwargsmodelZmodel_full_nameurlZ
state_dictr   r   r   _make_dinov2_model   s4   


r,   )r   r   c                 K      t dd| |d|S )zP
    DINOv2 ViT-S/14 model (optionally) pretrained on the LVD-142M dataset.
    	vit_smallr   r   r   Nr   r,   r   r   r)   r   r   r   dinov2_vits14@      r2   c                 K   r-   )zP
    DINOv2 ViT-B/14 model (optionally) pretrained on the LVD-142M dataset.
    vit_baser/   Nr   r0   r1   r   r   r   dinov2_vitb14G   r3   r5   c                 K   r-   )zP
    DINOv2 ViT-L/14 model (optionally) pretrained on the LVD-142M dataset.
    r   r/   Nr   r0   r1   r   r   r   dinov2_vitl14N   r3   r6   c                 K   s   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   Nr   r0   r1   r   r   r   dinov2_vitg14U   s   r9   c              	   K      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   Nr   r0   r1   r   r   r   dinov2_vits14_regb      r>   c              	   K   r:   )z_
    DINOv2 ViT-B/14 model with registers (optionally) pretrained on the LVD-142M dataset.
    r4   r;   Tr<   r=   Nr   r0   r1   r   r   r   dinov2_vitb14_regq   r?   r@   c              	   K   r:   )z_
    DINOv2 ViT-L/14 model with registers (optionally) pretrained on the LVD-142M dataset.
    r   r;   Tr<   r=   Nr   r0   r1   r   r   r   dinov2_vitl14_reg   r?   rA   c              
   K   s   t ddd|| dddd|S )	z_
    DINOv2 ViT-g/14 model with registers (optionally) pretrained on the LVD-142M dataset.
    r7   r8   r;   Tr<   )r   r   r   r   r   r   r   Nr   r0   r1   r   r   r   dinov2_vitg14_reg   s   rB   )enumr   typingr   r'   Zutilsr   r   r   r   r!   intfloatboolr,   r2   r5   r6   r9   r>   r@   rA   rB   r   r   r   r   <module>   s^   	


$.$$$$$$(