
    Ѷ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mZ d dl	m
Z
 d dlmZ d dlmZ d dlZd dlZd dlZd dlmc mZ d dlmZmZ d dlmZ d dlmZ d dlZd d	lmZ d d
l m!Z! d dl"m#Z#m$Z$m%Z%m&Z& d dl'm(Z(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2 dZ3g dZ4g dZ5 ej6        e7          Z8ej9        :                                D ]Z;ej9        e;         dk    r nd Z<d Z=	 	 dOdZ> G d dej?        j@        jA        jB                  ZC G d deD          ZE G d d           ZF G d! d"          ZG G d# d$          ZHd% ZI G d& d'e          ZJd( ZKdPd*ZLdQd,ZMd- ZNd. ZOd/ ZPdRd0ZQd1 ZRdRd2ZSd3 ZTdSd7ZU	 	 dTd<ZVdUd@ZWdA ZXdB ZYdC ZZ G dD dE          Z[dVdGZ\dWdIZ]dXdKZ^dYdMZ_dN Z`dS )Z    N)repeat)
ThreadPool)Path)Thread)ImageExifTags)Dataset)tqdm)deepcopy)
save_image)roi_pool	roi_alignps_roi_poolps_roi_align)	check_requirements	xyxy2xywh	xywh2xyxy
xywhn2xyxyxyn2xysegment2boxsegments2boxesresample_segments	clean_str)torch_distributed_zero_firstz<https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data)	bmpjpgjpegpngtiftiffdngwebpmpo)movavimp4mpgmpegm4vwmvmkvOrientationc                 4    t          d | D                       S )Nc              3      K   | ]B}t           j                            |          !t           j                            |          V  Cd S N)ospathisfilegetsize).0fs     &/var/www/html/yolov7/utils/datasets.py	<genexpr>zget_hash.<locals>.<genexpr>/   sC      FFaBGNN14E4EFrwq!!FFFFFF    )sum)filess    r6   get_hashr;   -   s    FF5FFFFFFr8   c                     | j         }	 t          |                                                                           t                   }|dk    r|d         |d         f}n|dk    r|d         |d         f}n#  Y nxY w|S )N      r      )sizedict_getexifitemsorientation)imgsrotations      r6   	exif_sizerH   2   s~    A,,..//<q==1qtAA]]1qtAHs   A+A5 5A9F        r>   r?    c                 :   t          |
          5  t          | |||||	||j        t          |          |||          }d d d            n# 1 swxY w Y   t	          |t          |                    }t	          t          j                    |z  |dk    r|nd|g          }|
dk    r)t          j	        j
        j                            |          nd }|rt          j	        j
        j        nt          } |||||d|rt          j        nt          j                  }||fS )N)	augmenthyprectcache_images
