
    "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j2                  ddd	        ej2                  dd
dj4                  i       dej6                  j8                  _         ej<                  d         e e  ejB                         d            ejD                  d<   d;dZ#d<dZ$d=dZ%d Z&d>dZ'd Z(d Z)d?dZ*d@dZ+d Z,d Z-d Z.d Z/d Z0dAdZ1d Z2dBd!Z3d  ejh                  d       fd"Z5d# Z6d$ Z7d% Z8dCd&Z9dCd'Z:dDd(Z;d) Z<dEd*Z=dFd+Z>d, Z?dGd-Z@dHd.ZAd/ ZBd0 ZCd1 ZDdId2eEfd3ZFdId2eEfd4ZG	 	 dJd5ZH	 	 dKd6ZIdLd7ZJdMd8ZKd9 ZLdNd:ZMy)O    N)Path)gsutil_getsize)fitness)init_torch_seedsi@     long)	linewidth	precisionprofile
float_kindz{:11.5g})r	   	formatter
      NUMEXPR_MAX_THREADSc                     t        j                  d| dv rt         j                         y t         j                         y )Nz%(message)s)r   )formatlevel)loggingbasicConfigINFOWARN)ranks    1C:\work2\python\work_new2\yolov7\utils\general.pyset_loggingr   !   s.    "gogllA3:<<A    c                     t        j                  |        t        j                   j                  |        t        |        y N)randomseednpr   )r    s    r   
init_seedsr"   '   s&    
KKIINN4Tr   c                     t        j                   |  dd      }|r%t        |t        j                  j                        S dS )Nz/**/last*.ptT	recursive)key )globmaxospathgetctime)
search_dir	last_lists     r   get_latest_runr/   .   s7    		ZL5FI3<3ybgg../D"Dr   c                  4    t        d      j                         S )Nz
/workspace)r   exists r   r   isdockerr3   4   s    $$&&r   c                 t    t        j                         dk(  r | j                         j                  dd      S | S )NWindowsasciiignore)platformsystemencodedecode)strs    r   emojisr=   9   s/    5=__5F)5S3::<w1\Y\\r   c                  P    dd l } 	 | j                  dd       y# t        $ r Y yw xY w)Nr   )z1.1.1.1i  r   TF)socketcreate_connectionOSError)r?   s    r   check_onlinerB   >   s0      !115 s    	%%c                     t        t        d      d       	 t        d      j                         sJ d       t	               rJ d       t               sJ d       d} t        j                  | d	
      j                         j                         j                  d      }t        j                  dd	
      j                         j                         }t        t        j                  d| dd	
            }|dkD  rd| dd|dkD  z   d| d}nd| d}t        t        |             y # t        $ r}t        |       Y d }~y 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   r1   r3   rB   
subprocesscheck_outputr;   striprstripintr=   	Exception)cmdurlbranchnrG   es         r   check_git_statusrV   H   s5   	(:
B'F|""$M&MM$:>>>~~999~?%%c6==?EEGNNvV(()JRVW^^`ffh
''-x?V(W_cdeq59!GC1q5M? S::=>SUA #3%t,AfQi as   DD( (	E1EEc                 x   dd l }t        ddd      }t        | t        t        f      rt	        |       }|j                         s t        | d|j                          d       y |j                  |j                               D cg c]+  }|j                  |vs|j                   |j                   - } }n| D cg c]	  }||vs| } }d}| D ]  }	 |j                  |        |rWdt%               v rj                         n| }	| d| dd|dkD  z   d|	 d| dt        dd       d}
t        t'        |
             y y c c}w c c}w # t        $ rf}|dz  }t        | d|j                   d       t        t        j                   d	|j                   d
