U
    Hc                     @   s  d Z ddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	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 ddlZddlZddlZddlZddlZddlZddl Z ddl!m"Z" dd	l#m$Z$m%Z% ee&' Z(e(j)d
 Z*e*j+d Z,e-de.d
e/ d
 Z0e1e2dd3 dkZ4dZ5ej6dddd ej6dddj7id dej8j9_:e;d e1e0ej<d< dd Z=dddZ>de4fdd Z?e?d!Z@dd$d%ZAeA ZBG d&d' d'ejCZDG d(d) d)ejCZEG d*d+ d+ejCZFd,d- ZGd.d/ ZHd0d1 ZIdd2d3ZJdd5d6ZKdd8d9ZLd:d; ZMd<d= ZNd>d? ZOddAdBZPddDdEZQddFdGZRdHdI ZSdJdK ZTeGeFe*dLdM ZUddOdPZVddSdTZWeGe*dU d4dfdVdWZXddYdZZYd[d\ ZZdd_d`Z[ddbdcZ\ddddeZ]e5fdfdgZ^ddhdiZ_djdk Z`ddldmZadndo Zbdpdq ZcddudvZddwdx Zeddzd{Zfdyegdyfd|d}Zhd~d Zidd Zjdd ZkdddZldddZmdddZndddZodd ZpdddZqdddZrdd ZsdddZtdddZueedfddZvdd ZwdddZxeM rdne	y jzZ{dS )z
General utils
    N)repeat)
ThreadPool)Path)check_output)ZipFile)gsutil_getsize)box_ioufitness   datasets   ZYOLOv5_VERBOSETtruez	Arial.ttfi@     long)	linewidth	precisionprofile
float_kindz{:11.5g})r   	formatter
   ZNUMEXPR_MAX_THREADSc                   C   sJ   z.t jddkstt jddks*tW dS  tk
rD   Y dS X d S )NZPWDz/kaggle/workingZKAGGLE_URL_BASEzhttps://www.kaggle.comTF)osenvirongetAssertionError r   r   C/var/www/html/VideoAnalyticsDashboard/src/./yolov5/utils/general.py	is_kaggle2   s    r   Fc              	   C   s`   |rNt | d }z$t|d W 5 Q R X |  W dS  tk
rJ   Y dS X nt| tjS d S )Nztmp.txtwTF)r   openunlinkOSErrorr   accessR_OK)dirtestfiler   r   r   is_writeable<   s    

r&   c                 C   s\   t  r tjjD ]}tj| qttdd}tjd|rH|dkrHtj	ntj
d t| S )NRANKz%(message)s)r(   r   )formatlevel)r   loggingroothandlersremoveHandlerintr   getenvbasicConfigINFOWARNING	getLogger)nameverbosehrankr   r   r   set_loggingK   s    "r9   Zyolov5UltralyticsYOLOV5_CONFIG_DIRc                 C   sd   t |}|rt|}n<dddd}t |t d }t|rH|ntd|  }|jdd |S )	NzAppData/Roamingz.configzLibrary/Application Support)WindowsLinuxDarwin z/tmpT)exist_ok)	r   r0   r   homer   platformsystemr&   mkdir)r#   env_varenvpathcfgr   r   r   user_config_dirX   s    

