
    "f                     d   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jl                  e7      Z8ejr                  ju                         D ]  Z;ejr                  e;   dk(  s n d Z<d Z=	 	 d9dZ> G d dej~                  j                  j                  j                        ZC G d deD      ZE G d d      ZF G d d      ZG G d d      ZHd ZI G d  d!e      ZJd" ZKd:d#ZLd;d$ZMd% ZNd& ZOd' ZPd<d(ZQd) ZRd<d*ZSd+ ZTd=d,ZU	 	 d>d-ZVd?d.ZWd/ ZXd0 ZYd1 ZZ G d2 d3      Z[d@d4Z\dAd5Z]dBd6Z^dCd7Z_d8 Z`y)D    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                 &    t        d | D              S )Nc              3      K   | ]C  }t         j                  j                  |      s#t         j                  j                  |       E y wN)ospathisfilegetsize).0fs     2C:\work2\python\work_new2\yolov7\utils\datasets.py	<genexpr>zget_hash.<locals>.<genexpr>/   s-     F5aBGGNN14Erwwq!5s
   $A$A)sum)filess    r6   get_hashr:   -   s    F5FFF    c                     | j                   }	 t        | j                         j                               t           }|dk(  r|d   |d   f}|S |dk(  r
|d   |d   f}|S #  Y |S xY w)N      r      )sizedict_getexifitemsorientation)imgsrotations      r6   	exif_sizerH   2   s}    A,,./<q=1qtA H ]1qtA HHs   =A A A#c                 D   t        |
      5  t        | |||||	||j                  t        |      |||      }d d d        t	        |t                    }t	        t        j                         |z  |dkD  r|nd|g      }|
dk7  r3t        j                  j                  j                  j                  |      nd }|r$t        j                  j                  j                  nt        } |||||d|rt        j                  nt        j                         }||fS # 1 sw Y   xY w)N)	augmenthyprectcache_images
single_clsstridepadimage_weightsprefixr>   r   T)
batch_sizenum_workerssampler
pin_memory
collate_fn)r   LoadImagesAndLabelsrN   intminlenr0   	cpu_counttorchutilsdatadistributedDistributedSampler
DataLoaderInfiniteDataLoadercollate_fn4rX   )r1   imgszrT   rO   optrK   rJ   cacherP   rL   rank
world_sizeworkersrQ   quadrR   datasetnwrV   loader
dataloaders                        r6   create_dataloaderrq   A   s    
&d	+%dE:.5*-+/3814-0[*-4A-3	5 
, ZW.J	blln
**q.JaQXY	ZBJNRT*ekk**==gFZ^G,9U[[((?QF#-$& '#'FJ#6#B#BPcPnPnpJ w/ 
,	+s   +DDc                   .     e Zd ZdZ fdZd Zd Z xZS )rd   zP Dataloader that reuses workers

    Uses same syntax as vanilla DataLoader
    c                     t        |   |i | t        j                  | dt	        | j
                               t         |          | _        y )Nbatch_sampler)super__init__object__setattr___RepeatSamplerrt   __iter__iterator)selfargskwargs	__class__s      r6   rv   zInfiniteDataLoader.__init__d   sA    $)&)4.ASAS2TU(*r;   c                 @    t        | j                  j                        S r/   )r\   rt   rV   r|   s    r6   __len__zInfiniteDataLoader.__len__i   s    4%%--..r;   c              #   l   K   t        t        |             D ]  }t        | j                          y wr/   )ranger\   nextr{   )r|   is     r6   rz   zInfiniteDataLoader.__iter__l   s(     s4y!At}}%% "s   24)__name__
__module____qualname____doc__rv   r   rz   __classcell__)r   s   @r6   rd   rd   ^   s    
+
/&r;   rd   c                       e Zd ZdZd Zd Zy)ry   zG Sampler that repeats forever

    Args:
        sampler (Sampler)
    c                     || _         y r/   )rV   )r|   rV   s     r6   rv   z_RepeatSampler.__init__x   s	    r;   c              #   L   K   	 t        | j                        E d {    7 wr/   )iterrV   r   s    r6   rz   z_RepeatSampler.__iter__{   s#     DLL))) )s   $"$N)r   r   r   r   rv   rz    r;   r6   ry   ry   q   s    *r;   ry   c                   ,    e Zd ZddZd Zd Zd Zd Zy)
LoadImagesc                    t        t        |      j                               }d|v r!t        t	        j                  |d            }nt
        j                  j                  |      r=t        t	        j                  t
        j                  j                  |d                  }n2t
        j                  j                  |      r|g}nt        d| d      |D cg c]-  }|j                  d      d   j                         t        v s,|/ }}|D cg c]-  }|j                  d      d   j                         t        v s,|/ }}t        |      t        |      }
}	|| _        || _        ||z   | _        |	|
z   | _        d	g|	z  dg|
z  z   | _        d
| _        t-        |      r| j/                  |d          nd | _        | j&                  dkD  sJ d| dt         dt                y c c}w c c}w )N*T	recursive*.*zERROR:  does not exist.rS   Fimager   zNo images or videos found in z!. Supported formats are:
images: z	
videos: )strr   absolutesortedglobr0   r1   isdirjoinr2   	Exceptionsplitlowerimg_formatsvid_formatsr\   img_sizerO   r9   nf
video_flagmodeany	new_videocap)r|   r1   r   rO   pr9   ximagesvideosninvs              r6   rv   zLoadImages.__init__   s   T
##%&!8499Q$78EWW]]1499RWW\\!U%;<=EWW^^ACEgaS899"NUaggcl2&6&<&<&>+&M!UN"NUaggcl2&6&<&<&>+&M!UNVc&kB f_
r' 'B,$"4	v;NN6!9%DHww{ 	d;A3 ???Jm:VaUbd 	d{ ONs   -G&G&-G+ G+c                     d| _         | S Nr   countr   s    r6   rz   zLoadImages.__iter__   s    
r;   c                    | j                   | j                  k(  rt        | j                  | j                      }| j                  | j                      rd| _        | j                  j                         \  }}|s| xj                   dz  c_         | j                  j                          | j                   | j                  k(  rt        | j                  | j                      }| j                  |       | j                  j                         \  }}| xj                  dz  c_
        t        d| j                   dz    d| j                   d| j                   d| j                   d| dd	       n6| xj                   dz  c_         t        j                  |      }|
J d
|z          t        || j                   | j"                        d   }|d d d d d d df   j%                  ddd      }t'        j(                  |      }|||| j                  fS )Nvideor>   zvideo /z (z) :  endImage Not Found rO   r   rS      )r   r   StopIterationr9   r   r   r   readreleaser   frameprintnframescv2imread	letterboxr   rO   	transposenpascontiguousarray)r|   r1   ret_valimg0rE   s        r6   __next__zLoadImages.__next__   s   :: zz$**%??4::&DI HHMMOMGT

