a
    Df@                  
   @   s  d Z ddl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ZmZ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
ZeeddZztddlZeedsJ eejedkredv rzej ddZ!W n ej"j#y   dZ!Y n0 e!sdZW n e$e%fy,   dZY n0 zddl&Z&ee&dsHJ W n e$e%fyf   dZ&Y n0 z8edvrzdZ'n$ddl'Z'ee'dsJ ddl(m)Z) W n e*e$e%fy   dZ'Y n0 G dd dZ+G dd dZ,dddZ-dd Z.dS )z
Logging utils
    NPath)SummaryWriter)LOGGERcolorstrcv2)ClearmlLogger)WandbLogger)plot_imagesplot_labelsplot_results)de_parallel)csvtbwandbclearmlcometRANK__version__z0.12.2>   r   r      )timeoutF)r   r   )CometLoggerc                   @   s   e Zd ZdddddefddZedd Zdd Zdd	 Zd
d Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd Zeddd ZdS )!LoggersNc                 C   s  || _ || _|| _|| _|j | _|| _|| _g d| _g d| _	t
D ]}t| |d  qFd| _tstd}| d}	| j|	 tstd}| d}	| j|	 | j }	d| jv r| jjstd	}| j| d
|	j d tt|	| _trd| jv r| j| j_t| j| _nd | _trvd| jv rvzt| j| j| _W n2 tyr   d | _td}t| d Y n0 nd | _trd| jv rt| jjtr| jjdr| jjdd }
t | j| j|
d| _!nt | j| j| _!nd | _!d S )N)ztrain/box_lossztrain/obj_lossztrain/cls_losszmetrics/precisionzmetrics/recallzmetrics/mAP_0.5zmetrics/mAP_0.5:0.95zval/box_losszval/obj_losszval/cls_losszx/lr0zx/lr1zx/lr2)z
best/epochzbest/precisionzbest/recallzbest/mAP_0.5zbest/mAP_0.5:0.95Tz	ClearML: ue   run 'pip install clearml' to automatically track, visualize and remotely train YOLOv5 🚀 in ClearMLzComet: uY   run 'pip install comet_ml' to automatically track and visualize YOLOv5 🚀 runs in Cometr   TensorBoard: !Start with 'tensorboard --logdir !', view at http://localhost:6006/r   r   u   WARNING ⚠️ ClearML is installed but not configured, skipping ClearML logging. See https://github.com/ultralytics/yolov5/tree/master/utils/loggers/clearml#readmer   zcomet:///r   )run_id)"save_dirweightsopthypnoplotsplotsloggerincludekeys	best_keysLOGGERSsetattrr   r   r   infocomet_mlevolveparentr   strr   r   r	   r   	Exceptionr   warning
isinstanceresume
startswithsplitr   comet_logger)selfr   r    r!   r"   r%   r&   kprefixsr    r;   L/data/NAS7/SABIOD/METHODE/ermites/yolo-dyni/yolov5/utils/loggers/__init__.py__init__;   sV    





 zLoggers.__init__c                 C   s2   d }| j r| j j}| jr | jj}| jr.| jj}|S N)r   	data_dictr   r6   )r7   r?   r;   r;   r<   remote_dataset   s    zLoggers.remote_datasetc                 C   s   | j r| j   d S r>   )r6   on_train_startr7   r;   r;   r<   rA      s    zLoggers.on_train_startc                 C   s   | j r| j   d S r>   )r6   on_pretrain_routine_startrB   r;   r;   r<   rC      s    z!Loggers.on_pretrain_routine_startc                 C   sV   | j rRt||| j | jd}| jr@| jddd |D i | jrR| j| d S )Nz*labels*.jpgZLabelsc                 S   s    g | ]}t jt||jd qS )captionr   Imager/   name.0xr;   r;   r<   
<listcomp>       z3Loggers.on_pretrain_routine_end.<locals>.<listcomp>)r$   r   r   globr   logr6   on_pretrain_routine_end)r7   labelsnamespathsr;   r;   r<   rP      s    zLoggers.on_pretrain_routine_endc           
      C   s   t t| jd d |}| jr|dk rx| jd| d }t|||| |dkrx| jrx| jjsxt	| j|| jj
| jj
fd |dkr| js| jrt| jd}	| jr| jdd	d
 |	D i | jr| jj|	dd | jr| jj||d d S )N   Ztrain_batchz.jpgr   )imgsz
   z
train*.jpgZMosaicsc                 S   s(   g | ] }|  rtjt||jd qS rD   )existsr   rG   r/   rH   rJ   fr;   r;   r<   rL      rM   z.Loggers.on_train_batch_end.<locals>.<listcomp>titlestep)dictzipr'   r$   r   r
   r   r!   sync_bnlog_tensorboard_graphrU   r   r   sortedrN   rO   log_debug_samplesr6   on_train_batch_end)