d      j#                                Y d }~d }~ww xY w)Nr   redboldzrequirements: z not found, check failed.rH   z> not found and is required by YOLOR, attempting auto-update...zpip install ''TrE   filez packagerG   z updated per 
u    ⚠️ z;Restart runtime or rerun command for updates to take effect)pkg_resourcesrJ   
isinstancer<   r   r1   rI   resolveparse_requirementsopenname	specifierrequirerP   reqrK   rL   r;   localsr=   )requirementsexcludepkgprefixr\   xrT   rrU   sourcerG   s              r   check_requirementsro   ^   s   eV_5F,d,L!{{}VHAdlln--FGH:=:P:PQUQZQZQ\:]w:]Qabagagovav166(1;;-0:]w#/D<a1G3C<D	A	ZKKN  	#)VX#5<has(3!a%=/vhbhhx0mnooqsfQi	 	 xD  	ZFAVHAaeeW$bcd*))M!%%*B$OVVXYY	Zs1   E E ;	EEE

	F9AF44F9c                 \    t        | t        |            }|| k7  rt        d| ||fz         |S )NzHWARNING: --img-size %g must be multiple of max stride %g, updating to %g)make_divisiblerO   rI   )img_sizerG   new_sizes      r   check_img_sizert   {   s7    hA/H8X\dfgiq[rrsOr   c                  >   	 t               rJ d       t        j                  dt        j                  d             t        j
                  d       t        j                          t        j
                  d       y# t        $ r} t        d|         Y d } ~ yd } ~ ww xY w)Nz/cv2.imshow() is disabled in Docker environmentstest)rH   rH      rH   TzVWARNING: Environment does not support cv2.imshow() or PIL Image.show() image displays
F)	r3   cv2imshowr!   zeroswaitKeydestroyAllWindowsrP   rI   )rU   s    r   check_imshowr}      sx    	:PPP~

6288I./AA ghigjkls   A8A; ;	BBBc                     t        |       j                         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: rH   zMultiple files match 'z', specify exact path: r   )r   is_filer(   len)r\   filess     r   
check_filer      sy    Dztrz		'D.D95z4-dV44z5zQ]"8>UV[U\ ]]Qxr   c           	         | j                  d      | j                  d      }}|r[t        |      rNt        |t              r|n|gD cg c]  }t	        |      j                          }}t        d |D              st        d|D cg c]  }|j                         rt        |        c}z         |rt        |      rt        d|z         |j                  d      rb|j                  d      rQt	        |      j                  }t        j                  j                  ||       t!        j"                  d|d	|      }nt!        j"                  |      }t        d
|dk(  r	dz         y dz         y t%        d      y y y c c}w c c}w )Nvaldownloadc              3   <   K   | ]  }|j                           y wr   )r1   ).0rl   s     r   	<genexpr>z check_dataset.<locals>.<genexpr>   s     +s!188:ss   z2
WARNING: Dataset not found, nonexistent paths: %szDownloading %s ...httpz.zipz	unzip -q z -d ../ && rm zDataset autodownload %s
r   successfailurezDataset not found.)getr   r_   listr   r`   allrI   r1   r<   
startswithendswithrc   torchhubdownload_url_to_filer*   r9   rP   )dictr   rG   rl   frm   s         r   check_datasetr      s>   XXe_dhhz2C
s3x2<S$2G3cU+RT+RQtAw +RT+s++G[^Jq[^VWfgfnfnfp3q6[^JqqrSV*Q./<<'AJJv,>QAII221a8		1a"HIA		!A1!q&YXYiXY 455 , sTJqs   	 FF
F
c                 8    t        j                  | |z        |z  S r   )mathceil)rl   divisors     r   rq   rq      s    99Q[!G++r   c                 2    t        j                  dd|       S )Nu"   [|@#!¡·$€%&()=?¿^*;:,¨´><+]_)patternreplstring)resub)rG   s    r   	clean_strr      s    66>SQRSSr   c                       fdS )Nc                 t    dt        j                  | t         j                  z  z        z
  dz  z
  z  z   S )NrH      )r   cospi)rl   stepsy1y2s    r   <lambda>zone_cycle.<locals>.<lambda>   s3    q488AK%$788A="r'JROr   r2   )r   r   r   s   ```r   	one_cycler      s	    OOr   c                      t        |       dkD  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)j                  fd*|D              | z   d$   z   S )+NrH   bluerY   r   blackz[30mrX   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[97mrD   z[0mz[1mz[4m)rY   	underliner'   c              3   (   K   | ]	  }|     y wr   r2   )r   rl   colorss     r   r   zcolorstr.<locals>.<genexpr>   s     +d6!9ds   )r   join)inputargsr   r   s      @r   rJ   rJ      s#    Z!^E&&%(1KMT6&gz &Z&z& 
& j	&
 & j& z& j& J& j& z& Z& 
& Z& j&  Y!&"  $%&F& 77+d++9F5MIIr   P   c                 D   | d   t        j                         S t        j                  | d      } | d d df   j	                  t        j
                        }t        j                  ||      }d||dk(  <   d|z  }||j                         z  }t        j                  |      S Nr   )	minlengthrH   )	r   Tensorr!   concatenateastypeint32bincountsum