a
  "::(''::djj1DNN4($(HHMMOMGTJJ!OJF4::>*!DGG9Btzzl!DLL>QSTXSYY[\bde JJ!OJ::d#D#>%7$%>># dmmDKK@C !Q"*o''1a0""3'S$((r;   c                     d| _         t        j                  |      | _        t	        | j                  j                  t        j                              | _        y r   )r   r   VideoCapturer   rZ   getCAP_PROP_FRAME_COUNTr   )r|   r1   s     r6   r   zLoadImages.new_video   s:    
##D)488<<(@(@ABr;   c                     | j                   S r/   )r   r   s    r6   r   zLoadImages.__len__   s    wwr;   N)      )r   r   r   rv   rz   r   r   r   r   r;   r6   r   r      s    d8$)LC
r;   r   c                   &    e Zd ZddZd Zd Zd Zy)
LoadWebcamc                     || _         || _        |j                         rt        |      }|| _        t        j                  |      | _        | j                  j                  t
        j                  d       y )N   )
r   rO   	isnumericevalpiper   r   r   setCAP_PROP_BUFFERSIZE)r|   r   r   rO   s       r6   rv   zLoadWebcam.__init__   sV     >>:D
 	##D)S,,a0r;   c                     d| _         | S NrS   r   r   s    r6   rz   zLoadWebcam.__iter__       
r;   c                    | xj                   dz  c_         t        j                  d      t        d      k(  r4| j                  j                          t        j                          t        | j                  dk(  r4| j                  j                         \  }}t        j                  |d      }nKd}	 |dz  }| j                  j                          |dz  dk(  r | j                  j                         \  }}|rnH|sJ d| j                          d}t        d| j                    dd	
       t        || j                  | j                         d   }|d d d d d d df   j#                  ddd      }t%        j&                  |      }|||d fS )Nr>   qr      zCamera Error z
webcam.jpgzwebcam r   r   r   r   rS   r   )r   r   waitKeyordr   r   destroyAllWindowsr   r   r   flipgrabretriever   r   r   rO   r   r   r   )r|   r   r   nimg_pathrE   s         r6   r   zLoadWebcam.__next__   sU   

a
;;q>SX%HH!!# 99> HHMMOMGT88D!$DAQr6Q;$(HH$5$5$7MGT  3-		{33w

|2&B/ dmmDKK@C !Q"*o''1a0""3'dD((r;   c                      yr   r   r   s    r6   r   zLoadWebcam.__len__      r;   N)0r   r   )r   r   r   rv   rz   r   r   r   r;   r6   r   r      s    1!)Fr;   r   c                   ,    e Zd ZddZd Zd Zd Zd Zy)LoadStreamsc           
         d| _         || _        || _        t        j                  j                  |      rwt        |d      5 }|j                         j                         j                         D cg c],  }t        |j                               s|j                         . }}d d d        n|g}t        |      }d g|z  | _        |D cg c]  }t        |       c}| _        t        |      D ]  \  }}t        |dz    d| d| dd       |j!                         rt#        |      n|}	d	t%        |	      v sd
t%        |	      v r:t'        d       dd l}
|
j+                  |	      j-                  d      j.                  }	t1        j2                  |	      }|j5                         s
J d|        t7        |j9                  t0        j:                              }t7        |j9                  t0        j<                              }|j9                  t0        j>                        dz  | _         |j                         \  }| j                  |<   tC        | jD                  ||gd      }t        d| d| d| j@                  dd       |jG                           t        d       tI        jJ                  | j                  D cg c]1  }tM        || j                  | j                        d   jN                  3 c}d      }tI        jP                  |d      jN                  d   dk(  | _)        | jR                  st        d       y y c c}w # 1 sw Y   xY wc c}w c c}w )Nstreamrr>   r   r   z... r   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).r   axiszcWARNING: Different stream shapes detected. For optimal performance supply similarly-shaped streams.)*r   r   rO   r0   r1   r2   openr   strip
splitlinesr\   imgsr   sources	enumerater   r   r   r   r   r   newgetbesturlr   r   isOpenedrZ   r   CAP_PROP_FRAME_WIDTHCAP_PROP_FRAME_HEIGHTCAP_PROP_FPSfpsr   updatestartr   stackr   shapeuniquerL   )r|   r  r   rO   r5   r   r   r   rF   r  r   r   wh_threads                   r6   rv   zLoadStreams.__init__  s   	 77>>'"gs#q./ffhnn.>.I.I.K^.KsSTSZSZS\~1779.K^ $# iGLFQJ	.56g	!g6g&DAqQUG1QCr!D)r2[[]$q'CS)[CH-D"#9:hhsm++U+;??""3'C<<>8_QC#88>CGGC4456ACGGC5567Awws//036DH!hhjOAtyy|4;;q#hMFJqc1#T$((3v>?LLN# '$ 	b	 HHX\XaXabXaSTi4==EaHNNXabdefIIaa(..q1Q6	yywx = _ $# 7, cs0   /M0L=L=!M	M:6M=MMc                 4   d}|j                         r|dz  }|j                          |dk(  r8|j                         \  }}|r|n| j                  |   dz  | j                  |<   d}t	        j
                  d| j                  z         |j                         ry y )Nr   r>      )r  r   r   r  timesleepr  )r|   indexr   r   successims         r6   r  zLoadStreams.update3  s|    llnFAHHJAv!lln)02dii6F6J		% JJq488|$ llnr;   c                     d| _         | S r   r   r   s    r6   rz   zLoadStreams.__iter__@  r   r;   c           	         | xj                   dz  c_         | j                  j                         }t        j                  d      t        d      k(  rt        j                          t        |D cg c]2  }t        || j                  | j                  | j                        d   4 }}t        j                  |d      }|d d d d d d d d df   j                  dddd      }t        j                  |      }| j                   ||d fS c c}w )Nr>   r   )autorO   r   rS   r   r   )r   r  copyr   r   r   r   r   r   r   rL   rO   r   r  r   r   r  )r|   r   r   rE   s       r6   r   zLoadStreams.__next__D  s    