single_clsstridepadimage_weightsprefixr>   r   rJ   T)
batch_sizenum_workerssampler
pin_memory
collate_fn)r   LoadImagesAndLabelsrQ   intminlenr0   	cpu_counttorchutilsdatadistributedDistributedSampler
DataLoaderInfiniteDataLoadercollate_fn4rZ   )r1   imgszrV   rR   optrN   rM   cacherS   rO   rank
world_sizeworkersrT   quadrU   datasetnwrX   loader
dataloaders                        r6   create_dataloaderrs   A   sr    
&d	+	+ 
5 
5%dE:.5*-+/3814-0[[*-4A-3	5 	5 	5
5 
5 
5 
5 
5 
5 
5 
5 
5 
5 
5 
5 
5 
5 
5 ZW..J	blnn
**q..JJaQXY	Z	ZBJNRT**ek*==gFFFZ^G,9QU[((?QF#-$& '#'FJ#n#6#B#BPcPnp p pJ ws   .A

AAc                   .     e Zd ZdZ fdZd Zd Z xZS )rf   zP Dataloader that reuses workers

    Uses same syntax as vanilla DataLoader
    c                      t                      j        |i | t                              | dt	          | j                             t                                                      | _        d S )Nbatch_sampler)super__init__object__setattr___RepeatSamplerrv   __iter__iterator)selfargskwargs	__class__s      r6   rx   zInfiniteDataLoader.__init__d   s]    $)&)))4.AS2T2TUUU((**r8   c                 4    t          | j        j                  S r/   )r^   rv   rX   r~   s    r6   __len__zInfiniteDataLoader.__len__i   s    4%-...r8   c              #   t   K   t          t          |                     D ]}t          | j                  V  d S r/   )ranger^   nextr}   )r~   is     r6   r|   zInfiniteDataLoader.__iter__l   sF      s4yy!! 	& 	&At}%%%%%%	& 	&r8   )__name__
__module____qualname____doc__rx   r   r|   __classcell__)r   s   @r6   rf   rf   ^   s`         
+ + + + +
/ / /& & & & & & &r8   rf   c                       e Zd ZdZd Zd ZdS )r{   zG Sampler that repeats forever

    Args:
        sampler (Sampler)
    c                     || _         d S r/   )rX   )r~   rX   s     r6   rx   z_RepeatSampler.__init__x   s    r8   c              #   >   K   	 t          | j                  E d {V  r/   )iterrX   r   s    r6   r|   z_RepeatSampler.__iter__{   s2      	*DL)))))))))	*r8   N)r   r   r   r   rx   r|    r8   r6   r{   r{   q   s<           * * * * *r8   r{   c                   .    e Zd Zd	dZd Zd Zd Zd ZdS )

LoadImages      c                 r   t          t          |                                                    }d|v r$t          t	          j        |d                    }nt
          j                            |          r@t          t	          j        t
          j                            |d                              }n6t
          j        	                    |          r|g}nt          d| d          d |D             }d |D             }t          |          t          |          }	}|| _        || _        ||z   | _        ||	z   | _        d	g|z  dg|	z  z   | _        d
| _        t%          |          r|                     |d                    nd | _        | j        dk    sJ d| dt*           dt,                       d S )N*T	recursive*.*zERROR:  does not existc                 z    g | ]8}|                     d           d                                         t          v 6|9S .rJ   )splitlowerimg_formatsr4   xs     r6   
<listcomp>z'LoadImages.__init__.<locals>.<listcomp>   =    NNNaggcll2&6&<&<&>&>+&M&M!&M&M&Mr8   c                 z    g | ]8}|                     d           d                                         t          v 6|9S r   )r   r   vid_formatsr   s     r6   r   z'LoadImages.__init__.<locals>.<listcomp>   r   r8   Fimager   zNo images or videos found in z!. Supported formats are:
images: z	
videos: )strr   absolutesortedglobr0   r1   isdirjoinr2   	Exceptionr^   img_sizerR   r:   nf
video_flagmodeany	new_videocapr   r   )
r~   r1   r   rR   pr:   imagesvideosninvs
             r6   rx   zLoadImages.__init__   s   T

##%%&&!8849Q$77788EEW]]1 	:49RW\\!U%;%;<<==EEW^^A 	:CEE8a888999NNUNNNNNUNNNVc&kkB f_
r' 'B,$"4	v;; 	NN6!9%%%%DHw{{{ dA d d?Jd dVad d{{{{{r8   c                     d| _         | S Nr   countr   s    r6   r|   zLoadImages.__iter__   s    
r8   c                    | j         | j        k    rt          | j        | j                  }| j        | j                  rd| _        | j                                        \  }}|s| xj         dz  c_         | j                                         | j         | j        k    rt          | j        | j                  }| 	                    |           | j                                        \  }}| xj
        dz  c_
        t          d| j         dz    d| j         d| j
         d| j         d| dd	           n3| xj         dz  c_         t          j        |          }|J d
|z               t          || j        | j                  d         }|d d d d d d df                             ddd          }t'          j        |          }|||| j        fS )Nvideor>   zvideo /z (z) : rK   endImage Not Found rR   r   rJ      )r   r   StopIterationr:   r   r   r   readreleaser   frameprintnframescv2imread	letterboxr   rR   	transposenpascontiguousarray)r~   r1   ret_valimg0rE   s        r6   __next__zLoadImages.__next__   s   :  z$*%?4:& 	?DI HMMOOMGT 4

a

  """:(('':dj1DNN4((($(HMMOOMGTJJ!OJJ\4:>\\DG\\tz\\DL\\TX\\\bdeeeee JJ!OJJ:d##D##%7$%>### dmDK@@@C !!!QQQ"*o''1a00"3''S$((r8   c                     d| _         t          j        |          | _        t	          | j                            t          j                            | _        d S r   )r   r   VideoCapturer   r\   getCAP_PROP_FRAME_COUNTr   )r~   r1   s     r6   r   zLoadImages.new_video   s?    
#D))48<<(@AABBr8   c                     | j         S r/   )r   r   s    r6   r   zLoadImages.__len__   s	    wr8   N)r   r   )r   r   r   rx   r|   r   r   r   r   r8   r6   r   r      sl        d d d d8  $) $) $)LC C C
    r8   r   c                   (    e Zd Zd	dZd Zd Zd ZdS )

LoadWebcam0r   r   c                     || _         || _        |                                rt          |          }|| _        t          j        |          | _        | j                            t
          j	        d           d S )N   )
r   rR   	isnumericevalpiper   r   r   setCAP_PROP_BUFFERSIZE)r~   r   r   rR   s       r6   rx   zLoadWebcam.__init__   sg     >> 	::D
 	#D))S,a00000r8   c                     d| _         | S NrJ   r   r   s    r6   r|   zLoadWebcam.__iter__       
r8   c                    | xj         dz  c_         t          j        d          t          d          k    r3| j                                         t          j                     t          | j        dk    r2| j        	                                \  }}t          j
        |d          }nJd}	 |dz  }| j                                         |dz  dk    r| j                                        \  }}|rnG|sJ d| j                     d}t          d| j          d	d
           t          || j        | j                  d         }|d d d d d d df                             ddd          }t%          j        |          }|||d fS )Nr>   qr   T   zCamera Error z
webcam.jpgzwebcam r   rK   r   r   rJ   r   )r   r   waitKeyordr   r   destroyAllWindowsr   r   r   flipgrabretriever   r   r   rR   r   r   r   )r~   r   r   nimg_pathrE   s         r6   r   zLoadWebcam.__next__   s   

a

;q>>SXX%%H!### 9>> HMMOOMGT8D!$$DDAQr6Q;;$(H$5$5$7$7MGT  333	33333&
&&&B//// dmDK@@@C !!!QQQ"*o''1a00"3''dD((r8   c                     dS r   r   r   s    r6   r   zLoadWebcam.__len__      qr8   N)r   r   r   )r   r   r   rx   r|   r   r   r   r8   r6   r   r      sV        1 1 1 1  !) !) !)F    r8   r   c                   .    e Zd Zd
dZd Zd Zd Zd Zd	S )LoadStreamsstreams.txtr   r   c           
      F    d _         | _        | _        t          j                            |          rkt          |d          5 }d |                                                                	                                D             }d d d            n# 1 swxY w Y   n|g}t          |          }d g|z   _        d |D              _        t          |          D ]\  }}t          |dz    d| d| dd	
           |                                rt!          |          n|}dt#          |          v sdt#          |          v rAt%          d           dd l}	|	                    |                              d          j        }t/          j        |          }
|
                                sJ d|             t5          |
                    t.          j                            }t5          |
                    t.          j                            }|
                    t.          j                  dz   _        |
                                \  } j        |<   tA           j!        ||
gd          }t          d| d| d j        dd           |"                                 t          d	           tG          j$         fd j        D             d          }tG          j%        |d          j&        d         dk     _'         j'        st          d           d S d S )Nstreamrc                 x    g | ]7}t          |                                          #|                                8S r   )r^   stripr   s     r6   r   z(LoadStreams.__init__.<locals>.<listcomp>  s8    ^^^sSTSZSZS\S\~~^17799^^^r8   c                 ,    g | ]}t          |          S r   )r   r   s     r6   r   z(LoadStreams.__init__.<locals>.<listcomp>  s    666	!666r8   r>   r   r   z... rK   r   zyoutube.com/z	youtu.be/)pafy
youtube_dlr   r&   )preftypezFailed to open d   T)targetr   daemonz
 success (r   z at z.2fz FPS).c                 ^    g | ])}t          |j        j                   d         j        *S )r   r   )r   r   rR   shaper4   r   r~   s     r6   r   z(LoadStreams.__init__.<locals>.<listcomp>.  s5    bbbSTi4=EEEaHNbbbr8   axiszcWARNING: Different stream shapes detected. For optimal performance supply similarly-shaped streams.)(r   r   rR   r0   r1   r2   openr   r   
splitlinesr^   imgssources	enumerater   r   r   r   r   r  newgetbesturlr   r   isOpenedr\   r   CAP_PROP_FRAME_WIDTHCAP_PROP_FRAME_HEIGHTCAP_PROP_FPSfpsr   updatestartr   stackuniquer  rO   )r~   r  r   rR   r5   r   r   rF   r  r  r   wh_threads   `              r6   rx   zLoadStreams.__init__  sI   	 7>>'"" 	 gs## _q^^affhhnn.>.>.I.I.K.K^^^_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ iGLLFQJ	66g666g&& 	 	DAqQU))Q))!)))r2222[[]]1$q'''CS))[CHH-D-D"#9:::hhsmm++U+;;?"3''C<<>>88#8Q#8#8888CGGC45566ACGGC56677Awws/0036DH!hhjjOAty|4;q#hMMMF>q>>1>>$(>>>>???LLNNNNb			 HbbbbX\XabbbdeffIaa(((.q1Q6	y 	ywxxxxx	y 	ys   ABBBc                 >   d}|                                 r|dz  }|                                 |dk    r5|                                \  }}|r|n| j        |         dz  | j        |<   d}t	          j        d| j        z             |                                 d S d S )Nr   r>      )r  r   r   r  timesleepr  )r~   indexr   r   successims         r6   r  zLoadStreams.update3  s    llnn 	%FAHHJJJAvv!llnn)0#J22di6F6J	% Jq48|$$$ llnn 	% 	% 	% 	% 	%r8   c                     d| _         | S r   r   r   s    r6   r|   zLoadStreams.__iter__@  r   r8   c                      xj         dz  c_          j                                        }t          j        d          t          d          k    rt          j                     t           fd|D             }t          j	        |d          }|d d d d d d d d df         
                    dddd          }t          j        |          } j        ||d fS )Nr>   r   c                 `    g | ]*}t          |j        j        j                   d         +S ))autorR   r   )r   r   rO   rR   r	  s     r6   r   z(LoadStreams.__next__.<locals>.<listcomp>L  s6    ```VWyDM	$+NNNqQ```r8   r   rJ   r   r   )r   r  copyr   r   r   r   r   r   r  r   r   r  )r~   r   rE   s   `  r6   r   zLoadStreams.__next__D  s    

a

y~~;q>>SXX%%!### a```[_``` hsA !!!QQQ44R4- **1aA66"3''|S$,,r8   c                     dS r   r   r   s    r6   r   zLoadStreams.__len__W  r   r8   N)r   r   r   )r   r   r   rx   r  r|   r   r   r   r8   r6   r   r   
  si        &y &y &y &yP% % %  - - -&    r8   r   c                     t           j        dz   t           j        z   t           j        dz   t           j        z   cfd| D             S )Nr   labelsc           	          g | ]Y}d                      |                    d                              |                    d          d         d                    ZS )txtr>   r   rJ   )r   replacersplitr   )r4   r   sasbs     r6   r   z#img2label_paths.<locals>.<listcomp>^  sT    \\\QEJJqyyR++221773<<3CQGGHH\\\r8   )r0   sep)	img_pathsr4  r5  s    @@r6   img2label_pathsr8  [  sI    Vh'():RV)CFB\\\\\R[\\\\r8   c                   p    e Zd Z	 	 ddZ ed	          dfd
Zd Zd Zed             Z	ed             Z
dS )r[   r      FNr   rI   rK   c                 0   ) | _         | _        | _        | _        |rdn| _         j        o j          _        | dz  | dz  g _        |
 _        | _        	 g }t          |t                    r|n|gD ]}t          |          }|                                r-|t          j        t          |dz  dz            d          z  }S|                                rt!          |d          5 }|                                                                                                }t          |j                  t*          j        z   )|)fd|D             z  }d d d            n# 1 swxY w Y   t/          | | d	          t1          d
 |D                        _         j        sJ | d            n1# t.          $ r$}t/          | d| d| dt4                     d }~ww xY wt7           j                   _        |                                r|nt           j        d                   j                            d          }|                                rt=          j        |          d}}n                      ||          d}}|!                    d          \  }}}}}|r(d| d| d| d| d| d}tE          d ||z   ||           |dk    s|rJ | d| dt4                       |!                    d           |!                    d           tG          |$                                 \  }} _%        t          |           _&        tO          j(        |tN          j)                   _*        t          |+                                           _        t7          |+                                           _        |	r j&        D ]}d|d d df<   tY          |          }tO          j-        tO          j.        |          |z            /                    t`                    }|d         dz   }| _1        | _2        tg          |           _4         j        r= j*        }|d d df         |d d df         z  } | 5                                }! fd |!D              _         fd!|!D              _         fd"|!D              _&        ||!          _*        | |!         } ddgg|z  }tg          |          D ]T}"| ||"k             }#|#6                                |#7                                }%}$|%dk     r|%dg||"<   D|$dk    r
