o
    ™ÄŽi²Œ  ã                   @   s´  d 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Zddl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 eeƒ ¡ Zejd	 Zeeƒej vrpej  !eeƒ¡ eej  "ee #¡ ¡ƒZddl$m%  m&Z' dd
l(m)Z) ddl*m+Z+ ddl,m-Z- ddl.m/Z/ ddl0m1Z1 ddl2m3Z3m4Z4m5Z5 ddl6m7Z7m8Z8m9Z9m:Z:m;Z;m<Z<m=Z=m>Z>m?Z?m@Z@mAZAmBZBmCZCmDZDmEZEmFZFmGZGmHZHmIZImJZJmKZKmLZLmMZM ddlNmOZO ddlPmQZQmRZR ddlSmTZT ddlUmVZV ddlWmXZXmYZY ddlZm[Z[m\Z\ ddl]m^Z^m_Z_m`Z`maZambZbmcZcmdZdmeZe efe gdd¡ƒZhefe gdd¡ƒZiefe gdd	¡ƒZjdd„ Zkd(dd „Zle1ƒ fd!d"„Zmd#d$„ Znd%d&„ Zoepd'krXemelƒ ƒ dS dS ))a  
Train a YOLOv5 segment model on a segment dataset
Models and datasets download automatically from the latest YOLOv5 release.

Usage - Single-GPU training:
    $ yolov5 segment train --data coco128-seg.yaml --weights yolov5s-seg.pt --img 640  # from pretrained (recommended)
    $ yolov5 segment train --data coco128-seg.yaml --weights '' --cfg yolov5s-seg.yaml --img 640  # from scratch

Usage - Multi-GPU DDP training:
    $ python -m torch.distributed.run --nproc_per_node 4 --master_port 1 segment/train.py --data coco128-seg.yaml --weights yolov5s-seg.pt --img 640 --device 0,1,2,3

Models:     https://github.com/ultralytics/yolov5/tree/master/models
Datasets:   https://github.com/ultralytics/yolov5/tree/master/data
Tutorial:   https://github.com/ultralytics/yolov5/wiki/Train-Custom-Data
é    N)Údeepcopy)Údatetime)ÚPath)Úlr_scheduler)Útqdm)ÚRoboflowConnectoré   )Úattempt_load)ÚSegmentationModel)Úcheck_anchors)Úcheck_train_batch_size)Ú	Callbacks)Úattempt_download_from_hubÚattempt_downloadÚis_url)ÚLOGGERÚTQDM_BAR_FORMATÚ	check_ampÚcheck_datasetÚ
check_fileÚcheck_git_infoÚcheck_git_statusÚcheck_img_sizeÚcheck_requirementsÚcheck_suffixÚ
check_yamlÚcolorstrÚget_latest_runÚincrement_pathÚ
init_seedsÚintersect_dictsÚlabels_to_class_weightsÚlabels_to_image_weightsÚ	one_cycleÚ
print_argsÚprint_mutationÚstrip_optimizerÚ	yaml_save)ÚGenericLogger)Úplot_evolveÚplot_labels)Úcreate_dataloader)ÚComputeLoss)ÚKEYSÚfitness)Úplot_images_and_masksÚplot_results_with_masks)ÚEarlyStoppingÚModelEMAÚde_parallelÚselect_deviceÚ	smart_DDPÚsmart_optimizerÚsmart_resumeÚtorch_distributed_zero_firstÚ
LOCAL_RANKéÿÿÿÿÚRANKÚ
WORLD_SIZEc           [         s@  t |jƒ|j|j|j|j|j|j|j|j	|j
|j|j|j|jf\‰‰ }}}}}}	}
}}}}}ˆd }|r7|jn|jddd |d |d }}tˆtƒrgtˆdd}t |¡‰W d   ƒ n1 sbw   Y  t tdƒd	 d
d„ ˆ ¡ D ƒ¡ ¡ ˆ ¡ |_|s‘tˆd ˆƒ tˆd t|ƒƒ d }tdv rt |td}| o£|j! }|j" }|j#dk}t$|j%d t dd t&t'ƒ |pÂt(|ƒ}W d   ƒ n1 sÍw   Y  |d |d }}|rßdnt)|d ƒ}|rót*|d ƒdkróddin|d }t|tƒo| +d¡}t,|d d}|d ur|}t-|dƒ | +d¡}|rŽt&t'ƒ t.|ƒ}W d   ƒ n	1 s0w   Y  t/j0|dd} t1|	pD| d jd|ˆ 2d¡d  3|¡}!|	sYˆ 2d¡r_|
s_d!gng }"| d  4¡  5¡ }#t6|#|! 5¡ |"d"}#|!j7|#d#d$ t d%t*|#ƒ› d&t*|! 5¡ ƒ› d'|› ¡ nt1|	d|ˆ 2d¡d  3|¡}!t8|!ƒ}$t|t)ƒr©|g}d(d)„ t*|ƒdkrµ|nt9|d ƒD ƒ}|! :¡ D ]\‰}%d|%_;t<‡fd*d„|D ƒƒrßt d+ˆ› ¡ d#|%_;qÁt=t)|!j> =¡ ƒd,ƒ‰t?|j@ˆˆd- d.}&td/kr|d/krtA|!|&|$ƒ}| Bd0|i¡ d1}'t=tC|'| ƒdƒ}(ˆd2  ||( |' 9  < tD|!|jEˆd3 ˆd4 ˆd2 ƒ})|jFr?tGdˆd5 ˆ ƒ}*n‡ ‡fd6d7„}*tHjI|)|*d8}+tdv rVtJ|!ƒnd },d9\}-}.|rp|
rntK| |)|,|ˆ |
ƒ\}-}.‰ ~ ~#|r‹td/kr‹t/jL M¡ dkr‹t Nd:¡ t/jO P|!¡}!|jQr¦|r¦td/kr¦t/jOjR S|!¡ 3|¡}!t d;¡ tT||&|tU ˆ|ˆd|jVdkr¸d n|jV|jWt'||jX|jYtd<ƒd||d=\}/}0tZ [|0j\d¡}1t)|1d d …df  =¡ ƒ}2|2|k s÷J d>|2› d?|› d@|› dA|d › ƒ‚tdv r>tT||&|tU d- ˆ|ˆ|rd n|jVdd/|d- dB||tdCƒdDd }3|
s>|j]s/t^|0|!ˆdE |&dF |! _¡  4¡  |r>t`|1|ˆƒ |rJtd/krJta|!ƒ}!tb|!ƒjcd/ jd}4ˆdG  d|4 9  < ˆdH  |dI d |4 9  < ˆdJ  |&dK d- d |4 9  < |jeˆdL< ||!_fˆ|!_tg|0j\|ƒ 3|¡| |!_h||!_itj j¡ }5t*|/ƒ}6t=tCˆdM |6 ƒdNƒ}7d/}8tZ k|¡}9dO}:|.d |+_lt/jLjmjn|$dP};to|jpdQd#}<}=tq|!|dR}>t dS|&› dT|&› dU|/jrtU › dVtdWˆƒ› dXˆ › dY¡ t9|.ˆ ƒD ]Ú}?|! s¡  |jXr|!jh t¡  u¡ d|9 d-  | }@tv|0j\||@dZ}Atwjxt9|0jyƒ|A|0jyd[|0_zt/jkd\|d]}Btd/kr-|/j{ ||?¡ t}|/ƒ}Ct d^d_ ¡ tdv rDt~|C|6td`}C|) €¡  |CD ]…\}D\}E}F}G}H}I|D|6|?  }J|Ej3|dda 4¡ db }E|J|7kr·d|7g}Kt=dtZ |J|Kd|'| g¡ C¡ ƒ}(t}|)j‚ƒD ]3\}L}MtZ |J|K|Ldkr”ˆdc ndd|Mde |*|?ƒ g¡|Mdf< d4|Mv rµtZ |J|Kˆdg ˆd4 g¡|Md4< qƒ|jƒrôtw „|&dB |&dh ˆ ¡ˆ ˆ }N|Nt=|Ej…d-d … ƒ ‰ˆdkrô‡‡fdid)„|Ej…d-d … D ƒ}OtOj†j‡|E|Odjd#dk}Et/jLjm ˆ|$¡. |!|Eƒ}P|>|P|F 3|¡|I 3|¡ 4¡ dl\}Q}Rtd/kr|QtU9 }Q|jYr"|Qdm9 }QW d   ƒ n	1 s-w   Y  |; ‰|Q¡ Š¡  |J|8 |(krg|; ‹|)¡ t/jOjŒj|! Ž¡ dndo |; |)¡ |; ¡  |) €¡  |,re|, |!¡ |J}8tdv rÏ|B|D |R |Dd  }Bt/jL ‘¡ rƒt/jL ’¡ dp nddq›dr}S|C “ds|?› d&ˆ d › |Sg|B¢|Fj…d ‘|Ej…d/ ‘R  ¡ |rÏ|Jdk r¼t”|E|F|I|Gˆdt|J› du ƒ |JdvkrÏt•ˆ –dw¡ƒ}T| —|Tdx|?¡ qJdyd)„ |)j‚D ƒ}U|+ ¡  tdv r£|,j˜|!g dz¢d{ |?d ˆ kpô|<j™}V|rû|Vrtšj›||tU d- |&|$|,jœ||3ˆd#||>||d|\}:}9}HttZ ž|:¡ Ÿdd/¡ƒ}W|<|?|Wd}}=|W|-kr-|W}-t |Bƒt |:ƒ |U }Xt¡t¢t£|Xƒƒ}Y| ¤|Y|?¡ |rM|Vr£|s£|?|-t¥tb|!ƒƒ _¡ t¥|,jœƒ _¡ |,j¦|) 5¡ t|ƒt§ ¨¡  ©¡ d~œ} t/ ª| |¡ |-|Wkr}t/ ª| |¡ |j«dkr¢|?|j« dkr¢t/ ª| |d|?› d ¡ | ¬|d|?› d ¡ ~ td/krÁtdkr¯|=nd g}Zt­ ®|Zd¡ tdkrÁ|Zd }=|=rÆ nqìtdv r™t d€|?|. d › dtj j¡ |5 d‚ dƒ›d„¡ ||fD ]W}| ¯¡ r>t°|ƒ ||u r>t d…|› d†¡ tšj›||tU d- |&t±||ƒ _¡ |rd‡ndˆ||3ˆ|d|||>||d‰\}:}H}H|r>t¡t¢t£t |Bƒt |:ƒ |U ƒƒ}Y| ¤|Y|?¡ qè| ¤t¡t¢t£d\dŠ… |:ƒƒˆ ¡ |jsY| ¬||?¡ |r™t²ˆd‹ dŒ ddŽgdd„ dD ƒ¢}T‡fd‘d)„|TD ƒ}Tt d’tdWˆƒ› ¡ | —|Td“|?d ¡ | —t•ˆ –d”¡ƒd•|?d ¡ t/jL ³¡  |:S )–NÚweightsT)ÚparentsÚexist_okzlast.ptzbest.ptÚignore©Úerrorszhyperparameters: z, c                 s   s"    | ]\}}|› d |› V  qdS )ú=N© )Ú.0ÚkÚvrD   rD   úP/home/jeff/fluffinator/venv/lib/python3.10/site-packages/yolov5/segment/train.pyÚ	<genexpr>_   s   €  ztrain.<locals>.<genexpr>zhyp.yamlúopt.yaml¾   r   r:   )ÚoptÚconsole_loggerÚcpur   )ÚdeterministicÚtrainÚvalÚncÚnamesr   Úitemzcoco/val2017.txt)Úhf_tokenz.pt©Úmap_locationÚmodelé   Úanchors)ÚchrR   rZ   Úanchor)ÚexcludeF)ÚstrictzTransferred ú/z items from c                 S   s   g | ]}d |› d‘qS )zmodel.Ú.rD   ©rE   ÚxrD   rD   rH   Ú
<listcomp>   ó    ztrain.<locals>.<listcomp>c                 3   s    | ]}|ˆ v V  qd S )NrD   ra   )rF   rD   rH   rI   ”   s   € z	freezing é    é   )Úfloorr:   Ú
batch_sizeé@   Úweight_decayÚlr0ÚmomentumÚlrfc                    s    d| ˆ   dˆd   ˆd  S )Nr   ç      ð?rm   rD   )rb   )ÚepochsÚhyprD   rH   Ú<lambda>¬   ó     ztrain.<locals>.<lambda>)Ú	lr_lambda)ç        r   u·   WARNING âš ï¸ DP not recommended, use torch.distributed.run for best DDP Multi-GPU results.
See Multi-GPU Tutorial at https://github.com/ultralytics/yolov5/issues/475 to get started.zUsing SyncBatchNorm()ztrain: )rp   ÚaugmentÚcacheÚrectÚrankÚworkersÚimage_weightsÚquadÚprefixÚshuffleÚmask_downsample_ratioÚoverlap_maskzLabel class z exceeds nc=z in z. Possible class labels are 0-ç      à?zval: )	rp   rv   rw   rx   ry   Úpadr~   r   r|   Úanchor_t)rX   ÚthrÚimgszÚboxÚclséP   Úobjé€  Úlabel_smoothingÚwarmup_epochséd   )r   r   r   r   r   r   r   r   r   r   r   r   )Úenabled)Úpatience)ÚoverlapzImage sizes z train, z val
Using z' dataloader workers
Logging results to Úboldz
Starting training for z
 epochs...)rR   Úclass_weights)r=   rF   é   )Údevicez!