a
yy~~;;q>SX%!!# \``[_VWyDMM		$++NqQ[_` hhsA !Q4R4- **1aA6""3'||S$,, as   /7Dc                      yr   r   r   s    r6   r   zLoadStreams.__len__W  r   r;   N)zstreams.txtr   r   )r   r   r   rv   r  rz   r   r   r   r;   r6   r   r   
  s    &yP%-&r;   r   c           
      @   t         j                  dz   t         j                  z   t         j                  dz   t         j                  z   }}| D cg c]F  }dj                  |j                  ||d      j	                  |j                  d      d   d            H c}S c c}w )Nr   labelstxtr>   r   rS   )r0   sepr   replacersplitr   )	img_pathssasbr   s       r6   img2label_pathsr*  [  sy    VVh'():RVV)CBR[\R[QEJJqyyR+221773<3CQGHR[\\\s   ABc                   \    e Zd Z	 	 d
dZ ed      dfdZd Zd Zed        Z	ed	        Z
y)rY   Nr   c                    || _         || _        || _        || _        |rdn|| _        | j                  xr | j                   | _        | dz  | dz  g| _        |
| _        || _        	 g }t        |t              r|n|gD ]  }t        |      }|j                         r*|t        j                  t        |dz  dz        d      z  }I|j                         rt!        |d      5 }|j#                         j%                         j'                         }t        |j(                        t*        j,                  z   }||D cg c]'  }|j/                  d      r|j1                  d|      n|) c}z  }d d d        t3        | | d	       t5        |D cg c]K  }|j7                  d
      d   j9                         t:        v s,|j1                  dt*        j,                        M c}      | _        | j<                  s
J | d       	 tA        | j<                        | _!        j                         r|n!t        | jB                  d         j(                  jE                  d      }|j                         rtG        jH                  |      d}}n| jK                  ||      d}}|jM                  d      \  }}}}}|r$d| d| d| d| d| d}tO        d ||z   ||       |dkD  s|rJ | d| dt>                |jM                  d       |jM                  d       tQ        |jS                          \  }}| _*        t        |      | _+        tY        jZ                  |tX        j\                        | _/        t        |ja                               | _        tA        |ja                               | _!        |	r| jV                  D ]  }d|d d df<    tc        |      }tY        jd                  tY        jf                  |      |z        ji                  tj              }|d   d z   }|| _6        || _7        tq        |      | _9        | j                  rM| j^                  } | d d d f   | d d df   z  }!|!ju                         }"|"D #cg c]  }#| j<                  |#    c}#| _        |"D #cg c]  }#| jB                  |#    c}#| _!        |"D #cg c]  }#| jV                  |#    c}#| _+        | |"   | _/        |!|"   }!d d gg|z  }tq        |      D ]G  }#|!||#k(     }$|$jw                         |$jy                         }&}%|&d k  r|&d g||#<   8|%d kD  s>d d |%z  g||#<   I tY        jz                  tY        jZ                  |      |z  |
z  |z         ji                  tj              |
z  | _>        d g|z  | _?        |r|d!k(  rt        t        | j<                  d         j(                  j                         d"z         | _A        | j<                  D cg c]3  }| j                  t        |      jE                  d#      j                  z  5 c}| _C        | j                  j                  dd$       d}'d g|z  d g|z  c| _E        | _F        t        d%      j                  d& tQ        t        |       tq        |                  }(tO        t        |(      |'      })|)D ]  \  }#}|d!k(  r|| j                  |#   j                         s4tY        j                  | j                  |#   j                         |d          |'| j                  |#   j                         j                  z  }'nI|\  | j~                  |#<   | j                  |#<   | j                  |#<   |'| j~                  |#   j                  z  }'| d(|'d)z  d*d+|)_P         |)j                          y y c c}w # 1 sw Y   <xY wc c}w # t2        $ r}t3        | d| d| dt>               d }~ww xY wc c}#w c c}#w c c}#w c c}w ),NFr   z**r   Tr   r   z./r   r   rS   r   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dtyper>   disk_npyz.npy)parentsexist_okr?   c                     t        |  S r/   )
load_image)r   s    r6   <lambda>z.LoadImagesAndLabels.__init__.<locals>.<lambda>  s    :q>r;   r5  zCaching images (g    eAz.1fzGB))Rr   rJ   rK   rQ   rL   mosaicmosaic_borderrO   r1   
isinstancelistr   is_dirr   r   is_filer   r   r   r   parentr0   r$  
startswithr%  r   r   r   r   r   	img_fileshelp_urlr*  label_fileswith_suffixr^   loadcache_labelspopr
   zipvaluessegmentsr"  r   arrayfloat64shapeskeysr\   floorarangeastyperZ   batchr   r   indicesargsortr[   maxceilbatch_shapesr  as_posixim_cache_dirnameimg_npymkdirimg_hw0img_hwr   imapr   r  existssavestatst_sizenbytesr4  close)*r|   r1   r   rT   rJ   rK   rL   rQ   rM   rN   rO   rP   rR   r5   r   trI  r   e
cache_pathrh   rj  r   nmnencr   dr"  rW  binbrF   arirectr   ariminimaxigbr-  pbars*                                             r6   rv   zLoadImagesAndLabels.__init__b  s4    **E	ll4499}'i1nxi1n=		\A'd3T$?G88:3q4x%'7#8DIIAYY[aFFHNN,779!$QXX!7\]^\]WXd9Kaiif5QRR\]^^ & $vhqc$ABB @ $Q$rQ!''RU,WYJZJ`J`JbfqJqQYYsBFF%;Q$rsDN>>=fX_#==>
 +4>>:99;aD1A1A!1D,E,L,LYYZbc
!JJz2D6E !--j&A56E "IIi0BBZL(?t8B4zZ\Y]]efheiistAFQJa;AvWxj\Imnvmw&xx$ 			&		)(+U\\^(<%6lhhvRZZ8ejjl+*5::<8[[!Q$ ! KXXbiilZ/077<VaZ
Qx 99A1a41QT7"BJJLE9>?AdnnQ/?DN=BCU 0 0 3UCD3895a4;;q>59DKE(DKEB !fX]F2Yqk WWY	d!8!%q	F1IAX!"AHF1I  !#(88(Cf(Ls(R S Z Z[^ _bh hD FQJ	v%$(dnnQ.?)@)G)G)P)P)RU[)[$\!^b^l^lm^lYZ 1 1DG4G4G4O4T4T T^lm!!''t'DB)-
TFQJ%DL$+ m(()A3vd|UZ[\U]C^_G	'*!4D16)<<?113Q 8 8 :AaDA$,,q/..0888BDEADIIaL$,,q/4;;q>$))A,---B%h&6rCxnCH	  JJL% Q _ & %s  	\vh&>tfBqcPXzZ[[	\Z @C9*  nsn   (A<_ $A^1<,^,
(^1-#_ -^>>"^> "_ 5_._39_818_=,^11^;	6_ 	_+_&&_+z./labels.cachec                    i }d\  }}}}t        t        | j                  | j                        dt	        | j                              }t        |      D ],  \  }	\  }
}	 t        j                  |
      }|j                          t        |      }g }|d   dkD  |d   dkD  z  sJ d| d       |j                  j                         t        v sJ d	|j                          t        j                  j                  |      r|dz  }t        |d
      5 }|j!                         j#                         j%                         D cg c]  }|j'                          }}t)        |D cg c]  }t	        |      dkD   c}      rt+        j,                  |D cg c]  }|d   	 c}t*        j.                        }|D cg c]:  }t+        j,                  |dd  t*        j.                        j1                  dd      < }}t+        j2                  |j1                  dd      t5        |      fd      }t+        j,                  |t*        j.                        }d d d        t	              r|j6                  d   dk(  sJ d       |dk\  j9                         sJ d       |d d dd f   dk  j9                         sJ d       t+        j:                  |d      j6                  d   |j6                  d   k(  s\J d       |dz  }t+        j<                  dt*        j.                        }n*|dz  }t+        j<                  dt*        j.                        }|||g|