r7   modelniimgstargetsrS   valsZlog_dictrY   filesr;   r;   r<   rd      s    zLoggers.on_train_batch_endc                 C   s(   | j r|d | j _| jr$| j| d S )N   )r   current_epochr6   on_train_epoch_end)r7   epochr;   r;   r<   rm      s    zLoggers.on_train_epoch_endc                 C   s   | j r| j   d S r>   )r6   on_val_startrB   r;   r;   r<   ro      s    zLoggers.on_val_startc                 C   s6   | j r| j ||||| | jr2| j|||| d S r>   )r   Zval_one_imager   Zlog_image_with_boxes)r7   predprednpathrR   imr;   r;   r<   on_val_image_end   s    zLoggers.on_val_image_endc                 C   s    | j r| j |||||| d S r>   )r6   on_val_batch_end)r7   batch_irs   rh   rS   shapesoutr;   r;   r<   ru      s    zLoggers.on_val_batch_endc                 C   sz   | j s| jrt| jd}| j r<| j ddd |D i | jrR| jj|dd | jrv| j|||||||||	|

 d S )Nzval*.jpgZ
Validationc                 S   s    g | ]}t jt||jd qS rD   rF   rX   r;   r;   r<   rL      rM   z&Loggers.on_val_end.<locals>.<listcomp>rZ   )	r   r   rb   r   rN   rO   rc   r6   
on_val_end)r7   nttpfpprf1apap50ap_classconfusion_matrixrj   r;   r;   r<   ry      s    zLoggers.on_val_endc                 C   s  t t| j|}| jr| jd }t|d }| r8dn d| tdg| j  dd }t	|d:}	|	
|d	| t|g|  d d  W d    n1 s0    Y  | jr| D ]\}
}| j|
|| qn@| jr| D ].\}
}|
d
\}}| jj |||| q| jrz||krd|g|dd  }t| jD ]\}}|| | jjj|< qF| j| | j  | jrt | j_| j jd7  _| jr| jj||d d S )Nresults.csvrk    z%20s,rn   ,
az%20.5g,r   rT      )rn   )r^   r_   r'   r   r   lenrW   tuplerstripopenwriter   items
add_scalarr   r5   task
get_loggerZreport_scalarr   	enumerater(   	wandb_runsummaryrO   Z	end_epochsetZcurrent_epoch_logged_imagesrl   r6   on_fit_epoch_end)r7   ri   rn   best_fitnessfirK   filenr:   rY   r8   vr[   seriesZbest_resultsirH   r;   r;   r<   r      s4    
.H


zLoggers.on_fit_epoch_endc                 C   s   |d | j j dkrf|sf| j jdkrf| jrH| jj|j| j ||||kd | jrf| jjjt|ddd | j	r| j	
||||| d S )Nrk   r   r   )Z
best_modelzLatest ModelF)
model_path
model_nameauto_delete_file)r!   save_periodr   	log_modelr.   r   r   update_output_modelr/   r6   on_model_save)r7   lastrn   final_epochr   r   r;   r;   r<   r      s    $zLoggers.on_model_savec                    s   j rt jd d ddgdd dD } fdd	|D } jd
td j   jr js|D ]2} jj|j	t
t|dd d df |dd qh jr& jtt jdd |  jddd	 |D i  jjstjt| r|n|dd jjj dg dd  j   jr^ jjs^ jjjt| rP|n|ddd  jrtt jdd |} j| j|||| d S )Nr   )r   zresults.pngzconfusion_matrix.pngc                 s   s   | ]}| d V  qdS )z
_curve.pngNr;   rI   r;   r;   r<   	<genexpr>  rM   z'Loggers.on_train_end.<locals>.<genexpr>)F1ZPRPRc                    s$   g | ]} j |  r j | qS r;   )r   rW   rX   rB   r;   r<   rL     rM   z(Loggers.on_train_end.<locals>.<listcomp>zResults saved to bold.r   HWCZdataformatsrT   rV   Resultsc                 S   s    g | ]}t jt||jd qS rD   rF   rX   r;   r;   r<   rL     rM   re   run__model)latestbeststripped)typerH   aliasesz
Best ModelF)r   rH   r   )r$   r   r   r%   r+   r   r   r   	add_imagestemr   imreadr/   r   rO   r^   r_   r'   r!   r-   log_artifactrW   r   idZ
finish_runr   r   r6   on_train_end)r7   r   r   rn   resultsrj   rY   Zfinal_resultsr;   rB   r<   r     s4    0 

