[190ca4]: / utils / __pycache__ / dataloaders.cpython-37.pyc

Download this file

363 lines (357 with data), 44.6 kB

B

%”Yfôàã
@sdZddlZddlZddlZddlZddlZddlZddlZddlZddl	Z	ddl
mZddlm
Z
mZddlmZddlmZddlmZddlZddlZddlZddlmmZddlZddlZddlm Z m!Z!m"Z"dd	l#m$Z$m%Z%m&Z&m'Z'dd
l(m(Z(ddl)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0m1Z1ddl2m3Z3m4Z4m5Z5m6Z6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCdd
lDmEZEdZFdZGdZHeIe Jdd¡ƒZKeIe Jdd¡ƒZLeIe Jdd¡ƒZMeNe Jdd¡ƒ O¡dkZPx&e jQ R¡D]ZSe jQeSdkrÞPqÞWdd„ZTdd„ZUdd„ZVd d!„ZWGd"d#„d#e'jXƒZYdKd(d)„ZZGd*d+„d+e&j$ƒZ[Gd,d-„d-ƒZ\Gd.d/„d/ƒZ]Gd0d1„d1ƒZ^Gd2d3„d3ƒZ_d4d5„Z`Gd6d7„d7e%ƒZae3d8fd9d:„Zbe3d8fd;d<„Zce3d=d>d$fd?d@„ZddLdAdB„ZeGdCdD„dDƒZfGdEdF„dFejgjhƒZidMdIdJ„ZjdS)Nz
Dataloaders and dataset utils
éN)Úrepeat)ÚPoolÚ
ThreadPool)ÚPath)ÚThread)Úurlparse)ÚExifTagsÚImageÚImageOps)Ú
DataLoaderÚDatasetÚ
dataloaderÚdistributed)Útqdm)ÚAlbumentationsÚaugment_hsvÚclassify_albumentationsÚclassify_transformsÚ
copy_pasteÚ	letterboxÚmixupÚrandom_perspective)ÚDATASETS_DIRÚLOGGERÚNUM_THREADSÚTQDM_BAR_FORMATÚ
check_datasetÚcheck_requirementsÚ
check_yamlÚ	clean_strÚcv2Úis_colabÚ	is_kaggleÚsegments2boxesÚ
unzip_fileÚxyn2xyÚ	xywh2xyxyÚ
xywhn2xyxyÚ
xyxy2xywhn)Útorch_distributed_zero_firstzCSee https://docs.ultralytics.com/yolov5/tutorials/train_custom_data)
ÚbmpÚdngÚjpegÚjpgÚmpoÚpngÚtifÚtiffÚwebpÚpfm)ÚasfÚaviÚgifÚm4vÚmkvÚmovÚmp4ÚmpegÚmpgÚtsÚwmvÚ
LOCAL_RANKéÿÿÿÿÚRANKÚ
WORLD_SIZEéÚ
PIN_MEMORYTÚtrueÚOrientationcCs@tdd„|Dƒƒ}t t|ƒ ¡¡}| d |¡ ¡¡| ¡S)Ncss&|]}tj |¡rtj |¡VqdS)N)ÚosÚpathÚexistsÚgetsize)Ú.0Úp©rMúP/home/iml/Desktop/Talha/yolov5_P2_ROI_HCM_Micro_1000_Github/utils/dataloaders.pyú	<genexpr>7szget_hash.<locals>.<genexpr>Ú)ÚsumÚhashlibÚsha256ÚstrÚencodeÚupdateÚjoinÚ	hexdigest)ÚpathsÚsizeÚhrMrMrNÚget_hash5sr\c	CsL|j}t t¡2t| ¡ ¡ƒt}|dkr>|d|df}WdQRX|S)N)éérCr)rZÚ
contextlibÚsuppressÚ	ExceptionÚdictÚ_getexifÚitemsÚorientation)ÚimgÚsÚrotationrMrMrNÚ	exif_size=sricCsn| ¡}| dd¡}|dkrjtjtjtjtjtjtjtj	dœ |¡}|dk	rj| 
|¡}|d=| ¡|jd<|S)a
    Transpose a PIL image accordingly if it has an EXIF Orientation tag.
    Inplace version of https://github.com/python-pillow/Pillow/blob/master/src/PIL/ImageOps.py exif_transpose()

    :param image: The image to transpose.
    :return: An image.
    irC)éééér]ér^NÚexif)
ÚgetexifÚgetr	ÚFLIP_LEFT_RIGHTÚ
ROTATE_180ÚFLIP_TOP_BOTTOMÚ	TRANSPOSEÚ
ROTATE_270Ú
TRANSVERSEÚ	ROTATE_90Ú	transposeÚtobytesÚinfo)ÚimageroreÚmethodrMrMrNÚexif_transposeGs
r~cCs&t ¡d}tj |¡t |¡dS)Nl)ÚtorchÚinitial_seedÚnpÚrandomÚseed)Ú	worker_idÚworker_seedrMrMrNÚseed_workerasr†c@seZdZdd„ZdS)ÚSmartDistributedSamplercCsÐt ¡}| |j|j¡tt|jƒ|jd|j	ƒd}tj
||d}|js\| ¡d}| 
¡}|jrz|d|j…}nN|jt|ƒ}|t|ƒkrŠ||d|…7}n"||t |t|ƒ¡d|…7}t|ƒS)NrC)Ú	generatorr)rÚ	GeneratorÚmanual_seedrƒÚepochÚintÚlenÚdatasetÚrankÚnum_replicasÚrandpermÚshuffleÚsortÚtolistÚ	drop_lastÚnum_samplesÚmathÚceilÚiter)ÚselfÚgÚnÚidxÚpadding_sizerMrMrNÚ__iter__ls""z SmartDistributedSampler.__iter__N)Ú__name__Ú
__module__Ú__qualname__rŸrMrMrMrNr‡jsr‡Fçr^rPcCs|	r|rt d¡d}t|
ƒ,t||||||	||t|ƒ||||
d
}WdQRXt|t|ƒƒ}tj 	¡}tt
 ¡t|dƒ|dkr†|nd|gƒ}|
dkrœdn
t
||d}|r°tnt}t ¡}| d|t¡||||oÞ|dk||t|
rîtjntjt|d		|fS)
NuTWARNING ⚠ --rect is incompatible with DataLoader shuffle, setting shuffle=FalseF)
ÚaugmentÚhypÚrectÚcache_imagesÚ
single_clsÚstrideÚpadÚ
image_weightsÚprefixrrCrr@)r’lUUª*UUª*)Ú
batch_sizer’Únum_workersÚsamplerÚ
pin_memoryÚ
collate_fnÚworker_init_fnrˆ)rÚwarningr)ÚLoadImagesAndLabelsrŒÚminrrÚcudaÚdevice_countrGÚ	cpu_countÚmaxr‡rÚInfiniteDataLoaderr‰rŠrArDÚcollate_fn4r±r†)rHÚimgszr­r©ršr¥r€ÚcacherªrŠrÚworkersr«Úquadr¬r’rƒrŽÚndÚnwr¯ÚloaderrˆrMrMrNÚcreate_dataloader„sD