dd|$z  g||"<   UtO          j8        tO          j(        |          |z  |
z  |z             /                    t`                    |
z   _9        d g|z   _:        |r|d#k    rzt          t           j        d                   j        ;                                d$z              _<         fd% j        D              _=         j<        >                    dd&           d}&d g|z  d g|z  c _?         _@        t          d'          B                    d( tG          t                     tg          |                              }'tE          t          |'          |)          }(|(D ]\  }"}|d#k    r j=        |"         E                                s8tO          jF         j=        |"         ;                                |d                    |& j=        |"         G                                jH        z  }&n3|\   j:        |"<    j?        |"<    j@        |"<   |& j:        |"         jI        z  }&| d*|&d+z  d,d-|(_J        |(K                                 d S d S ).NFr   z**r   Tr   r   c                 j    g | ]/}|                     d           r|                    d           n|0S )z./)
startswithr2  )r4   r   parents     r6   r   z0LoadImagesAndLabels.__init__.<locals>.<listcomp>z  s?    ^^^WXd9K9KRaiif555QR^^^r8   r   c                     g | ]V}|                     d           d                                         t          v 6|                    dt          j                  WS )r   rJ   r   )r   r   r   r2  r0   r6  r   s     r6   r   z0LoadImagesAndLabels.__init__.<locals>.<listcomp>~  sP    $r$r$r!''RU,,WYJZJ`J`JbJbfqJqJqQYYsBF%;%;JqJqJqr8   zNo images foundzError loading data from r   z
See r   z.cacheresults
Scanning '' images and labels...  found, 
 missing,  empty, 
 corrupted)desctotalinitialzNo labels in z$. Can not train without labels. See hashversiondtyperJ   r>   c                 *    g | ]}j         |         S r   )	img_filesr4   r   r~   s     r6   r   z0LoadImagesAndLabels.__init__.<locals>.<listcomp>  s     ???AdnQ/???r8   c                 *    g | ]}j         |         S r   )label_filesrP  s     r6   r   z0LoadImagesAndLabels.__init__.<locals>.<listcomp>  s!    CCC 0 3CCCr8   c                 *    g | ]}j         |         S r   )r/  rP  s     r6   r   z0LoadImagesAndLabels.__init__.<locals>.<listcomp>  s    999a4;q>999r8   disk_npyc                 n    g | ]1}j         t          |                              d           j        z  2S )z.npy)im_cache_dirr   with_suffixname)r4   r5   r~   s     r6   r   z0LoadImagesAndLabels.__init__.<locals>.<listcomp>  s9    mmmYZ 1DGG4G4G4O4O4T Tmmmr8   )parentsexist_okr?   c                     t          |  S r/   )
load_image)r   s    r6   <lambda>z.LoadImagesAndLabels.__init__.<locals>.<lambda>  s
    :q> r8   rH  zCaching images (g    eAz.1fzGB))Lr   rM   rN   rT   rO   mosaicmosaic_borderrR   r1   
isinstancelistr   is_dirr   r   is_filer  r   r   r  r>  r0   r6  r   r   rO  help_urlr8  rR  rX  r`   loadcache_labelspopr
   zipvaluessegmentsr/  r   arrayfloat64shapeskeysr^   floorarangeastyper\   batchr   r   indicesargsortr]   maxceilbatch_shapesr  as_posixrW  img_npymkdirimg_hw0img_hwr   imapr   r  existssavestatst_sizenbytesrG  close)*r~   r1   r   rV   rM   rN   rO   rT   rP   rQ   rR   rS   rU   r5   r   te