%11s%11s%11s%11s%11s%11s%11s%11s)ÚEpochÚGPU_memÚbox_lossÚseg_lossÚobj_lossÚcls_lossÚ	InstancesÚSize)ÚtotalÚ
bar_format)Únon_blockingéÿ   Úwarmup_bias_lrrt   Ú
initial_lrÚlrÚwarmup_momentumg      ø?c                    s"   g | ]}t  |ˆ ˆ  ¡ˆ  ‘qS rD   )ÚmathÚceilra   )ÚgsÚsfrD   rH   rc   B  s   " Úbilinear)ÚsizeÚmodeÚalign_corners)Úmasksç      @ç      $@)Úmax_normg    eÍÍAz.3gÚGz,%11s%11s%11.4g%11.4g%11.4g%11.4g%11.4g%11.4gÚtrain_batchz.jpgé
   z
train*.jpgÚMosaicsc                 S   s   g | ]}|d  ‘qS )r¢   rD   ra   rD   rD   rH   rc   p  s    )ÚyamlrR   rp   rS   Ústrider‘   )Úinclude)rh   r„   ÚhalfrX   Ú
single_clsÚ
dataloaderÚsave_dirÚplotsÚ	callbacksÚcompute_lossr~   r   )Úepochr.   )r¾   Úbest_fitnessrX   ÚemaÚupdatesÚ	optimizerrL   Údater¾   Ú
z epochs completed in i  z.3fz hours.z
Validating z...gÍÌÌÌÌÌä?ç333333ã?)rh   r„   rX   Ú	iou_thresr¸   r¹   rº   Ú	save_jsonÚverboser»   r¼   r½   r~   r   é   zresults.csv)Úfilezresults.pngzconfusion_matrix.pngc                 s   s    | ]}|› d V  qdS )z
_curve.pngNrD   ra   rD   rD   rH   rI   Ö  s   € )ÚF1ÚPRÚPÚRc                    s    g | ]}ˆ |   ¡ rˆ | ‘qS rD   )Úexists)rE   Úf)rº   rD   rH   rc   ×  rr   zResults saved to ÚResultszval*.jpgÚ
Validation)´r   rº   ro   rh   r=   r¸   ÚevolveÚdataÚcfgÚresumeÚnovalÚnosavery   ÚfreezeÚ
mask_ratioÚparentÚmkdirÚ
isinstanceÚstrÚopenr´   Ú	safe_loadr   Úinfor   ÚjoinÚitemsÚcopyrp   r'   Úvarsr;   r(   ÚnoplotsÚ
no_overlapÚtyper   Úseedr8   r9   r   ÚintÚlenÚendswithr   r   r   ÚtorchÚloadr
   ÚgetÚtoÚfloatÚ
