o
    #i                     @   s  d dl Z d dlZd dlZeje  d dlZed d dlZd dl	m
Z
 d dlmZ d dlmZ d dlmZ d dlZd dlZd dlmZ d dlmZ d d	lmZ d d
lmZ d dlmZmZmZmZ g dfddZG dd deZ dd Z!e"dkre!  dS dS )    Nignore)nullcontext)	OmegaConf)autocast)tqdm)	rearrange)seed_everything)VidTokValDataset)LPIPS)compute_psnrcompute_ssiminstantiate_from_configprint0Fc                 C   s6   t | } || jj_|| jj_|| jj_t| j}|S )N)r   loadmodelparams	ckpt_pathignore_keysverboser   )configckptr   r   r    r   9/data/cameron/vidgen/VidTok/scripts/inference_evaluate.pyload_model_from_config   s   




r   c                       s8   e Zd Z							d fdd	Z fd	d
Z  ZS )MultiVideoDatasetN         TFc	           	   
      s6   t  j|||||r|d n||ddd|||d d S )N   )input_heightinput_widthZsample_num_frames
sample_fpsTrepeat)data_dir	meta_pathZvideo_paramsZpre_load_framesZlast_frames_handleread_long_video
chunk_size	is_causal)super__init__)	selfr#   r$   r   r    r!   r&   r'   r%   	__class__r   r   r)   $   s   
zMultiVideoDataset.__init__c                    s   t  |d }|S )Njpg)r(   __getitem__)r*   idxframesr+   r   r   r.   ?   s   zMultiVideoDataset.__getitem__)Nr   r   r   r   TF)__name__
__module____qualname__r)   r.   __classcell__r   r   r+   r   r   #   s    r   c                  C   s  t  } | jdtddd | jdtdddgdd	 | jd
tddd | jdtddd | jdtddd | jdtd dd | jdtddd | jdtddd | jdtddd | jdtddd | jd d!d" |  }t|j td#|j	  t
j rt
d$nt
d%}|jdkrtnt}t|j|j	}||  |j|jj d&ksJ |jrt|d'sJ d(td) |  |j|_|j|jj |_|jdkr|  t|j |j!|j"|j|j#|j|j$|jd*}t
j%j&j'|d+d,d-}t(  }||}g g g }}	}
t
)  |d$ t** }t+t,|D ]\}}||}||\}}}|-d.d+}t.d/d0 ||f\}}|/ d1krRt0|d2}|/ d1ksMJ t0|d2}t1t
2|dt
2|dD ]<\}}|t3||4 g|j5d&  7 }|	t6||4 g|j5d&  7 }	|
||d3 d+ |d3 d+ 7 4 g|j5d&  7 }
q_qt** }td4t87|d5d6t87|	d5d7t87|
d5 td8|| d9d: W d    n1 sw   Y  W d    d S W d    d S 1 sw   Y  d S );Nz--seed*   z$the seed (for reproducible sampling))typedefaulthelpz--precisionzevaluate at this precisionfullr   )r6   r8   choicesr7   z--configz&configs/vidtok_kl_causal_488_4chn.yamlz%path to config which constructs modelz--ckptz*checkpoints/vidtok_kl_causal_488_4chn.ckptzpath to checkpoint of modelz
--data_dirz./zroot folderz--meta_pathzpath to the .csv meta filez--input_heightr   zheight of the input videoz--input_widthzwidth of the input videoz--sample_fpsr   z
sample fpsz--chunk_sizer   z?the size of a chunk - we split a long video into several chunksz--read_long_video
store_true)actionzD[bold red]\[scripts.inference_evaluate][/bold red] Evaluating model cudacpur   
use_tilingz@Tiling inference is needed to conduct long video reconstruction.z.Using tiling inference to save memory usage...)r#   r$   r   r    r!   r&   r'   r%   r   F)
batch_sizeshufflec                 S   s   | d d S )Nr      r   )xr   r   r   <lambda>   s    zmain.<locals>.<lambda>   zb c t h w -> (b t) c h wrC   z9[bold red]\[scripts.inference_evaluate][/bold red] PSNR: z.4fz, SSIM: z	, LPIPS: z?[bold red]\[scripts.inference_evaluate][/bold red] Time taken: z.2fs)9argparseArgumentParseradd_argumentintstr
parse_argsr   seedr   r   torchr=   is_availabledevice	precisionr   r   r   r   toevalr&   encodertime_downsample_factorr%   hasattrprintZenable_tilingt_chunk_enct_chunk_decr    r   r#   r$   r   r!   r'   utilsdata
DataLoaderr
   no_gradtimer   	enumerateclampmapdimr   zipsplitr   itemshaper   meannp)parserargsrQ   precision_scoper   dataset
dataloaderZperceptual_lossZpsnrsZssimsZlpipssticiinput_outputZreg_loginpouttocr   r   r   mainD   s   







"6,Trw   __main__)#rH   ossyspathappendgetcwdwarningsfilterwarningsr_   
contextlibr   	omegaconfr   rO   r   r   numpyri   einopsr   lightning.pytorchr   Zvidtok.data.vidtokr	   Zvidtok.modules.lpipsr
   vidtok.modules.utilr   r   r   r   r   r   rw   r1   r   r   r   r   <module>   s2    
	! 