rI   c                   @   s   e Zd Zdd Zdd ZdS )Profilec                 C   s   t   | _d S N)timestartselfr   r   r   	__enter__j   s    zProfile.__enter__c                 C   s    t dt | j dd d S )NzProfile results: z.5fs)printrL   rM   )rO   typevalue	tracebackr   r   r   __exit__m   s    zProfile.__exit__N)__name__
__module____qualname__rP   rV   r   r   r   r   rJ   h   s   rJ   c                   @   s4   e Zd ZdddddZdd Zdd	 Zd
d ZdS )Timeoutr?   T)timeout_msgsuppress_timeout_errorsc                C   s   t || _|| _t|| _d S rK   )r/   secondstimeout_messageboolsuppress)rO   r]   r[   r\   r   r   r   __init__s   s    
zTimeout.__init__c                 C   s   t | jd S rK   )TimeoutErrorr^   )rO   signumframer   r   r   _timeout_handlerx   s    zTimeout._timeout_handlerc                 C   s    t  t j| j t | j d S rK   )signalSIGALRMre   alarmr]   rN   r   r   r   rP   {   s    zTimeout.__enter__c                 C   s    t d | jr|tkrdS d S )Nr   T)rf   rh   r`   rb   rO   exc_typeexc_valexc_tbr   r   r   rV      s    
zTimeout.__exit__N)rW   rX   rY   ra   re   rP   rV   r   r   r   r   rZ   q   s   rZ   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )WorkingDirectoryc                 C   s   || _ t  | _d S rK   )r#   r   cwdresolve)rO   new_dirr   r   r   ra      s    zWorkingDirectory.__init__c                 C   s   t | j d S rK   )r   chdirr#   rN   r   r   r   rP      s    zWorkingDirectory.__enter__c                 C   s   t | j d S rK   )r   rq   rn   ri   r   r   r   rV      s    zWorkingDirectory.__exit__N)rW   rX   rY   ra   rP   rV   r   r   r   r   rm      s   rm   c                    s    fdd}|S )Nc               
      s>   z | | W n* t k
r8 } zt| W 5 d }~X Y nX d S rK   )	ExceptionrR   )argskwargsefuncr   r   handler   s    ztry_except.<locals>.handlerr   )rw   rx   r   rv   r   
try_except   s    ry   c                    s    fddt  D S )Nc                    s(   g | ] }t t |r|d s|qS )__)callablegetattr
startswith.0finstancer   r   
<listcomp>   s      
 zmethods.<locals>.<listcomp>)r#   r   r   r   r   methods   s    r   c                 C   s4   t t|  dddd t| D   d S )Nz: , c                 s   s    | ]\}}| d | V  qdS )=Nr   )r   kvr   r   r   	<genexpr>   s     zprint_args.<locals>.<genexpr>)LOGGERinfocolorstrjoinvarsitems)r5   optr   r   r   
print_args   s    r   c                 C   sN   dd l m  m} t|  tj|  t|  | dkr>dnd\|_|_	d S )Nr   )FT)TF)
torch.backends.cudnnbackendscudnnrandomseednptorchmanual_seed	benchmarkdeterministic)r   r   r   r   r   
init_seeds   s
    

r   r   c                    s    fdd|   D S )Nc                    sD   i | ]<\ } krt  fd dD s|j  jkr |qS )c                 3   s   | ]}| kV  qd S rK   r   r   xr   r   r   r      s     z-intersect_dicts.<locals>.<dictcomp>.<genexpr>)anyshape)r   r   dbexcluder   r   
<dictcomp>   s         z#intersect_dicts.<locals>.<dictcomp>)r   )dar   r   r   r   r   intersect_dicts   s    r   .c                 C   s,   t j |  ddd}|r(t|tjjdS dS )Nz/**/last*.ptT	recursive)keyr?   )globmaxr   rG   getctime)Z
search_dirZ	last_listr   r   r   get_latest_run   s    r   c                   C   s   t d S )Nz
/workspace)r   existsr   r   r   r   	is_docker   s    r   c                  C   s*   zdd l } W dS  tk
r$   Y dS X d S )Nr   TF)Zgoogle.colabImportError)googler   r   r   is_colab   s
    r   c                   C   s   dt t jkS )Nzsite-packages)r   __file__ro   partsr   r   r   r   is_pip   s    r   r?   c                 C   s$   t | } t|  ddt| kS )Nasciiignore)strlenencodedecoderQ   r   r   r   is_ascii   s    r      人工智能c                 C   s   t dt| rdS dS )Nu	   [一-鿿]TF)researchr   r   r   r   r   
is_chinese   s    r   c                 C   s    t  dkr|  ddS | S )Nr<   r   r   )rB   rC   r   r   r   r   r   r   emojis   s    r   c                 C   sJ   t | } |  r|  jd S |  rBtdd | dD d S dS d S )N    .Ac                 s   s    | ]}|  r| jV  qd S rK   )is_filestatst_sizer~   r   r   r   r      s      zfile_size.<locals>.<genexpr>z**/*        )r   r   r   r   is_dirsumr   rG   r   r   r   	file_size   s    r   c                  C   s6   dd l } z| dd W dS  tk
r0   Y dS X d S )Nr   )z1.1.1.1i  r   TF)socketcreate_connectionr    )r   r   r   r   check_online   s    r   c                  C   s   d} t d}td s(t|d |  t r>t|d |  t sTt|d |  d}t|dd	d
  	d}tddd  }t
td| ddd}|dkr|d| dd|dk  d| d7 }n|d| d7 }tt| d S )Nz7, for updates see https://github.com/ultralytics/yolov5zgithub: z.gitz%skipping check (not a git repository)zskipping check (Docker image)zskipping check (offline)z/git fetch && git config --get remote.origin.urlTr   )shelltimeoutzgit rev-parse --abbrev-ref HEADr   zgit rev-list z..origin/master --countr   u    ⚠️ YOLOv5 is out of date by z commitrQ   r
   z. Use `git pull` or `git clone z` to update.zup to date with u    ✅)r   r   r   r   r   r   r   r   striprstripr/   r   r   r   )msgrQ   cmdurlbranchnr   r   r   check_git_status   s    &r   3.6.2c                 C   s   t t | ddd d S )NzPython T)r5   hard)check_versionrB   python_version)minimumr   r   r   check_python	  s    r   0.0.0version c                 C   sh   dd | |fD \} }|r"| |kn| |k}| | d| |  d}|rR|sRt ||rd|sdt| |S )Nc                 s   s   | ]}t |V  qd S rK   )pkgparse_versionr   r   r   r   r     s     z check_version.<locals>.<genexpr>z required by YOLOv5, but z is currently installed)r   r   warning)currentr   r5   Zpinnedr   r6   resultrQ   r   r   r   r     s    
r   zrequirements.txtc                    s  t ddd}t  t| ttfrvt| }| sHt| d|  d| } fddt	
|D } W 5 Q R X n fdd| D } d	}| D ]}zt	| W q tk
rj   | d| d
}|rVt| d z@t std| dttd| ddd  |d7 }W n8 tk
rR }	 zt| d|	  W 5 d }	~	X Y nX nt| d Y qX q|rdt kr| n| }
| d| dd|dk  d|
 d| dt dd d}tt| d S )Nredboldzrequirements: z not found, check failed.c                    s&   g | ]}|j  kr|j  |j qS r   )r5   Z	specifierr   r   r   r   r   #  s     
 z&check_requirements.<locals>.<listcomp>c                    s   g | ]}| kr|qS r   r   r   r   r   r   r   %  s      r   z$ not found and is required by YOLOv5z, attempting auto-update...z'pip install z' skipped (offline)zpip install ''Tr   r
   z(. Please install and rerun your command.r%   z packagerQ   z updated per 
u    ⚠️ z;Restart runtime or rerun command for updates to take effect)r   r   
isinstancer   r   r   r   ro   r   r   Zparse_requirementsrequirerr   r   r   r   r   r   r   localsr   )requirementsr   installprefixr%   r   r   rrQ   ru   sourcer   r   r   check_requirements  s6     
$(6r       c                    s\   t | tr tt| t }n fdd| D }|| krXtd|  d d|  |S )Nc                    s    g | ]}t t|t qS r   )r   make_divisibler/   r   floorrQ   r   r   r   D  s     z"check_img_size.<locals>.<listcomp>zWARNING: --img-size z  must be multiple of max stride z, updating to )r   r/   r   r   r   r   )imgszrQ   r   new_sizer   r   r   check_img_size?  s    
r   c               
   C   s   zPt  rtdt rtdtdtd td t  td W dS  t	k
r }  zt
d|   W Y dS d } ~ X Y nX d S )	Nz/cv2.imshow() is disabled in Docker environmentsz5cv2.imshow() is disabled in Google Colab environmentsr$   )r
   r
      r
   TzVWARNING: Environment does not support cv2.imshow() or PIL Image.show() image displays
F)r   r   r   cv2imshowr   zeroswaitKeydestroyAllWindowsrr   r   r   )ru   r   r   r   check_imshowJ  s    

r  
yolov5s.ptz.ptc                 C   sn   | rj|rjt |tr|g}t | ttfr*| n| gD ]8}t|j }t|r0||ks0t| | d| q0d S )Nz acceptable suffix is )	r   r   listtupler   suffixlowerr   r   )r%   r  r   r   rQ   r   r   r   check_suffixY  s    
r  z.yamlz.ymlc                 C   s
   t | |S rK   )
check_file)r%   r  r   r   r   
check_yamld  s    r  c                 C   sV  t | | t| } t|  s&| dkr*| S | drtt| dd}ttj| 	dd j
} t|  rtd| d|   nRtd	| d
|  d tj||  t|  rt|  jdkstd| | S g }dD ](}|tjtt| d |  dd qt|s(td|  t|dksJtd|  d| |d S d S )Nr?   )zhttp:/zhttps:/:/://?r   zFound z locally at Downloading  to ...zFile download failed: )datamodelsutilsz**Tr   zFile not found: r
   zMultiple files match 'z', specify exact path: )r  r   r   r   r}   replaceurllibparseunquotesplitr5   r   r   r   hubdownload_url_to_filer   r   r   r   extendr   ROOTr   )r%   r  r   filesdr   r   r   r  i  s&    

,&"r  c                 C   s`   t | } |  s\t| j  s\d| j }td| dt| j  d tjj|t	| dd d S )Nzhttps://ultralytics.com/assets/r  r  r  Fprogress)
r   r   
CONFIG_DIRr5   r   r   r   r  r   r   )fontr   r   r   r   
check_font  s
    
