o
    *j                     @   sv   d dl 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 ejejdG d	d
 d
eZdS )    N)Hooks)HOOKS)LogKeys)master_only   )
LoggerHook)module_namec                       sx   e Zd ZdZdddddejejgf fdd	Ze  fdd	Z	e d
d Z
dd Z fddZe dd Z  ZS )TensorboardHooka  
    TensorBoard hook for visualization.

    Args:
        out_dir: output directory to save tensorboard files
        interval (int): Logging interval (every k iterations).
        ignore_last (bool): Ignore the log of last iterations in each epoch
            if less than `interval`.
        reset_flag (bool): Whether to clear the output buffer after logging.
        by_epoch (bool): Whether EpochBasedtrainer is used.
        skip_keys (list): list of keys which will not add to tensorboard
    N
   TFc                    s(   t t| j||||d || _|| _d S )N)intervalignore_last
reset_flagby_epoch)superr	   __init__out_dir	skip_keys)selfr   r   r   r   r   r   	__class__ r/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/trainers/hooks/logger/tensorboard_hook.pyr      s   

zTensorboardHook.__init__c              
      s   t t| | zddlm} W n ty# } zt|jd d }~ww | jd u r2tj	
|jd| _|jd| j  || j| _d S )Nr   )SummaryWriterz Please pip install tensorboard by ``pip install future tensorboard`` or upgrade version by ``pip install future tensorboard --upgrade``.Ztensorboard_outputz#tensorboard files will be saved to )r   r	   
before_runZtorch.utils.tensorboardr   ImportErrormsgr   ospathjoinZwork_dirloggerinfowriter)r   trainerr   er   r   r   r   ,   s   

zTensorboardHook.before_runc                 C   s   t |jjdkr| | |jj D ]-\}}|| jv rqt|tr.| j	
||| | q| |r?| j	||| | q	 q| j	  d S )Nr   )lenvisualization_bufferoutputvisualization_logZ
log_bufferitemsr   
isinstancestrr!   add_textget_iterZ	is_scalarZ
add_scalarflush)r   r"   keyvalr   r   r   log>   s   



zTensorboardHook.logc                 C   s   |j j}| D ]i\}}|dg }|dd}|dur(t|t|ks(J dt|D ]D\}}t|tjr<t	
|}nt|t	jsPJ dt| d||  d| }	|dur\|| n|	}
| jj| d|
 || |d	d
 q,qdS )z Images Visulization.
        `visualization_buffer` is a dictionary containing:
            images (list): list of visulaized images.
            filenames (list of str, optional): image filenames.
        images	filenamesNz:Output `images` and `filenames` must keep the same length!z3Only support np.ndarray and torch.Tensor type! Got z	 for img zimage_%i/ZHWC)Zdataformats)r%   r&   r(   getr$   	enumerater)   npZndarraytorchZ
from_numpyZTensortyper!   Z	add_imager,   )r   r"   Zvisual_resultsZvis_keyZ
vis_resultr1   r2   iZimgdefault_namefilenamer   r   r   r'   M   sB   z!TensorboardHook.visualization_logc                    s   t t| | |j  d S N)r   r	   after_train_iterr%   clear_outputr   r"   r   r   r   r=   m   s   z TensorboardHook.after_train_iterc                 C   s   | j   d S r<   )r!   closer?   r   r   r   	after_runs   s   zTensorboardHook.after_run)__name__
__module____qualname____doc__r   Z	ITER_TIMEZDATA_LOAD_TIMEr   r   r   r0   r'   r=   rA   __classcell__r   r   r   r   r	      s"    

 r	   )r   numpyr6   r7   Zmodelscope.metainfor   Z!modelscope.trainers.hooks.builderr   Zmodelscope.utils.constantr   Zmodelscope.utils.torch_utilsr   baser   Zregister_moduler	   r   r   r   r   <module>   s   