a
    d	                     @   s   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
 d dlmZmZmZ d dlmZ d d	lmZ d
dlmZ e G dd deZdS )    N)Counter)path)distributed)tqdm)calculate_metric)get_root_loggerimwrite
tensor2img)get_dist_info)MODEL_REGISTRY   )SRModelc                   @   s(   e Zd ZdZdd Zdd Zdd ZdS )	VideoBaseModelzBase video SR model.c              
   C   s  |j }|jd }| jd d d u}|rt| ds~i | _t|jd }| D ]0\}	}
tj|
t	| jd d tj
dd| j|	< qL| | t \}}|r| j D ]\}}|  qt }|dkrtt	|d	d
}t|t	||D ]2}|| }|d d |d d |d }	|d d\}}|d }| | |   |  }t|d g}||d< d|v rt|d g}||d< | `| `| `tj  |r~| jd rtdnd| v r|d}|d  d|d  d|d dd  }ntt |d }| jd d rHt!| jd d ||	| d| jd d  d}n,t!| jd d ||	| d| jd  d}t"|| |rt#| jd d $ D ]2\}}t%||}| j|	 t&||f  |7  < q|dkrt|D ]4}|'d |(d |	 d!t&||  d|  qq|dkr(|)  |r~| jd" rf| j D ]\}}t*+|d qDt*,  n |dkr~| -||| d S )#Nnamevalmetricsmetric_resultsfoldercuda)ZdtypeZdevicer   frame)totalunitlqgtidx/lq_pathresultimgZimg2Zis_trainz.saving image is not supported during training.Zvimeo_.suffixr   Zvisualizationz.pngr   zTest : dist).datasetopthasattrr   r   	data_infoitemstorchzeroslenfloat32Z_initialize_best_metric_resultsr
   Zzero_dictr   rangeZ
unsqueeze_splitZ	feed_datatestZget_current_visualsr	   r   r   outputr   Zempty_cacheNotImplementedErrorlowerospsplitextbasenamejoinr   	enumeratevaluesr   intupdateset_descriptioncloser&   reduceZbarrier_log_validation_metric_values)self
dataloadercurrent_iter	tb_loggersave_imgr'   dataset_nameZwith_metricsZnum_frame_each_folderr   Z	num_frameZrankZ
world_sizer    tensorZmetric_dataZpbarr   Zval_dataZ	frame_idxZmax_idxr   ZvisualsZ
result_imgZgt_imgZsplit_resultZimg_nameZsave_img_path
metric_idxZopt_r    rK   h/var/www/html/stable-diffusion-webui/venv/lib/python3.9/site-packages/basicsr/models/video_base_model.pydist_validation   s    









,

"
*


zVideoBaseModel.dist_validationc                 C   s$   t  }|d | |||| d S )Nz;nondist_validation is not implemented. Run dist_validation.)r   warningrM   )rC   rD   rE   rF   rG   loggerrK   rK   rL   nondist_validationq   s    
z!VideoBaseModel.nondist_validationc                 C   s  dd | j  D }dd | jd d  D }| D ]:\}}t| D ]$\}}	||	  || |  7  < qLq8| D ],}	||	  t|  < | ||	||	 | q|d| d}
t| D ]\}\}	}|
d|	 d	|d
7 }
| D ]&\}}|
d| d	||  d
7 }
qt| drT|
d| j	| |	 d d
d| j	| |	 d  d7 }
|
d7 }
qt
 }||
 |rt| D ]X\}\}	}|d|	 || | D ],\}}|d|	 d| ||  | qqd S )Nc                 S   s$   i | ]\}}|t j|d d qS )r   )Zdim)r,   meancpu).0r   rI   rK   rK   rL   
<dictcomp>}   s   z@VideoBaseModel._log_validation_metric_values.<locals>.<dictcomp>c                 S   s   i | ]
}|d qS )r   rK   )rS   metricrK   rK   rL   rT          r   r   zValidation 
z	 # r%   z.4fbest_metric_resultsz
	    Best: z @ iterz iterzmetrics/r   )r   r+   r(   keysr;   itemr.   Z_update_best_metric_resultr)   rX   r   infoZ
add_scalar)rC   rE   rH   rF   Zmetric_results_avgZtotal_avg_resultsr   rI   r   rU   Zlog_strrJ   valuerO   rK   rK   rL   rB   v   s6      


z,VideoBaseModel._log_validation_metric_valuesN)__name__
__module____qualname____doc__rM   rP   rB   rK   rK   rK   rL   r      s   _r   )r,   collectionsr   osr   r7   r   r&   r   Zbasicsr.metricsr   Zbasicsr.utilsr   r   r	   Zbasicsr.utils.dist_utilr
   Zbasicsr.utils.registryr   Zsr_modelr   registerr   rK   rK   rK   rL   <module>   s   