(
rÃcs0eZdZdZ‡fdd„Zdd„Zdd„Z‡ZS)rºzP Dataloader that reuses workers

    Uses same syntax as vanilla DataLoader
    cs2tƒj||Žt |dt|jƒ¡tƒ ¡|_dS)NÚ
batch_sampler)ÚsuperÚ__init__ÚobjectÚ__setattr__Ú_RepeatSamplerrÄrŸÚiterator)ršÚargsÚkwargs)Ú	__class__rMrNrÆÀszInfiniteDataLoader.__init__cCst|jjƒS)N)rrÄr¯)ršrMrMrNÚ__len__ÅszInfiniteDataLoader.__len__ccs&x tt|ƒƒD]}t|jƒVqWdS)N)ÚrangerÚnextrÊ)ršÚ_rMrMrNrŸÈszInfiniteDataLoader.__iter__)r r¡r¢Ú__doc__rÆrÎrŸÚ
__classcell__rMrM)rÍrNrººsrºc@s eZdZdZdd„Zdd„ZdS)rÉzG Sampler that repeats forever

    Args:
        sampler (Sampler)
    cCs
||_dS)N)r¯)ršr¯rMrMrNrÆÔsz_RepeatSampler.__init__ccsxt|jƒEdHqWdS)N)r™r¯)ršrMrMrNrŸ×sz_RepeatSampler.__iter__N)r r¡r¢rÒrÆrŸrMrMrMrNrÉÍsrÉc@s&eZdZddd„Zdd„Zd	d
„ZdS)ÚLoadScreenshotsé€é TNc
CsFtdƒddl}| ¡^}}d\|_}}	}
}t|ƒdkrHt|dƒ|_nJt|ƒdkrldd„|Dƒ\}}	}
}n&t|ƒdkr’d	d„|Dƒ\|_}}	}
}||_||_||_||_	d
|_
d|_| ¡|_|jj
|j}|	dkrÞ|dn
|d|	|_|dkrü|dn
|d||_|
p|d
|_|p&|d|_|j|j|j|jdœ|_dS)NÚmssr)rNNNNrCrlcss|]}t|ƒVqdS)N)rŒ)rKÚxrMrMrNrOèsz+LoadScreenshots.__init__.<locals>.<genexpr>rmcss|]}t|ƒVqdS)N)rŒ)rKrØrMrMrNrOêsÚstreamÚtopÚleftÚwidthÚheight)rÛrÚrÜrÝ)rr×ÚsplitÚscreenrrŒÚimg_sizer©Ú
transformsÚautoÚmodeÚframeÚsctÚmonitorsrÚrÛrÜrÝÚmonitor)
ršÚsourceràr©rârár×ÚparamsrÛrÚrÜrÝrçrMrMrNrÆÞs.
zLoadScreenshots.__init__cCs|S)NrM)ršrMrMrNrŸûszLoadScreenshots.__iter__cCsÄt |j |j¡¡dd…dd…dd…f}d|j›d|j›d|j›d|j›d|j	›d}|j
rj| 
|¡}n8t||j|j
|jdd}| d¡ddd	…}t |¡}|jd
7_t|jƒ||d|fS)Nrkzscreen z	 (LTWH): ú,z: )r©râr)rjrrCr@rC)rÚarrayråÚgrabrçrßrÛrÚrÜrÝrárràr©râryÚascontiguousarrayrärT)ršÚim0rgÚimrMrMrNÚ__next__þs*.
zLoadScreenshots.__next__)rÕrÖTN)r r¡r¢rÆrŸrðrMrMrMrNrÔÜs
rÔc@s>eZdZddd„Zdd	„Zd
d„Zdd
„Zdd„Zdd„ZdS)Ú
LoadImagesé€rÖTNrCc

Csœt|tƒr(t|ƒjdkr(t|ƒ ¡ ¡}g}xšt|ttfƒrDt|ƒn|gD]ˆ}tt|ƒ 	¡ƒ}d|kr€| 
ttj|ddƒ¡qJtj
 |¡r¬| 
tt tj
 |d¡¡ƒ¡qJtj
 |¡rÄ| |¡qJt|›dƒ‚qJWdd„|Dƒ}	d	d„|Dƒ}
t|	ƒt|
ƒ}}||_||_|	|
|_|||_d
g|dg||_d|_||_||_||_t|
ƒrl| |
d¡nd|_|jdks˜t d
|›dt!›dt"›ƒ‚dS)Nz.txtÚ*T)Ú	recursivez*.*z does not existcSs&g|]}| d¡d ¡tkr|‘qS)Ú.r@)rÞÚlowerÚIMG_FORMATS)rKrØrMrMrNú
<listcomp>sz'LoadImages.__init__.<locals>.<listcomp>cSs&g|]}| d¡d ¡tkr|‘qS)rõr@)rÞröÚVID_FORMATS)rKrØrMrMrNrøsFr|rzNo images or videos found in z!. Supported formats are:
images: z	
videos: )#Ú
isinstancerTrÚsuffixÚ	read_textÚrsplitÚlistÚtupleÚsortedÚresolveÚextendÚglobrGrHÚisdirrWÚisfileÚappendÚFileNotFoundErrorrràr©ÚfilesÚnfÚ
video_flagrãrâráÚ
vid_strideÚanyÚ
_new_videoÚcapÚAssertionErrorr÷rù)
ršrHràr©rârárrrLÚimagesÚvideosÚniÚnvrMrMrNrÆs8" 


zLoadImages.__init__cCs
d|_|S)Nr)Úcount)ršrMrMrNrŸ2szLoadImages.__iter__c	CsÊ|j|jkrt‚|j|j}|j|jrðd|_xt|jƒD]}|j 	¡q:W|j 
¡\}}xT|s®|jd7_|j ¡|j|jkrˆt‚|j|j}| |¡|j 
¡\}}q\W|jd7_d|jd›d|j›d|j›d|j›d|›d}nz|jd7_t |¡}| ¡|_t |¡}| |jtj¡}t |¡}|dk	sNtd|›ƒ‚d	|j›d|j›d
|›d}|jr~| |¡}n8t||j|j|jdd}|  d
¡ddd…}t !|¡}||||j||jfS)NÚvideorCzvideo ú/z (z) z: zImage Not Found zimage Ú )r©râr)rjrrCr@)"rr	Ú
StopIterationrr
rãrÏrrrìÚretrieveÚreleaser
ÚreadräÚframesr ÚimreadÚcopyÚorig_imgr	Ú	fromarrayÚresizeràÚLANCZOSrrërrárr©râryrí)	ršrHrÑÚret_valrîrgZpil_imgr|rïrMrMrNrð6s@