state_dictr    Úload_state_dictr   ÚrangeÚnamed_parametersÚrequires_gradÚanyÚmaxrµ   r   r„   r   Úupdate_paramsÚroundr6   rÂ   Úcos_lrr#   r   ÚLambdaLRr2   r7   ÚcudaÚdevice_countÚwarningÚnnÚDataParallelÚsync_bnÚSyncBatchNormÚconvert_sync_batchnormr+   r<   rv   rw   rz   r{   ÚnpÚconcatenateÚlabelsÚnoautoanchorr   r·   r*   r5   r3   rX   ÚnlrŠ   rR   r!   r‘   rS   ÚtimeÚzerosÚ
last_epochÚampÚ
GradScalerr1   rŽ   r,   Únum_workersrP   rN   Únumpyr"   ÚrandomÚchoicesÚnÚindicesÚsamplerÚ	set_epochÚ	enumerater   r   Ú	zero_gradÚinterpÚparam_groupsÚmulti_scaleÚ	randrangeÚshapeÚ
functionalÚinterpolateÚautocastÚscaleÚbackwardÚunscale_ÚutilsÚclip_grad_norm_Ú
parametersÚstepÚupdateÚis_availableÚmemory_reservedÚset_descriptionr/   ÚsortedÚglobÚ
log_imagesÚupdate_attrÚpossible_stopÚvalidateÚrunrÀ   r.   ÚarrayÚreshapeÚlistÚdictÚzipr-   Úlog_metricsr   rÁ   r   ÚnowÚ	isoformatÚsaveÚsave_periodÚ	log_modelÚdistÚbroadcast_object_listrÏ   r&   r	   r0   Úempty_cache)[rp   rL   r“   r¼   rh   r=   r¸   rÓ   rÔ   rÕ   rÖ   r×   rØ   ry   rÙ   rÚ   ÚwÚlastÚbestrÐ   Ú	data_dictÚloggerr»   r   rý   Ú
train_pathÚval_pathrR   rS   Úis_cocoÚresultÚ
pretrainedÚckptrX   r]   Úcsdr  rG   r„   ÚnbsÚ
accumulaterÂ   ÚlfÚ	schedulerrÀ   r¿   Ústart_epochÚtrain_loaderÚdatasetr  ÚmlcÚ
val_loaderr	  Út0ÚnbÚnwÚlast_opt_stepÚmapsÚresultsÚscalerÚstopperÚstopr½   r¾   ÚcwÚiwÚmlossÚpbarÚiÚimgsÚtargetsÚpathsÚ_r¬   ÚniÚxiÚjrb   ÚszÚnsÚpredÚlossÚ
loss_itemsÚmemÚfilesr¢   Úfinal_epochÚfiÚlog_valsÚmetrics_dictÚbroadcast_listrD   )ro   r¦   rp   rF   rº   r§   rH   rP   P   sr  $ÿÿ
ÿ&


