
    Ҷf                        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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  ej        ddd	            ej        dd
dj        i           dej        j        _         ej        d             e e  ej!                    d                    ej"        d<   dOdZ#dPdZ$dQdZ%d Z&dRdZ'd Z(d Z)dSdZ*dTdZ+d Z,d  Z-d! Z.d" Z/d# Z0dUd'Z1d( Z2dVd*Z3d) ej4        d)          fd+Z5d, Z6d- Z7d. Z8dWd0Z9dWd1Z:dXd2Z;d3 Z<dYd5Z=dZd6Z>d7 Z?d[d;Z@d\d>ZAd? ZBd@ ZCdA ZDd]dBeEfdCZFd]dBeEfdDZG	 	 d^dGZH	 	 d_dHZId`dJZJdadLZKdM ZLdbdNZMdS )c    N)Path)gsutil_getsize)fitness)init_torch_seedsi@     long)	linewidth	precisionprofile
float_kindz{:11.5g})r	   	formatter
      NUMEXPR_MAX_THREADSc                 f    t          j        d| dv rt           j        nt           j                   d S )Nz%(message)s)r   r   )formatlevel)loggingbasicConfigINFOWARN)ranks    %/var/www/html/yolov7/utils/general.pyset_loggingr   !   sB    "googll7<A A A A A A    c                     t          j        |            t          j                             |            t          |            d S N)randomseednpr   )r    s    r   
init_seedsr"   '   s:    
KINN4Tr   .c                 |    t          j         |  dd          }|r t          |t          j        j                  ndS )Nz/**/last*.ptT	recursive)key )globmaxospathgetctime)
search_dir	last_lists     r   get_latest_runr0   .   sA    	Z555FFFI3<D3ybg.////"Dr   c                  D    t          d                                          S )Nz
/workspace)r   exists r   r   isdockerr4   4   s    $$&&&r   r(   c                     t          j                    dk    r(|                                                     dd          n| S )NWindowsasciiignore)platformsystemencodedecode)strs    r   emojisr>   9   s8    5=_5F5F)5S5S3::<<w111Y\\r   c                  ^    dd l } 	 |                     dd           dS # t          $ r Y dS w xY w)Nr   )z1.1.1.1i  r   TF)socketcreate_connectionOSError)r@   s    r   check_onlinerC   >   sN    MMM  !11555t   uus    
,,c                      t          t          d          d           	 t          d                                          s
J d            t	                      r
J d            t                      s
J d            d} t          j        | d	
                                          	                                
                    d          }t          j        dd	
                                          	                                }t          t          j        d| dd	
                    }|dk    rd| dd|dk    z   d| d}nd| d}t          t          |                     d S # t          $ r}t          |           Y d }~d S d }~ww xY w)Nzgithub: r(   )endz.gitz%skipping check (not a git repository)zskipping check (Docker image)zskipping check (offline)z/git fetch && git config --get remote.origin.urlTshellzgit rev-parse --abbrev-ref HEADzgit rev-list z..origin/master --countr   u'   ⚠️ WARNING: code is out of date by z commits   z). Use 'git pull' to update or 'git clone z' to download latest.zup to date with u    ✅)printcolorstrr   r2   r4   rC   