from_numpy)labelsncclassesweightss       r   labels_to_class_weightsr      s    ay||~^^FA&FQTl!!"((+Gkk'R0G GGqL'kGw{{}GG$$r   c           
         t        j                  | D cg c]=  }t        j                  |d d df   j                  t         j                        |      ? c}      }|j                  d|      |z  j                  d      }|S c c}w r   )r!   arrayr   r   r   reshaper   )r   r   class_weightsrl   class_countsimage_weightss         r   labels_to_image_weightsr      sq    88Z`aZ`UVR[[1a4)ARPZ`abL"**1b1L@EEaHM bs   ABc                      g d} | S )N)PrH   r   rw      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   r2   )rl   s    r   coco80_to_coco91_classr$     s    	aA Hr   c                 `   t        | t        j                        r| j                         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   rH   rw   r_   r   r   cloner!   copyrl   ys     r   	xyxy2xywhr,     s    5<<0	bggajAAw1a4 A%AadGAw1a4 A%AadG1g!Q$AadG1g!Q$AadGHr   c                 l   t        | t        j                        r| j                         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 r&  r'  r*  s     r   	xywh2xyxyr.  	  s    5<<0	bggajA1g!Q$!#AadG1g!Q$!#AadG1g!Q$!#AadG1g!Q$!#AadGHr   c                    t        | t        j                        r| j                         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 r&  r'  rl   whpadwpadhr+  s         r   
xywhn2xyxyr5    s    5<<0	bggajA1QT7Qq!tWq[()D0AadG1QT7Qq!tWq[()D0AadG1QT7Qq!tWq[()D0AadG1QT7Qq!tWq[()D0AadGHr   c                     t        | t        j                        r| j                         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   rH   r'  r0  s         r   xyn2xyr7    se    5<<0	bggajA!AqD'kD AadG!AqD'kD AadGHr   c                 D   | j                   \  }}|dk\  |dk\  z  ||k  z  ||k  z  }||   ||   }}t        |      rQt        j                  |j	                         |j	                         |j                         |j                         g      S t        j                  d      S )Nr   )rH   r   )Tanyr!   r   minr)   rz   )segmentwidthheightrl   r+  insides         r   segment2boxr@  %  s    99DAq1fa AJ/1;?FfIqyqA=@V288QUUWaeegquuw89YRXIYYr   c                    g }| D ]^  }|j                   \  }}|j                  |j                         |j                         |j                         |j                         g       ` t	        t        j                  |            S r   )r9  appendr;  r)   r,  r!   r   )segmentsboxesrG   rl   r+  s        r   segments2boxesrE  -  s`    Ess1aeegquuw9:  RXXe_%%r   c                    t        |       D ]  \  }}t        j                  ||ddd d f   fd      }t        j                  dt	        |      dz
  |      }t        j
                  t	        |            }t        j                  t        d      D cg c]   }t        j                  |||d d |f         " c}      j                  dd      j                  | <    | S c c}w )Nr   rH   axisr   r   )
	enumerater!   r   linspacer   arangerangeinterpr   r9  )rC  rT   irG   rl   xps         r   resample_segmentsrP  6  s    (#1NNAq1ay>2KK3q6A:q)YYs1vnnq%RAbii2qAw&?%RS[[\]_abdd	 $
 O &Ss   %C
c                 <   |At        | 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   rH   r   rw   r   )r;  clip_coords)
img1_shapecoords
img0_shape	ratio_padgainpads         r   scale_coordsrZ  @  s    :a=:a=0*Q-*Q-2OP!}z!}t33q8:a=:VW=[_K_;_cd:dd|Al
1q!f9Q
1q!f9Q
1bqb5MTM
#Mr   c                     | d d df   j                  d|d          | d d df   j                  d|d          | d d df   j                  d|d          | d d df   j                  d|d          y )Nr   rH   r   rw   )clamp_)rD  	img_shapes     r   rS  rS  P  sr    	!Q$Kq)A,'	!Q$Kq)A,'	!Q$Kq)A,'	!Q$Kq)A,'r   c           	      f   |j                   }|r/| d   | d   | d   | d   f\  }}}	}
|d   |d   |d   |d   f\  }}}}np| 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
  j	                  d      t        j                  |
