o
    {i                     @   s   d dl Z d dlmZ d dlZd dlmZ ddlmZmZm	Z
mZ ddlmZ G dd deZd	d
eje
jdejddededeeB de
eB dedejfddZd
eje
jdejddedeeB de
eB dedejf
ddZdS )    N)Enum)build_segmentation_decoder   )dinov3_vit7b16dinov3_vitl16Weightsconvert_path_or_url_to_url)DINOV3_BASE_URLc                   @   s   e Zd ZdZdS )SegmentorWeightsADE20KN)__name__
__module____qualname__r    r   r   A/data/cameron/keygrip/volume_dino_tracks/dinov3/hub/segmentors.pyr
      s    r
   r   TFbackbone_name
pretrainedsegmentor_weightsbackbone_weights
check_hashautocast_dtyper   r   r   r   r   r   c                 K   s,  | dkrt |||d}n| dkrt|||d}ntd|  d|vr%dn|d }t|| d||d}	|rt|tu ri|tjksFJ d	| |j }
d
|v rS|d
 nd}|  d|
 d| d}t	j
t| |}nt|}tjj|d|d}|	j|dd\}}tdd |D dksJ t|dksJ |	S )Nr   )r   weightsr   r   z4No pretrained segmentation checkpoint available for 
hidden_dimi   Zm2f)backbone_modelr   decoder_typer   r   z#Unsupported weights for segmentor: hashZbf307cb1_z
_m2f_head-z.pthcpu)map_locationr   F)strictc                 S   s   g | ]}d |vr|qS )backboner   ).0kr   r   r   
<listcomp>=   s    z._make_dinov3_m2f_segmentor.<locals>.<listcomp>r   )r   r   AssertionErrorr   typer
   r   valuelowerospathjoinr	   r   torchhubload_state_dict_from_urlload_state_dictlen)r   r   r   r   r   r   kwargsr   r   Z	segmentorZsegmentor_weights_namer   model_filenameurl
state_dictmissing_keysunexpected_keysr   r   r   _make_dinov3_m2f_segmentor   s4   

r7   )r   r   r   r   r   r   c              	   K   s   t dd| ||||d|S )Nr   r   r   )r7   )r   r   r   r   r   r1   r   r   r   dinov3_vit7b16_msC   s   	r8   )r)   enumr   r,   Zdinov3.eval.segmentation.modelsr   	backbonesr   r   r   BackboneWeightsr   utilsr	   r
   r   LVD1689Mbfloat16strbooldtyper7   r8   r   r   r   r   <module>   sT   
,