2




zLoadImages.__next__cCsDd|_t |¡|_t|j tj¡|jƒ|_t|j tj	¡ƒ|_
dS)Nr)rär ÚVideoCapturerrŒrqÚCAP_PROP_FRAME_COUNTrrÚCAP_PROP_ORIENTATION_METAre)ršrHrMrMrNr
bszLoadImages._new_videocCsL|jdkrt |tj¡S|jdkr0t |tj¡S|jdkrHt |tj¡S|S)NréŽéZ)rer ÚrotateÚROTATE_90_CLOCKWISEÚROTATE_90_COUNTERCLOCKWISErs)ršrïrMrMrNÚ_cv2_rotatejs


zLoadImages._cv2_rotatecCs|jS)N)r	)ršrMrMrNrÎtszLoadImages.__len__)ròrÖTNrC)	r r¡r¢rÆrŸrðr
r,rÎrMrMrMrNrñ
s
#,
rñc@s6eZdZddd„Zd	d
„Zdd„Zd
d„Zdd„ZdS)ÚLoadStreamsúfile.streamsé€rÖTNrCc
s¶dtjj_d|_ˆ|_ˆ|_||_tj	 
|¡r>t|ƒ ¡ 
¡n|g}t|ƒ}dd„|Dƒ|_dg|dg|dg|dg|f\|_|_|_|_x¶t|ƒD]š\}}	|d›d|›d|	›d	}
t|	ƒjd
kròtdƒddl}| |	¡jdd
j}	|	 ¡rt|	ƒn|	}	|	dkr2tƒr"tdƒ‚t ƒr2tdƒ‚t! "|	¡}| #¡sXt|
›d|	›ƒ‚t$| %t!j&¡ƒ}
t$| %t!j'¡ƒ}| %t!j(¡}t)t$| %t!j*¡ƒdƒp¢t+dƒ|j|<t)t, -|¡rŒ|ndddƒpÌd|j|<| .¡\}|j|<t/|j0|||	gdd|j|<t1 2|
›d|j|›d|
›d|›d|j|d›d
¡|j| 3¡qœWt1 2d¡t4 5‡‡‡fdd„|jDƒ¡}	t4j6|	ddj7ddk|_8ˆo–|j8|_9||_:|j8s²t1 ;d¡dS)NTrÙcSsg|]}t|ƒ‘qSrM)r)rKrØrMrMrNrø‚sz(LoadStreams.__init__.<locals>.<listcomp>rrCrz: z... )zwww.youtube.comzyoutube.comzyoutu.be)Úpafyzyoutube_dl==2020.12.2r:)ÚpreftypezM--source 0 webcam unsupported on Colab. Rerun command in a local environment.zN--source 0 webcam unsupported on Kaggle. Rerun command in a local environment.zFailed to open Úinfédé)ÚtargetrËÚdaemonz
 Success (z frames rØz at z.2fz FPS)rPcs"g|]}t|ˆˆˆddj‘qS))r©râr)rÚshape)rKrØ)râràr©rMrNrøŸs)Úaxisu]WARNING ⚠ Stream shapes differ. For optimal performance supply similarly-shaped streams.)<rÚbackendsÚcudnnÚ	benchmarkrãràr©rrGrHrrrürýrÚsourcesÚimgsÚfpsrÚthreadsÚ	enumeraterÚhostnamerr0ÚnewÚgetbestÚurlÚ	isnumericÚevalr!rr"r r$ÚisOpenedrŒrqÚCAP_PROP_FRAME_WIDTHÚCAP_PROP_FRAME_HEIGHTÚCAP_PROP_FPSr¹r%Úfloatr—ÚisfiniterrrVrr{ÚstartrÚstackÚuniquer7rŠrârár³)ršr<ràr©rârárrœÚirgÚstr0rÚwr[r>rÑrM)râràr©rNrÆzsJ
"4

&*6
zLoadStreams.__init__cCs˜d|j|}}x‚| ¡r’||kr’|d7}| ¡||jdkr†| ¡\}}|r\||j|<n*t d¡t 	|j|¡|j|<| 
|¡t d¡qWdS)NrrCuQWARNING ⚠ Video stream unresponsive, please check your IP camera connection.g)
rrGrìrrr=rr³rÚ
zeros_likeÚopenÚtimeÚsleep)ršrPrrÙrœÚfÚsuccessrïrMrMrNrVŠs

zLoadStreams.updatecCs
d|_|S)Nr@)r)ršrMrMrNrŸ¶szLoadStreams.__iter__csވjd7_tdd„ˆjDƒƒr4t d¡tdƒkr@t ¡t‚ˆj 	¡}ˆj
rjt ‡fdd„|Dƒ¡}n:t ‡fdd„|Dƒ¡}|dddd	…f 
d
¡}t |¡}ˆj||ddfS)NrCcss|]}| ¡VqdS)N)Úis_alive)rKrØrMrMrNrOŒsz'LoadStreams.__next__.<locals>.<genexpr>Úqcsg|]}ˆ |¡‘qSrM)rá)rKrØ)ršrMrNrøÂsz(LoadStreams.__next__.<locals>.<listcomp>cs&g|]}t|ˆjˆjˆjdd‘qS))r©râr)rràr©râ)rKrØ)ršrMrNrøÄs.r@)rrkrCrjrP)rÚallr?r ÚwaitKeyÚordÚdestroyAllWindowsrr=rrárrNryrír<)ršrîrïrM)ršrNrðºs&

zLoadStreams.__next__cCs
t|jƒS)N)rr<)ršrMrMrNrÎÊszLoadStreams.__len__)r.r/rÖTNrC)r r¡r¢rÆrVrŸrðrÎrMrMrMrNr-xs

