o
    qci`                     @   s   d Z ddlZddlmZ ddlZddlZddlmZ ddl	m  m
Z edZejdee ddlmZmZmZmZmZ ddlmZmZmZ eZdZdZd	Zd
ZdZd
Zg dZ g dZ!g dZ"G dd dej#Z$dS )zSVD Video Policy model - wraps SVDFeatureExtractor + ParaHeads
in the same interface as TrajectoryHeatmapPredictor for eval.py compatibility.    N)Pathz0/data/cameron/vidgen/svd_motion_lora/Motion-LoRA)SVDFeatureExtractor	ParaHeadsCOMBINED_FEAT_DIMPARA_OUT_SIZEN_WINDOW)N_HEIGHT_BINSN_GRIPPER_BINS
N_ROT_BINSi  )i@  i@                ?g      )n!	r   r   )n!	@r   r   )r   r   r   r   c                       s,   e Zd ZdZd fdd	Zd	ddZ  ZS )
SVDParaPredictorz3SVD Video Policy compatible with eval.py interface.cudac              	      s~   t    t|||d| _ttttd| _d| _	t| _
| dtg ddddd | dtg d	dddd d S )
N)Zsvd_base_pathZsvd_unet_pathdevice)Zfeat_dimZpara_out_sizen_windowi   img_mean)g
ףp=
?gv/?gCl?      img_std)gZd;O?gy&1?g?)super__init__r   svd_extractorr   r   r   r   
para_heads	embed_dimr   register_buffertorchtensorview)selfsvd_basesvd_unetr   	__class__ +/data/cameron/para_videopolicy/model_svd.pyr   #   s   
"&zSVDParaPredictor.__init__Nc                 C   s   || j  | j }|dd}tj|tddd}t  | j	|}W d   n1 s,w   Y  | j
||d\}}}	}
||	|
|fS )a  
        Args:
            rgb: (B, 3, 448, 448) ImageNet-normalized
            start_keypoint_2d: (B, 2) - not used currently
            query_pixels: (B, N_WINDOW, 2) in PRED_SIZE coords
        Returns:
            volume_logits: (B, N_WINDOW, N_HEIGHT_BINS, PRED_SIZE, PRED_SIZE)
            gripper_logits: (B, N_WINDOW, N_GRIPPER_BINS) or None
            rotation_logits: (B, N_WINDOW, 3, N_ROT_BINS) or None
            feats: (B, D, PRED_SIZE, PRED_SIZE)
        r   r   bilinearF)sizemodealign_cornersN)query_pixels)r   r   clampFinterpolateSVD_SIZEr   no_gradr   Zextract_featuresr   )r    rgbZstart_keypoint_2dr+   Zrgb_01Zrgb_svdZfeatures
vol_logitsfeatsgrip_logits
rot_logitsr%   r%   r&   forward6   s   
zSVDParaPredictor.forward)r   )NN)__name__
__module____qualname____doc__r   r6   __classcell__r%   r%   r#   r&   r       s    r   )%r:   syspathlibr   numpynpr   torch.nnnntorch.nn.functional
functionalr-   ZSVD_ROOTpathinsertstrtrain_svd_parar   r   r   r   r   r   r	   r
   Z	PRED_SIZE
IMAGE_SIZEr/   
MIN_HEIGHT
MAX_HEIGHTMIN_GRIPPERMAX_GRIPPERMIN_ROTMAX_ROTZREF_ROTATION_QUATModuler   r%   r%   r%   r&   <module>   s,    