ÿ$




ÿ("*(€ 


ï.

óó 


ÿþ
ý
ÿ

 4
€ 
"
€ú	



&.ÿ

€

ô

ø


ÿ
.


ñ€
rP   Fc                 C   sà  t  ¡ }|jdtddd |jdtddd |jdttd	 d
d |jdttd dd |jdtddd |jdtddd |jdddtddd |jdddd |jdddd d!d" |jd#dd$d |jd%dd&d |jd'dd(d |jd)dd*d |jd+tdd,d-d. |jd/tdd0d |jd1tdd2d3d. |jd4dd5d |jd6dd7d8 |jd9dd:d |jd;dd<d |jd=tg d>¢d?d@dA |jdBddCd |jdDtdEdFd |jdGtdH dId8 |jdJdKdId8 |jdLddMd |jdNddOd |jdPddQd |jdRtdSdTd |jdUtddVd |jdWdXtdYgdZd[ |jd\td]d^d |jd_tdYd`d |jdatd]dbd |jdctddded |jdfddgd |jdhtd did |jdjtd dkd |jdltd dmd | rl| ¡ dY S | ¡ S )nNz	--weightszyolov5s-seg.ptzinitial weights path)rè   ÚdefaultÚhelpz--cfgÚ zmodel.yaml pathz--datazdata/coco128-seg.yamlzdataset.yaml pathz--hypzdata/hyps/hyp.scratch-low.yamlzhyperparameters pathz--epochsrŒ   ztotal training epochsz--batch-sizerÉ   z/total batch size for all GPUs, -1 for autobatchz--imgszz--imgz
--img-sizer‰   ztrain, val image size (pixels)z--rectÚ
store_truezrectangular training)Úactionrx  z--resumeú?TFzresume most recent training)ÚnargsÚconstrw  rx  z--nosavezonly save final checkpointz--novalzonly validate final epochz--noautoanchorzdisable AutoAnchorz	--noplotszsave no plot filesz--evolvei,  z(evolve hyperparameters for x generations)rè   r}  r~  rx  z--bucketzgsutil bucketz--cacheÚramzimage --cache ram/diskz--image-weightsz)use weighted image selection for trainingz--devicez%cuda device, i.e. 0 or 0,1,2,3 or cpu)rw  rx  z--multi-scalezvary img-size +/- 50%%z--single-clsz&train multi-class data as single-classz--optimizer)ÚSGDÚAdamÚAdamWr€  rÂ   )rè   r  rw  rx  z	--sync-bnz-use SyncBatchNorm, only available in DDP modez	--workersé   z-max dataloader workers (per RANK in DDP mode)z	--projectzruns/train-segzsave to project/namez--nameÚexpz
--exist-okz*existing project/name ok, do not incrementz--quadzquad dataloaderz--cos-lrzcosine LR schedulerz--label-smoothingrt   zLabel smoothing epsilonz
--patiencez3EarlyStopping patience (epochs without improvement)z--freezeú+r   z(Freeze layers: backbone=10, first3=0 1 2)r}  rè   rw  rx  z--save-periodr:   z0Save checkpoint every x epochs (disabled if < 1)z--seedzGlobal training seedz--local_rankz/Automatic DDP Multi-GPU argument, do not modifyz--mask-ratior’   z+Downsample the truth masks to saving memoryz--no-overlapz/Overlap masks train faster at slightly less mAPz--neptune_tokenzneptune.ai api tokenz--neptune_projectz-https://docs.neptune.ai/api-reference/neptunez--roboflow_tokenzroboflow api token)	ÚargparseÚArgumentParserÚadd_argumentrÞ   ÚROOTrê   rñ   Úparse_known_argsÚ
parse_args)ÚknownÚparserrD   rD   rH   Ú	parse_optß  sR   rŽ  c                    s\  t dv rtt| ƒƒ tƒ  tƒ  dt| jƒv r'tj| j| j	dt
 ¡  ¡ d| _| jrŽ| jsŽtt| jtƒr9t| jƒntƒ ƒ}|jjd }| j}| ¡ rft|dd}t |¡}W d   ƒ n1 s`w   Y  n	tj|dd	d
 }tjdai |¤Ž} dt|ƒd| _| _| _t|ƒrt|ƒ| _net| jƒt| jƒt| j ƒt| jƒt| j!ƒf\| _| _| _ | _| _!t"| jƒs¼t"| jƒs¼J dƒ‚| jr×| j!tt
d ƒkrÏtt
d ƒ| _!| jd| _#| _| j$dkrãt| jƒj%| _$tt&t| j!ƒ| j$ | j#dƒ| _'t(| j)| j*d}t+dkr\d}| j,rJ d|› ƒ‚| jrJ d|› ƒ‚| j*dks&J d|› dƒ‚| j*t- dks7J d| j*› dƒ‚tj. /¡ t+ksCJ dƒ‚tj. 0t+¡ t )dt+¡}t1j2t1 3¡ rXdnd d! | jsjt4| j | ||ƒ d S i d"d#“d$d%“d&d'“d(d)“d*d+“d,d-“d.d/“d0d1“d2d3“d4d5“d6d3“d7d5“d8d9“d:d;“d<d=“d>d?“d@dA“dBdBdCdBdBdDdEdFdGdFdFdFdHœ¥‰ t| j dd}t |¡}	d<|	vrÄdI|	d<< W d   ƒ n	1 sÏw   Y  | j5rÞ|	d<= ˆ d<= ddt| j'ƒ| _6| _7}
|
dJ |
dK }}| j8rt9 :dL| j8› dM|› ¡ t;| jƒD ]}| <¡ rÔdN}t=j>|dOdPdQdR}t?dSt"|ƒƒ}|t= @tA|ƒ ¡ d |… }tA|ƒtA|ƒ ?¡  dT }|dNksIt"|ƒdQkrW|tBjCt;|ƒ|dUd  }n|dVkrk|| D|dQ¡  Ed¡| E¡  }dW\}}t=jB}| FtGtH H¡ ƒ¡ t= I‡ fdXdY„|	 J¡ D ƒ¡}t"ˆ ƒ}t= K|¡}tL|dQkƒrº|| B|¡|k  | M|¡ | B¡  | dQ  NdZd[¡}tL|dQkƒs™tO|	 J¡ ƒD ]\}}tP||d\  ||  ƒ|	|< qÀˆ  Q¡ D ]$\}}tR|	| |dQ ƒ|	|< t?|	| |dO ƒ|	|< tS|	| dSƒ|	|< qØt4|	 T¡ | ||ƒ}tUƒ }tVtW||	 T¡ |
| j8ƒ q	tX|ƒ tY Zd]| j› d^t[d_|
ƒ› d`|› ¡ d S )bNrK   zroboflow.comÚsegment)ÚurlÚroboflow_tokenÚtaskÚlocationrJ   r@   rA   rN   rV   rL   ry  Tz+either --cfg or --weights must be specifiedz
runs/trainzruns/evolveFrÕ   )r?   )rh   r:   z4is not compatible with YOLOv5 Multi-GPU DDP trainingz--image-weights z	--evolve zAutoBatch with --batch-size -1 z", please pass a valid --batch-sizer   z--batch-size z must be multiple of WORLD_SIZEz)insufficient CUDA devices for DDP commandrý   ÚncclÚgloo)Úbackendrk   )r   gñhãˆµøä>çš™™™™™¹?rm   )r   g{®Gáz„?rn   rl   )ç333333Ó?rÅ   g\Âõ(\ï?rj   )r   rt   çü©ñÒMbP?r‹   )r   rt   g      @r£   )r   rt   gffffffî?r    )r   rt   çš™™™™™É?r…   )r   g{®Gáz”?rš  r†   )r   rš  r­   Úcls_pw)r   r€   ç       @rˆ   Úobj_pwÚiou_t)r   r—  gffffffæ?r‚   )r   rœ  g       @rZ   )rf   rœ  r®   Úfl_gamma)r   rt   rœ  Úhsv_h)r   rt   r—  )r   rt   gÍÌÌÌÌÌì?)r   rt   g     €F@)r   rt   r®   )r   rt   r™  )r   rt   rn   )r   rt   rn   )Úhsv_sÚhsv_vÚdegreesÚ	translater!  ÚshearÚperspectiveÚflipudÚfliplrÚmosaicÚmixupÚ
copy_pasterY   zhyp_evolve.yamlz
evolve.csvzgsutil cp gs://z/evolve.csv Úsinglerf   ú,r   )ÚndminÚ	delimiterÚskiprowsé   gíµ ÷Æ°>)r=   Úweighted)gš™™™™™é?rš  c                    s   g | ]}ˆ | d  ‘qS )r   rD   )rE   rF   ©ÚmetarD   rH   rc   Œ  rd   zmain.<locals>.<listcomp>r˜  g      @é   z"Hyperparameter evolution finished z generations
Results saved to r   z(
Usage example: $ python train.py --hyp rD   )\r;   r$   rå   r   r   rÞ   rÔ   r   Údownload_datasetr‘  r‰  ÚabsoluteÚas_posixrÖ   rÓ   r   rÝ   r   r   rÛ   Úis_filerß   r´   rà   rí   rî   r†  Ú	NamespacerÕ   r=   r   r   rp   Úprojectrë   r?   ÚnameÚstemr   rº   r4   r“   rh   r9   rz   r<   rý   rþ   Ú
set_devicer>  Úinit_process_groupÚis_nccl_availablerP   r  r×   rØ   ÚbucketÚosÚsystemrô   rÏ   r  ÚloadtxtÚminÚargsortr.   r  r  r4  Úsumré   rê   r
  r3  ÚkeysÚonesÚallÚrandnÚclipr  rñ   rã   rø   rú   rä   r   r%   r-   r)   r   rá   r   )rL   r¼   rB  Úopt_yamlÚopt_datarÐ   Údr“   Úmsgrp   rº   Úevolve_yamlÚ