,r-cs:tj›dtj›tj›dtj›‰‰‡‡fdd„|DƒS)NrÚlabelscs.g|]&}ˆ | ˆd¡¡ dd¡dd‘qS)rCrõrz.txt)rWrý)rKrØ)ÚsaÚsbrMrNrøÑsz#img2label_paths.<locals>.<listcomp>)rGÚsep)Ú	img_pathsrM)r`rarNÚimg2label_pathsÎs&rdc@s–eZdZdZejejejejej	gZ
d#dd„Zd$dd„Ze
dƒd	fdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zdd„Zedd „ƒZed!d"„ƒZdS)%rŽg333333ã?é€éFNrÖçrrPr@c2sº|ˆ_|ˆ_|ˆ_|ˆ_|r dn|ˆ_ˆjo2ˆjˆ_|d|dgˆ_|
ˆ_|ˆ_|rft	|dndˆ_
yèg}xŽt|tƒr‚|n|gD]œ}t
|ƒ}| ¡rŒ|tjt|ddƒdd7}qˆ| ¡rt|ƒ<}| ¡ ¡ ¡}t|jƒtj‰|‡fdd	„|Dƒ7}WdQRXqˆt|
›|›d
ƒ‚qˆWtdd„|Dƒƒˆ_ˆjsRt|
›d
ƒ‚WnDtk
r˜}z$t|
›d|›d|›dt›ƒ|‚Wdd}~XYnXtˆjƒˆ_ | ¡rŽ|nt
ˆj dƒj !d¡}yNt"j#|dd $¡d‰}ˆdˆj%ksøt‚ˆdt&ˆj ˆjƒkst‚Wn(tk
r@ˆ '||
¡d‰}YnXˆ (d¡\}}}}}|rŒt)dkrŒd|›d|›d||›d|›d	}t*d|
|||t+dˆdrŒt, -d .ˆd¡¡|dksä|rät|
›d|›d t›ƒ‚‡fd!d	„d"Dƒt/ˆ 0¡Ž\}}ˆ_1t2t" 3|d¡ƒ}|dksB|rBt|
›d#|›d t›ƒ‚t|ƒˆ_4t" 5|¡ˆ_6tˆ 7¡ƒˆ_tˆ 7¡ƒˆ_ ˆr t" 5‡fd$d	„ˆj4Dƒ¡ 8¡d 9t:¡}t, -|
›|t2|ƒ›d%|›d&¡‡fd'd	„|Dƒˆ_‡fd(d	„|Dƒˆ_ ‡fd)d	„|Dƒˆ_4‡fd*d	„|Dƒˆ_1ˆj6|ˆ_6t2ˆj6ƒ}t" ;t" <|¡|¡ 9t:¡} | d+d,}!| ˆ_=|ˆ_>t" <|¡ˆ_?|d+kr–ˆj?t"j@jA|d- B|¡tCtDkˆ_?g}"tˆj1ƒˆ_1t" 5|"¡ Ed,d+¡}#x”tFt/ˆj4ˆj1ƒƒD]~\}$\}%‰|"r,|%dd…dd,…f|#k Gd,¡}&|%|&ˆj4|$<ˆr,‡fd.d	„tF|&ƒDƒˆj1|$<|	rÌdˆj4|$dd…df<qÌWˆjr€ˆj6}'|'dd…d,f|'dd…df}(|( H¡})‡fd/d	„|)Dƒˆ_‡fd0d	„|)Dƒˆ_ ‡fd1d	„|)Dƒˆ_4‡fd2d	„|)Dƒˆ_1|'|)ˆ_6|(|)}(d,d,gg|!}xbtI|!ƒD]V}$|(| |$k}*|* J¡|* K¡}+},|,d,kr8|,d,g||$<n|+d,krþd,d,|+g||$<qþWt" Lt" 5|¡||
|¡ 9t:¡|
ˆ_M|d3krœˆjN|
d4sœd}dg|ˆ_Od5d	„ˆjDƒˆ_P|r¶d6\}-}.dg|dg|ˆ_Qˆ_R|d7kròˆjSnˆjT‰tUtVƒ W‡fd8d9„ˆj?¡}/t*|/t2ˆj?ƒt+t)dkd:}0x€|0D]x\}$}1|d7krZ|-ˆjP|$ X¡jY7}-n0|1\ˆjO|$<ˆjQ|$<ˆjR|$<|-ˆjO|$jZtC7}-|
›d;|-|.d<›d=|›d>|0_[q2W|0 \¡dS)?NFrj)rZz**z*.*T)rôcs(g|] }| d¡r | dˆd¡n|‘qS)z./rC)Ú
startswithÚreplace)rKrØ)ÚparentrMrNrøÿsz0LoadImagesAndLabels.__init__.<locals>.<listcomp>z does not existcss2|]*}| d¡d ¡tkr| dtj¡VqdS)rõr@rN)rÞrör÷rirGrb)rKrØrMrMrNrOsz/LoadImagesAndLabels.__init__.<locals>.<genexpr>zNo images foundzError loading data from z: Ú
rz.cache)Úallow_pickleÚversionÚhashÚresults>rr@z	Scanning z... z	 images, z backgrounds, z corrupt)ÚdescÚtotalÚinitialÚ
bar_formatÚmsgszNo labels found in z, can not start training. csg|]}ˆ |¡‘qSrM)Úpop)rKÚk)rœrMrNrøs)rnrmrtzAll labels empty in csg|]}t|ƒˆk‘qSrM)r)rKrØ)Ú	min_itemsrMrNrø(srz images filtered from datasetcsg|]}ˆj|‘qSrM)Úim_files)rKrP)ršrMrNrø*scsg|]}ˆj|‘qSrM)Úlabel_files)rKrP)ršrMrNrø+scsg|]}ˆj|‘qSrM)r_)rKrP)ršrMrNrø,scsg|]}ˆj|‘qSrM)Úsegments)rKrP)ršrMrNrø-sr@rC)rƒcsg|]\}}|rˆ|‘qSrMrM)rKrÚelem)ÚsegmentrMrNrøDscsg|]}ˆj|‘qSrM)rx)rKrP)ršrMrNrøNscsg|]}ˆj|‘qSrM)ry)rKrP)ršrMrNrøOscsg|]}ˆj|‘qSrM)r_)rKrP)ršrMrNrøPscsg|]}ˆj|‘qSrM)rz)rKrP)ršrMrNrøQsÚram)r¬cSsg|]}t|ƒ d¡‘qS)z.npy)rÚwith_suffix)rKrWrMrMrNrøes)ri@Údiskcs|ˆ|ƒfS)NrM)rP)ÚfcnrMrNÚ<lambda>józ.LoadImagesAndLabels.__init__.<locals>.<lambda>)rqrsÚdisablezCaching images (z.1fzGB ú))]ràr€r¥r«rŠÚmosaicÚ
mosaic_borderr©rHrÚalbumentationsrúrþrÚis_dirrrTÚis_filerTrÚstripÚ
splitlinesrjrGrbrrrxrraÚHELP_URLrdryr~rÚloadÚitemÚ
cache_versionr\Úcache_labelsrur?rrrr{rWÚzipÚvaluesrzrÚconcatenater_rëÚshapesÚkeysÚnonzeroÚastyperŒÚfloorÚarangeÚbatchrœÚindicesr‚ÚRandomStateÚpermutationrBrAÚreshaper@rÚargsortrÏrµr¹r˜Úbatch_shapesÚcheck_cache_ramÚimsÚ	npy_filesÚim_hw0Úim_hwÚcache_images_to_diskÚ
load_imagerrÚimapÚstatÚst_sizeÚnbytesrpÚclose)2ršrHràr­r€r¥rŠr«r§ršr©rªrwr¬rrƒrWrLÚtÚeÚ
cache_pathrIr	ÚnmÚneÚncrœÚdr_r”ÚnlÚincludeÚbiÚnbÚ
include_classÚinclude_class_arrayrPÚlabelÚjrgÚarÚirectÚariÚminiÚmaxiÚbÚgbroÚpbarrØrM)rœr€rwrjr|ršrNrÆÙsà 