<   | d|jB                  |jD                  z   d| d| d| d| d|_#        / |jI                          |dk(  rtA        | d| dtJ                tM        | j                  | j                  z         d <   ||||	dz   f|d!<   d"|d#<   tO        jP                  ||       tS        jT                  | d$|        |S c c}w c c}w c c}w c c}w # 1 sw Y   xY w# t>        $ r#}|dz  }tA        | d|
 d|        Y d }~d }~ww xY w)%N)r   r   r   r   zScanning images)r4  r5  r   	   r>   zimage size z <10 pixelszinvalid image format r   r?   r9  rS   r      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   r.  r/  r0  r1  r2  r3  zWARNING: No labels found in z. See r7  r-  皙?r8  zNew cache created: )+r
   rR  rK  rM  r\   r  r   r   verifyrH   formatr   r   r0   r1   r2   r   r   r   r   r   r   rU  float32reshapeconcatenater   r  allr  zerosr   r   rI  stemr4  ro  rL  r:   r^   rk  logginginfo)r|   r1   rR   r   rs  r   rt  ru  r  r   im_filelb_filer  r  rT  r5   lclassesrq  s                      r6   rP  z LoadImagesAndLabels.cache_labels  s   #BBC(8(89@QY\]a]k]kYlm%.t_!A!!`ZZ(		!"a1qA6X+eWK8XX6yy(K7\;PQSQZQZP[9\\7 77>>'*!GBgs+q010@0K0K0MN0M1QWWY0MNA6AqA
A67&(hha/@a!a/@

&SGbc'dbc]^12bjj(I(Q(QRTVW(XbcH'd "A0FW_H`/acd eAHHQbjj9 , 1v wwqzQO0OO !Q||~@/@@~ !!QR%A224i6ii4!yy399!<
J^L^^JaHHV2::>!GBrzz:A1'

 "(*T[[499-D,EE\$hrd*RDJPDII &5L 	

7VH8fXJOPT-->?&	2r2q1u,))

1dx24&9:E O6/@'d	 ,+&  `a OPWyXZ[\Z]^__`si   B3P:/P-PP-#P8P-P#P-9?P(8AP-DP:P--P7	2P::	Q&Q!!Q&c                 ,    t        | j                        S r/   )r\   rK  r   s    r6   r   zLoadImagesAndLabels.__len__  s    4>>""r;   c           
      	   | j                   |   }| j                  }| j                  xr t        j                         |d   k  }|rAt        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
              \  }}n9t        | t        j                  dt        | j                        dz
              \  }}t        j                  j                  dd      }	||	z  |d|	z
  z  z   j                  t        j                        }t        j                  ||fd      }nt        | |      \  }\  }
}\  }}| j                  r| j                   | j"                  |      n| j$                  }t'        ||d| j(                        \  }}}|
|f||
z  ||z  f|ff}| j                  |   j+                         }|j,                  r4t/        |d d dd f   |d   |z  |d   |z  |d   |d   	      |d d dd f<   | j(                  r|s$t1        |||d
   |d   |d   |d   |d         \  }}t3        ||d   |d   |d          t        j                         |d   k  rg g g }}}t        |      dk  rgt5        | t        j                  dt        | j                        dz
              \  }}}||z  }||z  }||z  }t        |      dk(  rnt        |      dk  rgt7        |||||      }t        |      }|r]t9        |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        jB                  |df      }|rtA        jD                  |      |d d dd f<   |d d d d d d df   jG                  ddd      }t        jH                  |      }tA        jD                  |      || jJ                  |   |fS )NrC  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=   rS   )&r]  rK   rC  randomload_mosaicload_mosaic9randintr\   r"  r   betar[  uint8r  r@  rL   ra  r\  r   r   rJ   r  r@   r   random_perspectiveaugment_hsvload_samplespasteinr   r  r  r  r^   r  
from_numpyr   r   rK  )r|   r  rK   rC  rE   r"  rW  img2labels2r   h0w0r  r  r  ratiorP   sample_labelssample_imagessample_maskssample_labels_sample_images_sample_masks_nL
labels_outs                            r6   __getitem__zLoadImagesAndLabels.__getitem__  s   U#hh@3x=!@}}$)$6V*47VF }}W-==?S($/fnnQDKKHX[\H\6]$^MD'$0v~~aT[[IY\]I]7^$_MD'IINN3,QwQ/77A(91= %/tU$;!C"b6Aq =AIID%%djj&784==E'UUOC"XRR 0#66F[[',,.F{{ *6!QR%=%(Q,aST[^_`[ahklmhn oq!"u<<0f9<Y;>{;K7:7|7:7|=@=OQV 3w<s7|3w<X }}Z0=?Rl}-(2-DPQUW]WeWefgilmqmxmxiy|}i}W~DANNM!^3M!^3M M1L=)Q. -(2- !fm]LY[&va1f~6F1ac6N1q!f91-1q!f91-<<}}X.iin#$vad|#3F1a4L }}X.iin#$vad|#3F1a4L[["a)
 % 0 0 8Jq!"u !Q"*o''1a0""3'$j$..2GOOr;   c                     t        |  \  }}}}t        |      D ]  \  }}||d d df<    t        j                  |d      t        j                  |d      ||fS r   )rR  r  r^   r  cat)r\  rE   labelr1   rW  r   r  s          r6   rX   zLoadImagesAndLabels.collate_fnw  sY    #&; UD&e$DAqAadG %{{3"EIIeQ$7vEEr;   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 ]:  }|dz  }t        j
                         dk  rbt        j                  ||   j                  d      j                         ddd	
      d   j                  ||   j                               }||   }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  }|j                  |       |j                  |       = t        |      D ]  \  }}||d d df<    t        j                  |d      t        j                  |d      ||	fS )Nr  )        r   r   r>   r   r   )r  r   r>   r   r   r   )r>   r>         ?r  r  r  r  r          @bilinearF)scale_factorr   align_cornersr>   r   r   )rR  r\   r^   tensorr   r  Finterpolate	unsqueezefloattyper  appendr  r  )r\  rE   r  r1   rW  r   img4label4path4shapes4howorF   r   r  r  s                   r6   re   zLoadImagesAndLabels.collate_fn4~  s   #&; UD&K1')2tBQx'C$feW\\./0\\./0LL012qAFA}}$]]3q6#3#3A#6#<#<#>RV`puvtCFKKM* !HYY		3q63q1u:*> BEIIsSTWXSXz[^_`cd_d[eNfhiDjkmnoIIuQxq1u):E!a%L2<MuUVYZUZ|^`O`ceOefhijmnnKKOMM!  f%DAqAadG & {{4#UYYvq%95'IIr;   )r      FNFFFFr   r  r   )r   r   r   rv   r   rP  r   r  staticmethodrX   re   r   r;   r6   rY   rY   a  s[    mrRTrh !%%5 6r 5n#_PB F F J Jr;   rY   c                 *   | j                   |   }|| j                  |   }t        j                  |      }|