|      t        j                  ||      z
  j	                  d      z  }|	|z
  |
|z
  |z   }}||z
  ||z
  |z   }}||z  ||z  z   |z
  |z   }||z  }|s|s|rGt        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        |||z  |z  z   z
  S ||z  |z   }|||z
  |z  z
  S y |S # 1 sw Y   -xY wrR  )
r9  r   r;  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/   66D %)!Wd1gtAwQ%G"ueU%)!Wd1gtAwQ%G"ueUAwa1,d1gQ!.CuAwa1,d1gQ!.CuAwa1,d1gQ!.CuAwa1,d1gQ!.Cu YYue$uyy'>>EEaHYYue$uyy'>>EEaHIE U]EEMC/BU]EEMC/BGb2g%+E
%-CttYYue$uyy'>>YYue$uyy'>>4q27"S(BU]U*U2q8U]U*U2q89<=>DTBY&A%5::bBHo3NQVQ[Q[\^bdgjbj\kQl3lno)pp]]_SAG!45E %dRi!e)344"Ws]F&5.F222  
 %_s   ,J''J0c                 t   |j                   }|r/| d   | d   | d   | d   f\  }}	}
}|d   |d   |d   |d   f\  }}}}np| 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
  j	                  d      t        j                  ||      t        j                  |	|      z
  j	                  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        |||z  t        j
                  |z  |z   |      z   z
  S t        j                  ||z  |z   |      }|t        j
                  ||z
  |z  |z   |      z
  S y |S # 1 sw Y   oxY wrR  )r9  r   r;  r)   r_  r`  absr   r   ra  rb  ) rc  rd  re  rf  rg  rh  r~  ri  rj  rk  rl  rm  rn  ro  rp  rq  rr  rs  rt  ru  rv  rw  rx  ry  rz  r{  rho_xrho_yr|  r}  
alpha_ciour  s                                    r   bbox_alpha_iour    s   66D %)!Wd1gtAwQ%G"ueU%)!Wd1gtAwQ%G"ueUAwa1,d1gQ!.CuAwa1,d1gQ!.CuAwa1,d1gQ!.CuAwa1,d1gQ!.Cu YYue$uyy'>>EEaHYYue$uyy'>>EEaHIE U]EEMC/BU]EEMC/BGb2g%+E ))E%K#%u
-CttYYue$uyy'>>YYue$uyy'>>4'B!G#-3BIIeeme3e;<EIIeeme3e;<EaZ%1*,1e;DTBY&A%5::b2g3FTVY[T[I\3\^_)``]]_!"q3w%%-&?!&C!DJ % dRi%))A
NS4H%*PPQQ YYrBw}e4FFUNf#<s#BEJJJ  
 %_s   .L..L7c                 V   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
  j	                  d      j                  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                 0    | d   | d   z
  | d   | d   z
  z  S Nr   r   rw   rH   r2   boxs    r   box_areazbox_iou.<locals>.box_area  %    AQCFSVO44r   Nr   r   r9  r   r;  r)   r_  prod)rc  rd  r  area1area2rr  s         r   box_iour    s    5 TVVETVVE YYtAtQRK($q!"u+644QSRSQSCTVZ[\^`_`^`[`Va9bbiijklqqrstEE!T'NU*U233r   c                     | d d d f   } |d    }t        j                  | |      j                  d      }|| j                  d      |j                  d      z   |z
  z  S )Nr   )r   r;  r  )wh1wh2rr  s      r   wh_iour    sX    
ag,C
d)CIIc3$$Q'ECHHQK#((1+-566r   c                 p   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
  j	                  d      j                  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
  j	                  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                 0    | d   | d   z
  | d   | d   z
  z  S r  r2   r  s    r   r  zbox_giou.<locals>.box_area  r  r   Nr   r   r;  rH   r  )rc  rd  r  r  r  rr  rw  rx  ltirbiwhiareais               r   box_giour    sT   5 TVVETVVEYYtAtQRK($q!"u+644QSRSQSCTVZ[\^`_`^`[`Va9bbiijklqqrstE1d7^e#e+E
%-C
))DD"1"%tArrE{
3C
))DD!"%tAqrE{
3C9