cache_pathrj   r  r   nmnencr   dr/  ro  r   binbrF   arirectr   ariminimaxigbr@  pbarr>  s*   `                                        @r6   rx   zLoadImagesAndLabels.__init__b  s    **4EE	l449}'i1nxi1n=		\A'd33?TT$ C CGG88:: 
C3q4x%'7#8#8DIIIIAAYY[[ Ca _FFHHNN,,7799!$QX!7^^^^\]^^^^_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ $v$Aq$A$A$ABBB#$r$rQ$r$r$rssDN>==f#=#=#===== 	\ 	\ 	\vZZtZZqZZPXZZ[[[	\ +4>::99;;LaaD1A!1D,E,E,LYYZbcc
 	I!Jz22D6EE !--j&AA56E "IIi00BB 	<tZttttBttZ\ttfhtttAFQJa;;;;AvvWvv&x&xj&x&xnv&x&xvvv 			&		)(+U\\^^(<%6llhvRZ888ejjll++*5::<<88 	[  !!!Q$KKXbillZ/0077<<VaZ
Qxx 9 	iA111a41QQQT7"BJJLLE???????DNCCCCUCCCD99995999DKE(DKEB !fX]F2YY . .qk WWYY		d!88!%q	F1IIAXX!"AHF1I "(8(88(Cf(Ls(R S S Z Z[^ _ _bh hD FQJ	 	v%%$(dnQ.?)@)@)G)P)P)R)RU[)[$\$\!mmmm^b^lmmm!''t'DDDB)-
TFQJ%DL$+ mm(()A)A3vd||UZ[\U]U]C^C^__G	'**!444D I I16))<?1133 BQ 8 8 : :AaDAAA$,q/..0088BBDEADIaL$,q/4;q>$)A,--B%HHrCxHHHH		JJLLLLL%	 	s?   BF; 1A+E(F; (E,	,F; /E,	0A
F; ;
G)G$$G)z./labels.cachec                 D   i }d\  }}}}t          t          | j        | j                  dt	          | j                            }t          |          D ]4\  }	\  }
}	 t          j        |
          }|                                 t          |          }g }|d         dk    |d         dk    z  sJ d| d            |j
                                        t          v sJ d	|j
                     t          j                            |          r|dz  }t          |d
          5 }d |                                                                                                D             }t'          d |D                       rnt)          j        d |D             t(          j                  }d |D             }t)          j        |                    dd          t3          |          fd          }t)          j        |t(          j                  }d d d            n# 1 swxY w Y   t	          |          r|j        d         dk    s
J d            |dk                                    s
J d            |d d dd f         dk                                    s
J d            t)          j        |d          j        d         |j        d         k    s
J d            nK|dz  }t)          j        dt(          j                  }n%|dz  }t)          j        dt(          j                  }|||g||
<   n3# t<          $ r&}|dz  }t?          | d|
 d|            Y d }~nd }~ww xY w| d|j         |j!        z   d| d| d| d| d|_"        6|#                                 |dk    rt?          | d | d!tH                      tK          | j        | j        z             |d"<   |||||	dz   f|d#<   d$|d%<   tM          j'        ||           tQ          j)        | d&|            |S )'N)r   r   r   r   zScanning images)rG  rH  r   	   r>   zimage size z <10 pixelszinvalid image format r   c                 6    g | ]}|                                 S r   r   r   s     r6   r   z4LoadImagesAndLabels.cache_labels.<locals>.<listcomp>  s     NNN1QWWYYNNNr8   c                 4    g | ]}t          |          d k    S )r?   )r^   r   s     r6   r   z4LoadImagesAndLabels.cache_labels.<locals>.<listcomp>  s"    666qA
666r8   c                     g | ]
}|d          S r   r   r   s     r6   r   z4LoadImagesAndLabels.cache_labels.<locals>.<listcomp>  s    /@/@/@!/@/@/@r8   rL  c                     g | ]>}t          j        |d d         t           j                                      dd          ?S )r>   NrL  rJ   r   )r   rm  float32reshaper   s     r6   r   z4LoadImagesAndLabels.cache_labels.<locals>.<listcomp>  sD    'd'd'd]^122bj(I(I(I(Q(QRTVW(X(X'd'd'dr8   rJ      zlabels require 5 columns eachznegative labelsz1non-normalized or out of bounds coordinate labelsr
  zduplicate labels)r   r  z/WARNING: Ignoring corrupted image and/or label r   rA  rB  rC  rD  rE  rF  zWARNING: No labels found in z. See rJ  r@  皙?rK  zNew cache created: )*r
   rj  rO  rR  r^   r  r   r  verifyrH   formatr   r   r0   r1   r2   r   r   r  r   r   rm  r  concatenater  r   r  allr  zerosr   r   r>  stemrG  r  rf  r;   r`   r  logginginfo)r~   r1   rU   r   r  r   r  r  r  r   im_filelb_filer'  r  rl  r5   lclassesr  s                      r6   rh  z LoadImagesAndLabels.cache_labels  s   #BBC(899@QY\]a]kYlYlmmm%.t__ %	P %	P!A!!`Z((		!"a1qA6XX8Xe8X8X8XXXXy((K7779\QSQZ9\9\777 7>>'** ;!GBgs++ :qNN0@0@0K0K0M0MNNN66A66677 f&(h/@/@a/@/@/@
&S&S&SG'd'dbc'd'd'dH "A0F0FW_H`H`/acd e eAHQbj999: : : : : : : : : : : : : : : 1vv ? wqzQ0O !Q||~~@@/@@@@ !!!!QRR%A2244ii6iiii!y3339!<
JJJL^JJJJaHV2:>>>!GBrz:::A1'

 ` ` `a^^PW^^[\^^________` " P PT[49-D P PP P')P P57P PACP P PDII

77VOOOOXOOPPPT->??&	2r2q1u,))
1d99499:::s?   CL0&C*HL0H 	 L0#H 	$DL00
M :MM c                 *    t          | j                  S r/   )r^   rO  r   s    r6   r   zLoadImagesAndLabels.__len__  s    4>"""r8   c           
      N
   | j         |         }| j        }| j        ot          j                    |d         k     }|rNt          j                    dk     rt	          | |          \  }}nt          | |          \  }}d }t          j                    |d         k     rt          j                    dk     r<t	          | t          j        dt          | j                  dz
                      \  }}n;t          | t          j        dt          | j                  dz
                      \  }}t          j        
                    dd          }	||	z  |d|	z
  z  z                       t          j                  }t          j        ||fd          }nt          | |          \  }\  }
}\  }}| j        r| j        | j        |                  n| j        }t'          ||d| j                  \  }}}|
|f||
z  ||z  f|ff}| j        |                                         }|j        rGt/          |d d dd f         |d         |z  |d         |z  |d         |d         	          |d d dd f<   | j        r|s7t1          |||d
         |d         |d         |d         |d                   \  }}t3          ||d         |d         |d                    t          j                    |d         k     rg g g }}}t          |          dk     rrt5          | t          j        dt          | j                  dz
                      \  }}}||z  }||z  }||z  }t          |          dk    rnt          |          dk     rt7          |||||          }t          |          }|rft9          |d d ddf                   |d d ddf<   |d d ddgfxx         |j        d         z  cc<   |d d ddgfxx         |j        d         z  cc<   | j        rt          j                    |d         k     r,t          j        |          }|rd|d d df         z
  |d d df<   t          j                    |d         k     r,t          j        |          }|rd|d d df         z
  |d d df<   tA          j!        |df          }|rtA          j"        |          |d d dd f<   |d d d d d d df         #                    ddd          }t          j$        |          }tA          j"        |          || j%        |         |fS )Nr`  g?mixupr   r>   g       @F)r+  scaleup)padwpadhdegrees	translatescaleshearperspective)r  r  r  r  r  hsv_hhsv_shsv_v)hgainsgainvgainpaste_inr   r  r   r"  r   flipudfliplrr=   rJ   )&ru  rN   r`  randomload_mosaicload_mosaic9randintr^   r/  r   betars  uint8r  r]  rO   ry  rt  r   r   rM   r,  r@   r   random_perspectiveaugment_hsvload_samplespasteinr   r  r  r  r`   r  
from_numpyr   r   rO  )r~   r%  rN   r`  rE   r/  ro  img2labels2r   h0w0r  r  r  ratiorS   sample_labelssample_imagessample_maskssample_labels_sample_images_sample_masks_nL
labels_outs                            r6   __getitem__zLoadImagesAndLabels.__getitem__  sy   U#h@3x=!@ 	p}$$)$66VV*477VF }W--=??S(($/fnQDKHXHX[\H\6]6]$^$^MD''$0v~aT[IYIY\]I]7^7^$_$_MD'INN3,,QwQ/77AA(91== %/tU$;$;!C"b6Aq =AIXD%dj&7884=E'UUUUOC"XRR 0#66F[',,..F{ p *6!!!QRR%=%(Q,aST[^_`[ahklmhn o o oqqq!""u< 	Z Q0f9<Y;>{;K7:7|7:7|=@=OQ Q QV 3w<s7|3w<XXXX }Z00=?Rl}-((2--DPQUW]Wefgilmqmxiyiy|}i}W~W~DDANNM!^3M!^3M M1L=))Q.. -((2-- !fm]LYY[[ 	.&vaaa1f~66F111ac6N111q!f91-111q!f91-< 	4}X..inn 4#$vaaad|#3F111a4L }X..inn 4#$vaaad|#3F111a4L["a))
 	9 % 0 8 8Jqqq!""u !!!QQQ"*o''1a00"3''$$j$.2GOOr8   c                     t          |  \  }}}}t          |          D ]\  }}||d d df<   t          j        |d          t          j        |d          ||fS r   )rj  r  r`   r  cat)rt  rE   labelr1   ro  r   r  s          r6   rZ   zLoadImagesAndLabels.collate_fnw  si    #&; UD&e$$ 	 	DAqAaaadGG{3""EIeQ$7$7vEEr8   c           
         t          |  \  }}}}t          |          dz  }g g |d |         |d |         f\  }}}}	t          j        g dg          }
t          j        g dg          }t          j        g dg          }t	          |          D ]q}|dz  }t          j                    dk     r}t          j        ||                             d          	                                ddd	
          d         
                    ||         
                                          }||         }nt          j        t          j        ||         ||dz            fd          t          j        ||dz            ||dz            fd          fd          }t          j        ||         ||dz            |
z   ||dz            |z   ||dz            |
z   |z   fd          |z  }|                    |           |                    |           st          |          D ]\  }}||d d df<   t          j        |d          t          j        |d          ||	fS )Nr"  )rI   r   r   r>   r   r   )rI   r   r>   r   r   r   )r>   r>         ?r  r  r  r  r          @bilinearF)scale_factorr   align_cornersr>   r   r   )rj  r^   r`   tensorr   r  Finterpolate	unsqueezefloattyper  appendr  r  )rt  rE   r  r1   ro  r   img4label4path4shapes4howorF   r   r'  r  s                   r6   rg   zLoadImagesAndLabels.collate_fn4~  sY   #&; UD&KK1')2tBQBx'C$feW\.../00\.../00L000122q 
	 
	AFA}$$]3q6#3#3A#6#6#<#<#>#>RV`puvvvtCFKKMM** !HY	3q63q1u:*> B BEIsSTWXSXz[^_`cd_d[eNfhiDjDjkmnooIuQxq1u):E!a%L2<MuUVYZUZ|^`O`ceOefhijjmnnKKOOOMM!f%% 	 	DAqAaaadGG{4##UYvq%9%95'IIr8   )r   r:  FNFFFFr   rI   rK   )r   r   r   rx   r   rh  r   r  staticmethodrZ   rg   r   r8   r6   r[   r[   a  s        mrRTr r r rh !%%5 6 6r 5 5 5 5n# # #_P _P _PB F F \F J J \J J Jr8   r[   c                    | j         |         }|| j        |         }t          j        |          }|J d|z               |j        d d         \  }}| j        t          ||          z  }|dk    r^|dk     r| j        st          j        nt          j	        }t          j
        |t          ||z            t          ||z            f|          }|||f|j        d d         fS | j         |         | j        |         | j        |         fS )Nr   r   r>   interpolation)r  rO  r   r   r  r   rw  rM   
INTER_AREAINTER_LINEARresizer\   r}  r~  )r~   r%  rE   r1   r  r  r   interps           r6   r]  r]    s    
)E
C
{~e$j 2T 92A2BMCBKK'66'(1uuT\uS^^sGWF*S3rAv;;BF"<FSSSCRHcim++ye!4dk%6HHHr8   r  c                 &   t           j                            ddd          |||gz  dz   }t          j        t          j        | t          j                            \  }}}| j        }t          j        ddt           j	                  }	|	|d         z  dz  
                    |          }
t          j        |	|d         z  dd          
                    |          }t          j        |	|d	         z  dd          
                    |          }t          j        t          j        ||
          t          j        ||          t          j        ||          f          
                    |          }t          j        |t          j        | 
           d S )NrJ   r>   r   r      rL        r   )dst)r   r  uniformr   r   cvtColorCOLOR_BGR2HSVrM  rr  int16rs  clipmergeLUTCOLOR_HSV2BGR)rE   r  r  r  r   huesatvalrM  r   lut_huelut_satlut_valimg_hsvs                 r6   r  r    sK   
	"a##ueU&;;a?AIcl30ABBCCMCcIE
	!S)))AAaDC''..Gga!A$h3''..u55Gga!A$h3''..u55Gig..W0E0EswsT[G\G\]^^eefkllGL#+555555r8   Tc                    t          j        | |rt           j        nt           j                  }|rCt          j        dd          }|                    |d d d d df                   |d d d d df<   n+t          j        |d d d d df                   |d d d d df<   t          j        ||rt           j        nt           j                  S )Nr  )r?   r?   )	clipLimittileGridSizer   )	r   r  COLOR_BGR2YUVCOLOR_RGB2YUVcreateCLAHEapplyequalizeHistCOLOR_YUV2BGRCOLOR_YUV2RGB)rE   clahebgryuvcs        r6   hist_equalizer    s    
,sKC--#:K
L
LC 6Oc???wws111aaa7|,,AAAqqq!G'AAAqqq!G55AAAqqq!G<#LS..3;LMMMr8   c                 0   g g }}| j         fd| j        D             \  }}|gt          j        | j        d          z   }t          |          D ]\  }}t          | |          \  }}	\  |dk    r{t          j        dz  dz  |j	        d         fdt          j
                  }
t          |z
  d          t          |z
  d          ||f\  }}}}||z
  z
  ||z
  z
  f\  }}}}n|dk    rS|t          |z
  d          t          |z   dz            |f\  }}}}d||z
  z
  t          ||z
            f\  }}}}n|dk    rSt          |z
  d          ||t          dz  |z             f\  }}}}||z
  z
  dt          ||z
            f\  }}}}nf|dk    r`||t          |z   dz            t          dz  |z             f\  }}}}ddt          ||z
            t          ||z
            f\  }}}}|||||f         |
||||f<   ||z
  ||z
  | j        |                                         | j        |                                         }}|j        r9t#          |d d dd f                   |d d dd f<   fd	|D             }|                    |           |                    |           t          j        |d          }|d d dd f         g|R D ]}t          j        |ddz  |
           t-          |
||| j        d                   \  }
}}t1          |
||| j        d         | j        d         | j        d         | j        d         | j        d         | j        	  	        \  }
}|
|fS )Nc           	      b    g | ]+}t          t          j        | d z  |z                       ,S r   r\   r  r  r4   r   rF   s     r6   r   zload_mosaic.<locals>.<listcomp>  7    MMMQc&.!QUQY//00MMMr8   r   kr   r   r   rL  r>   c           	      6    g | ]}t          |          S r   r   r4   r   r  r  r  r  s     r6   r   zload_mosaic.<locals>.<listcomp>  )    FFFq!Qd33FFFr8   out
copy_pasteprobabilityr  r  r  r  r  r  r  r  r  r  border)r   ra  r  choicesru  r  r]  r   fullr  r  rw  r]   r/  r,  rl  r@   r   r  extendr  r  r+  rN   r  )r~   r%  labels4	segments4ycxcru  r   rE   r  r  x1ay1ax2ay2ax1by1bx2by2br/  rl  r   r  r  r  rF   r  s                         @@@@@r6   r  r    sM    RYGAMMMM$:LMMMFBgt|q9999Gg&& # #5#D%00QA 667AE1q5#)A,7BHMMMD!$R!VQR!VQR!GCc3!"cCi!sSy/1a!GCc33!VV!#Sa^^SaQ5G5G!KCc3!"AsOSC#I5F5F!ICc33!VV!$R!VQRQUBF9K9K!KCc3!"cCi!QC#Iq8I8I!ICc33!VV!#RR!VQU););SQQ=O=O!OCc3!"As1cCi'8'8#cCi:K:K!KCc3!$SWc#g%5!6SWc#gSySy  ;u-2244dmE6J6O6O6Q6Q; 	G&vaaae}aD$GGF111abb5MFFFFFFFXFFFHv"""" nWa((Gaaaen)y)) $ $
1a!e#####  *$PTPXYePfgggD'9&tWi/3x	/B15+1F-1Xg->-1Xg->378M3J.2.@B B BMD' =r8   c                 f   g g }}| j         |gt          j        | j        d          z   }t	          |          D ]/\  }}t          | |          \  }}\  |dk    rFt          j        dz  dz  |j        d         fdt          j	                  }}
}	z   z   fn|dk    rz
  z   fn|dk    r|z   z
  |z   z   fn|dk    r|