r)  c              	      s  d}t  ttfrXt drXt tddddd ttt j d  j	d }}t  ttfrt
 dd	}t| W 5 Q R X t|p d
pd st  dD ]F} |rt  | trt |  nfdd | D  |< qd kstdd kr4dd t d D  d<  fdddD \}}}}|rdd t |trj|n|gD }tdd |D stddd |D   |r|rd
 krj	nd}	|dr<|dr<t|j}td| d| d tj|| t|	jddd t|j|	d t|  d }
n8|d rftd!| d" t !|}
nt"|d# i}
td$|
d%krd&|	 nd' d( nt#d) S )*Nr?   .zipTFr
   )r#   unzipdeletecurlthreadsz*.yamlr   )errorsrG   )trainvalr$   c                    s   g | ]}t  | qS r   r   r   r   r   r   r     s     z!check_dataset.<locals>.<listcomp>nczDataset 'nc' key missing.namesc                 S   s   g | ]}d | qS )classr   r   ir   r   r   r     s     c                 3   s   | ]}  |V  qd S rK   )r   r   )r  r   r   r     s     z check_dataset.<locals>.<genexpr>)r0  r1  r$   downloadc                 S   s   g | ]}t | qS r   )r   ro   r   r   r   r   r     s     c                 s   s   | ]}|  V  qd S rK   )r   r   r   r   r   r     s     z%