"2$""
((
("

$  


(
$zLoadImagesAndLabels.__init__皙™™™™¹?c
CsØd\}}t|jdƒ}xPt|ƒD]D}t t |j¡¡}|jt	|j
d|j
dƒ}||j|d7}qW||j|}	t 
¡}
|	d||
jk}|sÔt |›|	|d›d|
j|d›d|
j|d›d	|rÊd
nd›¡|S)N)ri@r4rrCrjz.1fzGB RAM required, rzGB available, ucaching images ✅unot caching images ⚠)rµrœrÏr rr‚Úchoicerxràr¹r7r«ÚpsutilÚvirtual_memoryÚ	availablerr{rq)ršÚ
safety_marginr¬rÁrÂrœrÑrïÚratioÚmem_requiredÚmemrœrMrMrNr¡usBz#LoadImagesAndLabels.check_cache_ramz./labels.cachecCsøi}d}ddddgf\}}}}}	|›d|j|j›d}
ttƒž}t| tt|j|j	t
|ƒƒ|¡|
t|jƒtd}x€|D]x\	}
}}}}}}}}||7}||7}||7}||7}|
rÀ|||g||
<|rÎ|	 
|¡|
›d|›d||›d|›d	|_qxWWdQRX| ¡|	rt d
 |	¡¡|dkr@t |›d|›dt›¡t|j	|jƒ|d
<||||t|jƒf|d<|	|d<|j|d<y4t ||¡| d¡ |¡t |›d|›¡Wn@tk
rò}z t |›d|j›d|›¡Wdd}~XYnX|S)NTrz	Scanning z...)rprqrsrz	 images, z backgrounds, z corruptrku"WARNING ⚠ No labels found in z. rnrortrmz
.cache.npyzNew cache created: uWARNING ⚠ Cache directory z is not writeable: )rjÚstemrrrršÚverify_image_labelr‘rxryrrrrrpr¬rr{rWr³rŒr\rrÚsaver~Úrenamera)ršrHr¬rØÚbloodr°r	r±r²rtrpÚpoolrÃÚim_fileÚlbr7rzÚnm_fÚnf_fÚne_fÚnc_fÚmsgr®rMrMrNr†sF

0

.z LoadImagesAndLabels.cache_labelscCs
t|jƒS)N)rrx)ršrMrMrNrέszLoadImagesAndLabels.__len__c	CsÞ|j|}|j}|jo$t ¡|dk}|rp| |¡\}}d}t ¡|dkrnt||f| t |j¡¡žŽ\}}nþ| |¡\}\}}\}	}
|jrž|j	|j
|n|j}t||d|j
d\}}}
||f|	||
|f|
ff}|j| ¡}|jr8t|dd…dd…f|d|
|d|	|
d|
dd|dd…dd…f<|j
rnt|||d	|d
|d|d|d
d\}}t|ƒ}|rºt|dd…dd…f|jd|jdddd|dd…dd…f<|j
rz| ||¡\}}t|ƒ}t||d|d|ddt ¡|dkr8t |¡}|r8d|dd…df|dd…df<t ¡|dkrzt |¡}|rzd|dd…df|dd…df<t |df¡}|ršt |¡|dd…dd…f<| d¡ddd…}t |¡}t |¡||j ||fS)Nr…rF)râÚscaleuprCrmr)ÚpadwÚpadhÚdegreesÚ	translateÚscaleÚshearÚperspective)rÝrÞrßràráTgü©ñÒMbP?)rRr[ÚclipÚepsÚhsv_hÚhsv_sÚhsv_v)ÚhgainÚsgainÚvgainÚflipudrjÚfliplré
)rjrrCr@)!r›r¥r…r‚Úload_mosaicrrÅr§rŠr ršràrr€r_rrZr'rrr(r7r‡rrrêrërÚzerosÚ
from_numpyryrírx)ršÚindexr¥r…rfr_r”Úh0Úw0r[rRr7rÊrªrŽZ
labels_outrMrMrNÚ__getitem__¶sX
$J>
 
 
zLoadImagesAndLabels.__getitem__c	Csþ|j||j||j|}}}|dkrâ| ¡r>t |¡}n t |¡}|dk	s^td|›ƒ‚|j	dd…\}}|j
t||ƒ}|dkrÊ|js–|dkrœtj
ntj}tj|t ||¡t ||¡f|d}|||f|j	dd…fS|j||j||j|fS)NzImage Not Found rjrC)Ú
interpolation)r¢rxr£rIrrr rrr7ràr¹r€ÚINTER_LINEARÚ
INTER_AREAr!r—r˜r€r¥)	ršrPrïrWÚfnrñròÚrÚinterprMrMrNr§s"
(zLoadImagesAndLabels.load_imagecCs2|j|}| ¡s.t | ¡t |j|¡¡dS)N)r£rIrrÏÚas_posixr rrx)ršrPrWrMrMrNrŠs
z(LoadImagesAndLabels.cache_images_to_diskcsrgg}}|j‰‡fdd„|jDƒ\}}|gtj|jdd}t |¡x|t|ƒD]n\}}| |¡\}}	\‰‰|dkrðtj	ˆdˆd|j
dfdtjd}
t|ˆdƒt|ˆdƒ||f\}}}
}ˆ|
|ˆ||ˆˆf\}}}}n|d	krN|t|ˆdƒt
|ˆˆdƒ|f\}}}
}dˆ||t
ˆ|
|ƒˆf\}}}}nÀ|dkr¬t|ˆdƒ||t
ˆd|ˆƒf\}}}
}ˆ|
|dˆt
||ˆƒf\}}}}nb|dkr||t
|ˆˆdƒt
ˆd|ˆƒf\}}}
}ddt
ˆ|
|ƒt
||ˆƒf\}}}}|||…||…f|
||…||
…f<||‰||‰|j| ¡|j| ¡}}|jr°t|dd…d	d…fˆˆˆˆƒ|dd…d	d…f<‡‡‡‡fd
d„|Dƒ}| |¡| |¡qTWt |d¡}x:|dd…d	d…ff|˜D]}tj|ddˆ|dqðWt|
|||jd
d\}
}}t|
|||jd|jd|jd|jd|jd|jd	\}
}|
|fS)Nc3s(|] }tt |dˆ|¡ƒVqdS)rjN)rŒr‚Úuniform)rKrØ)rgrMrNrOsz2LoadImagesAndLabels.load_mosaic.<locals>.<genexpr>rk)rvrrjér)ÚdtyperCcsg|]}t|ˆˆˆˆƒ‘qSrM)r%)rKrØ)r[rÜrÛrRrMrNrø9sz3LoadImagesAndLabels.load_mosaic.<locals>.<listcomp>)Úoutr)rLrÝrÞrßràrá)rÝrÞrßràráÚborder)ràr†r‚Úchoicesr›r’r@r§rÚfullr7Úuint8r¹rµr_rrzrZr'rrr“rârr¥r)ršrðZlabels4Z	segments4ÚycÚxcr›rPrfrÑÚimg4Úx1aÚy1aÚx2aÚy2aÚx1bÚy1bÚx2bÚy2br_rzrØrM)r[rÜrÛrgrRrNrísV