J d|z          |j                  d d \  }}| j
                  t        ||      z  }|dk7  rc|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  rK  r   r   r  r   r_  rJ   
INTER_AREAINTER_LINEARresizerZ   rg  rh  )r|   r  rE   r1   r  r  r   interps           r6   r@  r@    s    
))E
C
{~~e$jj9 2T 992ABMMCBK'6'(1uT\\S^^sGWGWF**S3rAv;BF"<FSCRHciim++yye!4dkk%6HHHr;   c                 (   t         j                  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  j                  |      }
t        j                  |	|d   z  dd      j                  |      }t        j                  |	|d	   z  dd      j                  |      }t        j                  t        j                  ||
      t        j                  ||      t        j                  ||      f      j                  |      }t        j
                  |t        j                  | 
       y )NrS   r>   r   r      r9        r   )dst)r   r  uniformr   r   cvtColorCOLOR_BGR2HSVr:  rZ  int16r[  clipmergeLUTCOLOR_HSV2BGR)rE   r  r  r  r   huesatvalr:  r   lut_huelut_satlut_valimg_hsvs                 r6   r  r    s/   
		"a#ueU&;;a?AIIcll30A0ABCMCcIIE
		!S)AAaDC''.Ggga!A$h3'..u5Ggga!A$h3'..u5Giig.W0EswwsT[G\]^eefklGLL#++5r;   c                    t        j                  | |rt         j                  nt         j                        }|r=t        j                  dd      }|j                  |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                        S 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C--#:K:K
LCOOc?wws1a7|,Aq!G''Aq!G5Aq!G<<#S..MM3;L;LMMr;   c                 F   g g }}| j                   }| j                  D cg c](  }t        t        j                  | d|z  |z               * c}\  }}|gt        j
                  | j                  d      z   }t        |      D ]G  \  }	}t        | |      \  }
}\  }}|	dk(  ryt        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(  rG|t        ||z
  d      t        ||z   |dz        |f\  }}}}d|||z
  z
  t        |||z
        |f\  }}}}n|	dk(  rGt        ||z
  d      ||t        |dz  ||z         f\  }}}}|||z
  z
  d|t        ||z
  |      f\  }}}}nU|	dk(  rP||t        ||z   |dz        t        |dz  ||z         f\  }}}}ddt        |||z
        t        ||z
  |      f\  }}}}|
f   f<   ||z
  }||z
  }| j                  |   j!                         | j"                  |   j!                         }}|j$                  r=t'        |d d dd f   ||||      |d d dd f<   |D cg c]  }t)        |||||       }}|j+                  |       |j-                  |       J t        j.                  |d      }|d d dd f   g|D ]  }t        j0                  |dd|z  |         t3        ||| j4                  d	   
      \  }}}t7        |||| j4                  d   | j4                  d   | j4                  d   | j4                  d   | j4                  d   | j                  	      \  }}||fS c c}w c c}w )Nr   r   kr   r   r9  r>   out
copy_pasteprobabilityr  r  r  r  r  r  r  r  r  r  border)r   rD  rZ   r  r  choicesr]  r  r@  r   fullr  r  r_  r[   r"  r  rT  r@   r   r   r  extendr  r  r  rK   r  )r|   r  labels4	segments4rF   r   ycxcr]  r   rE   r  r  r  r  x1ay1ax2ay2ax1by1bx2by2br  r  r"  rT  s                              r6   r  r    s    RYGA:>:L:LM:LQc&..!QUQY/0:LMFBgt||q99Gg&5#D%0QA 677AE1q5#))A,7BHHMD!$R!VQR!VQR!GCc3!"cCi!sSy/1a!GCc3!V!#Sa^SaQ5G!KCc3!"AsOSC#I5F!ICc3!V!$R!VQRQUBF9K!KCc3!"cCi!QC#Iq8I!ICc3!V!#RR!VQU);SQQ=O!OCc3!"As1cCi'8#cCi:K!KCc3!$SWc#g%5!6SWc#gSySy  ;;u-224dmmE6J6O6O6Q;;&vae}aD$GF1ab5M=EFXq!Qd3XHFv"; '@ nnWa(Gaen)y)
1a!e# *  *$PTPXPXYePfgD'9&tWi/3xx	/B15+1F-1XXg->-1XXg->3788M3J.2.@.@BMD' =g N: Gs   -NNc                    g g }}| j                   }|gt        j                  | j                  d      z   }t	        |      D ],  \  }}t        | |      \  }}\  }	}
|dk(  rMt        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}nw|d
k(  r|z   |
z
  |z   ||z   ||z   |	z   f}nY|dk(  r|z   z
  |
z
  |z   ||z   |z
  ||z   |	z   f}n5|dk(  r||
z
  |z   |	z
  |||z   f}n|dk(  r||
z
  |z   z
  |	z
  |||z   |z
  f}d d \  }}|D cg c]  }t        |d       c}\  }}}}| j                  |   j                         | j                  |   j                         }}|j                  r=t        |d d dd f   |
|	||      |d d dd f<   |D cg c]  }t!        ||
|	||       }}|j#                  |       |j%                  |       |||z
  d ||z
  d f   ||||f<   |	|
}}/ | j&                  D cg c]!  }t)        t        j*                  d|            # c}\  }}||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      }|D cg c]  }||z
  	 }}|d d dd f   g|D ]  }t        j0                  |dd|z  |         t3        |||| j4                  d         \  }}}t7        |||| j4                  d   | j4                  d   | j4                  d   | j4                  d   | j4                  d   | j&                  	      \  }}||fS c c}w c c}w c c}w c c}w )Nr?   r  r   r   r   r  r9  r>   r  r  r=      r  r  r	  r  r  r  r  r  r  )r   r  r  r]  r  r@  r   r  r  r  r_  r"  r  rT  r@   r   r   r  r  rD  rZ   r  r  rU  r  r  rK   r  )r|   r  labels9	segments9rF   r]  r   rE   r  r  r  img9r  r  r   wphppadxpadyr   x1y1x2y2r"  rT  r  r  s                               r6   r  r    s    RYGAgt||q99Gg&5#D%0QA 677AE1q5#))A,7BHHMDB1a!eQU"A!V1q5!a%"A!VBAq2vz1,A!VB1r6A:q1u,A!VBBB