z   |
z   z   z   fn|d	k    r|
z   |z   |
z   z   |z   z   fn{|d
k    r|
z   z
  |	z   |
z   |	z   z   fn\|dk    r|
z   |z
  z
  |	z   |
z   |z
  |	z   z   fn7|dk    rz
  |	z   z
  |	z   fn|dk    rz
  |	z   |z
  z
  |	z   |z
  fd d         \  d D             \  }}}}| j
        |                                         | j        |                                         }}|j        r9t          |d d dd f                   |d d dd f<   fd|D             }|                    |           |                    |           ||z
  d |z
  d f         |||||f<   }}1fd| j        D             \  }}|||dz  z   ||dz  z   f         }t          j        |d          }|d d ddgfxx         |z  cc<   |d d dd	gfxx         |z  cc<   t          j        ||g          fd|D             }|d d dd f         g|R D ]}t          j        |ddz  |           t+          |||| j        d                   \  }}}t/          |||| j        d         | j        d         | j        d         | j        d         | j        d         | j        	  	        \  }}||fS )Nr?   r"  r   r   r   r$  rL  r>   r"  r  r=      c                 .    g | ]}t          |d           S r  )rw  r   s     r6   r   z load_mosaic9.<locals>.<listcomp>   s     ///#a))///r8   c           	      6    g | ]}t          |          S r   r&  )r4   r   r  padxpadyr  s     r6   r   z load_mosaic9.<locals>.<listcomp>&  r(  r8   c                 T    g | ]$}t          t          j        d                     %S r  r  )r4   r  rF   s     r6   r   z load_mosaic9.<locals>.<listcomp>/  s-    DDDAc&.A&&''DDDr8   c                     g | ]}|z
  S r   r   )r4   r   r  s     r6   r   z load_mosaic9.<locals>.<listcomp>7  s    ***1Q***r8   r)  r+  r,  r  r  r  r  r  r.  )r   r  r0  ru  r  r]  r   r1  r  r  r/  r,  rl  r@   r   r  r2  ra  r  rm  r  r+  rN   r  )r~   r%  labels9	segments9ru  r   rE   r  img9r  r  wphpx1y1x2y2r/  rl  r5  r6  r   r  r  rC  rD  rF   r  s                         @@@@@@r6   r  r    s    RYGAgt|q9999Gg&& ' '5#D%00QA 667AE1q5#)A,7BHMMMDB1a!eQU"AA!VV1q5!a%"AA!VVBAq2vz1,AA!VVB1r6A:q1u,AA!VVBBB
AFQJ6AA!VVB
AFAFAFQJ6AA!VVBaRR"a"fqj@AA!VVAq2vz1a"f,AA!VVAq2v{Q1r6B;6ArrU
d//Q///BB  ;u-2244dmE6J6O6O6Q6Q; 	G&vaaae}aD$GGF111abb5MFFFFFFFXFFFHv""" !dR$YZZ!78RUBrE\AB EDDD1CDDDFB2A:r"q1u*},-D nWa((GAAA1vI"AAA1vI"
"bA****	***Iaaaen)y)) $ $
1a!e#####
  *$PTPXYePfgggD'9&tWi/3x	/B15+1F-1Xg->-1Xg->378M3J.2.@B B BMD' =r8   c           	      n   g g }}| j         fd| j        D             \  }}|gt          j        | j        d          z   }t          |          D ]\  }}t          | |          \  }}	\  |dk    r{t          j        dz  dz  |j	        d         fdt          j
                  }