"C1aL3q!Qw<'E%%-5(((r   ri  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
  j	                  d      j                  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
  j	                  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       |||z  z
  |z  z
  S # 1 sw Y   xY w)	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                 0    | d   | d   z
  | d   | d   z
  z  S r  r2   r  s    r   r  zbox_ciou.<locals>.box_area  r  r   Nr   r   r  rH   rw   r   )
r9  r   r;  r)   r_  r  r   r`  ra  rb  )rc  rd  ri  r  r  r  rr  rw  rx  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 TVVETVVEYYtAtQRK($q!"u+644QSRSQSCTVZ[\^`_`^`[`Va9bbiijklqqrstE1d7^e#e+E
%-C
))DD"1"%tArrE{
3C
))DD!"%tAqrE{
3C9



"C!$Q1W!2s1a7|q7H IC O 4
d1dA:..!
3C4
d1dA:..!
3C1:QT
"a
'C1:QT
"a
'C #c	a/392BB!T1*QaZ 00F!T1*QaZ 00F1:QT
"D1:QT
"D	
ehh!m			5::dTk+BUZZPVY_P_E`+`cd eeA	QWq[3&' 
*-FFG%RS)SS 
s   #JJc                 V   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
  j	                  d      j                  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
  j	                  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                 0    | d   | d   z
  | d   | d   z
  z  S r  r2   r  s    r   r  zbox_diou.<locals>.box_areaA  r  r   Nr   r   r  rH   rw   r  )rc  rd  ri  r  r  r  rr  rw  rx  r  r  r  r  r  r  r  r  r  s                     r   box_diour  3  s   5 TVVETVVEYYtAtQRK($q!"u+644QSRSQSCTVZ[\^`_`^`[`Va9bbiijklqqrstE1d7^e#e+E
%-C
))DD"1"%tArrE{
3C
))DD!"%tAqrE{
3C9



"C!$Q1W!2s1a7|q7H IC O 4
d1dA:..!
3C4
d1dA:..!
3C1:QT
"a
'C1:QT
"a
'C #c	a/392BB *-FFGGr   c                    | j                   d   dz
  }| d   |kD  }d\  }	}
d}d}d}d}||d	kD  z  }d
}t        j                         }t        j                  d| j                        g| j                   d   z  }t        |       D ]m  \  }}|||      }|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   j                         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         }|rf|ddddf   |kD  j                  d
      j                  \  }}t        j                  ||   |||dz   df   |dddf   j                         fd	      }n[|ddddf   j                  d	d      \  }}t        j                  |||j                         fd	      |j                  d      |kD     }|?||ddddf   t        j                   ||j                        k(  j#                  d	         }|j                   d   }|s*||kD  r||dddf   j%                  d      d|    }|ddddf   |rdn|
z  }|ddddf   |z   |dddf   }}t&        j(                  j+                  |||      }|j                   d   |kD  r|d| }|rd	|cxk  rdk  r~n n{t-        ||   |      |kD  }||d   z  }t        j.                  ||ddddf         j                         |j1                  d	d      z  ||ddf<   |r||j1                  d	      d	kD     }||   ||<   t        j                         |z
  |kD  s^t3        d| d        |S  |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        $@TrH   Fr   r   devicer   Nr         ?as_tuplekeepdimr   r   
descending     p@WARNING: NMS time limit 
s exceededshapetimer   rz   r  rI  r   rL  r   catr.  nonzeror9  floatr)   viewtensorr:  argsorttorchvisionopsnmsr  mmr   rI   ) 
prediction
conf_thres	iou_thresr   agnosticmulti_labelr   r   xcmin_whmax_whmax_detmax_nms
time_limit	redundantmergetoutputxirl   lr}  r  rN  jconfrT   crD  scoresrx  r   s                                    r   non_max_suppressionr  `  s7    
		!	q	 B	F	j	(B NFFGGJI26KE		Akk&):):;<z?O?OPQ?RRF:&A bfI c&*or
ASVR!V,QXX>AAaCyAa!eHAadG36AeCFmQq!tW\\^a//0		1a&!$A wwqz 7AaCyAaeH aeH!QqS&	!H !RaR%! aeHz)22E2BDDDAq		3q61QAt^#4a4j6F6F6HI1MA12hll1dl3GD!		3aggi0!4TYYr]Z5OPA 1Q!V9WQXX FFKKANOA GGAJ[!AqD'//T/28G<=A a1fIhF3!RaR%1a1gvOOvy9771:(7Aa!kck%(E*Y6CF4L(Gxx1bqb5288:W[[TX[=YYAa!eHcggaj1n%qTr
IIK!Oz),ZL
CDMM 'L Mr   c
                    |&|s| j                   d   dz
  n| j                   d   dz
  }| d   |kD  }