Dataset not found, missing paths: %sc                 S   s   g | ]}|  st|qS r   )r   r   r   r   r   r   r     s      z..httpr  r  r  parentsr@   r   zbash zRunning z ...yamlzDataset autodownload )r   Nzsuccess, saved to failurer   zDataset not found.)$r   r   r   endswithr7  DATASETS_DIRnextstemrglobparentr   r;  	safe_loadr   is_absoluter"  ro   r   ranger	  allr   r   r}   r5   r   r  r   rD   r   
extractallr   r   rC   execrr   )r  autodownloadextract_dirr   r   r0  r1  r$   rQ   r,   r   r   )r  rG   r   check_dataset  sN    
:
 
(rK  c                 C   s4   t t| dd} ttj| jdd }|S )Nr  r  r  r   )r   r   r  r  r  r  r5   r  )r   r%   r   r   r   url2file  s    rL  c                    s    fddt |}|jddd |dkrft|}|fddt| t| |  |  n(t| t	t frz| gn| D ]}|| q~d S )Nc                    s   |t | j }t |  r*t | | nP| sztd|  d| d  rhtd|  d| d nt	j
j| |dd r|jd	krtd
| d |jdkrt|j|d n"|jdkrtd| d|j  r|  d S )Nr  r  r  z	curl -L 'z' -o 'z' --retry 9 -C -Tr%  )r*  .gzz
Unzipping r*  r   rM  ztar xfz z --directory )r   r5   r   renamer   r   r   r   rC   r   r  r   r  r   rG  rB  r   )r   r#   r   )r-  r,  r+  r   r   download_one  s     

zdownload.<locals>.download_oneTr9  r
   c                    s    |  S rK   r   r   )rO  r   r   <lambda>      zdownload.<locals>.<lambda>)
r   rD   r   imapzipr   closer   r   r   )r   r#   r+  r,  r-  r.  poolur   )r-  r,  rO  r+  r   r7    s    
r7  c                 C   s*   t |tjrt| }t| | | S rK   )r   r   Tensorr/   r   mathceil)r   divisorr   r   r   r     s    r   c                 C   s   t jdd| dS )Nu"   [|@#!¡·$€%&()=?¿^*;:,¨´><+]_)patternreplstring)r   subr   r   r   r   	clean_str  s    ra  r         ?d   c                    s    fddS )Nc                    s(   dt | t j    d    S )Nr
      )rY  cospirP  stepsy1y2r   r   rQ    rR  zone_cycle.<locals>.<lambda>r   )ri  rj  rh  r   rg  r   	one_cycle  s    rk  c                     sv   t | dkr| ndd| d f^ }}ddddd	d