t          |z
  d          t          |z
  d          ||f\  }}}}||z
  z
  ||z
  z
  f\  }}}}n|dk    rS|t          |z
  d          t          |z   dz            |f\  }}}}d||z
  z
  t          ||z
            f\  }}}}n|dk    rSt          |z
  d          ||t          dz  |z             f\  }}}}||z
  z
  dt          ||z
            f\  }}}}nf|dk    r`||t          |z   dz            t          dz  |z             f\  }}}}ddt          ||z
            t          ||z
            f\  }}}}|||||f         |
||||f<   ||z
  ||z
  | j        |                                         | j        |                                         }}|j        r9t#          |d d dd f                   |d d dd f<   fd	|D             }|                    |           |                    |           t          j        |d          }|d d dd f         g|R D ]}t          j        |ddz  |
           t-          |
||d          \  }}}|||fS )Nc           	      b    g | ]+}t          t          j        | d z  |z                       ,S r  r  r   s     r6   r   z load_samples.<locals>.<listcomp>P  r!  r8   r   r"  r   r   r$  rL  r>   c           	      6    g | ]}t          |          S r   r&  r'  s     r6   r   z load_samples.<locals>.<listcomp>m  r(  r8   r)  r  r,  )r   ra  r  r0  ru  r  r]  r   r1  r  r  rw  r]   r/  r,  rl  r@   r   r  r2  r  r  sample_segments)r~   r%  r3  r4  r5  r6  ru  r   rE   r  r  r7  r8  r9  r:  r;  r<  r=  r>  r/  rl  r   r  r  r  r  r  r  rF   r  s                            @@@@@r6   r  r  K  s    RYGAMMMM$:LMMMFBgt|q9999Gg&& # #5#D%00QA 667AE1q5#)A,7BHMMMD!$R!VQR!VQR!GCc3!"cCi!sSy/1a!GCc33!VV!#Sa^^SaQ5G5G!KCc3!"AsOSC#I5F5F!ICc33!VV!$R!VQRQUBF9K9K!KCc3!"cCi!QC#Iq8I8I!ICc33!VV!#RR!VQU););SQQ=O=O!OCc3!"As1cCi'8'8#cCi:K:K!KCc3!$SWc#g%5!6SWc#gSySy  ;u-2244dmE6J6O6O6Q6Q; 	G&vaaae}aD$GGF111abb5MFFFFFFFXFFFHv"""" nWa((Gaaaen)y)) $ $
1a!e#####
 2AwPYgj1k1k1k.M=,-55r8   c           
         t          |          }|r|r| j        \  }}}t          j        | j        t          j                  }t          j        t          |          t          ||z                      D ]}	||	         ||	         }}
||
d         z
  |
d         ||
d         z
  |
d         f}t          ||d d ddf                   }|dk     
                                rt          j        ||
d         g|gfd          }|                    t          j        ||d d ddf         z
  |d d ddf         fd                     t          j        |||	                             t          j                  gd	d
t          j                   t          j        | |          }t          j        |d          }|dk    }||         | |<   | ||fS )Nr"  r   r   r>   r"  r  333333?r   rJ   r  r  r  src1src2)r^   r  r   r  r  r  sampler   roundbbox_ioar  r  r  r   drawContoursrs  int32FILLEDbitwise_andr   )rE   r/  rl  r-  r   r  r  r  im_newjr  rF   boxioaresultr   s                   r6   r+  r+  ~  s   HA q )1a#)RX..uQxx5q+A+ABBB 	j 	jA!9hqkqAad(AaD!ad(AaD0C3qqq!A#v//Cd
!! j1Q4,#,(@!DDAaaa1fIqAaCy/I1 M MNNN (1+*<*<RX*F*F)G_^a^hiiic777&!$$QJA  r8   c                    t          |          }| j        \  }}}t          j        | j        t          j                  }t          j        | j        t          j                  dz  }t          |          D ]o}	t          j        |||	         	                    t          j
                  gddt          j                   t          j        | |          }
|
dk    }|
|         ||<   p|||fS )Nr$  rJ   rV  rW  r   )r^   r  r   r  r  onesr   r   r]  rs  r^  r_  r`  )rE   r/  rl  r   r  r  r  ra  img_newrb  re  r   s               r6   remove_backgroundri    s    HAiGAq!Xci**Fgci**S0G1XX  (1+"4"4RX">">!?_VYV`aaac777QJAY

FH$$r8   c           	      0   t          |          }g }g }g }|rz|rw| j        \  }}	}
t          j        t	          |          t          ||z                      D ]7}||         ||         }}|d                             t                                        d|	dz
            |d                             t                                        d|dz
            |d                             t                                        d|	dz
            |d                             t                                        d|dz
            f}|d         |d         k    s|d         |d         k    r|	                    |d                    t          j        | j        t          j                  }t          j        |||                             t          j                  gddt          j                   |	                    ||d         |d         |d         |d         d d f                    t          j        | |	          }|dk    }||         ||<   |	                    ||d         |d         |d         |d         d d f                    9|||fS )
Nr"  r>   r   r   r   r"  rJ   rV  rW  )r^   r  r  rZ  r   r[  rs  r\   r  r  r   r  r  r   r]  r^  r_  r`  )rE   r/  rl  r-  r   r  r  r  r  r  r  rb  r  rF   rc  maskre  r   s                     r6   rS  rS    s   HAMML Fq F)1auQxx5q+A+ABBB 	F 	FA!9hqkqAA$++c""''!A#..!C0@0@0E0Ea!0L0LaPQdkkZ]N^N^NcNcdefghifiNjNjlmnolplwlwx{l|l|  mB  mB  CD  EF  GH  EH  mI  mI  IC A#a&  c!fA&6&6  1&&&8CIrx00DTHQK$6$6rx$@$@#A2X[XbcccSVCF]3q6#a&=%B CDDD_#D999F
AQiDG  c!fSVmCF3q6M!!!&C!DEEEE-55r8   c           	      r   | j         d d         \  }}|d d dd f                             t                    }|j        \  }}}}||z
  ||z
  z   dz  }	|	                                d t          |	j        dz                     D ]}
||
         \  }}}}||z
  ||z
  }}t          t          j        d||z
                      t          t          j        d||z
                      }}||||z   ||z   g\  }}}}| ||||f         | ||||f<   t          j
        |||
df         ||||ggd          }| |fS )Nr   r>   r  r   r
  )r  rs  r\   Trv  r[  r@   r  r  r   r  )rE   r/  r  r  boxesrL  rM  rN  rO  rF   r   r;  r<  r=  r>  bhbwr5  r6  r7  r8  r9  r:  s                          r6   	replicaterq    sl   9RaR=DAq111abb5M  %%EWNBB
r'b2g	!#AYY[[-%---. Q Q"1XS#ssC#IBV^Aq2v..//V^Aq2v5N5N1O1OB "b2grBw7S#s #CGSW$4 5CGSW6VAqD\3S#$F#GaPPP;r8   r   r   r$  r$  r$  r   c           	      B   | j         d d         }t          |t                    r||f}t          |d         |d         z  |d         |d         z            }|st          |d          }||f}	t          t	          |d         |z                      t          t	          |d         |z                      f}
|d         |
d         z
  |d         |
d         z
  }}|r+t          j        ||          t          j        ||          }}n9|r7d\  }}|d         |d         f}
|d         |d         z  |d         |d         z  f}	|dz  }|dz  }|d d d         |
k    r!t          j        | |
t          j	                  } t          t	          |dz
                      t          t	          |dz                       }}t          t	          |dz
                      t          t	          |dz                       }}t          j
        | ||||t          j        |	          } | |	||ffS )
Nr   r   r>         ?)rI   rI   rJ   r  r  )value)r  rb  r\   r]   r[  r   modr   r  r  copyMakeBorderBORDER_CONSTANT)rE   	new_shapecolorr+  	scaleFillr  rR   r  r   r  	new_unpaddwdhtopbottomleftrights                    r6   r   r     s   IbqbME)S!! +	*	 	IaL58#Yq\E!H%<==A 3KK qDEE%(Q,''((#eE!HqL.A.A*B*BBIq\IaL()A,1*EB AF##RVB%7%7B	 ABq\9Q<0	!uQx'1a)@@!GB!GBTTrT{ijis7GHHHeBHoo&&E"s(OO(<(<CeBHoo&&E"s(OO(<(<%D