subprocesscheck_outputr<   striprstripintr>   	Exception)cmdurlbranchnrH   es         r   check_git_statusrW   H   s   	(:

B''''F||""$$MM&MMMM::>>>>>>~~999999?%c666==??EEGGNNvVV()JRVWWW^^``ffhh
'(W(W(W(W_cdddeeq55U! U UC1q5M U U:=U U UAA -3,,,AfQii   as   EE) )
F3FFrequirements.txtr3   c                    dd l }t          ddd          }t          | t          t          f          rt	          |           }|                                s)t          | d|                                 d           d S fd|                    |	                                          D             } nfd| D             } d}| D ]}	 |
                    |           # t          $ rg}|d	z  }t          | d|j         d
           t          t          j        d|j         dd                                                     Y d }~d }~ww xY w|rmdt!                      v r|                                n| }| d| dd|d	k    z   d| d| dt          dd           d}	t          t#          |	                     d S d S )Nr   redboldzrequirements: z not found, check failed.c                 B    g | ]}|j         v|j          |j         S r3   )name	specifier.0xexcludes     r   
<listcomp>z&check_requirements.<locals>.<listcomp>g   s7    wwwQabagovavav1601;00avavavr   c                     g | ]}|v|	S r3   r3   r`   s     r   rd   z&check_requirements.<locals>.<listcomp>i   s#    DDDa1G3C3C3C3C3Cr   rI   z> not found and is required by YOLOR, attempting auto-update...zpip install ''TrF   filez packagerH   z updated per 
u    ⚠️ z;Restart runtime or rerun command for updates to take effect)pkg_resourcesrK   
isinstancer=   r   r2   rJ   resolveparse_requirementsopenrequirerQ   reqrL   rM   r<   localsr>   )
requirementsrc   pkgprefixrg   rU   rrV   sourcerH   s
    `        r   check_requirementsrv   ^   sO   eV_55F,d,, EL!!{{}} 	VGGdllnnGGGHHHFwwww#:P:PQUQZQZQ\Q\:]:]wwwDDDD<DDD	A Z Z	ZKKNNNN 	Z 	Z 	ZFAVccaecccddd*)*B!%*B*B*B$OOOVVXXYYYYYYYY	Z
 	 #)VXX#5#5< s s s s3!a%= s sv s ss s'0mnns s sfQii	 s   C
E(AE

E    c                 v    t          | t          |                    }|| k    rt          d| ||fz             |S )NzHWARNING: --img-size %g must be multiple of max stride %g, updating to %g)make_divisiblerP   rJ   )img_sizerH   new_sizes      r   check_img_sizer|   {   sE    hA//H8X\dfgiq[rrsssOr   c                  P   	 t                      r
J d            t          j        dt          j        d                     t          j        d           t          j                     t          j        d           dS # t          $ r} t          d|             Y d } ~ dS d } ~ ww xY w)Nz/cv2.imshow() is disabled in Docker environmentstest)rI   rI      rI   TzVWARNING: Environment does not support cv2.imshow() or PIL Image.show() image displays
F)	r4   cv2imshowr!   zeroswaitKeydestroyAllWindowsrQ   rJ   )rV   s    r   check_imshowr      s    	::PPPPPP
628I..///AAt   khikkllluuuuus   A:A> >
B%B  B%c                    t          |                                           s| dk    r| S t          j        d| z   d          }t          |          sJ d|              t          |          dk    sJ d|  d|             |d	         S )
Nr(   z./**/Tr%   zFile Not Found: rI   zMultiple files match 'z', specify exact path: r   )r   is_filer)   len)rg   filess     r   
check_filer      s    Dzz trzz	'D.D9995zz444d444445zzQ ] ] ]V[ ] ]Qxr   c                    |                      d          |                      d          }}|rDt          |          r6d t          |t                    r|n|gD             }t	          d |D                       st          dd |D             z             |rt          |          rt          d|z             |                    d          rd|                    d	          rOt          |          j	        }t          j                            ||           t          j        d
|d|          }nt          j        |          }t          d|dk    rdndz             d S t          d          d S d S d S )Nvaldownloadc                 P    g | ]#}t          |                                          $S r3   )r   rk   ra   rb   s     r   rd   z!check_dataset.<locals>.<listcomp>   s(    TTTQtAww  TTTr   c              3   >   K   | ]}|                                 V  d S r   )r2   r   s     r   	<genexpr>z check_dataset.<locals>.<genexpr>   s*      ++!188::++++++r   z2
WARNING: Dataset not found, nonexistent paths: %sc                 T    g | ]%}|                                 t          |          &S r3   )r2   r=   r   s     r   rd   z!check_dataset.<locals>.<listcomp>   s1    JqJqJqVWfgfnfnfpfpJq3q66JqJqJqr   zDownloading %s ...httpz.zipz	unzip -q z -d ../ && rm zDataset autodownload %s
r   successfailurezDataset not found.)getr   rj   listallrJ   
startswithendswithr   r^   torchhubdownload_url_to_filer+   r:   rQ   )dictr   rH   frt   s        r   check_datasetr      s   XXe__dhhz22C
 6s3xx 6TT*S$2G2G+R33cUTTT++s+++++ 	6GJqJq[^JqJqJqqrrr 
6SVV 
6*Q.///<<'' %AJJv,>,> %QAI221a888		111aa"HIIAA	!A1!q&&YYiXYYYYY 45556 6 6 6	6 	6r   c                 6    t          j        | |z            |z  S r   )mathceil)rb   divisors     r   ry   ry      s    9Q[!!G++r   c                 0    t          j        dd|           S )Nu"   [|@#!¡·$€%&()=?¿^*;:,¨´><+]_)patternreplstring)resub)rH   s    r   	clean_strr      s    6>SQRSSSSr                 ?d   c                       fdS )Nc                 j    dt          j        | t           j        z  z            z
  dz  z
  z  z   S )NrI      )r   cospi)rb   stepsy1y2s    r   <lambda>zone_cycle.<locals>.<lambda>   s4    q48AK%$7888A="r'JRO r   r3   )r   r   r   s   ```r   	one_cycler      s    OOOOOOOr   c                     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                       | z   d$         z   S )+NrI   bluer[   r   blackz[30mrZ   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[97mrE   z[0mz[1mz[4m)r[   	underliner(   c              3   (   K   | ]}|         V  d S r   r3   )ra   rb   colorss     r   r   zcolorstr.<locals>.<genexpr>   s'      ++6!9++++++r   )r   join)inputargsr   r   s      @r   rK   rK      sE    ZZ!^^EE&&%(1KMT6&gz &Z&z& 
& j	&
 & j& z& j& J& j& z& Z& 
& Z& j&  Y!&"  $%& & &F& 77++++d+++++k9F5MIIr   P   c                 R   | d         t          j                    S t          j        | d          } | d d df                             t          j                  }t          j        ||          }d||dk    <   d|z  }||                                z  }t          j        |          S )Nr   	minlengthrI   )	r   Tensorr!   concatenateastypeint32bincountsum
from_numpy)labelsncclassesweightss       r   labels_to_class_weightsr      s    ay|~~^FA&&FQQQTl!!"(++Gk'R000G GGqL'kGw{{}}GG$$$r   c                     t          j        fd| D                       }|                    d          |z                      d          }|S )Nc                     g | ]?}t          j        |d d df                             t           j                            @S )Nr   r   )r!   r   r   r   )ra   rb   r   s     r   rd   z+labels_to_image_weights.<locals>.<listcomp>   sC    aaaUVR[111a4)A)ARPPPaaar   rI   )r!   arrayreshaper   )r   r   class_weightsclass_countsimage_weightss    `   r   labels_to_image_weightsr      sV    8aaaaZ`aaabbL"**1b11L@EEaHHMr   c                      g d} | S )N)PrI   r   r      r         r   	   r                                                      rw   !   "   #   $   %   &   '   (   )   *   +   ,   .   /   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   r3   )rb   s    r   coco80_to_coco91_classr1     s    	a 	a 	aA Hr   c                    t          | t          j                  r|                                 nt	          j        |           }| d d df         | d d df         z   dz  |d d df<   | d d df         | d d df         z   dz  |d d df<   | d d df         | d d df         z
  |d d df<   | d d df         | d d df         z
  |d d df<   |S Nr   r   rI   r   rj   r   r   cloner!   copyrb   ys     r   	xyxy2xywhr9     s    5<00@			bgajjAAw111a4 A%AaaadGAw111a4 A%AaaadG1g!!!Q$AaaadG1g!!!Q$AaaadGHr   c                    t          | t          j                  r|                                 nt	          j        |           }| d d df         | d d df         dz  z
  |d d df<   | d d df         | d d df         dz  z
  |d d df<   | d d df         | d d df         dz  z   |d d df<   | d d df         | d d df         dz  z   |d d df<   |S r3  r4  r7  s     r   	xywh2xyxyr;  	  s    5<00@			bgajjA1g!!!Q$!#AaaadG1g!!!Q$!#AaaadG1g!!!Q$!#AaaadG1g!!!Q$!#AaaadGHr     c                    t          | t          j                  r|                                 nt	          j        |           }|| d d df         | d d df         dz  z
  z  |z   |d d df<   || d d df         | d d df         dz  z
  z  |z   |d d df<   || d d df         | d d df         dz  z   z  |z   |d d df<   || d d df         | d d df         dz  z   z  |z   |d d df<   |S r3  r4  rb   whpadwpadhr8  s         r   
xywhn2xyxyrC    s!   5<00@			bgajjA1QQQT7Qqqq!tWq[()D0AaaadG1QQQT7Qqqq!tWq[()D0AaaadG1QQQT7Qqqq!tWq[()D0AaaadG1QQQT7Qqqq!tWq[()D0AaaadGHr   c                     t          | t          j                  r|                                 nt	          j        |           }|| d d df         z  |z   |d d df<   || d d df         z  |z   |d d df<   |S )Nr   rI   r4  r>  s         r   xyn2xyrE    s}    5<00@			bgajjA!AAAqD'kD AaaadG!AAAqD'kD AaaadGHr   c                 r   | j         \  }}|dk    |dk    z  ||k    z  ||k    z  }||         ||         }}t          |          r`t          j        |                                |                                |                                |                                g          nt          j        d          S )Nr   )rI   r   )Tanyr!   r   minr*   r   )segmentwidthheightrb   r8  insides         r   segment2boxrN  %  s    9DAq1fa AJ/1;?FfIqyqA=@VVY28QUUWWaeeggquuww8999RXIYIYYr   c                 (   g }| D ]m}|j         \  }}|                    |                                |                                |                                |                                g           nt	          t          j        |                    S r   )rG  appendrI  r*   r9  r!   r   )segmentsboxesrH   rb   r8  s        r   segments2boxesrS  -  su    E ; ;s1aeeggquuww9::::RXe__%%%r     c                    t          |           D ]\  }t          j        ddd d f         fd          t          j        dt	                    dz
  |          t          j        t	                              t          j        fdt          d          D                                           dd          j        | |<   | S )Nr   rI   axisc           	      P    g | ]"}t          j        d d |f                   #S r   )r!   interp)ra   irH   rb   xps     r   rd   z%resample_segments.<locals>.<listcomp><  s3    %R%R%RAbi2qAw&?&?%R%R%Rr   r   r   )		enumerater!   r   linspacer   arangeranger   rG  )rQ  rU   rZ  rH   rb   r[  s      @@@r   resample_segmentsr`  6  s    (## e e1NAq1aaay>222K3q66A:q))Ys1vvn%R%R%R%R%R%Rq%R%R%RSS[[\]_abbdOr   c                    |]t          | d         |d         z  | d         |d         z            }| d         |d         |z  z
  dz  | d         |d         |z  z
  dz  f}n|d         d         }|d         }|d d ddgfxx         |d         z  cc<   |d d ddgfxx         |d         z  cc<   |d d d dfxx         |z  cc<   t          ||           |S Nr   rI   r   r   r   )rI  clip_coords)
img1_shapecoords
img0_shape	ratio_padgainpads         r   scale_coordsrj  @  s   :a=:a=0*Q-*Q-2OPP!}z!}t33q8:a=:VW=[_K_;_cd:dd|Al
111q!f9Q
111q!f9Q
111bqb5MMMTMMM
###Mr   c                 6   | d d df                              d|d                    | d d df                              d|d                    | d d df                              d|d                    | d d df                              d|d                    d S )Nr   rI   r   r   )clamp_)rR  	img_shapes     r   rc  rc  P  s    	!!!Q$Kq)A,'''	!!!Q$Kq)A,'''	!!!Q$Kq)A,'''	!!!Q$Kq)A,'''''r   TFHz>c           	         |j         }|rG| d         | d         | d         | d         f\  }}}	}
|d         |d         |d         |d         f\  }}}}n| d         | d         dz  z
  | d         | d         dz  z   }	}| d         | d         dz  z
  | d         | d         dz  z   }
}|d         |d         dz  z
  |d         |d         dz  z   }}|d         |d         dz  z
  |d         |d         dz  z   }}t          j        |	|          t          j        ||          z
                      d          t          j        |
|          t          j        ||          z
                      d          z  }|	|z
  |
|z
  |z   }}||z
  ||z
  |z   }}||z  ||z  z   |z
  |z   }||z  }|s|s|rKt          j        |	|          t          j        ||          z
  }t          j        |
|          t          j        ||          z
  }|s|r|dz  |dz  z   |z   }||z   |z
  |	z
  dz  ||z   |z
  |
z
  dz  z   dz  }|r|||z  z
  S |rdt
          j        dz  z  t          j        t          j        |||z   z            t          j        |||z   z            z
  d          z  }t          j	                    5  |||z
  d|z   z   z  }d d d            n# 1 swxY w Y   |||z  ||z  z   z
  S d S ||z  |z   }|||z
  |z  z
  S |S rb  )
rG  r   rI  r*   clampr   r   powatanno_grad)box1box2x1y1x2y2GIoUDIoUCIoUepsb1_x1b1_y1b1_x2b1_y2b2_x1b2_y1b2_x2b2_y2interw1h1w2h2unionioucwchc2rho2valphac_areas                                r   bbox_iour  X  s   6D  D%)!Wd1gtAwQ%G"ueU%)!Wd1gtAwQ%G"ueUUAwa1,d1gQ!.CuAwa1,d1gQ!.CuAwa1,d1gQ!.CuAwa1,d1gQ!.Cu Yue$$uy'>'>>EEaHHYue$$uy'>'>>EEaHHIE U]EEMC/BU]EEMC/BGb2g%+E
%-C t t Yue$$uy'>'>>Yue$$uy'>'>> 	34 	3q27"S(BU]U*U2q8U]U*U2q89<=>D 5TBY& 5A%5:bBHo3N3NQVQ[\^bdgjbj\kQlQl3lno)p)pp]__ 6 6SAG!45E6 6 6 6 6 6 6 6 6 6 6 6 6 6 6dRi!e)344	5 5 "Ws]F&5.F222
s   'KK	Kr   &.>c                    |j         }|rG| d         | d         | d         | d         f\  }}	}
}|d         |d         |d         |d         f\  }}}}n| d         | d         dz  z
  | d         | d         dz  z   }
}| d         | d         dz  z
  | d         | d         dz  z   }}	|d         |d         dz  z
  |d         |d         dz  z   }}|d         |d         dz  z
  |d         |d         dz  z   }}t          j        |
|          t          j        ||          z
                      d          t          j        ||          t          j        |	|          z
                      d          z  }|
|z
  ||	z
  |z   }}||z
  ||z
  |z   }}||z  ||z  z   |z
  |z   }t          j        ||z  |z   |          }|s|s|rt          j        |
|          t          j        ||          z
  }t          j        ||          t          j        |	|          z
  }|s|r|dz  |dz  z   |z  |z   }t          j        ||z   |z
  |
z
            }t          j        ||z   |	z
  |z
            }|dz  |dz  z   dz  |z  }|r|||z  z
  S |rdt          j        dz  z  t          j        t          j	        ||z            t          j	        ||z            z
  d          z  }t          j
                    5  |d|z   ||z  z
  |z   z  }d d d            n# 1 swxY w Y   |||z  t          j        ||z  |z   |          z   z
  S d S t          j        ||z  |z   |          }|t          j        ||z
  |z  |z   |          z
  S |S rb  )rG  r   rI  r*   rp  rq  absr   r   rr  rs  ) rt  ru  rv  rw  rx  ry  r  rz  r{  r|  r}  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rho_xrho_yr  r  
alpha_ciour  s                                    r   bbox_alpha_iour    s)   6D  D%)!Wd1gtAwQ%G"ueU%)!Wd1gtAwQ%G"ueUUAwa1,d1gQ!.CuAwa1,d1gQ!.CuAwa1,d1gQ!.CuAwa1,d1gQ!.Cu Yue$$uy'>'>>EEaHHYue$$uy'>'>>EEaHHIE U]EEMC/BU]EEMC/BGb2g%+E )E%K#%u
-
-C t t Yue$$uy'>'>>Yue$$uy'>'>> 	K4 	K'B!G#-3BIeeme3e;<<EIeeme3e;<<EaZ%1*,1e;D RTBY& RA%5:b2g3F3FTVY[T[I\I\3\^_)`)``]__ E E!"q3w%%-&?!&C!DJE E E E E E E E E E E E E E E dRi%)A
NS4H%*P*PPQQR R YrBw}e44FFUNf#<s#BEJJJJ
s   &LLLc                 x   d } || j                   } ||j                   }t          j        | dddddf         |ddddf                   t          j        | dddddf         |ddddf                   z
                      d                              d          }||dddf         |z   |z
  z  S )a]  
    Return intersection-over-union (Jaccard index) of boxes.
    Both sets of boxes are expected to be in (x1, y1, x2, y2) format.
    Arguments:
        box1 (Tensor[N, 4])
        box2 (Tensor[M, 4])
    Returns:
        iou (Tensor[N, M]): the NxM matrix containing the pairwise
            IoU values for every element in boxes1 and boxes2
    c                 H    | d         | d         z
  | d         | d         z
  z  S Nr   r   r   rI   r3   boxs    r   box_areazbox_iou.<locals>.box_area  %    AQCFSVO44r   Nr   r   rG  r   rI  r*   rp  prod)rt  ru  r  area1area2r  s         r   box_iour    s    5 5 5 HTVEHTVE YtAAAtQRRK($qqq!""u+6644QSRSQSCTVZ[\[\[\^`_`^`[`Va9b9bbiijkllqqrsttEE!!!T'NU*U233r   c                     | d d d f         } |d          }t          j        | |                              d          }||                     d          |                    d          z   |z
  z  S )Nr   )r   rI  r  )wh1wh2r  s      r   wh_iour    sd    
aaag,C
d)CIc3$$Q''ECHHQKK#((1++-566r   c                    d } || j                   } ||j                   }t          j        | dddddf         |ddddf                   t          j        | dddddf         |ddddf                   z
                      d                              d          }|dddf         |z   |z
  }||z  }t          j        | dddddf         |ddddf                   }t          j        | dddddf         |ddddf                   }	|	|z
                      d          }
|
dddddf         |
dddddf         z  }|||z
  |z  z
  S )a  
    Return generalized intersection-over-union (Jaccard index) between two sets of boxes.
    Both sets of boxes are expected to be in ``(x1, y1, x2, y2)`` format with
    ``0 <= x1 < x2`` and ``0 <= y1 < y2``.
    Args:
        boxes1 (Tensor[N, 4]): first set of boxes
        boxes2 (Tensor[M, 4]): second set of boxes
    Returns:
        Tensor[N, M]: the NxM matrix containing the pairwise generalized IoU values
        for every element in boxes1 and boxes2
    c                 H    | d         | d         z
  | d         | d         z
  z  S r  r3   r  s    r   r  zbox_giou.<locals>.box_area  r  r   Nr   r   rI  rI   r  )rt  ru  r  r  r  r  r  r  ltirbiwhiareais               r   box_giour    s   5 5 5 HTVEHTVEYtAAAtQRRK($qqq!""u+6644QSRSQSCTVZ[\[\[\^`_`^`[`Va9b9bbiijkllqqrsttE111d7^e#e+E
%-C
)DD"1"%tAAArrE{
3
3C
)DD!""%tAAAqrrE{
3
3C9



"
"C111aL3qqq!!!Qw<'E%%-5(((r   rz  c                    d } || j                   } ||j                   }t          j        | dddddf         |ddddf                   t          j        | dddddf         |ddddf                   z
                      d                              d          }|dddf         |z   |z
  }||z  }t          j        | dddddf         |ddddf                   }	t          j        | dddddf         |ddddf                   }
|
|	z
                      d          }|dddddf         dz  |dddddf         dz  z   |z   }| ddddf         | ddddf         z   dz  }| ddddf         | ddddf         z   dz  }|dddf         |dddf         z   dz  }|dddf         |dddf         z   dz  }||z
  dz  ||z
  dz  z   }| ddddf         | ddddf         z
  }| ddddf         | ddddf         z
  }|dddf         |dddf         z
  }|dddf         |dddf         z
  }dt          j        dz  z  t          j        t          j        ||z            t          j        ||z            z
  d          z  }t          j	                    5  |d|z
  |z   |z   z  }ddd           n# 1 swxY w Y   |||z  z
  ||z  z
  S )	a(  
    Return complete intersection-over-union (Jaccard index) between two sets of boxes.
    Both sets of boxes are expected to be in ``(x1, y1, x2, y2)`` format with
    ``0 <= x1 < x2`` and ``0 <= y1 < y2``.
    Args:
        boxes1 (Tensor[N, 4]): first set of boxes
        boxes2 (Tensor[M, 4]): second set of boxes
        eps (float, optional): small number to prevent division by zero. Default: 1e-7
    Returns:
        Tensor[N, M]: the NxM matrix containing the pairwise complete IoU values
        for every element in boxes1 and boxes2
    c                 H    | d         | d         z
  | d         | d         z
  z  S r  r3   r  s    r   r  zbox_ciou.<locals>.box_area  r  r   Nr   r   r  rI   r   r   )
rG  r   rI  r*   rp  r  r   rq  rr  rs  )rt  ru  rz  r  r  r  r  r  r  r  r  r  diagonal_distance_squaredx_py_px_gy_gcenters_distance_squaredw_predh_predw_gth_gtr  r  s                           r   box_ciour    s   5 5 5 HTVEHTVEYtAAAtQRRK($qqq!""u+6644QSRSQSCTVZ[\[\[\^`_`^`[`Va9b9bbiijkllqqrsttE111d7^e#e+E
%-C
)DD"1"%tAAArrE{
3
3C
)DD!""%tAAAqrrE{
3
3C9



"
"C!$QQQ1W!2s111aaa7|q7H IC O 4
d111dA:..!
3C4
d111dA:..!
3C1:QQQT
"a
'C1:QQQT
"a
'C #c	a/392BB!!!T1*QQQaZ 00F!!!T1*QQQaZ 00F1:QQQT
"D1:QQQT
"D	
eh!m		5:dTk+B+BUZPVY_P_E`E`+`cd e eeA	 ( (QWq[3&'( ( ( ( ( ( ( ( ( ( ( ( ( ( (*-FFG%RS)SSs   0KKKc                    d } || j                   } ||j                   }t          j        | dddddf         |ddddf                   t          j        | dddddf         |ddddf                   z
                      d                              d          }|dddf         |z   |z
  }||z  }t          j        | dddddf         |ddddf                   }	t          j        | dddddf         |ddddf                   }
|
|	z
                      d          }|dddddf         dz  |dddddf         dz  z   |z   }| ddddf         | ddddf         z   dz  }| ddddf         | ddddf         z   dz  }|dddf         |dddf         z   dz  }|dddf         |dddf         z   dz  }||z
  dz  ||z
  dz  z   }|||z  z
  S )a(  
    Return distance intersection-over-union (Jaccard index) between two sets of boxes.
    Both sets of boxes are expected to be in ``(x1, y1, x2, y2)`` format with
    ``0 <= x1 < x2`` and ``0 <= y1 < y2``.
    Args:
        boxes1 (Tensor[N, 4]): first set of boxes
        boxes2 (Tensor[M, 4]): second set of boxes
        eps (float, optional): small number to prevent division by zero. Default: 1e-7
    Returns:
        Tensor[N, M]: the NxM matrix containing the pairwise distance IoU values
        for every element in boxes1 and boxes2
    c                 H    | d         | d         z
  | d         | d         z
  z  S r  r3   r  s    r   r  zbox_diou.<locals>.box_areaA  r  r   Nr   r   r  rI   r   r  )rt  ru  rz  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  s                     r   box_diour  3  s   5 5 5 HTVEHTVEYtAAAtQRRK($qqq!""u+6644QSRSQSCTVZ[\[\[\^`_`^`[`Va9b9bbiijkllqqrsttE111d7^e#e+E
%-C
)DD"1"%tAAArrE{
3
3C
)DD!""%tAAAqrrE{
3
3C9



"
"C!$QQQ1W!2s111aaa7|q7H IC O 4
d111dA:..!
3C4
d111dA:..!
3C1:QQQT
"a
'C1:QQQT
"a
'C #c	a/392BB *-FFGGr         ??c                 	   | j         d         dz
  }| d         |k    }d\  }	}
d}d}d}d}||d	k    z  }d
}t          j                    }t          j        d| j                  g| j         d         z  }t          |           D ]\  }}|||                  }|rt          ||                   r||         }t          j        t          |          |dz   f|j                  }|ddd	df         |ddddf<   d|dddf<   d|t          t          |                    |dddf                                         dz   f<   t          j	        ||fd          }|j         d         s|d	k    r|ddddf         |ddddf<   n"|ddddfxx         |ddddf         z  cc<   t          |ddddf                   }|ru|ddddf         |k                        d
          j        \  }}t          j	        ||         |||dz   df         |dddf                                         fd	          }nm|ddddf                             d	d          \  }}t          j	        |||                                fd	          |                    d          |k             }|D||ddddf         t          j        ||j                  k                        d	                   }|j         d         }|s{||k    r.||dddf                             d          d|                  }|ddddf         |rdn|
z  }|ddddf         |z   |dddf         }}t&          j                            |||          }|j         d         |k    r
|d|         }|rd	|cxk     rdk     rn nt-          ||         |          |k    }||d         z  }t          j        ||ddddf                                                   |                    d	d          z  ||ddf<   |r||                    d	          d	k             }||         ||<   t          j                    |z
  |k    rt3          d| d            n|S )Runs Non-Maximum Suppression (NMS) on inference results

    Returns:
         list of detections, on (n,6) tensor per image [xyxy, conf, cls]
    r   r   .r   r   i   ,  0u        $@TrI   Fr   r   devicer   Nr   r   as_tuplekeepdimr   r   
descending     p@WARNING: NMS time limit 
s exceededshapetimer   r   r  r\  r   r_  r   catr;  nonzerorG  floatr*   viewtensorrH  argsorttorchvisionopsnmsr  mmr   rJ   ) 
prediction
conf_thres	iou_thresr   agnosticmulti_labelr   r   xcmin_whmax_whmax_detmax_nms
time_limit	redundantmergetoutputxirb   lr  r  rZ  jconfrU   crR  scoresr  r   s                                    r   non_max_suppressionr  `  s    
	!	q	 B	F	j	(B NFFGGJI26KE	Ak&):;;;<z?OPQ?RRF:&& D DA bfI  	%c&*oo 	%r
ASVVR!V,QX>>>AAaCyAaaa!eHAaaadG36AeCFFmmQqqq!tW\\^^a//0	1a&!$$A wqz 	 77AaCyAaaaeHH aaaeHHH!!!QqS&	!HHH !!!RaR%!!  	QaaaeHz)22E2BBDDAq	3q61QAt^#4a4j6F6F6H6HI1MMAA122hll1dl33GD!	3aggii0!44TYYr]]Z5OPA 1QQQ!V9WQX F F FFKKANNOA GAJ 	>[[!AAAqD'//T/228G8<=A aaa1fIh2F3!!!RaR%1a1gvOvy9971:(7(A 	&a!kkkkckkkkk%(E**Y6CF4L(Gx111bqb52288::W[[TX[=Y=YYAa!eH &cggajj1n%qTr
IKK!Oz))CZCCCDDDE * Mr   c
                 	   |"|s| j         d         dz
  n| j         d         dz
  }| d         |k    }
d\  }}d}d}d	}d
}||dk    z  }d}t          j                    }t          j        d| j                  g| j         d         z  }t          |           D ]e\  }}||
|                  }|rt          ||                   r||         }t          j        t          |          |dz   f|j                  }|ddddf         |ddddf<   d|dddf<   d|t          t          |                    |dddf                                         dz   f<   t          j	        ||fd          }|j         d         s|dddd|z   fxx         |ddddf         z  cc<   t          |ddddf                   }|ru|ddddf         |k                        d          j        \  }}t          j	        ||         |||dz   df         |dddf                                         fd          }n|sn|ddddf                             dd
          \  }}t          j	        |||                                fd          |                    d          |k             }n||ddddf         }|ddddf                             dd
          \  }}t          j	        |||                                |fd          |                    d          |k             }|D||ddddf         t          j        ||j                  k                        d                   }|j         d         }|s||k    r.||dddf                             d
          d|                  }|ddddf         |rdn|z  }|ddddf         |z   |dddf         } }t&          j                            || |          }|j         d         |k    r
|d|         }|rd|cxk     rdk     rn nt-          ||         |          |k    }!|!| d         z  }"t          j        |"|ddddf                                                   |"                    dd
          z  ||ddf<   |r||!                    d          dk             }||         ||<   t          j                    |z
  |k    rt3          d| d            ng|S )r  Nr   r   r  r  r  r  r  r  TrI   Fr  r  r   r   r   r  r  r   r   r  r  r  r  r  )#r  r  r  r   r  r  r   	kpt_labelr   nkptr  r  r  r  r  r  r  r  r  r  r  rb   r  r  r  rZ  r  r  kptsrU   r  rR  r  r  r   s#                                      r   non_max_suppression_kptr    s}    
z-6TZa 1$$J<LQ<ORT<T	F	j	(B NFFGGJI26KE	Ak%
(9:::;j>Nq>QQF:&& F FA bfI  	%c&*oo 	%r
ASVVR!V,QX>>>AAaCyAaaa!eHAaaadG36AeCFFmmQqqq!tW\\^^a//0	1a&!$$A wqz 	 	
!!!QqtV)!!!QqS&	! !!!RaR%!!  
	[aaaeHz)22E2BBDDAq	3q61QAt^#4a4j6F6F6H6HI1MMAA [AAAqrrE(,,q$,77aIsD!''))4a8829STABBxAAAqsF)--4-88aIsD!''))T:A>>tyy}}z?YZ 1QQQ!V9WQX F F FFKKANNOA GAJ 	>[[!AAAqD'//T/228G8<=A aaa1fIh2F3!!!RaR%1a1gvOvy9971:(7(A 	&a!kkkkckkkkk%(E**Y6CF4L(Gx111bqb52288::W[[TX[=Y=YYAa!eH &cggajj1n%qTr
IKK!Oz))CZCCCDDDE * Mr   best.ptc           	         t          j        | t          j        d                    }|                    d          r|d         |d<   dD ]}d ||<   d|d<   |d                                          |d                                         D ]	}d|_        
t          j        ||p|            t          j	        
                    |p|           d	z  }t          d
|  d|rd|z  nd d|dd           d S )Ncpu)map_locationemamodel)	optimizertraining_resultswandb_idr  updatesr   epochFg    .AzOptimizer stripped from ,z saved as %s,r(   r\   z.1fMB)r   loadr  r   half
parametersrequires_gradsaver+   r,   getsizerJ   )r   rH   rb   kpmbs         r   strip_optimizerr     s   
15<#6#6777AuuU|| uX'
J  !AgJgJOOwZ""$$    	Jq!&q	a	 	 3	&B	
XQ
X
X!)K/A*=*=
X
Xb
X
X
X
XYYYYYr   hyp_evolved.yamlc           	      Z   dt          |           z  t          |                                           z  }dt          |           z  t          |                                           z  }dt          |          z  |z  }t	          d|d|d|d           |rmd|z  }t          |          t          j                            d          rt          j        	                    d          ndk    rt          j
        d	|z             t          dd
          5 }|                    ||z   dz              d d d            n# 1 swxY w Y   t          j        t          j        dd          d          }	|	t          j        t#          |	                              }	t          j        d|	d           t'          |                                           D ]"\  }
}t)          |	d|
dz   f                   | |<   #t          |d          5 }t          |	dd df                   }dt          |          z  |z  }|                    dt          |	          z  |z   dz              t+          j        | |d           d d d            n# 1 swxY w Y   |rt          j
        d|d|           d S d S )Nz%10sz%10.3gz%10.4grh   z
Evolved fitness: zgs://%s/evolve.txtz
evolve.txtr   zgsutil cp %s .ar   )ndminrV  r   r?  z@# Hyperparameter Evolution Results
# Generations: %g
# Metrics: z

F)	sort_keyszgsutil cp evolve.txt z gs://)r   tuplekeysvaluesrJ   r   r+   r,   r2   r  r:   rm   writer!   uniqueloadtxtr  r   savetxtr\  r  yamldump)hypresults	yaml_filebucketr  br  rS   r   rb   rZ  r  s               r   print_mutationr(  0  s   SE#((**---A3s88eCJJLL111A3w<<')A	Eqqq!!!QQQ
7888 ."V+#27>>R^C_C_"f"'//,"?"?"?efggI&,---	lC	 	  A	A              
	"*\333!<<<A	"*gajj[
!
!"AJ|Q))) #((**%% $ $1qAE{##A	i		 +!RaR%//s7||#g-	TWZ[\W]W]]`aadjjkkk	#qE****	+ + + + + + + + + + + + + + +  K
		yyy&&IJJJJJK Ks%   D>>EEA1JJ	Jc           	      D   t          |t          j                  r|gn|}t          |           D ]o\  }}|ft	          |          rV|                                }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z  dz   |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          j        |d	          }|d d d d d d d
f                             ddd          }t          j        |t          j                  }|dz  }|                    |            |t)          j        |                              |j                                                d          }| |         ||k             | |<   q| S )Nr   r   rI   r   g?   r   r   )   r+  r   )dtypeg     o@)rj   r!   ndarrayr\  r   r5  r9  r*   	unsqueezer;  r   rj  r  rP   r   resize	transposeascontiguousarrayfloat32rP  r   r   tor  argmax)rb   r  imgim0rZ  dr'  	pred_cls1imsr  r  cutoutim	pred_cls2s                 r   apply_classifierr=  O  s   c2:..
73%%CC! 0 01=SVV=		A !AAArrE(##AABBx||Aq)33A66AaaaeHABBx#~*AaaaeH ||((**Aaaa!eH 122!!!RaR%#a&,??? !!!Q$IC!!  1QAaD		#ad)) 3S1YYs1Q4yy5H HIZ
33 111ddd
^--aA66)"BJ???e

2el3//2218<<==DDQGGIQ4	Y./AaDHr   c                 :    t                                                       r|s                                 st                     S t          j           d          } fd|D             }d |D             }|rt	          |          dz   nd}   | S )N*c                 R    g | ]#}t          j        d  dj        z  |          $S )z%sz(\d+))r   searchstem)ra   r7  r,   seps     r   rd   z"increment_path.<locals>.<listcomp>y  s8    LLL!29-3---	91==LLLr   c                 `    g | ]+}|t          |                                d                    ,S r   )rP   groups)ra   ms     r   rd   z"increment_path.<locals>.<listcomp>z  s1    666AA6SA666r   rI   r   )r   r2   r=   r)   r*   )r,   exist_okrC  dirsmatchesrZ  rU   s   ` `    r   increment_pathrK  r  s    ::D !( !DKKMM !4yyyD#))LLLLLtLLL66666"CFFQJJ  Q   r   )r   rE  )r#   )r(   )rX   r3   )rw   )r   r   r   )r   )r<  r<  r   r   )r<  r<  )rT  r   )TFFFrn  )FFFFr   r  )rn  )r  r  NFFr3   )	r  r  NFFr3   FNN)r  r(   )r  r(   )Tr(   )Nr)   r   r   r+   r9   r   r   rL   r  pathlibr   r   numpyr!   pandaspdr   r  r!  utils.google_utilsr   utils.metricsr   utils.torch_utilsr   set_printoptionsr   optionsdisplaymax_columnssetNumThreadsr=   rI  	cpu_countenvironr   r"   r0   r4   r>   rC   rW   rv   r|   r   r   r   ry   r   r   rK   r   onesr   r1  r9  r;  rC  rE  rN  rS  r`  rj  rc  r  r  r  r  r  r  r  r  r  r  r  r(  r=  rK  r3   r   r   <module>r[     s      				   				            



               - - - - - - ! ! ! ! ! ! . . . . . .  6 B B B B  clJ<M-N O O O O!#
    !   $'CLBLNNA(>(>$?$?
  !A A A A   E E E E' ' '
] ] ] ]
    ,   :       6 6 6(, , ,
T T T
P P P P
J J J2% % % %& (*    	 	 	          Z Z Z Z& & &       ( ( (+ + + +`1 1 1 1h4 4 427 7 7) ) )D1T 1Te 1T 1T 1T 1Th*H *He *H *H *H *HZ pu!\ \ \ \~ tyBF^ ^ ^ ^BZ Z Z Z K K K K>     F
! 
! 
! 
! 
! 
!r   