&((
,(
,(
0($0
 zLoadImagesAndLabels.load_mosaiccs0gg}}|j‰|gtj|jdd}t |¡d\}}x¶t|ƒD]š\}}| |¡\}}	\‰‰|dkr²tjˆdˆd|j	dfdtj
d}
ˆˆ}}ˆˆˆˆˆˆf‰n^|d	kr҈ˆˆˆˆˆf‰n>|dkrúˆ|ˆˆˆ|ˆˆf‰n|dkr"ˆ|ˆˆ|ˆˆˆf‰nî|d
krRˆ|ˆ|ˆ|ˆˆ|ˆf‰nŸ|dkr‚ˆ|ˆˆ|ˆ|ˆ|ˆf‰nŽ|dkrºˆ||ˆˆ|ˆ||ˆ|ˆf‰nV|d
kr∈ˆ|ˆˆˆ|f‰n.|dkrˆˆˆ||ˆˆˆ||f‰ˆdd…\‰‰dd„ˆDƒ\}
}}}|j| ¡|j
| ¡}}|jr€t|dd…d	d…fˆˆˆˆƒ|dd…d	d…f<‡‡‡‡fdd„|Dƒ}| |¡| |¡||ˆd…|
ˆd…f|
||…|
|…f<ˆˆ}}qDW‡fdd„|jDƒ\}}|
||dˆ…||dˆ…f}
t |d¡}|dd…d	dgf|8<|dd…dd
gf|8<t ||g¡‰‡fdd„|Dƒ}x:|dd…d	d…ff|˜D]}tj|ddˆ|dq®Wt|
|||jdd\}
}}t|
|||jd|jd|jd|jd|jd|jd	\}
}|
|fS)Nr^)rv)r@r@rrkrjrü)rýrCrlrmr]rncss|]}t|dƒVqdS)rN)r¹)rKrØrMrMrNrOssz3LoadImagesAndLabels.load_mosaic9.<locals>.<genexpr>csg|]}t|ˆˆˆˆƒ‘qSrM)r%)rKrØ)r[ÚpadxÚpadyrRrMrNrøysz4LoadImagesAndLabels.load_mosaic9.<locals>.<listcomp>c3s|]}tt dˆ¡ƒVqdS)rN)rŒr‚rû)rKrÑ)rgrMrNrO‚scsg|]}|ˆ‘qSrMrM)rKrØ)ÚcrMrNrøŠs)rþr)rLrÝrÞrßràrá)rÝrÞrßràrárÿ)ràr‚rr›r’r@r§rrr7rr_rrzrZr'rrr†r“rërârr¥r)ršrðZlabels9Z	segments9r›ÚhpÚwprPrfrÑÚimg9rñròÚx1Úy1Úx2Úy2r_rzrrrØrM)rr[rrrgrRrNÚload_mosaic9Qsr

&
 

&
&
.

$0

,$ z LoadImagesAndLabels.load_mosaic9cCsRt|Ž\}}}}x$t|ƒD]\}}||dd…df<qWt |d¡t |d¡||fS)Nr)r‘r@rrNÚcat)ršrïrºrHr”rPrÔrMrMrNr±žszLoadImagesAndLabels.collate_fnc
CsÊt|Ž\}}}}t|ƒd}gg|d|…|d|…f\}}}}	t ddddddgg¡}
t ddddddgg¡}t ddddddgg¡}xüt|ƒD]ð}
|
d9}
t ¡dkrætj||
 d¡ 	¡dddd	d 
||
 
¡¡}||
}nˆt t ||
||
dfd¡t ||
d
||
dfd¡fd
¡}t ||
||
d|
||
d
|||
d|
|fd¡|}| |¡| |¡q’Wx&t
|ƒD]\}
}|
|dd…df<qWt |d¡t |d¡||	fS)NrlgrrCgà?g@ÚbilinearF)Úscale_factorrãÚ
align_cornersrjrk)r‘rrÚtensorrÏr‚ÚFÚinterpolateÚ	unsqueezerKÚtyperrr@rN)ršrïrºrHr”rœZim4Zlabel4Zpath4Zshapes4ZhoÚworgrPÚim1rÔrMrMrNr»¥s&$
DD
zLoadImagesAndLabels.collate_fn4)rerfFNFFFFrÖrgrrPr@r)rÄrP)r r¡r¢rr Ú
INTER_NEARESTrõÚINTER_CUBICröÚINTER_LANCZOS4Úrand_interp_methodsrÆr¡rrrÎrór§rŠrírÚstaticmethodr±r»rMrMrMrNrŽÔs6

'	J:MrŽÚcoco128cCsvtt|ƒ›dƒ}tj |¡r(t |¡t |¡x>tt	j	tt|ƒƒ›dddƒD]}t 
||t|ƒj¡qTWdS)NÚ_flatz/**/*.*T)rô)rrTrGrHrIÚshutilÚrmtreeÚmakedirsrrÚcopyfileÚname)rHÚnew_pathÚfilerMrMrNÚflatten_recursiveÁs

&r2c
Cs&t|ƒ}|d ¡r"t |d¡ndt| d¡ƒ}t|ƒ}xât||dD]Ð}|jdd…t	krLt
 t|ƒ¡dddd…f}|j
dd…\}}ttt|ƒgƒdƒ}t|ƒ ¡rLt|ƒ,}tjd	d
„| ¡ ¡ ¡Dƒtjd}	WdQRXx,t|	ƒD]\}
}t|dƒ}|d|›|j›d
|j›d
|
›d}|j ¡sR|jjdd|dd…||||g}
|
dd…dd|
dd…<t|
 dd¡ƒ ¡ t¡}
t  |
ddgd|¡|
ddg<t  |
ddgd|¡|
ddg<t
 !t|ƒ||