S#vtUC<OW\
]
]
]CBxr8   r   
   r  r   r   c	                 h
   | j         d         |d         dz  z   }	| j         d         |d         dz  z   }
t          j        d          }| j         d          dz  |d<   | j         d          dz  |d<   t          j        d          }t          j        | |          |d<   t          j        | |          |d<   t          j        d          }t          j        | |          }t          j        d|z
  d	|z             }t          j        |d
|          |d d<   t          j        d          }t          j        t          j        | |          t          j	        z  dz            |d<   t          j        t          j        | |          t          j	        z  dz            |d<   t          j        d          }t          j        d|z
  d|z             |
z  |d<   t          j        d|z
  d|z             |	z  |d<   ||z  |z  |z  |z  }|d         dk    s6|d         dk    s*|t          j        d          k    
                                r?|rt          j        | ||
|	fd          } n"t          j        | |d d         |
|	fd          } t          |          }|rt          d |D                       }t          j        |df          }|rt          |          }t!          |          D ]~\  }}t          j        t          |          df          }||d d d df<   ||j        z  }|r|d d d df         |d d ddf         z  n|d d d df         }t'          ||
|	          ||<   nt          j        |dz  df          }|d d g df                             |dz  d          |d d d df<   ||j        z  }|r|d d d df         |d d ddf         z  n|d d d df                             |d          }|d d g df         }|d d g df         }t          j        |                    d          |                    d          |                    d          |                    d          f                              d|          j        }|d d ddgf                             d|
          |d d ddgf<   |d d ddgf                             d|	          |d d ddgf<   t3          |d d ddf         j        |z  |j        |rdnd          }||         }||         |d d ddf<   | |fS )Nr   r   r>   r   )r   r   )r>   r   )r   r   )r   r>   g?r  )anglecenterr  r  )r   r>   )r>   r   r  rs  )dsizeborderValuec              3   >   K   | ]}|                                 V  d S r/   )r   r   s     r6   r7   z%random_perspective.<locals>.<genexpr>.  s*      55q15577555555r8   r"  )r>   r   r   r"  r>   r"  r   r   r?   )r   r   r"  r=   )r>   r   r  r@  r  {Gz?r  )box1box2area_thr)r  r   eyer  r  r   getRotationMatrix2Dmathtanpir   warpPerspective
warpAffiner^   r  r   r  rg  rm  r   r  r  r]   rw  r  box_candidates)rE   targetsrl  r  r  r  r  r  r/  heightwidthCPRarF   Srm  Mr   use_segmentsr  r   segmentxyr   ys                              r6   r  r    s{   
 Yq\F1IM)FIaL6!9q=(E 	q		Ay|maAdGy|maAdG 	q		Ank\;77AdGnk\;77AdG 	q		Ax))Aq5y#+..A#!F!DDDAbqbE 	q		Ahv~ufe44tw>DEEAdGhv~ufe44tw>DEEAdG 	q		AnS9_cIo>>FAdGnS9_cIo>>GAdG 	
A	AAq	QF1INNRVAYY/C/C/E/EN 	a%c1UFOQ`aaaCC.aeE6?P_```C 	GA  !55H55555h1v 	<(22H'11 8 8
7Wc'llA.//#111bqb5	!#X/:IR2A2YAAAqsF++111bqb5	 %R77A8 !a%$$B#;#;#; ;<DDQUANNBqqq"1"uIacB,7F"QQQU)bAaCj((R2A2YOOPQSTUUB 111lll?#A111lll?#A.!%%((AEE!HHaeeAhha!IJJRRSTVWXXZC !QF^00E::CAq6	N QF^00F;;CAq6	N 1Q3 1A 5CET`LjDDfjkkk!*a&1Q3<r8   r      缉ؗҜ<c                    | d         | d         z
  | d         | d         z
  }}|d         |d         z
  |d         |d         z
  }	}t          j        ||	|z   z  |	||z   z            }
||k    |	|k    z  ||	z  ||z  |z   z  |k    z  |
|k     z  S )Nr   r   r   r>   )r   maximum)r  r  wh_thrar_thrr  epsw1h1w2h2r  s              r6   r  r  R  s    !WtAwQ$q' 1B!WtAwQ$q' 1B	B"s(OR28_	5	5BKBK(BGrBw},E,PQUWZ`U`aar8   c                    |                                 }| d         | d         | d         | d         f\  }}}}|d         |d         |d         |d         f\  }}}}	t          j        ||          t          j        ||          z
                      d          t          j        ||	          t          j        ||          z
                      d          z  }
||z
  |	|z
  z  dz   }|
|z  S )Nr   r>   r   r   r  )r   r   minimumr  r  )r  r  b1_x1b1_y1b1_x2b1_y2b2_x1b2_y1b2_x2b2_y2
inter_area	box2_areas               r6   r\  r\  Z  s    >>D "&a$q'47DG!CE5%!%a$q'47DG!CE5% *UE**RZu-E-EEKKANN*UE**RZu-E-EEKKANNOJ 55=1E9I 	!!r8   c                    | j         d d         \  }}dgdz  dgdz  z   dgdz  z   dgdz  z   d	gd
z  z   }|D ]H}t          j        dt          ||z                      }t          j        dt          ||z                      }t	          dt          j        d|          |dz  z
            }t	          dt          j        d|          |dz  z
            }	t          |||z             }
t          ||	|z             }d t          d          D             | |	|||
f<   t          |          rR|dk    rLt          j	        ||	|
|gt          j
                  }t          ||d d ddf                   }||dk              }J|S )Nr   r  r>         ?      ?r"        ?r?   g      ?r:  r   c                 8    g | ]}t          j        d d          S )@      )r  r  )r4   r  s     r6   r   zcutout.<locals>.<listcomp>~  s$    &Q&Q&Q1v~b#'>'>&Q&Q&Qr8   r   gQ?rL  r  g333333?)r  r  r  r\   rw  r]   r   r^   r   rm  r  r\  )r   r/  r  r  scalesrF   mask_hmask_wxminyminxmaxymaxrc  rd  s                 r6   cutoutr  m  s   ;rr?DAq UQY$!#ugk1VHqL@G9r>QF ( (3q1u::..3q1u::.. 1fnQ**Vq[8991fnQ**Vq[8991dVm$$1dVm$$ 'R&Qa&Q&Q&Qd4id"# v;; 	(1t88(D$d32:FFFC3qqq!A#v//CC$J'FMr8   c                    | j         d d         \  }}dgdz  dgdz  z   dgdz  z   dgdz  z   dgdz  z   }|D ] }t          j                    d	k     rt          j        d
t          ||z                      }	t          j        d
t          ||z                      }
t	          dt          j        d|          |
dz  z
            }t	          dt          j        d|          |	dz  z
            }t          |||
z             }t          |||	z             }t          j        ||||gt          j                  }t          |          rt          ||d d d
df                   }nt          j        d
          }|dk                                     rt          |          r||dz   k    r||dz   k    rt          j        dt          |          d
z
            }||         j         \  }}}t          ||z
  |z  ||z
  |z            }t          ||z            }t          ||z            }|dk    r%|dk    rt          j        ||         ||f          }t          j        ||         ||f          }| |||z   |||z   f         }|dk    }|                    t          j                                                  dk    r||         ||<   t          j        ||||z   ||z   gt          j                  }t          |          r"t          j        |||         g|gfd          }nt          j        ||         g|g          }|| |||z   |||z   f<   "|S )Nr   g      ?r  r"  r  r  r  r=   皙?r>   r   rL  r  rU  r  r  <   )r  r  r  r\   rw  r]   r   rm  r  r^   r\  r  r  r   r  rs  r^  r9   r  )r   r/  r  r  r  r  r  r  rF   r  r  r  r  r  r  rc  rd  sel_indhswscsr_scaler_wr_hr_maskr_image	temp_cropm_inds                               r6   r  r    sn   ;rr?DAq VaZ3%!)#tfqj0E7Q;>&AMF /D /D=??S  3q1u::..3q1u::.. 1fnQ**Vq[8991fnQ**Vq[8991dVm$$1dVm$$hdD$/rzBBBv;; 	3qqq!A#v//CC(1++C$J 	D#m"4"4 	D$b..tVZ[]V]~~nQM(:(:1(<==G 'w/5JBB49b.49b.99Gbj//Cbj//CbsRxxL$9C:FF*]7%;c3ZHH!$tCx-d3h">?	