d\  }}d}d}d	}d
}||dkD  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   j                         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         }|rf|ddddf   |kD  j                  d      j                  \  }}t        j                  ||   |||dz   df   |dddf   j                         fd      }n|s\|ddddf   j                  dd
      \  }}t        j                  |||j                         fd      |j                  d      |kD     }ng|ddddf   }|ddddf   j                  dd
      \  }}t        j                  |||j                         |fd      |j                  d      |kD     }|?||ddddf   t        j                   ||j                        k(  j#                  d         }|j                   d   }|s}||kD  r||dddf   j%                  d
      d|    }|ddddf   |rdn|z  }|ddddf   |z   |dddf   } }t&        j(                  j+                  || |      }|j                   d   |kD  r|d| }|rd|cxk  rdk  r~n n{t-        ||   |      |kD  }!|!| d   z  }"t        j.                  |"|ddddf         j                         |"j1                  dd
      z  ||ddf<   |r||!j1                  d      dkD     }||   ||<   t        j                         |z
  |kD  st3        d| d        |S  |S )r  Nr   r   r  r  r  r  r  r  TrH   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  rl   r  r}  r  rN  r  r  kptsrT   r  rD  r  rx  r   s#                                      r   non_max_suppression_kptr    s    
z-6Za 1$J<L<LQ<ORT<T	F	j	(B NFFGGJI26KE		Akk%
(9(9:;j>N>Nq>QQF:&A bfI c&*or
ASVR!V,QXX>AAaCyAa!eHAadG36AeCFmQq!tW\\^a//0		1a&!$A wwqz 	
!QqtV)!QqS&	! !RaR%! aeHz)22E2BDDDAq		3q61QAt^#4a4j6F6F6HI1MAAqrE(,,q$,7aIIsD!'')4a829STABxAqsF)--4-8aIIsD!'')T:A>tyy}z?YZ 1Q!V9WQXX FFKKANOA GGAJ[!AqD'//T/28G<=A a1fIhF3!RaR%1a1gvOOvy9771:(7Aa!kck%(E*Y6CF4L(Gxx1bqb5288:W[[TX[=YYAa!eHcggaj1n%qTr
IIK!Oz),ZL
CDMQ 'P Mr   c           	         t        j                  | t        j                  d            }|j                  d      r|d   |d<   dD ]  }d ||<   	 d|d<   |d   j	                          |d   j                         D ]	  }d|_         t        j                  ||xs |        t        j                  j                  |xs |       d	z  }t        d
|  d|rd|z  nd d|dd       y )Ncpu)map_locationemamodel)	optimizertraining_resultswandb_idr  updatesr   epochFg    .AzOptimizer stripped from ,z saved as %s,r'   rZ   z.1fMB)r   loadr  r   half
parametersrequires_gradsaver*   r+   getsizerI   )r   rG   rl   kpmbs         r   strip_optimizerr      s    

15<<#67AuuU|uX'
J! KAgJgJOOwZ""$ %	JJq!&q	a	 3	&B	$QCq!/A*=(LAbQTXUW
XYr   c           	         dt        |       z  t        | j                               z  }dt        |       z  t        | j                               z  }dt        |      z  |z  }t	        d|d|d|d       |rid|z  }t        |      t        j                  j                  d      rt        j                  j                  d      ndkD  rt        j                  d	|z         t        dd
      5 }|j                  ||z   dz          d d d        t        j                  t        j                  dd      d      }	|	t        j                   t#        |	                }	t        j$                  d|	d       t'        | j                               D ]  \  }
}t)        |	d|
dz   f         | |<    t        |d      5 }t        |	dd df         }dt        |      z  |z  }|j                  dt        |	      z  |z   dz          t+        j,                  | |d       d d d        |rt        j                  d|d|       y y # 1 sw Y   8xY w# 1 sw Y   5xY w)Nz%10sz%10.3gz%10.4gr]   z
Evolved fitness: zgs://%s/evolve.txtz
evolve.txtr   zgsutil cp %s .ar   )ndminrG  r   r1  z@# Hyperparameter Evolution Results
# Generations: %g
# Metrics: z

