o
    *jF                     @   sb  d dl Z d dlmZ d dlmZmZmZ d dlZd dl	m
Z
 d dlmZmZ d dlmZmZmZ d dlmZmZ d dlmZmZ d dlmZ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$ 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/m0Z0 d dl1m2Z2 d dl3m4Z4 d dl5m6Z6m7Z7m8Z8 e4j9e*j:dG dd de2Z;dS )    N)CallableDictOptional)DetectionCheckpointer)build_detection_test_loaderbuild_detection_train_loader)SimpleTrainerhookslaunch)create_ddp_modeldefault_writers)inference_on_datasetprint_csv_format)LRMultiplierWarmupParamScheduler)get_default_optimizer_params)comm)PathManager)setup_logger)CosineParamScheduler)check_local_model_is_latest)snapshot_download)Trainers)DetEvaluator)build_action_detection_model)VideoDetMapper)BaseTrainer)TRAINERS)Invoke	ModelFileTasks)module_namec                       sz   e Zd Z		ddedee f fddZdd Zdd	 Zd
ede	ee
f fddZ		dddZdd ZdddZ  ZS )ActionDetectionTrainerNcfg_filecfg_modify_fnc           	         s   |  |}|d u rtj|tj}t | |d ur!|| j| _| jj	j
| _| jj	jd | _| jj	jj| _td| jj	j| jj	jd  | _t| jj	j| _|dd| _|| _|| _|dt|tj| _d S )Nwarmup_step   Zbatch_size_per_gpuresumeFpretrained_model)get_or_download_model_dirospathjoinr   ZCONFIGURATIONsuper__init__cfgtrainmax_iter
total_steplr_schedulerr%   Z	optimizerlrmaxnum_gpus
dataloadertotal_batch_sizelenclasses_id_mapnum_classesgetr'   train_datasettest_datasetospZTORCH_MODEL_FILEr(   )	selfZmodel_idr=   r>   r#   r$   argskwargsmodel_cache_dir	__class__ p/var/www/html/Deteccion_Ine/venv/lib/python3.10/site-packages/modelscope/trainers/cv/action_detection_trainer.pyr.   $   s,   


zActionDetectionTrainer.__init__c                 C   sf   t  r|rt| | jt|d t  }t	||dd t	||d}|
d|t   d S )Nz	config.pyZfvcore)distributed_rankname)rH   z+Rank of current process: {}. World size: {})r   is_main_processr   Zmkdirsr/   dumpr?   r,   Zget_rankr   infoformatZget_world_size)r@   
output_dirrankloggerrF   rF   rG   startA   s   

zActionDetectionTrainer.startc                 O   s:   | j jjdkr|   d S t| j| j jjddddd d S )Nr&   r   autorF   Zmachine_rankdist_urlrA   r/   r0   r6   do_trainr
   )r@   rA   rB   rF   rF   rG   r0   K   s   
zActionDetectionTrainer.traincheckpoint_pathreturnc                 O   sD   | j jjdkr| jd|d d S t| j| j jjdddd|fd d S )Nr&   T)	just_evalrW   r   rR   rS   rU   )r@   rW   rA   rB   rF   rF   rG   evaluateW   s   
zActionDetectionTrainer.evaluateFc              
      s   jjj tjd jjjdkr   t dd |r1t	 }|
|  }|S tjjt jdjdd}t|ttdd	djj d
jd}tjtjjjddjjjjjd}t ||}t	 jjj|d}	|t  tj!|dt"# rtj$|	jjj%dnd tj&jj'j( fdddt"# rtj)t*|	j+jddnd g |	j,j-dd j.r|	j,j.d |j/d }
nd}
||
j d S )N)r;   r   F)Zbroadcast_buffers)Zbase_lrg?)paramsr4   Zweight_decayr&   gMbP?)Zwarmup_factorZwarmup_length)r1   TZis_train)mapperr8   num_workers)trainer)Z	scheduler)Zperiodc                      s
     S N)do_testrF   modelr@   rF   rG   <lambda>   s   
 z1ActionDetectionTrainer.do_train.<locals>.<lambda>)Zeval_periodZeval_function   )r'   )0rQ   r/   r0   work_dirr   r;   r6   cudar   r   loadra   torchoptimZAdamWr   r4   r   r   r   r%   r2   r   r=   r   r:   r8   r7   workers_per_gpur   Zregister_hooksr	   ZIterationTimerZLRSchedulerr   rJ   ZPeriodicCheckpointerZcheckpoint_intervalZEvalHook
evaluationintervalZPeriodicWriterr   save_dirZresume_or_loadr(   r'   iter)r@   rY   rW   
checkpointresultrj   r3   Ztrain_loaderr_   ZcheckpointerZ
start_iterrF   rb   rG   rV   d   sz   






zActionDetectionTrainer.do_trainc                 C   sj   t t| jjj | jjj| jjjdkd}t| j	t
| jjjdd| jjjjd}t|||}t| |S )Nr&   )distributedFr\   )r]   r^   )r   listr/   r0   r:   keysrf   r6   r   r>   r   rl   r7   rk   r   r   )r@   rc   Z	evaluatorZtest_loaderrq   rF   rF   rG   ra      s   

zActionDetectionTrainer.do_testc                 C   sZ   t j|r t j|r|nt j|}t|tjtjid |S t	||tjtj
id}|S )N)
user_agent)revisionru   )r*   r+   existsisdirdirnamer   r   ZKEYZLOCAL_TRAINERr   ZTRAINER)r@   rc   Zmodel_revisionrC   rF   rF   rG   r)      s    

z0ActionDetectionTrainer.get_or_download_model_dir)NN)FNr`   )__name__
__module____qualname__strr   r   r.   rQ   r0   r   floatrZ   rV   ra   r)   __classcell__rF   rF   rD   rG   r"   !   s$    



:r"   )<r*   Zos.pathr+   r?   typingr   r   r   ri   Zdetectron2.checkpointr   Zdetectron2.datar   r   Zdetectron2.enginer   r	   r
   Zdetectron2.engine.defaultsr   r   Zdetectron2.evaluationr   r   Zdetectron2.solverr   r   Zdetectron2.solver.buildr   Zdetectron2.utilsr   Zdetectron2.utils.file_ior   Zdetectron2.utils.loggerr   Zfvcore.common.param_schedulerr   Zmodelscope.hub.check_modelr   Z modelscope.hub.snapshot_downloadr   Zmodelscope.metainfor   Z-modelscope.metrics.action_detection_evaluatorr   ZFmodelscope.models.cv.action_detection.modules.action_detection_pytorchr   Z3modelscope.preprocessors.cv.action_detection_mapperr   Zmodelscope.trainers.baser   Zmodelscope.trainers.builderr   Zmodelscope.utils.constantr   r   r    Zregister_moduleZaction_detectionr"   rF   rF   rF   rG   <module>   s4   