<<))--//"44'.u~Ie$ (D$S$s(#C2:VVVC6{{ L!#=;Q:XTW:X9Y0Z\]!^!^!#M',B+IS+I*J!K!K:CE$tCx-d3h67Mr8   c                       e Zd Zd ZddZdS )Albumentationsc                    d | _         dd l}|                    |                    d          |                    ddd          |                    ddgd          |                    d          |                    d          |                    d          |	                    d	d
          g|
                    ddg                    | _         d S )Nr   r  )r   r  )brightness_limitcontrast_limitr   P   x   )gamma_limitr   K   )quality_lowerr   
pascal_vocclass_labels)r  label_fields)bbox_params)	transformalbumentationsComposeCLAHERandomBrightnessContrastRandomGammaBlur
MedianBlurToGrayImageCompression
BboxParams)r~   As     r6   rx   zAlbumentations.__init__  s    """"GGdGOO&&CSW&XXMMr3i4M88FFTFNNLL4L  HHtHR488$; LGWXX # Z Zr8   ru  c           	      "   | j         rt          j                    |k     rn|                      ||d d dd f         |d d df                   }|d         t          j        d t	          |d         |d                   D                       }}||fS )Nr>   r   )r   bboxesr  r   c                     g | ]
\  }}|g|S r   r   )r4   r  bs      r6   r   z+Albumentations.__call__.<locals>.<listcomp>  s"    0m0m0mTQ!a0m0m0mr8   r  r  )r  r  r   rm  rj  )r~   r'  r/  r   r  s        r6   __call__zAlbumentations.__call__  s    > 	ofmoo11..r&ABB-fUVUVUVXYUYl.[[CWrx0m0mS^I\^abj^kElEl0m0m0m'n'nB6zr8   N)ru  )r   r   r   rx   r  r   r8   r6   r  r    s:        Z Z Z      r8   r  ./newc                     t           j                            |           rt          j        |            t          j        |            d S r/   )r0   r1   r  shutilrmtreemakedirs)r1   s    r6   create_folderr    s>    	w~~d dKr8   ../cococ           	      "   t          | dz             }t          |           t          t          j        t	          t          |                     dz   d                    D ],}t          j        ||t          |          j        z             -d S )N_flatz/**/*.*Tr   )r   r  r
   r   r   r  copyfilerY  )r1   new_pathfiles      r6   flatten_recursiver    s    D7N##H(TYs4:::dKKKLL : :hd89999: :r8   ../coco/c           
         t          |           } | dz                                  rt          j        | dz            nd  t	          |                     d                    }t          |          }t          ||          D ]}|j        dd          t          v rt          j        t          |                    dd d df         }|j        d d         \  }}t          t          t          |          g          d                   }t          |                                          rt!          |d	          5 }t#          j        d
 |                                                                                                D             t"          j                  }	d d d            n# 1 swxY w Y   t/          |	          D ]\  }
}t1          |d                   }| dz  | z  | j         d|j         d|
 dz  }|j                                        s|j                            d           |dd          ||||gz  }|dd          dz  dz   |dd <   t9          |                    dd                                                                        t"          j                  }t#          j         |ddg         d|          |ddg<   t#          j         |ddg         d|          |ddg<   t          j!        t          |          ||d         |d         |d         |d         f                   sJ d|             d S )N
classifierr   r_  r>   .rJ   r   r   r   c                 6    g | ]}|                                 S r   r  r   s     r6   r   z!extract_boxes.<locals>.<listcomp>  s     "T"T"T17799"T"T"Tr8   rL  r  z.jpgT)rZ  g333333?r   r"  zbox failure in )"r   rd  r  r  rc  rglobr^   r
   suffixr   r   r   r   r  r8  r  r  r   rm  r   r   r  r  r  r\   r  r>  r|  r   r  ravelrs  r  imwrite)r1   r:   r   r  r'  r  r  r  r5   lbrb  r   r  r  s                 r6   extract_boxesr    sb    ::D+/,+>*F*F*H*HRFM$%&&&dE""##EE

AQ''' ` `>!"",,CLL))#ttt)4B8BQB<DAq ?CLL>::1=>>GG}}##%% `'3'' h1"T"Taffhhnn6F6F6Q6Q6S6S"T"T"T\^\fgggBh h h h h h h h h h h h h h h &bMM ` `DAqAaD		A,16DI9^9^9^9^WX9^9^9^^A8??,, 5t444!""Aq!,AabbECK!OAabbE!!))B"2"23399;;BB26JJA "1a&	1a 8 8Aq!fI "1a&	1a 8 8Aq!fI;s1vvr!A$qt)QqT!A$Y2F/GHH__J_\]J_J_____3` `s   <A!F))F-	0F-	g?r  rI   c                     t                      t           fdt          D             g           }t          |          }t	          j        g d||          }g d} fd|D              t          d  d|z  z              t          t          ||          |          D ]\  }}|rBt          t          t          |          g          d	                                                   rVt           ||         z  d
          5 }	|	                    t          |          dz              ddd           n# 1 swxY w Y   dS )aP   Autosplit a dataset into train/val/test splits and save path/autosplit_*.txt files
    Usage: from utils.datasets import *; autosplit('../coco')
    Arguments
        path:           Path to images directory
        weights:        Train, val, test weights (list)
        annotated_only: Only use images with an annotated txt file
    c                 Z    g | ]'}t                              d |                     (S )z*.)rc  r	  )r4   img_extr1   s     r6   r   zautosplit.<locals>.<listcomp>  s3    MMMgdjjg0011MMMr8   )r   r>   r   )weightsr#  )zautosplit_train.txtzautosplit_val.txtzautosplit_test.txtc                 l    g | ]0}|z                                   |z                                  1S r   )r  unlink)r4   r   r1   s     r6   r   zautosplit.<locals>.<listcomp>  s>    ===Q$():):)<)<=dQh===r8   zAutosplitting images from z!, using *.txt labeled images onlyr_  r   r  
N)r   r9   r   r^   r  r0  r   r
   rj  r8  r   r  r  write)
r1   r  annotated_onlyr:   r   ru  r1  r   rE   r5   s
   `         r6   	autosplitr    s    ::DMMMMMMMrRREE

AnYYY1===G
L
L
LC====#====	
-t
-
-0SVd0d
deees7E**!444 ) )3 	)os3xxj&A&A!&D!E!E!L!L!N!N 	)dSVmS)) )QC4((() ) ) ) ) ) ) ) ) ) ) ) ) ) )) )s   &D77D;	>D;	c                 <    d| j         |         z   }| j        |         S )Nz/work/handsomejw66/coco17/)rO  segs)r~   r%  keys      r6   load_segmentationsr  $  s!    
&)>
>C 9S>r8   )NFFrI   FrJ   r>   r?   FFrK   )r  r  r  )TF)r  )rr  rs  TFTr   )r   r   r  r  r  r  rI   r  )r   r  r  r  )r  )r  )r  )r  r  F)ar   r  r  r0   r  r  r#  	itertoolsr   multiprocessing.poolr   pathlibr   	threadingr   r   numpyr   r`   torch.nn.functionalnn
functionalr  PILr   r   torch.utils.datar	   r
   pickler,  r   torchvision.utilsr   torchvision.opsr   r   r   r   utils.generalr   r   r   r   r   r   r   r   r   utils.torch_utilsr   rf  r   r   	getLoggerr   loggerTAGSrp  rD   r;   rH   rs   ra   rb   rr   re   rf   ry   r{   r   r   r   r8  r[   r]  r  r  r  r  r  r+  ri  rS  rq  r   r  r  r\  r  r  r  r  r  r  r  r  r   r8   r6   <module>r0     s      				          + + + + + +             



                       $ $ $ $ $ $              ( ( ( ( ( ( J J J J J J J J J J J J! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! ! : : : : : : JPPPGGG		8	$	$ =%%''  K}[!]22 3G G G
   qv`b   :& & & & &)4? & & &&* * * * *V * * *M M M M M M M M`7 7 7 7 7 7 7 7tN N N N N N N Nb] ] ]uJ uJ uJ uJ uJ' uJ uJ uJr	I I I"6 6 6 6N N N N8 8 8vI I IX06 06 06f! ! ! !0% % %"6 6 6 6@  "       B ps$V V V Vrb b b b" " "&  87 7 7r       2   : : : : `  `  `  `F) ) ) ).    r8   