evolve_csvrg  rÛ   rb   r  rA  ÚmpÚsÚnprÚgÚngrG   rc  rF   r[  rD   r³  rH   Úmain  s   
ü ÿ€
€*ÿ
 
"ÿþýüûúùø	÷
öõôóòñðïã

€ý


4ÿ ÿþrØ  c                  K   s2   t dƒ}|  ¡ D ]
\}}t|||ƒ qt|ƒ |S )NT©rŽ  rã   ÚsetattrrØ  ©ÚkwargsrL   rF   rG   rD   rD   rH   r2  §  s
   r2  c                  K   s2   t dƒ}|  ¡ D ]
\}}t|||ƒ qt|ƒ dS )z&
    To be called from yolov5.cli
    TNrÙ  rÛ  rD   rD   rH   Úrun_cli°  s   rÝ  Ú__main__)F)qÚ__doc__r†  r¤   rÂ  r  Úsysr
  rä   r   r   Úpathlibr   r  r  rí   Útorch.distributedÚdistributedr>  Útorch.nnr   r´   Útorch.optimr   r   Úyolov5.utils.roboflowr   Ú__file__ÚresolveÚFILEr>   r‰  rÞ   ÚpathÚappendÚrelpathÚcwdÚyolov5.segment.valr  rQ   r1  Úyolov5.models.experimentalr	   Úyolov5.models.yolor
   Úyolov5.utils.autoanchorr   Úyolov5.utils.autobatchr   Úyolov5.utils.callbacksr   Úyolov5.utils.downloadsr   r   r   Úyolov5.utils.generalr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r    r!   r"   r#   r$   r%   r&   r'   Úyolov5.utils.loggersr(   Úyolov5.utils.plotsr)   r*   Ú yolov5.utils.segment.dataloadersr+   Úyolov5.utils.segment.lossr,   Úyolov5.utils.segment.metricsr-   r.   Úyolov5.utils.segment.plotsr/   r0   Úyolov5.utils.torch_utilsr1   r2   r3   r4   r5   r6   r7   r8   rê   Úgetenvr9   r;   r<   rP   rŽ  rØ  r2  rÝ  Ú__name__rD   rD   rD   rH   Ú<module>   sj   
d
(   
3 	

ÿ