dddddddddddddd d fdd|D |   d  S )Nr
   bluer   r   z[30mz[31mz[32mz[33mz[34mz[35mz[36mz[37mz[90mz[91mz[92mz[93mz[94mz[95mz[96mz[97mz[0mz[1mz[4m)blackr   greenyellowrl  magentacyanwhitebright_black
bright_redbright_greenbright_yellowbright_bluebright_magentabright_cyanbright_whiteendr   	underliner?   c                 3   s   | ]} | V  qd S rK   r   r   colorsr   r   r     s     zcolorstr.<locals>.<genexpr>r{  )r   r   )inputrs   r_  r   r}  r   r     s,    $r   P   c                 C   sp   | d d krt  S t| d} | d d df tj}tj||d}d||dk< d| }||  }t |S )Nr   	minlengthr
   )	r   rX  r   concatenateastyper/   bincountr   
from_numpy)labelsr2  classesweightsr   r   r   labels_to_class_weights  s    r  c                    s2   t  fdd| D }|d | d}|S )Nc                    s.   g | ]&}t j|d d df t j dqS )Nr   r  )r   r  r  r/   r   r2  r   r   r   *  s     z+labels_to_image_weights.<locals>.<listcomp>r
   )r   arrayreshaper   )r  r2  Zclass_weightsZclass_countsimage_weightsr   r  r   labels_to_image_weights(  s    r  c               P   C   s   ddddddddd	d
dddddddddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPgP} | S )QNr
   rd  r      r         r   	   r                                                      r   !   "   #   $   %   &   '   (   )   *   +   ,   .   /   0   1   2   3   4   5   6   7   8   9   :   ;   <   =   >   ?   @   A   C   F   H   I   J   K   L   M   N   O   r  Q   R   T   U   V   W   X   Y   Z   r   rP  r   r   r   coco80_to_coco91_class0  sj    <                                                r  c                 C   s   t | tjr|  nt| }| d d df | d d df  d |d d df< | d d df | d d df  d |d d df< | d d df | d d df  |d d df< | d d df | d d df  |d d df< |S Nr   rd  r
   r   r   r   rX  cloner   copyr   yr   r   r   	xyxy2xywh<  s    00,,r  c                 C   s   t | tjr|  nt| }| d d df | d d df d  |d d df< | d d df | d d df d  |d d df< | d d df | d d df d  |d d df< | d d df | d d df d  |d d df< |S r  r  r  r   r   r   	xywh2xyxyF  s    0000r    c                 C   s  t | tjr|  nt| }|| d d df | d d df d   | |d d df< || d d df | d d df d   | |d d df< || d d df | d d df d   | |d d df< || d d df | d d df d   | |d d df< |S r  r  r   r   r7   padwpadhr  r   r   r   
xywhn2xyxyP  s    8888r  c                 C   s  |rt | || || f t| tjr.|  nt| }| d d df | d d df  d | |d d df< | d d df | d d df  d | |d d df< | d d df | d d df  | |d d df< | d d df | d d df  | |d d df< |S r  )clip_coordsr   r   rX  r  r   r  )r   r   r7   clipepsr  r   r   r   
xyxy2xywhnZ  s    4400r  c                 C   sj   t | tjr|  nt| }|| d d df  | |d d df< || d d df  | |d d df< |S )Nr   r
   r  r  r   r   r   xyn2xyf  s    $$r  c                 C   sp   | j \}}|dk|dk@ ||k@ ||k@ }|| ||  }}t|rft| | | | gS tdS )Nr   )r
   r  )Tr   r   r  minr   r  )segmentwidthheightr   r  insider   r   r   segment2boxn  s    
 r  c                 C   sH   g }| D ]0}|j \}}|| | | | g qtt|S rK   )r  appendr  r   r  r   r  )segmentsboxesrQ   r   r  r   r   r   segments2boxesv  s
    