d|
d…|
d|
d…f¡sút"d|›ƒ‚qúWqLWdS)NÚclassificationz*.*)rqrC.r@rjrcSsg|]}| ¡‘qSrM)rÞ)rKrØrMrMrNrøÛsz!extract_boxes.<locals>.<listcomp>)rýÚ
classifierrÑz.jpgT)Úparentsg333333ó?rkrlzbox failure in )#rrˆr+r,rþÚrglobrrrûr÷r rrTr7rdrIrTrrërrŠr‹Úfloat32r@rŒrÍrjÚmkdirr&ržÚravelr—râÚimwriter)rHrrœrÓrïr[rRÚlb_filerWrÔr»rØrrÁrMrMrNÚ
extract_boxesËs.
0(r<zcoco128/images)gÍÌÌÌÌÌì?gš™™™™™¹?gc
Cst|ƒ}tdd„| d¡Dƒƒ}t|ƒ}t d¡tjdddg||d}dd	d
g}x(|D] }|j| ¡rX|j| 	¡qXWt
d|›d|ƒx|tt||ƒ|d
D]f\}}	|rÌtt
t|	ƒgƒdƒ ¡rŠt|j||dƒ&}
|
 d|	 |j¡ ¡›d¡WdQRXqŠWdS)aT Autosplit a dataset into train/val/test splits and save path/autosplit_*.txt files
    Usage: from utils.dataloaders import *; autosplit()
    Arguments
        path:            Path to images directory
        weights:         Train, val, test weights (list, tuple)
        annotated_only:  Only use images with an annotated txt file
    css(|] }|jdd… ¡tkr|VqdS)rCN)rûrör÷)rKrØrMrMrNrOöszautosplit.<locals>.<genexpr>z*.*rrCrj)Úweightsrvzautosplit_train.txtzautosplit_val.txtzautosplit_test.txtzAutosplitting images from z!, using *.txt labeled images only)rqÚaz./rkN)rrr6rr‚rƒrrjrIÚunlinkÚprintrr‘rdrTrTÚwriteÚrelative_torú)rHr=Úannotated_onlyrrœr›ÚtxtrØrPrfrWrMrMrNÚ	autosplitís


rEcsB|\}}}dddddgf\}}}}}	‰yÆt |¡}
|
 ¡t|
ƒ}|ddk|ddk@sltd|›dƒ‚|
j ¡tksŠtd|
j›ƒ‚|
j ¡dkrôt|d	ƒL}| d
d¡| 	¡dkrêt
 t |¡¡j|d
ddd|›d|›d}	WdQRXt
j |¡rÆd}t|ƒŽ}dd„| 	¡ ¡ ¡Dƒ}
|sˆtdd„|
Dƒƒrˆtjdd„|
Dƒtjd}dd„|
Dƒ‰t | dd¡tˆƒfd¡}
tj|
tjd}
WdQRXt|
ƒ}|r°|
jddksÖtd|
jd›dƒ‚|
dk ¡sútd|
|
dk›ƒ‚|
dd…dd…fdk ¡sNtd|
dd…dd…f|
dd…dd…fdk›ƒ‚tj|
dd d!\}}t|ƒ|krÄ|
|}
ˆr‡fd"d„|Dƒ‰|›d|›d#|t|ƒ›d$}	nd}tjd%tjd}
nd}tjd%tjd}
||
|ˆ|||||	f	Stk
r<}z.d}|›d|›d&|›}	dddd|||||	g	Sd}~XYnXdS)'NrrPé	rCzimage size z <10 pixelszinvalid image format )r-r,ÚrbéþÿÿÿrjsÿÙÚJPEGr3)ÚsubsamplingÚqualityuWARNING ⚠ z!: corrupt JPEG restored and savedcSsg|]}t|ƒr| ¡‘qSrM)rrÞ)rKrØrMrMrNrøsz&verify_image_label.<locals>.<listcomp>css|]}t|ƒdkVqdS)r]N)r)rKrØrMrMrNrOsz%verify_image_label.<locals>.<genexpr>cSsg|]}|d‘qS)rrM)rKrØrMrMrNrøs)rýcSs,g|]$}tj|dd…tjd dd¡‘qS)rCN)rýr@rj)rrër7rž)rKrØrMrMrNrø sr@ézlabels require 5 columns, z columns detectedznegative label values rmz,non-normalized or out of bounds coordinates T)r8Úreturn_indexcsg|]}ˆ|‘qSrMrM)rKrØ)rzrMrNrø,sz: z duplicate labels removed)rrLz : ignoring corrupt image/label: )r	rTÚverifyrirÚformatrör÷Úseekrr
r~rÏrGrHrrŠr‹rrrër7r“ržr#rr7r[rOrîra)rËrÑrÓr;r¬r°r	r±r²rÙrïr7rWrÔÚclassesrŽrÑrPr®rM)rzrNrÎsV

(
&$T rÎc@sJeZdZdZddd„Zedd„ƒZdd	„Zddd„Zdd
d„Z	dd„Z
dS)ÚHUBDatasetStatsa
 Class for generating HUB dataset JSON and `-hub` dataset directory

    Arguments
        path:           Path to data.yaml or data.zip (with data.yaml inside data.zip)
        autodownload:   Attempt to download dataset if not found locally

    Usage
        from utils.dataloaders import HUBDatasetStats
        stats = HUBDatasetStats('coco128.yaml', autodownload=True)  # usage 1
        stats = HUBDatasetStats('path/to/coco128.zip')  # usage 2
        stats.get_json(save=False)
        stats.process_images()
    úcoco128.yamlFc	
CsÖ| t|ƒ¡\}}}y6tt|ƒdd}t |¡}|r>||d<WdQRXWn,tk
rv}ztdƒ|‚Wdd}~XYnXt||ƒt|ddƒ|_|jd|_	|j	j
ddd|d	t|d
 ¡ƒdœ|_
||_dS)NÚignore)ÚerrorsrHz!error/HUB/dataset_stats/yaml_loadz-hubrT)r5Úexist_okr²Únames)r²rW)Ú_unziprrTrÚyamlÚ	safe_loadrarÚhub_dirÚim_dirr8rþr’ÚstatsÚdata)	ršrHÚautodownloadÚzippedÚdata_dirÚ	yaml_pathrWr^r®rMrMrNrÆJs

zHUBDatasetStats.__init__csˆtˆ d¡ƒptˆ d¡ƒ}|s.tdˆ›ƒ‚t|ƒdkr`‡fdd„|Dƒ}|s`tdˆ›dƒ‚t|ƒdks€td|›d	ˆ›ƒ‚|d
S)Nz*.yamlzNo *.yaml file found in rCcsg|]}|jˆjkr|‘qSrM)rÍ)rKrW)ÚdirrMrNrøbsz.HUBDatasetStats._find_yaml.<locals>.<listcomp>zMultiple *.yaml files found in z, only 1 *.yaml file allowedzMultiple *.yaml files found: z , only 1 *.yaml file allowed in r)rþrr6rr)rcrrM)rcrNÚ
_find_yaml\s zHUBDatasetStats._find_yamlcCs~t|ƒ d¡sdd|fSt|ƒ ¡s4td|›dƒ‚t||jd| d¡}| ¡sjtd|›d|›dƒ‚d	t|ƒ| 	|¡fS)
Nz.zipFzError unzipping z, file not found)rHrPz, z6 not found. path/to/abc.zip MUST unzip to path/to/abc/T)
rTÚendswithrr‰rr$rjr~rˆrd)ršrHrcrMrMrNrXgs