AFQJ6A!VB
AFAFAFQJ6A!VBaRR"a"fqj@A!VAq2vz1a"f,A!VAq2v{Q1r6B;6ArU
d-./Q#a)Q/BB  ;;u-224dmmE6J6O6O6Q;;&vae}aD$GF1ab5M=EFXq!Qd3XHFv" !dR$YZ!78RUBrE\ABO 'T 261C1CD1CAc&..A&'1CDFB2A:r"q1u*},-D nnWa(GA1vI"A1vI"
"bA )*	1Q	I*aen)y)
1a!e# *  *$PTPXPXYePfgD'9&tWi/3xx	/B15+1F-1XXg->-1XXg->3788M3J.2.@.@BMD' =Q 0 G E +s   OO"?&O'O,c                 j   g g }}| j                   }| j                  D cg c](  }t        t        j                  | d|z  |z               * c}\  }}|gt        j
                  | j                  d      z   }t        |      D ]G  \  }	}t        | |      \  }
}\  }}|	dk(  ryt        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(  rG|t        ||z
  d      t        ||z   |dz        |f\  }}}}d|||z
  z
  t        |||z
        |f\  }}}}n|	dk(  rGt        ||z
  d      ||t        |dz  ||z         f\  }}}}|||z
  z
  d|t        ||z
  |      f\  }}}}nU|	dk(  rP||t        ||z   |dz        t        |dz  ||z         f\  }}}}ddt        |||z
        t        ||z
  |      f\  }}}}|
f   f<   ||z
  }||z
  }| j                  |   j!                         | j"                  |   j!                         }}|j$                  r=t'        |d d dd f   ||||      |d d dd f<   |D cg c]  }t)        |||||       }}|j+                  |       |j-                  |       J t        j.                  |d      }|d d dd f   g|D ]  }t        j0                  |dd|z  |         t3        ||d	
      \  }}}|||fS c c}w c c}w )Nr   r   r  r   r  r9  r>   r  r  r	  )r   rD  rZ   r  r  r  r]  r  r@  r   r  r  r  r_  r[   r"  r  rT  r@   r   r   r  r  r  r  sample_segments)r|   r  r  r  rF   r   r  r  r]  r   rE   r  r  r  r  r  r  r  r  r  r  r  r  r  r  r"  rT  r  r  r  s                                 r6   r  r  K  s    RYGA:>:L:LM:LQc&..!QUQY/0:LMFBgt||q99Gg&5#D%0QA 677AE1q5#))A,7BHHMD!$R!VQR!VQR!GCc3!"cCi!sSy/1a!GCc3!V!#Sa^SaQ5G!KCc3!"AsOSC#I5F!ICc3!V!$R!VQRQUBF9K!KCc3!"cCi!QC#Iq8I!ICc3!V!#RR!VQU);SQQ=O!OCc3!"As1cCi'8#cCi:K!KCc3!$SWc#g%5!6SWc#gSySy  ;;u-224dmmE6J6O6O6Q;;&vae}aD$GF1ab5M=EFXq!Qd3XHFv"; '@ nnWa(Gaen)y)
1a!e# * 2AwPYgj1k.M=,-55W N: Gs   -L+L0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  j                         sNt        j                  ||
d   g|gfd      }|j                  t        j                  ||d d ddf   z
  |d d ddf   fd             t        j                  |||	   j                  t        j                         gd	d
t        j"                          t        j$                  | |      }t        j&                  |d      }|dkD  }||   | |<   | ||fS )Nr  r   r   r>   r  r  333333?r   rS   r  r  r  src1src2)r\   r  r   r  r  r  sampler   roundbbox_ioar  r  r  r   drawContoursr[  int32FILLEDbitwise_andr   )rE   r"  rT  r
  r   r  r  r   im_newjr  rF   boxioaresultr   s                   r6   r  r  ~  s   HAq))1a#))RXX.uQx5q+ABA!9hqkqAad(AaD!ad(AaD0C3q!A#v/Cd
!1Q4,#,(@!DAa1fIqAaCy/I1 MN  (1+*<*<RXX*F)G_^a^h^hi C c7&!$QJA  r;   c                    t        |      }| j                  \  }}}t        j                  | j                  t        j                        }t        j
                  | j                  t        j                        dz  }t        |      D ]n  }	t        j                  |||	   j                  t        j                        gddt        j                         t        j                  | |      }
|
dkD  }|
|   ||<   p |||fS )Nr  rS   r-  r.  r   )r\   r  r   r  r  onesr   r   r4  r[  r5  r6  r7  )rE   r"  rT  r   r  r  r   r8  img_newr9  r<  r   s               r6   remove_backgroundr@    s    HAiiGAq!XXcii*Fggcii*S0G1X(1+"4"4RXX">!?_VYV`V`ac7QJAY
  FH$$r;   c           	      V   t        |      }g }g }g }|r|r| j                  \  }}	}
t        j                  t	        |      t        ||z              D ]  }||   ||   }}|d   j                  t              j                  d|	dz
        |d   j                  t              j                  d|dz
        |d   j                  t              j                  d|	dz
        |d   j                  t              j                  d|dz
        f}|d   |d   k  s|d   |d   k  r|j                  |d          t        j                  | j                  t        j                        }t        j                  |||   j                  t        j                        gddt        j                          |j                  ||d   |d   |d   |d   d d f          t        j"                  | |	      }|dkD  }||   ||<   |j                  ||d   |d   |d   |d   d d f           |||fS )
Nr  r>   r   r   r   r  rS   r-  r.  )r\   r  r  r1  r   r2  r[  rZ   r  r  r   r  r  r   r4  r5  r6  r7  )rE   r"  rT  r
  r   r  r  r  r  r  r   r9  r  rF   r:  maskr<  r   s                     r6   r*  r*    s4   HAMMLq))1auQx5q+ABBA!9hqkqAA$++c"''!A#.!C0@0E0Ea!0LaPQdkkZ]N^NcNcdefghifiNjlmnolplwlwx{l|  mB  mB  CD  EF  GH  EH  mI  IC A#a& c!fA&6  1&88CIIrxx0DTHQK$6$6rxx$@#A2X[XbXbcSVCF]3q6#a&=%B CD__#D9F
