o
    Ďi                     @   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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mZ dd	lmZ dd
lmZ ddlmZ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+Z+ddl,m-Z-m.Z. ddl/m0Z0 ddl1m2Z2m3Z3 ee45 Z6e6j7d Z8e9e:ddZ;e<de=de> d Z?ee:ddZ@eAe:ddB dkZCeAe:ddB dkZDdZEdZFe)jGdddd e$jGddd jHid! d"e&jIjJ_Ke!Ld eAe?ejMd#< eN d$krd%neAe?ejMd&< dd(d)ZOdd+d,ZPd-d. ZQd/d0 ZRd1d2 ZSd3eTfd4d5ZUdd7d8ZVd9ZWeWdfd:d;ZXeXeW eYeWZZeN d<krleZj[eZj\fD ]Z]e^eZe]j_d=d>  q_ddAdBZ`e` ZaG dCdD dDejbZcG dEdF dFejbZdG dGdH dHejbZedIdJ ZfddKeeg fdLdMZhddNdOZiddQdRZjdSdT ZkddVdWZle4fdXdYZme4fdZd[Znd\d] Zod^d_ Zpe8fd`daZqe- eee8ddddeZreee8ddfdgZsddidjZtddmdnZue- e8do dPdd'fdpdqZvddsdtZwddudvZxddydzZydd|d}Zzdd~dZ{eFd6fddZ|dddZ}dd Z~dddZdi fddZdddZdd ZdddZdd Zdd ZdddZdd ZdddZde$dfddZdd Zdd Zdd ZdddZdddZdddZdddZdd ZdddZdddZdddZdd Zdd Z				6	6	P		dddÄZdddƄZedǃfddɄZdd˄ Zddd̈́Ze!jZe!jfddτZddф Zddӄ Zeeee!_e!_e!_dS )z
General utils
    N)deepcopy)datetime)repeat)
ThreadPool)Path)check_output)
is_tarfile)Optional)ZipFile
is_zipfile)	TryExceptemojis)gsutil_getsize)box_ioufitness   RANK   YOLOv5_DATASETS_DIRdatasetsYOLOv5_AUTOINSTALLTtrueYOLOv5_VERBOSEz{l_bar}{bar:10}{r_bar}	Arial.ttfi@     long)	linewidth	precisionprofile
float_kindz{:11.5g})r   	formatter
   NUMEXPR_MAX_THREADSdarwin1OMP_NUM_THREADS c                 C   s$   t | } t|  ddt| kS )Nasciiignore)strlenencodedecodes r0   P/home/jeff/fluffinator/venv/lib/python3.10/site-packages/yolov5/utils/general.pyis_ascii?   s   r2      人工智能c                 C   s   t tdt| S )Nu	   [一-鿿])boolresearchr*   r.   r0   r0   r1   
is_chineseE   s   r7   c                   C   s
   dt jv S )Nzgoogle.colab)sysmodulesr0   r0   r0   r1   is_colabJ      