F)	sort_keyszgsutil cp evolve.txt z gs://)r   tuplekeysvaluesrI   r   r*   r+   r1   r  r9   rb   writer!   uniqueloadtxtr  r   savetxtrI  r  yamldump)hypresults	yaml_filebucketr  br  rR   r   rl   rN  r  s               r   print_mutationr  0  s   SE#((*--A3s8eCJJL11A3w<')A	q!Q
78"V+#277>>R^C_"''//,"?efgII&,-	lC	 A	A 
!
		"**\3!<A	"**gaj[
!"AJJ|Q) #((*%1qAE{#A &	i	!RaR%/s7|#g-	TWZ[\W]]`aadjjk		#qE*	 
 
		y&IJ  
!	  
	s   .H<6AI	<I	Ic           	      n   t        |t        j                        r|gn|}t        |       D ]  \  }}|
t	        |      s|j                         }t        |d d d df         }|d d dd f   j                  d      d   j                  d      |d d dd f<   |d d dd f   dz  dz   |d d dd f<   t        |      j                         |d d d df<   t        |j                  dd  |d d d df   ||   j                         |d d df   j                         }g }t        |      D ]  \  }	}
||   t        |
d         t        |
d         t        |
d         t        |
d         f   }t        j                  |d	      }|d d d d d d d
f   j!                  ddd      }t        j"                  |t        j$                        }|dz  }|j'                  |         |t)        j*                  |      j-                  |j.                              j1                  d      }| |   ||k(     | |<   	 | S )Nr   r   rH   r   g?   r   rw   )   r  r   )dtypeg     o@)r_   r!   ndarrayrI  r   r(  r,  r)   	unsqueezer.  r   rZ  r  rO   rx   resize	transposeascontiguousarrayfloat32rB  r   r   tor  argmax)rl   r  imgim0rN  dr  	pred_cls1imsr  r  cutoutim	pred_cls2s                 r   apply_classifierr(  O  s	   c2::.3%CC!1=SV	A !ArrE(#AABx||Aq)33A6AaeHABx#~*AaeH |((*Aa!eH 12!RaR%#a&,,? !Q$IC!!1QAaD	#ad) 3S1Ys1Q4y5H HIZZ
3 1dd
^--aA6))"BJJ?e

2 % ell3/22188<=DDQGIQ4	Y./AaD7 : Hr   c                    t        |       } | j                         r|s| j                         st        |       S t        j                  |  | d      }|D cg c])  }t	        j
                  d| d| j                  z  |      + }}|D cg c]!  }|st        |j                         d         # }}|rt        |      dz   nd}|  | | S c c}w c c}w )N*z%sz(\d+)r   rH   r   )
r   r1   r<   r(   r   searchstemrO   groupsr)   )	r+   exist_oksepdirsr"  matchesmrN  rT   s	            r   increment_pathr3  r  s    :D(DKKM4yyyD6#a)GKLt!2993%u-		91=tL)06AASA6CFQJuQC   M6s   .CCC)r   )r   ).)r'   )zrequirements.txtr2   )r   )g        r  d   )r   )  r6  r   r   )r6  r6  )i  r   )TFFFHz>)FFFFr   g&.>)r7  )      ??NFFr2   )	r8  r9  NFFr2   FNN)zbest.ptr'   )zhyp_evolved.yamlr'   )Tr'   )Nr(   r   r   r*   r8   r   r   rK   r  pathlibr   rx   numpyr!   pandaspdr   r  r  utils.google_utilsr   utils.metricsr   utils.torch_utilsr   set_printoptionsr   optionsdisplaymax_columnssetNumThreadsr<   r;  	cpu_countenvironr   r"   r/   r3   r=   rB   rV   ro   rt   r}   r   r   rq   r   r   rJ   r   onesr   r$  r,  r.  r5  r7  r@  rE  rP  rZ  rS  r  r  r  r  r  r  r  r  r  r  r   r  r(  r3  r2   r   r   <module>rI     s      	   	    
      - ! .   6 B   clJ<M<M-N O!#

      ! $'LBLLNA(>$?

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