AQiDG  c!fSVmCF3q6M!&C!DE' C* -55r;   c           	      D   | j                   d d \  }}|d d dd f   j                  t              }|j                  \  }}}}||z
  ||z
  z   dz  }	|	j	                         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  r[  rZ   Tr^  r2  r@   r  r  r   r  )rE   r"  r  r  boxesr%  r&  r'  r(  rF   r   r  r  r  r  bhbwr  r  r  r  r  r  s                          r6   	replicaterH    sL   99Ra=DAq1ab5M  %EWWNBB
r'b2g	!#AYY[-%-."1XS#ssC#IBV^^Aq2v./V^^Aq2v5N1OB "b2grBw7S#s #CGSW$4 5CGSW6VAqD\3S#$F#GaP / ;r;   c           	      x   | 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                  ||      }}n'|r%d\  }}|d   |d   f}
|d   |d   z  |d   |d   z  f}	|dz  }|dz  }|d d d   |
k7  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>         ?)r  r  rS   r  r  )value)r  rE  rZ   r[   r2  r   modr   r  r  copyMakeBorderBORDER_CONSTANT)rE   	new_shapecolorr  	scaleFillr  rO   r  r   r  	new_unpaddwdhtopbottomleftrights                    r6   r   r     s   IIbqME)S!	*	 	IaL58#Yq\E!H%<=A3K qDEE%(Q,'(#eE!HqL.A*BBIq\IaL()A,1*EBF#RVVB%7B	Bq\9Q<0	!uQx'1a)@@!GB!GBTrT{ijjis7G7GHeBHo&E"s(O(<CeBHo&E"s(O(<%D


S#vtUC<O<OW\
]CBxr;   c	                 	   | 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k7  s.|d   dk7  s&|t        j                  d      k7  j                         r<|rt        j                  | ||
|	fd      } nt        j                  | |d d |
|	fd      } t        |      }|rOt        d |D              }t        j                  |df      }|rt        |      }t!        |      D ]s  \  }}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'        ||
|	      ||<   u nQt        j"                  |dz  df      }|d d g df   j)                  |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   j)                  |d      }|d d g df   }|d d g df   }t        j*                  |j-                  d      |j-                  d      |j/                  d      |j/                  d      f      j)                  d|      j$                  }|d d ddgf   j1                  d|
      |d d ddgf<   |d d ddgf   j1                  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   r   )anglecenterr  r  )r   r>   )r>   r   r  r  r  r  )dsizeborderValuec              3   <   K   | ]  }|j                           y wr/   )r   )r4   r   s     r6   r7   z%random_perspective.<locals>.<genexpr>.  s     5Hq1557Hs   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  r>  rD  r   r  r  r[   r_  r  box_candidates)rE   targetsrT  r  r  r  r  r  r  heightwidthCPRarF   SrD  Mr   use_segmentsr  r   segmentxyr   ys                              r6   r  r    s   
 YYq\F1IM)FIIaL6!9q=(E 	q	Ayy|maAdGyy|maAdG 	q	Annk\;7AdGnnk\;7AdG 	q	Ax)Aq5y#+.A##!F!DAbqE 	q	Ahhv~~ufe4tww>DEAdGhhv~~ufe4tww>DEAdG 	q	AnnS9_cIo>FAdGnnS9_cIo>GAdG 	
A	AAq	QF1INRVVAY/C/C/E%%c1UFOQ`aC..aeE6?P_`C 	GA5H55hh1v(2H'1
7WWc'lA./#1bqb5	!##X/:R2A2YAqsF+1bqb5	 %R7A 2 !a%$B#; ;<DDQUANBq"1"uIaccB,7"QU)bAaCj(R2A2YOOPQSTUB 1l?#A1l?#A..!%%(AEE!HaeeAha!IJRRSTVWXZZC !QF^00E:CAq6	N QF^00F;CAq6	N 1Q3 1 1A 5CEET`Dfjk!*a&1Q3<r;   c                     | d   | d   z
  | d   | d   z
  }}|d   |d   z
  |d   |d   z
  }	}t        j                  ||	|z   z  |	||z   z        }
||kD  |	|kD  z  ||	z  ||z  |z   z  |kD  z  |
|k  z  S )Nr   r   r   r>   )r   maximum)rb  rc  wh_thrar_thrrd  epsw1h1w2h2ry  s              r6   rl  rl  R  s    !WtAwQ$q' 1B!WtAwQ$q' 1B	B"s(OR28_	5BKBK(BGrBw},E,PQUWZ`U`aar;   c                    |j                         }| d   | d   | d   | d   f\  }}}}|d   |d   |d   |d   f\  }}}}	t        j                  ||      t        j                  ||      z
  j	                  d      t        j                  ||	      t        j                  ||      z
  j	                  d      z  }
||z
  |	|z
  z  dz   }|