zLoggers.on_train_end)paramsc                 C   s0   | j r| j jjj|dd | jr,| j| d S NT)Zallow_val_change)r   r   configupdater6   on_params_updater7   r   r;   r;   r<   r   ,  s    zLoggers.on_params_update)__name__
__module____qualname__r)   r=   propertyr@   rA   rC   rP   rd   rm   ro   rt   ru   ry   r   r   r   r^   r   r;   r;   r;   r<   r   9   s    K
! r   c                   @   sL   e Zd ZdZdddZdd Zdd	d
ZdddZdi fddZdd Z	dS )GenericLoggera  
    YOLOv5 General purpose logger for non-task specific logging
    Usage: from utils.loggers import GenericLogger; logger = GenericLogger(...)
    Arguments
        opt:             Run arguments
        console_logger:  Console logger
        include:         loggers to include
    r   r   c                 C   s   t |j| _|| _|| _| jd | _d| jv rbtd}| j| d| jj d tt	| j| _
trd| jv rtjtt	|j|jdkrd n|j|d| _nd | _d S )	Nr   r   r   r   r   r   exp)projectrH   r   )r   r   r&   console_loggerr   r   r+   r.   r   r/   r   r   initweb_project_namer   rH   )r7   r!   r   r&   r9   r;   r;   r<   r=   >  s     

zGenericLogger.__init__c           
      C   s   | j rt| t|  }}t|d }| j  r:dnd| tdg|  dd }t| j d:}|	|d| t|g|  d d  W d    n1 s0    Y  | j
r| D ]\}}	| j
||	| q| jr| jj||d	 d S )
Nrk   r   z%23s,rn   r   r   r   z%23.5g,r\   )r   listr'   valuesr   rW   r   r   r   r   r   r   r   r   rO   )
r7   metricsrn   r'   ri   r   r:   rY   r8   r   r;   r;   r<   log_metricsQ  s    .HzGenericLogger.log_metricsImagesr   c                 C   s   dd t |ttfr|n|gD }dd |D }| jrn|D ]2}| jj|jtt|dd d df |dd q:| j	r| j	j
|dd |D i|d	 d S )
Nc                 S   s   g | ]}t |qS r;   r   rX   r;   r;   r<   rL   c  rM   z,GenericLogger.log_images.<locals>.<listcomp>c                 S   s   g | ]}|  r|qS r;   )rW   rX   r;   r;   r<   rL   d  rM   .r   r   r   c                 S   s    g | ]}t jt||jd qS rD   rF   rX   r;   r;   r<   rL   k  rM   r\   )r2   r   r   r   r   r   r   r   r/   r   rO   )r7   rj   rH   rn   rY   r;   r;   r<   
log_imagesa  s    "0zGenericLogger.log_images  r   c                 C   s   | j rt| j || d S r>   )r   ra   )r7   re   rU   r;   r;   r<   	log_graphm  s    zGenericLogger.log_graphc                 C   s>   | j r:t jdt jj dd|d}|t| t | d S )Nr   r   re   )rH   r   metadata)r   Artifactrunr   Zadd_filer/   r   )r7   r   rn   r   artr;   r;   r<   r   r  s    zGenericLogger.log_modelc                 C   s   | j rt jjj|dd d S r   )r   r   r   r   r   r;   r;   r<   update_paramsy  s    zGenericLogger.update_paramsN)r   )r   r   )r   )
r   r   r   __doc__r=   r   r   r   r   r   r;   r;   r;   r<   r   4  s   	


r   r   c              
   C   s   zt | }t|tr ||fn|}tddg|R |j|}t	
 8 t	d | tjjt||ddg  W d    n1 s0    Y  W n4 ty } ztd|  W Y d }~n
d }~0 0 d S )Nrk   rT   ignoreF)strictu7   WARNING ⚠️ TensorBoard graph visualization failure )next
parametersr2   inttorchzerostodevicetype_aswarningscatch_warningssimplefilterZ	add_graphjittracer   r0   r   r1   )r   re   rU   r}   rs   er;   r;   r<   ra     s    "

@ra   c                 C   s8   |  ds| S | drdn| dr*dnd}d| S )Nz
runs/trainz-clsz	-Classifyz-segz-Segmentr   YOLOv5)r4   endswith)r   suffixr;   r;   r<   r     s    
 r   )r   )/r   osr   pathlibr   pkg_resourcespkgr   Ztorch.utils.tensorboardr   utils.generalr   r   r   Z#utils.loggers.clearml.clearml_utilsr   Zutils.loggers.wandb.wandb_utilsr	   utils.plotsr
   r   r   utils.torch_utilsr   r)   r   getenvr   r   hasattrparse_versionr   loginZwandb_login_successerrorsZ
UsageErrorImportErrorAssertionErrorr   r,   utils.loggers.cometr   ModuleNotFoundErrorr   r   ra   r   r;   r;   r;   r<   <module>   sV   "




 |K