zHUBDatasetStats._unzipé€c	
Cs|jt|ƒj}y\t |¡}|t|j|jƒ}|dkrX| t	|j|ƒt	|j|ƒf¡}|j
|ddddWn¢tk
r}z‚t 
d|›d|›¡t |¡}|jdd…\}}|t||ƒ}|dkrîtj|t	||ƒt	||ƒftjd	}t t|ƒ|¡Wdd}~XYnXdS)
Ngð?rIé2T)rKÚoptimizeu#WARNING ⚠ HUB ops PIL failure z: rj)rô)r\rr/r	rTr¹rÝrÜr!rŒrÏrarr{r rr7rör:rT)	ršrWÚmax_dimÚf_newrïrør®Ú	im_heightÚim_widthrMrMrNÚ_hub_opsqs
"
&zHUBDatasetStats._hub_opsc	s>dd„‰xÊdD]Â}ˆj |¡dkr.dˆj|<qtˆj|ƒ}t ‡fdd„t|j|jddDƒ¡}t	| 
¡ƒ| 
d¡ ¡d	œ|jt	t |dkd
¡ 
¡ƒ|dk 
d¡ ¡dœ‡fdd„t
|j|jƒDƒd
œˆj|<qW|rˆjd}td| ¡›dƒt|dƒ}t ˆj|¡WdQRX|r8ttjˆjdddƒˆjS)NcSsdd„|DƒS)NcSs(g|] ^}}t|ƒfdd„|Dƒ•‘qS)css|]}t|dƒVqdS)rlN)Úround)rKrØrMrMrNrO‡szFHUBDatasetStats.get_json.<locals>._round.<locals>.<listcomp>.<genexpr>)rŒ)rKrÚpointsrMrMrNrø‡sz<HUBDatasetStats.get_json.<locals>._round.<locals>.<listcomp>rM)r_rMrMrNÚ_round…sz(HUBDatasetStats.get_json.<locals>._round)ÚtrainÚvalÚtestcs2g|]*}tj|dd…df t¡ˆjdd‘qS)Nrr²)Ú	minlength)rÚbincountr—rŒr^)rKrº)ršrMrNrøsz,HUBDatasetStats.get_json.<locals>.<listcomp>Ú
Statistics)rqrpr)rqÚ	per_classrC)rqÚ
unlabelledrwcs*g|]"\}}tt|ƒjƒˆ| ¡ƒi‘qSrM)rTrr/r”)rKrvÚv)rprMrNrø™s)Úinstance_statsÚimage_statsr_z
stats.jsonzSaving z...rRrjF)ÚindentÚ	sort_keys)r^rqr]rŽrrërr_rœrŒrQr”r[r‘rxr[r@rrTÚjsonÚdumpÚdumps)ršrÏÚverboserÞrŽrØÚ
stats_pathrWrM)rpršrNÚget_jsonƒs0




 
zHUBDatasetStats.get_jsoncCsxx`dD]X}|j |¡dkrqt|j|ƒ}|›d}x(tttƒ |j|j¡|j	|dD]}qVWqWt
d|j›ƒ|jS)N)rqrrrsz images)rqrpzDone. All images saved to )r^rqrŽrrrršrmrxrœr@r\)ršrÞrŽrprÑrMrMrNÚprocess_imagesŠs

&zHUBDatasetStats.process_imagesN)rSF)rf)FF)r r¡r¢rÒrÆr(rdrXrmrƒr„rMrMrMrNrR;s




#rRcs*eZdZdZd‡fdd„	Zdd„Z‡ZS)ÚClassificationDatasetzÔ
    YOLOv5 Classification Dataset.
    Arguments
        root:  Dataset path
        transform:  torchvision transforms, used by default
        album_transform: Albumentations transforms, used if installed
    Fcs^tƒj|dt|ƒ|_|r&t||ƒnd|_|dkp:|dk|_|dk|_dd„|jDƒ|_dS)N)ÚrootTr}rcSs*g|]"}t|ƒt|dƒ d¡dg‘qS)rz.npyN)rþrr~)rKrØrMrMrNrøÃsz2ClassificationDataset.__init__.<locals>.<listcomp>)	rÅrÆrÚtorch_transformsrÚalbum_transformsÚ	cache_ramÚ
cache_diskÚsamples)ršr†r€rŒrœ)rÍrMrNrÆœs

zClassificationDataset.__init__cCsš|j|\}}}}|jr:|dkr:t |¡}|j|d<n:|jrj| ¡s^t | ¡t |¡¡t 	|¡}n
t |¡}|j
r–|j
t |tj¡dd}n
| 
|¡}||fS)Nrk)r|r|)r‹r‰r rrŠrIrrÏrúrrˆÚcvtColorÚ
COLOR_BGR2RGBr‡)ršrPrWr»r÷rïÚsamplerMrMrNróÅs

z!ClassificationDataset.__getitem__)F)r r¡r¢rÒrÆrórÓrMrM)rÍrNr…Žsr…éàrfc

CsŽt|ƒt||||d}WdQRXt|t|ƒƒ}tj ¡}	tt ¡t	|	dƒ|dkrZ|nd|gƒ}
|dkrpdnt
j||d}t ¡}| 
dt¡t|||o€|dk|
|tt|dS)N)r†rŒr€rœrCrr@)r’lUUª*UUª*)r­r’r®r¯r°r²rˆ)r)r…rµrrr¶r·rGržr¹rÚDistributedSamplerr‰rŠrArºrDr†)
rHrŒr­r€rœrrŸr’rŽrÀrÁr¯rˆrMrMrNÚ create_classification_dataloaderÖs 	

(
r‘)
FNFFr£Fr@r^FFrPFr)T)rrfTFr@r^T)krÒr_rrRr~r—rGr‚r+rUÚ	itertoolsrÚmultiprocessing.poolrrÚpathlibrÚ	threadingrÚurllib.parserÚnumpyrrÆrÚtorch.nn.functionalÚnnÚ
functionalrÚtorchvisionrYÚPILrr	r
Útorch.utils.datarrr
rrZutils.augmentationsrrrrrrrrÚ
utils.generalrrrrrrrrr r!r"r#r$r%r&r'r(Úutils.torch_utilsr)rŒr÷rùrŒÚgetenvr?rArBrTrörDÚTAGSr•rer\rir~r†rr‡rÃrºrÉrÔrñr-rdrŽr2r<rErÎrRÚdatasetsÚImageFolderr…r‘rMrMrMrNÚ<module>sš(L
	
&1kVp
"
4y#