|z  S )Nr   r>   r   r   缉ؗҜ<)r   r   minimumr{  r  )rb  rc  b1_x1b1_y1b1_x2b1_y2b2_x1b2_y1b2_x2b2_y2
inter_area	box2_areas               r6   r3  r3  Z  s    >>D "&a$q'47DG!CE5%!%a$q'47DG!CE5% **UE*RZZu-EEKKAN**UE*RZZu-EEKKANOJ 55=1E9I 	!!r;   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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        d      D cg c]  }t        j                  dd       c}| |	|||
f<   t        |      s|dkD  st        j                  ||	|
|gt        j                        }t        ||d d ddf         }||dk     }B |S c c}w )Nr   r  r>         ?      ?r        ?r?   g      ?r  r   r   @      gQ?r9  r  g333333?)r  r  r  rZ   r_  r[   r   r\   r   rU  r  r3  )r   r"  r  r  scalesrF   mask_hmask_wxminyminxmaxymaxr  r:  r;  s                  r6   cutoutr  m  s   ;;r?DAq UQY$!#ugk1VHqL@G9r>QF3q1u:.3q1u:. 1fnnQ*Vq[891fnnQ*Vq[891dVm$1dVm$ INa&Q1v~~b#'>&Qd4id"# v;1t8((D$d32::FC3q!A#v/CC$J'F# & M 'Rs   6E<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  j                         s>t        |      sK||dz   kD  sU||dz   kD  s_t        j                  dt        |      d
z
        }||   j                   \  }}}t        ||z
  |z  ||z
  |z        }t        ||z        }t        ||z        }|dkD  s|dkD  st        j                  ||   ||f      }t        j                  ||   ||f      }| |||z   |||z   f   }|dkD  }|j                  t        j                         j#                         dkD  sT||   ||<   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   r9  r  r,     
   <   )r  r  r  rZ   r_  r[   r   rU  r  r\   r3  r  r  r   r  r[  r5  r8   r  )r   r"  r  r  r  r  r  r  rF   r  r  r  r  r  r  r:  r;  sel_indhswscsr_scaler_wr_hr_maskr_image	temp_cropm_inds                               r6   r  r    s   ;;r?DAq VaZ3%!)#tfqj0E7Q;>&AMF==?S 3q1u:.3q1u:. 1fnnQ*Vq[891fnnQ*Vq[891dVm$1dVm$hhdD$/rzzBv;3q!A#v/C((1+C$J#m"4$b.tVZ[]V]~nnQM(:1(<=G 'w/55JBB49b.49b.9Gbj/Cbj/CbsRxL$9C:F**]7%;c3ZH!$tCx-d3h">?	
<<)--/"4'.u~Ie$ ((D$S$s(#C2::VC6{!#=;Q:XTW:X9Y0Z\]!^!#M',B+IS+I*J!K:CE$tCx-d3h67_ b Mr;   c                       e Zd Zd ZddZy)Albumentationsc                 h   d | _         dd l}|j                  |j                  d      |j	                  ddd      |j                  ddgd      |j                  d      |j                  d      |j                  d      |j                  d	d
      g|j                  ddg            | _         y )Nr   ra  )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   rv   zAlbumentations.__init__  s    "GGdGO&&CSW&XMMr3i4M8FFTFNLL4L HHtHR48$; LGWX # Zr;   c           	      $   | j                   r{t        j                         |k  rd| j                  ||d d dd f   |d d df         }|d   t        j                  t	        |d   |d         D cg c]
  \  }}|g| c}}      }}||fS c c}}w )Nr>   r   )r   bboxesr  r   r  r  )r  r  r   rU  rR  )r|   r  r"  r   r  r   bs          r6   __call__zAlbumentations.__call__  s    >>fmmo1..r&AB-fUVXYUYl.[CWrxxS^I\^abj^kEl0mElTQ!aEl0m'nB6z 1ns   0BN)rJ  )r   r   r   rv   r  r   r;   r6   r  r    s    Z r;   r  c                     t         j                  j                  |       rt        j                  |        t        j
                  |        y r/   )r0   r1   rj  shutilrmtreemakedirs)r1   s    r6   create_folderr    s*    	ww~~ddKKr;   c           	         t        | dz         }t        |       t        t        j                  t	        t        |             dz   d            D ].  }t        j                  ||t        |      j                  z         0 y )N_flatz/**/*.*Tr   )r   r  r
   r   r   r  copyfilerd  )r1   new_pathfiles      r6   flatten_recursiver    s[    D7N#H(TYYs4::dKLhd89 Mr;   c           
         t        |       } | dz  j                         rt        j                  | dz        nd  t	        | j                  d            }t        |      }t        ||      D ]n  }|j                  dd  t        v st        j                  t        |            dd d df   }|j                  d d \  }}t        t        t        |      g      d         }t        |      j                         st!        |d	      5 }t#        j$                  |j'                         j)                         j+                         D 	cg c]  }	|	j-                          c}	t"        j.                  
      }
d d d        t1        
      D ]S  \  }}	t3        |	d         }| dz  | z  | j4                   d|j4                   d| dz  }|j6                  j                         s|j6                  j9                  d       |	dd  ||||gz  }|dd  dz  dz   |dd  t;        |j=                  dd            j?                         jA                  t"        j2                        }t#        jB                  |ddg   d|      |ddg<   t#        jB                  |ddg   d|      |ddg<   t        jD                  t        |      ||d   |d   |d   |d   f         rLJ d|         q y c c}	w # 1 sw Y   uxY w)N
classifierr   rB  r>   .rS   r   r   r   r9  r  z.jpgT)r=  g333333?r   r  zbox failure in )#r   rG  r  r  rF  rglobr\   r
   suffixr   r   r   r   r  r*  rj  r   r   rU  r   r   r   r   r  r  rZ   r  rI  rf  r   r  ravelr[  r  imwrite)r1   r9   r   r  r  r  r  r  r5   r   lbr9  r   r  s                 r6   extract_boxesr    s    :D+/,+>*F*F*HFMM$%&dE"#EE
AQ''>>!",CL)#tt)4B88BQ<DAq ?CL>:1=>GG}##%'3'1affhnn6F6Q6Q6S"T6S17796S"T\^\f\fgB ( &bMDAqAaD	A,1#6DII;a~UVWXVYY]9^^A88??,t4!"Aq!,AabECK!OAabE!!))B"2399;BB266JA "1a&	1a 8Aq!fI "1a&	1a 8Aq!fI;;s1vr!A$qt)QqT!A$Y2F/GH_O\][^J__H * ( #U ('s   >K#KK#K##K-	c                    t        |       } t        t        D cg c]  }t        | j	                  d|             ! c}g       }t        |      }t        j                  g d||      }g d}|D cg c])  }| |z  j                         s| |z  j                         + c} t        d|  d|z  z          t        t        ||      |      D ]o  \  }	}
|r0t        t        t        |
      g      d         j                         s8t        | ||	   z  d	      5 }|j!                  t        |
      d
z          ddd       q yc c}w c c}w # 1 sw Y   xY w)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
    z*.)r   r>   r   )weightsr  )zautosplit_train.txtzautosplit_val.txtzautosplit_test.txtzAutosplitting images from z!, using *.txt labeled images onlyrB  r   rs  
N)r   r8   r   rF  r  r\   r  r  rj  unlinkr   r
   rR  r*  r   r   write)r1   r  annotated_onlyimg_extr9   r   r]  r#  r   r   rE   r5   s               r6   	autosplitr    s)    :DMgdjj2gY01MrREE
AnnY1=G
LC"%=#Q$():):)<dQh#=	&tf
-0SVd0d
des7E*!43os3xj&A!&D!E!L!L!NdSVmS)QC4( *) 5 N
 >
 *)s   $E2EEEE	c                 D    d| j                   |   z   }| j                  |   S )Nz/work/handsomejw66/coco17/)rK  segs)r|   r  keys      r6   load_segmentationsr  $  s%    
&)>
>C 99S>r;   )NFFr  FrS   r>   r?   FFr   )r  r  r  )TF)r  ))r   r   r]  TFTr   )r   r   r  r  r  r  r  rZ  )r   r  r  r  )z./new)../coco)z../coco/)r  )g?r  r  F)ar   r  rg  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   rL  r   r   	getLoggerr   loggerTAGSrX  rD   r:   rH   rq   r_   r`   rp   rc   rd   rw   ry   r   r   r   r*  rY   r@  r  r  r  r  r  r  r@  r*  rH  r   r  rl  r3  r  r  r  r  r  r  r  r  r   r;   r6   <module>r     s      	     +   
      $    ( J J! ! ! : JPG			8	$ ==%%'K}}[!]2 (
G
 qv`b:&))44?? &&*V *M M`7 7tN Nb]uJ' uJr	I"6N8vIX06f!0%"6@" B ps$Vrb"&87r 2: `F).r;   