$r    c                    sh   t | D ]Z\} tdt d |tt t fddtdD ddj| |< q| S )Nr   r
   c              	      s&   g | ]}t  d d |f qS rK   )r   interpr5  rQ   r   xpr   r   r     s     z%resample_segments.<locals>.<listcomp>rd  r(   )		enumerater   linspacer   aranger  rE  r  r  )r  r   r6  r   r  r   resample_segments  s
    0r  c                 C   s   |d kr\t | d |d  | d |d  }| d |d |  d | d |d |  d f}n|d d }|d }|d d ddgf  |d 8  < |d d ddgf  |d 8  < |d d d df  |  < t|| |S )Nr   r
   rd  r   r  )r  r  )Z
img1_shapecoordsZ
img0_shapeZ	ratio_padgainpadr   r   r   scale_coords  s    "2  
r  c                 C   s   t | tjr~| d d df d|d  | d d df d|d  | d d df d|d  | d d df d|d  n`| d d ddgf d|d | d d ddgf< | d d ddgf d|d | d d ddgf< d S )Nr   r
   rd  r   )r   r   rX  clamp_r  )r  r   r   r   r   r    s    0r        ??,  c                  C   s^  | j d d }| d |k}	d|  kr.dks@n td| dd|  krTdksfn td| dd	\}
}d
}d}d}||dkM }d}t }tjd| jdg| j d  }t| D ]\}}d||dddf |
k |dddf |kB ddf< ||	|  }|rt|| r|| }tjt||d f|jd}|ddddf |ddddf< d|dddf< d|t	t||dddf 
 d f< t||fd}|j d sq|ddddf  |ddddf 9  < t|ddddf }|rZ|ddddf |kjddj\}}t|| |||d df |dddf  fd}nF|ddddf jddd\}}t||| fd|d|k }|dk	r||ddddf tj||jdkd }|j d }|sqn.||kr||dddf jddd|  }|ddddf |r6dn| }|ddddf | |dddf  }}tj|||}|j d |kr|d| }|r$d|  k rdk r$n npt|| ||k}||d  }t||ddddf  |jddd ||ddf< |r$||ddk }|| ||< t | |krtd| d  qZq|S )zRuns Non-Maximum Suppression (NMS) on inference results

    Returns:
         list of detections, on (n,6) tensor per image [xyxy, conf, cls]
    rd  r   ).r  r   r
   zInvalid Confidence threshold z&, valid values are between 0.0 and 1.0zInvalid IoU )rd  i   i0u  g      $@TF)r   r  )device.r  Nrb  )as_tuple)keepdimr(   r  )
descendingg     p@zWARNING: NMS time limit z
s exceeded)r   r   rL   r   r  r  r  r   r   rE  r   catr  nonzeror  floatr   viewtensorargsorttorchvisionopsnmsr   mmr   r   r   ) Z
prediction
conf_thres	iou_thresr  agnosticmulti_labelr  max_detr2  xcZmin_whZmax_whZmax_nmsZ
time_limitZ	redundantmergetoutputxir   lbr   boxr6  jconfr   cr  scoresiour  r   r   r   non_max_suppression  sl    &&6$(,&6"$
.

$"*":r%  best.ptc              	   C   s   t j| t dd}|dr*|d |d< dD ]}d ||< q.d|d< |d   |d  D ]
}d|_q\t ||pt|  tj	
|p| d	 }td
|  d|rd| nd d|dd d S )Ncpu)map_locationemamodel)	optimizerZbest_fitnessZwandb_idr)  Zupdatesr(   epochFr   zOptimizer stripped from ,z saved as %s,r?   r   z.1fMB)r   loadr  r   half
parametersrequires_gradsaver   rG   getsizer   r   )r   rQ   r   r   pmbr   r   r   strip_optimizer  s    

r7  zevolve: c                 C   sL  |d }|d }dt |  }t dd |D }| t |  }t|}	|rd| d}
t|
tj|rxtj|ndkrt	d	|
 d
|  | rdnd|	 | 
dd }t|d&}||d|	 | 
d d  W 5 Q R X t|d}t|}|jdd d}tt|jd d d df }t|}|dd| d d|d  d d ddd |d d D  d d ddd |j|d df D  d  tj|j| dd   |d d! W 5 Q R X t|| d" | dd#d |D  d | dd$d |D  d  |rHt	d	| d
| d%|  d S )&Nz
evolve.csvzhyp_evolve.yaml)zmetrics/precisionzmetrics/recallzmetrics/mAP_0.5zmetrics/mAP_0.5:0.95zval/box_losszval/obj_losszval/cls_lossc                 s   s   | ]}|  V  qd S rK   r   r   r   r   r   r     s     z!print_mutation.<locals>.<genexpr>zgs://z/evolve.csvr   z
gsutil cp r   r?   z%20s,r-  r   az%20.5g,r   c                 S   s   |   S rK   r8  rP  r   r   r   rQ  )  rR  z print_mutation.<locals>.<lambda>)columnsr  z*# YOLOv5 Hyperparameter Evolution Results
z# Best generation: z# Last generation: r
   z# r   c                 s   s   | ]}|  d V  qdS z>20sNr8  r   r   r   r   r   /  s     r  c                 s   s   | ]}|d V  qdS )z>20.5gNr   r   r   r   r   r   0  s     z

F)	sort_keysz' generations finished, current result:
c                 s   s   | ]}|  d V  qdS r;  r8  r   r   r   r   r   5  s     c                 s   s   | ]}|d V  qdS )z20.5gNr   r   r   r   r   r   6  s     z gs://)r
  keysvaluesr   r   r   rG   r   r4  rC   r   r   writepdread_csvrN  r   argmaxr	   r   r;  	safe_dumplocto_dictr   r   )resultshypsave_dirbucketr   Z
evolve_csvZevolve_yamlr=  valsr   r   rQ   r   r  r6  Zgenerationsr   r   r   print_mutation  sj    
$"*
 
 ,rK  c                 C   s  t |tjr|gn|}t| D ]\}}|d k	rt|r| }t|d d d df }|d d dd f dd d|d d dd f< |d d dd f d d |d d dd f< t	|
 |d d d df< t|jdd  |d d d df || j |d d df 
 }g }t|D ]\}	}
|| t|
d t|
d t|
d t|
d f }t|d	}|d d d d d d d
f ddd}tj|tjd}|d }|| q |t||jd}| | ||k | |< q| S )Nr  rd  r
   r   g?   r   r   )   rM  r(   )dtype   )r   r   ndarrayr  r   r  r  r   	unsqueezer  r   r  r   r/   r  resize	transposeascontiguousarrayfloat32r  r   rX  tor  rB  )r   r*  imgim0r6  r$  bZ	pred_cls1imsr   r9  cutoutimZ	pred_cls2r   r   r   apply_classifier<  s*    4,,8&r]  c           	         s   t     r|s  r, d jfn df\ }t   d} fdd|D }dd |D }|r~t|d nd}t    | |  |r jddd	  S )
Nr?   *c                    s&   g | ]}t d  d j |qS )z%sz(\d+))r   r   r@  )r   r$  rG   sepr   r   r   f  s     z"increment_path.<locals>.<listcomp>c                 S   s    g | ]}|rt | d  qS )r   )r/   groups)r   mr   r   r   r   g  s      r
   rd  Tr9  )r   r   r   with_suffixr  r   r   rD   )	rG   r@   r`  rD   r  dirsmatchesr6  r   r   r_  r   increment_path`  s    $rf  )F)r:   r;   )r   )r   )r   )r?   )r   )r?   )r   )r   r   r   FFF)r   r   )r  r  r?   )r  )r?   )T)r   TTFr
   )r   rb  rc  )r  )r  r  r   r   )r  r  Fr   )r  r  r   r   )r  r  )r  )N)r  r  NFFr   r  )r&  r?   )Fr?   F)|__doc__
contextlibr   r+   rY  r   rB   r   r   shutilrf   rL   r  	itertoolsr   multiprocessing.poolr   pathlibr   
subprocessr   zipfiler   r  numpyr   pandasr@  pkg_resourcesr   r   r  r;  Zutils.downloadsr   utils.metricsr   r	   r   ro   FILEr:  r"  rB  r>  r  r   	cpu_countNUM_THREADSr   r0   r  VERBOSEZFONTset_printoptionsr)   optionsdisplaymax_columnssetNumThreadsr   r   r&   r9   r   rI   r'  ContextDecoratorrJ   rZ   rm   ry   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r  r  r  r)  rK  rL  r7  r   ra  rk  r   r  onesr  r  r  r  r  r  r  r  r  r  r  r  r%  r7  rK  r]  rf  get_terminal_sizer:  ZNCOLSr   r   r   r   <module>   s   







	



	





$



	
7
"








	
	
    
^
*$