r:   c                  C   s    t tt } d| v pd| v S )Ncolabzmqshell)r*   typeIPythonget_ipython)ipython_typer0   r0   r1   is_notebookO   s   rB   c                   C   s    t jddkot jddkS )NPWDz/kaggle/workingKAGGLE_URL_BASEzhttps://www.kaggle.com)osenvirongetr0   r0   r0   r1   	is_kaggleU   s    rH   returnc                  C   sh   t d rdS z!td} tdd | D W  d   W S 1 s"w   Y  W dS  ty3   Y dS w )z4Check if the process runs inside a docker container.z/.dockerenvTz/proc/self/cgroupc                 s   s    | ]}d |v V  qdS )dockerNr0   ).0liner0   r0   r1   	<genexpr>`       zis_docker.<locals>.<genexpr>NF)r   existsopenanyOSError)filer0   r0   r1   	is_dockerZ   s   
(rT   Fc                 C   sl   |s	t | t jS t| d }zt|d W d    n1 s w   Y  |  W dS  ty5   Y dS w )Nztmp.txtwTF)rE   accessW_OKr   rP   unlinkrR   )dirtestrS   r0   r0   r1   is_writeablee   s   r[   yolov5c                 C   sf   t tdd}|r|dv rtjntj}tjdd| ddii| d| |d	i| || gdd
id d S )Nr   r   >   r   r   r   Fformatz%(message)szlogging.StreamHandler)classr!   level)r_   handlers	propagate)versiondisable_existing_loggers
formattersr`   loggers)intrE   getenvloggingINFOERRORconfig
dictConfig)nameverboserankr_   r0   r0   r1   set_loggingv   s,   rp   Windowsc                 C   s   t t| S N)fnr   xr0   r0   r1   <lambda>   s    rv   UltralyticsYOLOV5_CONFIG_DIRc                 C   sd   t |}|rt|}ndddd}t |t d }t|r$|ntd|  }|jdd |S )	NzAppData/Roamingz.configzLibrary/Application Support)rq   LinuxDarwinr'   z/tmpT)exist_ok)	rE   rg   r   homerG   platformsystemr[   mkdir)rY   env_varenvpathcfgr0   r0   r1   user_config_dir   s   

r   c                   @   s.   e Zd ZdddZdd Zdd Zdd	 Zd
S )Profile        c                 C   s   || _ tj | _d S rr   )ttorchcudais_available)selfr   r0   r0   r1   __init__   s   zProfile.__init__c                 C   s   |   | _| S rr   )timestartr   r0   r0   r1   	__enter__   s   
zProfile.__enter__c                 C   s$   |   | j | _|  j| j7  _d S rr   )r   r   dtr   )r   r>   value	tracebackr0   r0   r1   __exit__   s   zProfile.__exit__c                 C   s   | j rtj   t S rr   )r   r   synchronizer   r   r0   r0   r1   r      s   
zProfile.timeN)r   )__name__
__module____qualname__r   r   r   r   r0   r0   r0   r1   r      s
    
r   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 rr   )rf   secondstimeout_messager4   suppress)r   r   r   r   r0   r0   r1   r      s   
zTimeout.__init__c                 C   s
   t | jrr   )TimeoutErrorr   )r   signumframer0   r0   r1   _timeout_handler   s   
zTimeout._timeout_handlerc                 C   s0   t  dkrttj| j t| j d S d S )Nrq   )r}   r~   signalSIGALRMr   alarmr   r   r0   r0   r1   r      s   zTimeout.__enter__c                 C   s4   t  dkrtd | jr|tu rdS d S d S d S )Nrq   r   T)r}   r~   r   r   r   r   r   exc_typeexc_valexc_tbr0   r0   r1   r      s   
zTimeout.__exit__N)r   r   r   r   r   r   r   r0   r0   r0   r1   r      s
    r   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )WorkingDirectoryc                 C   s   || _ t  | _d S rr   )rY   r   cwdresolve)r   new_dirr0   r0   r1   r      s   zWorkingDirectory.__init__c                 C      t | j d S rr   )rE   chdirrY   r   r0   r0   r1   r         zWorkingDirectory.__enter__c                 C   r   rr   )rE   r   r   r   r0   r0   r1   r      r   zWorkingDirectory.__exit__N)r   r   r   r   r   r   r0   r0   r0   r1   r      s    r   c                    s    fddt  D S )Nc                    s(   g | ]}t t |r|d s|qS )__)callablegetattr
startswithrK   finstancer0   r1   
<listcomp>      ( zmethods.<locals>.<listcomp>)rY   r   r0   r   r1   methods   s   r   argsc           	         s   t  j}t |\}}}}} d u r't |\ }}} fdd| D  zt| t	
d}W n tyC   t|j}Y nw |rK| dnd|rS| dnd }tt|ddd   D   d S )Nc                    s   i | ]\}}| v r||qS r0   r0   rK   kvr   r0   r1   
<dictcomp>   s    zprint_args.<locals>.<dictcomp>r'   z: , c                 s   s"    | ]\}}| d | V  qdS )=Nr0   r   r0   r0   r1   rM           zprint_args.<locals>.<genexpr>)inspectcurrentframef_backgetframeinfogetargvaluesitemsr   r   relative_toROOTwith_suffix
ValueErrorstemLOGGERinfocolorstrjoin)	r   	show_file	show_funcru   rS   _funcfrmr/   r0   r   r1   
print_args   s   
$*r   c                 C   s   t |  tj |  t|  tj|  tj|  |r<ttjdr>t	d dtj
j_dtjd< t| tjd< d S d S d S )Nz1.12.0Tz:4096:8CUBLAS_WORKSPACE_CONFIGPYTHONHASHSEED)randomseednpr   manual_seedr   manual_seed_allcheck_version__version__use_deterministic_algorithmsbackendscudnndeterministicrE   rF   r*   )r   r   r0   r0   r1   
init_seeds   s   




r   r0   c                    s    fdd|   D S )Nc                    sD   i | ]\ } v rt  fd dD r|j  jkr |qS )c                 3       | ]}| vV  qd S rr   r0   rK   ru   r   r0   r1   rM      rN   z-intersect_dicts.<locals>.<dictcomp>.<genexpr>)allshape)rK   r   dbexcluder   r1   r      s   D z#intersect_dicts.<locals>.<dictcomp>)r   )dar   r   r0   r   r1   intersect_dicts      r   c                 C   s   t | }dd |j D S )Nc                 S   s&   i | ]\}}|j tjjur||j qS r0   )defaultr   	Parameteremptyr   r0   r0   r1   r        & z$get_default_args.<locals>.<dictcomp>)r   	signature
parametersr   )r   r   r0   r0   r1   get_default_args  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maxrE   r   getctime)
search_dir	last_listr0   r0   r1   get_latest_run  s   r  c                 C   s"   t  t t|  j }|jS rr   )r   nowfromtimestampr   statst_mtimedays)r   r   r0   r0   r1   file_age  s   r	  c                 C   s.   t t|  j}|j d|j d|j S )N-)r   r  r   r  r  yearmonthday)r   r   r0   r0   r1   	file_date  s   r  c                 C   sJ   d}t | } |  r|  j| S |  r#tdd | dD | S dS )Ni   c                 s   s"    | ]}|  r| jV  qd S rr   )is_filer  st_sizer   r0   r0   r1   rM   !  r   zfile_size.<locals>.<genexpr>z**/*r   )r   r  r  r  is_dirsumr   )r   mbr0   r0   r1   	file_size  s   r  c                     s    dd l   fdd} |  p|  S )Nr   c                      s(   z	  dd W dS  ty   Y dS w )N)z1.1.1.1i  r   TF)create_connectionrR   r0   socketr0   r1   run_once*  s   zcheck_online.<locals>.run_oncer  )r  r0   r  r1   check_online&  s   r  c                 C   sL   zt | d  sJ td|  ddd d d W S  ty%   Y dS w )N.gitzgit -C z  describe --tags --long --alwaysTshellr   r'   )r   r  r   r-   	Exceptionr   r0   r0   r1   git_describe5  s   "r  ultralytics/yolov5masterc              
      sl  d  }d| }t d}td sJ |d | t s'J |d | tjdtdd	d
 d} fdd|D }t|rK||	d	d  }nd}td| d| d	d
 td| d	dd tdd	d
 
 }ttd| d| d| dd	d
}	|	dkr|dkrdnd| d| }
|d|	 dd |	dk  d!|
 d"| d#	7 }n|d$| d%7 }t| d S )&Nzhttps://github.com/z, for updates see zgithub: r  z%skipping check (not a git repository)zskipping check (offline)z\szgit remote -vTr  )patternstringc                    s   g | ]} |v qS r0   r0   )rK   r/   repor0   r1   r   I  s    z$check_git_status.<locals>.<listcomp>r   ultralyticszgit remote add  z
git fetch r   )r  timeoutzgit rev-parse --abbrev-ref HEADzgit rev-list z../z --countr   originzgit pullz	git pull u    ⚠️ YOLOv5 is out of date by z commitr/   z. Use `z` or `git clone z` to update.zup to date with u    ✅)r   r   rO   r  r5   splitr   r-   rQ   indexstriprf   r   r   )r%  branchurlmsgr/   splitsmatchesremotelocal_branchnpullr0   r$  r1   check_git_status>  s&   

$,r7  c                 C   s   t d dd l}z,|| }|jjjdd}|jjj	}z|j
j}W n ty-   d }Y nw |||dW S  |jjyE   d d d d Y S w )N	gitpythonr   r  r'   )r3  r.  commit)check_requirementsgitReporemotesr*  r/  replaceheadr9  hexshaactive_branchrm   	TypeErrorexcInvalidGitRepositoryError)r   r;  r%  r3  r9  r.  r0   r0   r1   check_git_infoZ  s   

rE  3.7.0c                 C   s   t t | ddd d S )NzPython T)rm   hard)r   r}   python_version)minimumr0   r0   r1   check_pythonl  r   rJ  0.0.0version c                 C   sn   dd | |fD \} }|r| |kn| |k}d| | d| |  d}|r,|s,J t ||r5|s5t| |S )Nc                 s   s    | ]}t |V  qd S rr   )pkgparse_versionr   r0   r0   r1   rM   s      z check_version.<locals>.<genexpr>u   WARNING ⚠️ z is required by YOLOv5, but z is currently installed)r   r   warning)currentrI  rm   pinnedrG  rn   resultr/   r0   r0   r1   r   q  s   
r   zrequirements.txtc                    s  t ddd}t  t| trA|  }| s J | d| d| } fddt|D } W d    n1 s;w   Y  nt| t	rI| g} d}d	}| D ]"}	zt
|	 W qO tjtjfyq   |d
|	 d7 }|d7 }Y qOw |r|rtrt| dd|dk  d| d z=ttd| d| dd  dt v r|n| }
| d| dd|dk  d|
 d| dt dd d}t| W d S  ty } zt| d|  W Y d }~d S d }~ww d S d S d S )Nredboldzrequirements:r'  z not found, check failed.c                    s&   g | ]}|j  vr|j  |j qS r0   )rm   	specifierr   r   r0   r1   r     r   z&check_requirements.<locals>.<listcomp>r'   r   "z" r   z YOLOv5 requirementr/   z#not found, attempting AutoUpdate...zpip install Tr  rS   z packagez updated per 
u    ⚠️ z;Restart runtime or rerun command for updates to take effectu    ❌ )r   rJ  
isinstancer   r   rO   rP   rM  parse_requirementsr*   requireVersionConflictDistributionNotFoundAUTOINSTALLr   r   r   r-   localsr  rP  )requirementsr   installcmdsprefixrS   r   r/   r5  rsourceer0   rW  r1   r:  }  sH   


$" "r:      c                    sd   t | trtt| t }nt| }  fdd| D }|| kr0td|  d d|  |S )Nc                    s    g | ]}t t|t qS r0   )r   make_divisiblerf   r   floorr/   r0   r1   r     s     z"check_img_size.<locals>.<listcomp>u   WARNING ⚠️ --img-size z  must be multiple of max stride z, updating to )rZ  rf   r   ri  listr   rP  )imgszr/   rk  new_sizer0   rj  r1   check_img_size  s   
ro  c              
   C   s   z$t  rJ t rJ tdtd td t  td W dS  tyA } z| r6t	
d|  W Y d }~dS d }~ww )NrZ   )r   r      r   TuM   WARNING ⚠️ Environment does not support cv2.imshow() or PIL Image.show()
F)rB   rT   cv2imshowr   zeroswaitKeydestroyAllWindowsr  r   rP  )warnrg  r0   r0   r1   check_imshow  s   



rw  
yolov5s.ptz.ptc                 C   sv   | r5|r7t |tr|g}t | ttfr| n| gD ] }t|j }t|r4||v s4J | | d| qd S d S d S )Nz acceptable suffix is )rZ  r*   rl  tupler   suffixlowerr+   )rS   r{  r0  r   r/   r0   r0   r1   check_suffix  s   
r}  z.yamlz.ymlc                 C   s
   t | |S rr   )
check_file)rS   r{  r0   r0   r1   
check_yaml  r;   r  c                 C   s\  t | | t| } tj| s| s| S | drf| }ttj	| 
dd j} tj| r;td| d|   | S td| d|  d tj||  t|  r]t|  jdksdJ d	| | S | d
rvdtjv stJ d| S g }dD ]}|tjtt| d |  dd qzt|sJ d|  t|dksJ d|  d| |d S )N)zhttp:/zhttps:/?r   zFound z locally at Downloading  to ...zFile download failed: z
clearml://clearmlz[ClearML is not installed, so cannot use ClearML dataset. Try running 'pip install clearml'.)datamodelsutilsz**Tr   zFile not found: r   zMultiple files match 'z', specify exact path: )r}  r*   rE   r   isfiler   r   urllibparseunquoter+  rm   r   r   r   hubdownload_url_to_filerO   r  r  r8   r9   extendr   r   r+   )rS   r{  r/  filesdr0   r0   r1   r    s.   

,
& r  c                 C   sh   t | } t| j }|  s0| s2d| j }td| d| d tjj|t	||d d S d S d S )Nzhttps://ultralytics.com/assets/r  r  r  progress)
r   
CONFIG_DIRrm   rO   r   r   r   r  r  r*   )fontr  rS   r/  r0   r0   r1   
check_font  s   
r  c                    sf  d}t  ttfr5t st r5t t dt j ddddd ttt j 	d  j
d}}t  ttfr@t  dD ]}| v sRJ td	| d
qBt  d ttfrftt d  d< tdd  d  D swJ dt d  d< t|p dpd st   d< dD ]A} |rt  | trΈ |   }| sǈ | drǈ | dd    }t| |< qfdd | D  |< q fdddD \}}}}|rdd t |tr|n|gD }tdd |D stddd |D   |r|stdt }	|dr[|dr[t|j}
td| d |
 d! t j!"||
 ttj#ddd" t$|
td# t|
%  d }n|d$rptd%| d& t&'|}nt(|d' i}d(t)t |	 d d)}|d*v rd+| d,t*d-t nd.| d/}td0|  t+t, d rd1nd2dd3  S )4Nr'   r)  TFr   )rY   unzipdeletecurlthreadsz*.yaml)trainvalnameszdata.yaml 'u   :' field missing ❌r  c                 s   s    | ]}t |tV  qd S rr   )rZ  rf   )rK   r   r0   r0   r1   rM     rO  z check_dataset.<locals>.<genexpr>z2data.yaml names keys must be integers, i.e. 2: carncr   )r  r  rZ   z../rp  c                    s   g | ]
}t  |  qS r0   )r*   r   r   r  r0   r1   r         z!check_dataset.<locals>.<listcomp>c                 3   s    | ]}  |V  qd S rr   )rG   r   )r  r0   r1   rM     rO  )r  r  rZ   downloadc                 S   s   g | ]}t | qS r0   )r   r   r   r0   r0   r1   r     s    c                 s       | ]}|  V  qd S rr   )rO   r   r0   r0   r1   rM     rN   u+   
Dataset not found ⚠️, missing paths %sc                 S   s   g | ]
}|  st|qS r0   )rO   r*   r   r0   r0   r1   r     r  u   Dataset not found ❌httpz.zipr  r  r  parentsr{   r  zbash zRunning z ...yaml(zs))r   Nu   success ✅ z, saved to rU  zfailure u    ❌zDataset download r   zArial.Unicode.ttfr  )-rZ  r*   r   r   r   r  DATASETS_DIRr   nextrglobparent	yaml_loadr   rl  rz  dict	enumerater   keysr+   rG   is_absoluter   r   rO   r   r   r   r  r   endswithrm   r   r  r  r   
unzip_filerX   rE   r~   execroundr   r  r2   )r  autodownloadextract_dirr   ru   r  r  rZ   r/   r   r   re  r   r0   )r  r   r1   check_dataset  sf   $"

,r  c                    s   ddl m m}  fdd}td}t|  j}|jdv r dS td d	 d
 }|	 r.|n	t
 r3dntd}z|t| |sJ||d||sJJ t| d W dS  tyj   d}t| d|  Y dS w )Nr   )	AutoShapeDetectMultiBackendc                    sJ    | dd}||j d }d|_||j d }|j|jko$tj||ddS )NF)rn   r   Tg?)atol)xywhnampr   r   allclose)modelimmabr  r0   r1   amp_allclose8  s
   zcheck_amp.<locals>.amp_allclosezAMP: )cpumpsFr  imageszbus.jpgz&https://ultralytics.com/images/bus.jpg)  r  rp  z
yolov5n.ptu   checks passed ✅Tz1https://github.com/ultralytics/yolov5/issues/7908u<   checks failed ❌, disabling Automatic Mixed Precision. See )yolov5.models.commonr  r  r   r  r   devicer>   r   rO   r  r   onesr   r   r   r  rP  )r  r  r  rd  r  r   r  help_urlr0   r  r1   	check_amp4  s"   
 "r  	data.yamlc                 C   s:   t | dd}t|W  d    S 1 sw   Y  d S )Nr)   )errors)rP   r  	safe_load)rS   r   r0   r0   r1   r  P  s   $r  c                 C   sN   t | d}tjdd | D |dd W d    d S 1 s w   Y  d S )NrU   c                 S   s(   i | ]\}}|t |trt|n|qS r0   )rZ  r   r*   r   r0   r0   r1   r   Y  r   zyaml_save.<locals>.<dictcomp>F	sort_keys)rP   r  	safe_dumpr   )rS   r  r   r0   r0   r1   	yaml_saveV  s    "r  z	.DS_Store__MACOSXc                    sr   |d u r	t | j}t| "}| D ] t fdd|D r&|j |d qW d    d S 1 s2w   Y  d S )Nc                 3   r   rr   r0   r   r   r0   r1   rM   b  rN   zunzip_file.<locals>.<genexpr>r  )r   r  r
   namelistr   extract)rS   r   r   zipObjr0   r  r1   r  \  s   

"r  c                 C   s0   t t| dd} ttj| jdd S )Nz:/z://r  r   )r*   r   r>  r  r  r  rm   r+  )r/  r0   r0   r1   url2filef  s   r  rp  c           	         s    fddt |}|jddd dkr6t}|fddt| t| |  |  d S t| t	t fr@| gn| D ]}|| qBd S )Nc              
      s  d}t j| rt| }nl|t| j }td|  d| d td D ]R} rFdkr0dnd}t d| d	|  d
| d}|dk}nt	j
j| |dkd | }|rY n |k rotd|d  d d|  d q&td|  d q&r|r|jdkst|st|rtd| d t|rt|| n"t|rt d| d|j  n|jdkrt d| d|j  r|  d S d S d S d S d S )NTr  r  r  r   sSr'   z	curl -# -zL "z" -o "z" --retry 9 -C -r   r  u"   ⚠️ Download failure, retrying r)  r'  u   ❌ Failed to download z.gzz
Unzipping ztar xf z --directory ztar xfz )rE   r   r  r   rm   r   r   ranger~   r   r  r  r  rP  r{  r   r   r  r  rX   )r/  rY   successr   ir/   re  )r  r  retryr  r  r0   r1   download_onen  s>   

$"
zdownload.<locals>.download_oneTr  r   c                    s    |  S rr   r0   rt   )r  r0   r1   rv         zdownload.<locals>.<lambda>)
r   r   r   imapzipr   closer   rZ  r*   )	r/  rY   r  r  r  r  r  poolur0   )r  r  r  r  r  r  r1   r  l  s   #r  c                 C   s*   t |tjrt| }t| | | S rr   )rZ  r   Tensorrf   r   mathceil)ru   divisorr0   r0   r1   ri    s   ri  c                 C   s   t jdd| dS )Nu"   [|@#!¡·$€%&()=?¿^*;:,¨´><+]r   )r"  replr#  )r5   subr.   r0   r0   r1   	clean_str     r  r         ?d   c                    s    fddS )Nc                    s(   dt | t j    d    S )Nr      )r  cospirt   stepsy1y2r0   r1   rv     r   zone_cycle.<locals>.<lambda>r0   )r  r  r  r0   r  r1   	one_cycle  r  r  c                     s   t | dkr| ndd| d f^ }}i 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) fd*d+|D |   d$  S ),Nr   bluerU  r   blackz[30mrT  z[31mgreenz[32myellowz[33mz[34mmagentaz[35mcyanz[36mwhitez[37mbright_blackz[90m
bright_redz[91mbright_greenz[92mbright_yellowz[93mbright_bluez[94mbright_magentaz[95mbright_cyanz[96mbright_whitez[97mendz[0mz[1mz[4m)rU  	underliner'   c                 3   s    | ]} | V  qd S rr   r0   r   colorsr0   r1   rM     rN   zcolorstr.<locals>.<genexpr>)r+   r   )inputr   r#  r0   r
  r1   r     sP   $	
&r   P   c                 C   sr   | d d u r
t  S t| d} | d d df t}tj||d}d||dk< d| }||  }t |	 S )Nr   	minlengthr   )
r   r  r   concatenateastyperf   bincountr  
from_numpyfloat)labelsr  classesweightsr0   r0   r1   labels_to_class_weights  s   r  c                    s.   t  fdd| D }|d | dS )Nc                    s,   g | ]}t j|d d df t dqS )Nr   r  )r   r  r  rf   r   r  r0   r1   r     s   , z+labels_to_image_weights.<locals>.<listcomp>r   )r   arrayreshaper  )r  r  class_weightsclass_countsr0   r  r1   labels_to_image_weights  s   r  c                   C   s   g dS )N)Pr   r  rp     r         r   	   r"                                                      rh  !   "   #   $   %   &   '   (   )   *   +   ,   .   /   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   r0   r0   r0   r0   r1   coco80_to_coco91_class  s   rg  c                 C   sz   t | tjr
|  nt| }| d | d  d |d< | d | d  d |d< | d | d  |d< | d | d  |d< |S N.r   .r  r  .r   .rp  rZ  r   r  cloner   copyru   yr0   r0   r1   	xyxy2xywh  s   rr  c                 C   s   t | tjr
|  nt| }| d | d d  |d< | d | d d  |d< | d | d d  |d< | d | d d  |d< |S rh  rm  rp  r0   r0   r1   	xywh2xyxy  s   rs  r  c                 C   s   t | tjr
|  nt| }|| d | d d   | |d< || d | d d   | |d< || d | d d   | |d< || d | d d   | |d< |S rh  rm  ru   rU   hpadwpadhrq  r0   r0   r1   
xywhn2xyxy  s       rx  c                 C   s   |rt | || || f t| tjr|  nt| }| d | d  d | |d< | d | d  d | |d< | d | d  | |d< | d | d  | |d< |S rh  )
clip_boxesrZ  r   r  rn  r   ro  )ru   rU   ru  clipepsrq  r0   r0   r1   
xyxy2xywhn  s   r|  c                 C   sJ   t | tjr
|  nt| }|| d  | |d< || d  | |d< |S )Nri  rk  rm  rt  r0   r0   r1   xyn2xy  s   r}  c                 C   sp   | j \}}|dk|dk@ ||k@ ||k@ }|| || }}t|r3t| | | | gS tdS )Nr   )r   r  )TrQ   r   r  minr   rs  )segmentwidthheightru   rq  insider0   r0   r1   segment2box   s   
 4r  c                 C   sH   g }| D ]}|j \}}|| | | | g qtt|S rr   )r~  appendr  r   rr  r   r  )segmentsboxesr/   ru   rq  r0   r0   r1   segments2boxes(  s
   
$r    c                    s   t | D ]>\} tj  ddd d f fdd tdt d |tt t fddtdD ddj| |< q| S )Nr   r   )axisc              	      s&   g | ]}t  d d |f qS rr   )r   interp)rK   r  r/   ru   xpr0   r1   r   7  r   z%resample_segments.<locals>.<listcomp>r  r   )	r  r   r  linspacer+   aranger  r  r~  )r  r5  r  r0   r  r1   resample_segments1  s   "0r  c                 C   s   |d u r.t | d |d  | d |d  }| d |d |  d | d |d |  d f}n
|d d }|d }|dddgf  |d 8  < |dddgf  |d 8  < |dd df  |  < t|| |S )Nr   r   r  .rp  r  )r  ry  )
img1_shaper  
img0_shape	ratio_padgainpadr0   r0   r1   scale_boxes;  s   "2
r  c                 C   s   |d u r.t | d |d  | d |d  }| d |d |  d | d |d |  d f}n
|d d }|d }|d d df  |d 8  < |d d df  |d 8  < || }t|| |r{|d d df  |d   < |d d df  |d   < |S )Nr   r   r  )r  clip_segments)r  r  r  r  	normalizer  r  r0   r0   r1   scale_segmentsK  s   "2
r  c                 C   s   t | tjr0| d d|d  | d d|d  | d d|d  | d d|d  d S | dddgf d|d | dddgf< | ddd	gf d|d | ddd	gf< d S )
Nri  r   r   rk  rj  rl  .r  rp  rZ  r   r  clamp_rz  )r  r   r0   r0   r1   ry  ^  s   (,ry  c                 C   s   t | tjr$| d d df d|d  | d d df d|d  d S | d d df d|d | d d df< | d d df d|d | d d df< d S )Nr   r   r  )r  r   r0   r0   r1   r  j  s
    (,r        ??,  c	           %      C   s  d|  kr
dksn J d| dd|  krdks&n J d| dt | ttfr1| d } | j}	d|	jv }
|
r?|  } | jd }| jd | d }| d	 |k}d
}d}dd|  }d}||dkM }d}t }d| }tj	dd| f| jdg| }t
| D ]\}}|||  }|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 }|dd|df }|rE|ddd|f |kjddj\}}t|| ||d| df |dddf  || fd}n$|ddd|f jddd\}}t||| |fd|d|k }|dur||ddddf tj||jdkd }|jd }|sq||dddf jddd|  }|ddddf |rdn| } |ddddf |  |dddf }!}"tj|!|"|}|d| }|rd|  k rdk rn n8t|!| |!|k}#|#|"d  }$t|$|ddddf  |$jddd ||ddf< |r||#ddk }|| ||< |
r/|| |	||< t | |krEt d|dd  |S q|S )zNon-Maximum Suppression (NMS) on inference results to reject overlapping detections

    Returns:
         list of detections, on (n,6) tensor per image [xyxy, conf, cls]
    r   r   zInvalid Confidence threshold z&, valid values are between 0.0 and 1.0zInvalid IoU r  r  r   ).r  i   i0u  g      ?g?TFr   )r  Nr  r  )as_tuple)keepdimr   )
descendingg     p@u   WARNING ⚠️ NMS time limit z.3fz
s exceeded)!rZ  rl  rz  r  r>   r  r   r   r   rs  r  r+   r  r   catrs  nonzeror~  r  r   viewtensorrQ   argsorttorchvisionopsnmsr   mmr  tor   rP  )%
prediction
conf_thres	iou_thresr  agnosticmulti_labelr  max_detnmr  r  bsr  xcmax_whmax_nms
time_limit	redundantmerger   mioutputxiru   lbr   boxmaskr  jconfr5  cr  scoresiour  r0   r0   r1   non_max_suppressiont  s   &&

 $(
,&<"&
.
$"*":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 ||p:|  tj	
|pB| d	 }td
|  d|rTd| dnd d|dd d S )Nr  )map_locationemar  )	optimizerbest_fitnessr  updatesr   epochFg    .AzOptimizer stripped from ,z
 saved as r'   r'  z.1fMB)r   loadr  rG   halfr   requires_gradsaverE   r   getsizer   r   )r   r/   ru   r   pr  r0   r0   r1   strip_optimizer  s   

4r  zevolve: c                 C   sz  |d }|d }t | t |  } t dd | D } |t |  }t| }	|rId| d}
t|
| r;| jndkrIt	d|
 d	|  | rOd
n
d|	 |  
dd }t|d}||d|	 | 
d d  W d    n1 szw   Y  t|dv}tj|dd}|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 d    n1 sw   Y  t|| d# | dd$d | D  d | dd%d |D  d   |r;t	d| d	| d&|  d S d S )'Nz
evolve.csvzhyp_evolve.yamlc                 s   r  rr   r-  r   r0   r0   r1   rM     rN   z!print_mutation.<locals>.<genexpr>zgs://z/evolve.csvr   z
gsutil cp r'  r'   z%20s,r  rY  r  z%20.5g,rU   T)skipinitialspacec                 S   s   |   S rr   r  rt   r0   r0   r1   rv     r  z print_mutation.<locals>.<lambda>)columnsr  z*# YOLOv5 Hyperparameter Evolution Results
z# Best generation: z# Last generation: r   z# r   c                 s       | ]	}|  d V  qdS z>20sNr  r   r0   r0   r1   rM         r!  c                 s       | ]}|d V  qdS )z>20.5gNr0   r   r0   r0   r1   rM     rN   z

Fr  z' generations finished, current result:
c                 s   r  r  r  r   r0   r0   r1   rM     r  c                 s   r  )z20.5gNr0   r   r0   r0   r1   rM     s    z gs://)rz  r  valuesr+   r   rO   r  r  rE   r~   rstriprP   writepdread_csvrenamer   argmaxr   r   r  r  locto_dictr   r   )r  resultshypsave_dirbucketrd  
evolve_csvevolve_yamlvalsr5  r/  r/   r   r  r  generationsr0   r0   r1   print_mutation  sh   ""  $
 r  c                 C   s  t |tjr	|gn|}t| D ]\}}|d urt|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 }|D ]H}	|| 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  r  r   r   g?   r   rp  )   r  r   )dtype   )rZ  r   ndarrayr  r+   rn  rr  r   	unsqueezers  r   r  r   rf   rq  resize	transposeascontiguousarrayfloat32r  r   r  r  r  r  )ru   r  imgim0r  r  r  	pred_cls1imsr  cutoutr  	pred_cls2r0   r0   r1   apply_classifier  s,   4,,8&r  c                 C   s   t | } |  r:|s:|  r| d| jfn| df\} }tddD ]}|  | | | }tj|s5 nq!t |} |rC| jddd | S )Nr'   r  i'  Tr  )	r   rO   r  r   r{  r  rE   r   r   )r   r{   sepr   r{  r5  r  r0   r0   r1   increment_path?  s   $	r  c                 C   s   t t| tj|S rr   )rq  imdecoder   fromfileuint8)r   flagsr0   r0   r1   imread]  s   r  c                 C   s8   zt t| j|d |  W dS  ty   Y dS w )Nr   TF)rq  imencoder   r{  tofiler  r   r  r0   r0   r1   imwritea  s   r
  c                 C   s   t | d | d S )Nunicode_escape)imshow_r,   r-   r	  r0   r0   r1   rr  i  s   rr  )r'   )r3   )F)rw   rx   )NTF)r   F)r0   )r   )r   r!  )rF  )rK  rK  rL  FFF)rh  r   )rx  ry  r'   )r~  )T)r  )Nr  )r   TTFr   rp  )r   r  r  )r  )r  r  r   r   )r  r  Fr   )r  r  )r  rr   )NF)r  r  NFFr0   r  r   )r  r'   )Fr'   F)__doc__
contextlibr   r   rh   logging.configr  rE   r}   r   r5   r   r8   r   r  ro  r   r   	itertoolsr   multiprocessing.poolr   pathlibr   
subprocessr   tarfiler   typingr	   zipfiler
   r   rq  r?   numpyr   pandasr  pkg_resourcesrM  r   r  r  yolov5.utilsr   r   yolov5.utils.downloadsr   yolov5.utils.metricsr   r   __file__r   FILEr  r   rf   rg   r   r  r   	cpu_countNUM_THREADSr  r*   r|  r_  VERBOSETQDM_BAR_FORMATFONTset_printoptionsr]   optionsdisplaymax_columnssetNumThreadsrF   r~   r2   r7   r:   rB   rH   r4   rT   r[   LOGGING_NAMErp   	getLoggerr   r   rP  rs   setattrr   r   r  ContextDecoratorr   r   r   r   r  r   r   r   r   r  r	  r  r  r  r  r7  rE  rJ  r   r:  ro  rw  r}  r  r  r  r  r  r  r  r  r  r  ri  r  r  r   r  r  r  rg  rr  rs  rx  r|  r}  r  r  r  r  r  ry  r  r  r  r  r  r  rr  r  IMREAD_COLORr  r
  r0   r0   r0   r1   <module>   s  


 







	


"





B



1









	




q'
#