
    ifD                     0	   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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mZmZmZmZmZmZmZmZmZmZmZmZ d dlmZm Z  d d	l!m"Z"m#Z#m$Z$ d d
l%m&Z&m'Z'm(Z( ddddddddddd ed          ddddddddddfdZ)e*dk    r e j+        d          Z,e,-                    dde.dd           e,-                    de.dd           e,-                    de/dd            e,-                    d!e/dd"           e,-                    d#e0dd$           e,-                    d%e0d&d'           e,-                    d(d)d*+           e,-                    d,dd-+           e,-                    d.d/d01           e,-                    d2d/d31           e,-                    d4d/d51           e,-                    d6d/d71           e,-                    d8d/d91           e,-                    d:d/d;1           e,-                    d<d/d=1           e,-                    d>d?d@+           e,-                    dAdBd@+           e,-                    dCd/dD1           e,-                    dEd/dF1           e,-                    dGd/dH1           e,1                                Z2e2xj3        e2j4        5                    dI          z  c_3         ee2j4                  e2_4         e6e2           e2j7        dJv rp e)e2j4        e2j8        e2j9        e2j:        e2j;        e2j<        e2j3        e2j=        e2j>        e2j?        e2j@        e2jA        z  e2jA        e2jB        e2jC         e2jD        K           dS e2j7        dLk    r4e2j8        D ]*ZE e)e2j4        eEe2j9        e2j:        dMdNdde2jD        O	  	         +dS e2j7        dPk    r eF eGdQdRdS                    ZHe2j8        D ]ZEdT ee2j4                  jI         dU eeE          jI         dVZJg ZKeHD ]bZL e6dWeJ dXeL dY            e)e2j4        eEe2j9        eLe2j;        e2j<        e2j3        de2jD        Z	  	        \  ZMZNZOeKP                    eMeOz              c ejQ        eJeKd[\            ejR        d]            e$eH^           dS dS dS )_    N)Path)Thread)tqdm)attempt_load)create_dataloader)coco80_to_coco91_classcheck_dataset
check_filecheck_img_sizecheck_requirementsbox_iounon_max_suppressionscale_coords	xyxy2xywh	xywh2xyxyset_loggingincrement_pathcolorstr)ap_per_classConfusionMatrix)plot_imagesoutput_to_targetplot_study_txt)select_devicetime_synchronizedTracedModel    i  gMbP?g333333?F Tc                 #  jkl |
d u}|r't          |
                                          j        }nt                       t	          t
          j        |          }t          t          t          t
          j                  t
          j	        z  t
          j
                            }|r|dz  n|                    dd           t          ||          }
t          t          |
j                                                  d          }t!          ||          }|rt#          |
||          }
|j        d	k    o|}|r|
                                 |
                                 t+          | t,                    r\|                     d
          }t1          |           5 }t3          j        |t2          j                  } d d d            n# 1 swxY w Y   t9          |            |rdnt          | d                   }t;          j        ddd                              |          }|                                 }d}rj!        rtE          j#        d          }|s|j        d	k    re |
t;          j$        dd||                              |          %                    t          |
                                                               t
          j&        dv rt
          j&        nd} tO          | |          |||t
          ddtQ          |  d                    d         }|rtS          d           dktU          |          }!d tW          tY          |
d          r|
j-        n|
j.        j-                  D             jt_                      }"ddz  }#d\	  }$}%}&}'}(})}*}+},t;          j$        d|          }-g g g g g f\  }.}/}0}1}2tW          ta          ||#                     D ]\  }3\  }4l}5}6|4                    |d!          }4|r|4                                n|41                                }4|4d"z  }4l                    |          l|4j2        \  }7}8}9}:t;          j3                    5  ti                      }; |
|4|#          \  }<}=|+ti                      |;z
  z  }+|r'|- |d$ |=D             l          d         d d         z  }-ld d d%d fxx         t;          j5        |:|9|:|9g                              |          z  cc<   |rlfd&tm          |7          D             ng }>ti                      };to          |<|||>d'          }<|,ti                      |;z
  z  },d d d            n# 1 swxY w Y   tW          |<          D ]\  }?}@lld d df         |?k    dd f         }Atq          |A          }B|Br|Ad d df         9                                ng }Ct          |5|?                   }Dkdz  ktq          |@          dk    r]|BrZ|/:                    t;          j$        d|t:          j;        (          t;          j5                    t;          j5                    |Cf           |@<                                }Et{          |4|?         j2        dd          |Ed d d d)f         |6|?         d         |6|?         d                    |r#t;          j>        |6|?         d                   g d*         }F|E9                                D ]^ }G}H}It          t;          j>        |G          @                    dd)                    |Fz  @                    d+          9                                }J|r|Ig|J|HR n|Ig|JR }Kt1          |dz  |DjA        d,z   z  d-          5 }|B                    d.tq          |K          z  C                                |Kz  d/z              d d d            n# 1 swxY w Y   tq          |2          |k     rjD        dk    rujD        jE        z  dk    rbjfd0|@9                                D             }Ld1|Ljd2i}M|2:                    j!        F                    |4|?         |M|Dj	        3                     rjG        rH                    |E|Dj          nd  |r|DjA        I                                rt          |DjA                  n|DjA        }Nt          |Ed d d d)f                   }O|Od d d d%fxx         |Od d d%d f         d%z  z  cc<   t          |@9                                |O9                                          D ]m\  }$}P|.:                    |N|r|"t          |$d4                            nt          |$d4                   d5 |PD             t          |$d)         d4          d6           nt;          j$        |@j2        d         |t:          j;        |7          }Q|Brg }R|Ad d df         }St          |Ad d dd4f                   }Tt{          |4|?         j2        dd          |T|6|?         d         |6|?         d                    |r7|!M                    |Et;          jN        |Ad d ddf         |Tfd                     t;          jO        |S          D ]e}I|I|Sk    P                    d89          @                    d+          }U|I|@d d d4f         k    P                    d89          @                    d+          }V|Vj2        d         rt          |E|Vd d)f         |T|U                                       d          \  }W}Xt                      }Y|W|d         k    P                    d89          D ]}Z|U|X|Z                  }[|[S                                |Yvrf|YT                    |[S                                           |R:                    |[           |W|Z         |k    |Q|V|Z         <   tq          |R          |Bk    r ng|/:                    |QU                                |@d d d)f         U                                |@d d d4f         U                                |Cf           |r|3dk     r{|d:|3 d;z  }t          t          |4l|5|jfd<          X                                 |d:|3 d=z  }t          t          |4t          |<          |5|jfd<          X                                 d> t          |/ D             }/tq          |/          r|/d         Z                                rt          |/|||jd?\  }$}%}0}&}1|0d d df         |0\                    d          }0}\|$\                                |%\                                |\\                                |0\                                f\  }'}(})}*t          j^        |/d         _                    t          j`                  |@          }]nt;          j$        d          }]dA}^tS          |^dBk|]a                                |'|(|)|*fz             |	s|dCk     ri|sg|dk    ratq          |/          rRtW          |1          D ]B\  }X}_tS          |^j|_         k|]|_         |$|X         |%|X         |\|X         |0|X         fz             Ct          kfdD|+|,|+|,z   fD                       |||fz   };|stS          dE|;z             |r|!c                    |t          je                                          F           rLj!        rEfdGt          |g                    dH                    D             }`h                    dI|`i           |2rh                    dJ|2i           |rtq          |.          ro|1t          t+          |t                    r|d         n|          jA        ndK}adL}bt-          ||a dMz            }ctS          dN|cz             t1          |cdO          5 }t          jj        |.|           d d d            n# 1 swxY w Y   	 ddPlkml}d ddQlmmn}e  |d|b          }f|fo                    |c          }@ |e|f|@dR          }g|r dS |jp        jq        D             |gjr        _s        |gt                                 |gu                                 |gv                                 |gjw        d d%         \  }*})n)# t          $ r}htS          dT|h            Y d }h~hnd }h~hww xY w|
1                                 |sP|r8d/tq          t          |g                    dU                               dV|dz   ndK}#tS          dW| |#            t          j$        |          |*z   }itW          |1          D ]\  }X}_|0|X         |i|_<   |'|(|)|*g|-U                                tq          |          z  9                                R |i|;fS )XN)
batch_size)exist_oklabelsT)parentsr!   )map_locationr   )scpu	coco.yaml)Loader   ncg      ?gffffff?
   r   d      trainvaltestr0   z: )padrectprefixz Testing with YOLOv5 AP metric...)r*   c                     i | ]\  }}||	S  r6   ).0kvs      /var/www/html/yolov7/test.py
<dictcomp>ztest.<locals>.<dictcomp>b   s    hhhdaQhhh    namesz%20s%12s%12s%12s%12s%12s%12s)ClassImagesLabelsPRzmAP@.5z
mAP@.5:.95)	        rC   rC   rC   rC   rC   rC   rC   rC   )device)desc)non_blockingg     o@)augmentc                 6    g | ]}|                                 S r6   )floatr7   xs     r:   
<listcomp>ztest.<locals>.<listcomp>w   s     %C%C%CAaggii%C%C%Cr<      c                 D    g | ]}d d df         |k    dd f         S )Nr   r)   r6   )r7   itargetss     r:   rL   ztest.<locals>.<listcomp>{   s8    EEEa''!!!Q$-1,abb01EEEr<   )
conf_thres	iou_thresr"   multi_label)dtype   )r)   r   r)   r   .txtaz%g 
c                     g | ]E^ }}}|d          |d         |d         |d         dt          |          d|         |fz  d|iddFS )	r   r)   rM   r-   )minXminYmaxXmaxYz%s %.3fclass_scorepixel)positionclass_idbox_captionscoresdomain)int)r7   xyxyconfclsr=   s       r:   rL   ztest.<locals>.<listcomp>   s      [  [  [ 9ItS	 7;1gtAwX\]^X_imnoip-q-q-0XX09U3Z<N0N,94+@+2	!4 !4  [  [  [r<   predictions)box_dataclass_labels)boxescaption   c                 .    g | ]}t          |d           S )r-   )roundrJ   s     r:   rL   ztest.<locals>.<listcomp>   s     *B*B*B15A;;*B*B*Br<   )image_idcategory_idbboxscore)rT   rD   F)as_tuple
test_batchz_labels.jpg)targetargsdaemonz	_pred.jpgc                 8    g | ]}t          j        |d           S )r   )npconcatenaterJ   s     r:   rL   ztest.<locals>.<listcomp>   s$    777aR^Aq!!777r<   )plot	v5_metricsave_dirr=   )	minlengthz$%20s%12i%12i%12.3g%12.3g%12.3g%12.3gall2   c              3   (   K   | ]}|z  d z  V  dS )g     @@Nr6   )r7   rK   seens     r:   	<genexpr>ztest.<locals>.<genexpr>   s+      88a$hn888888r<   zMSpeed: %.1f/%.1f/%.1f ms inference/NMS/total per %gx%g image at batch-size %g)r   r=   c                 l    g | ]0}j                             t          |          |j                   1S ))rn   )wandbImagestrname)r7   fwandb_loggers     r:   rL   ztest.<locals>.<listcomp>   s8    xxxPQ<-33CFFAF3KKxxxr<   z	test*.jpg
ValidationzBounding Box Debugger/Imagesr   z)./coco/annotations/instances_val2017.jsonz_predictions.jsonz+
Evaluating pycocotools mAP... saving %s...w)COCO)COCOevalrt   c                 P    g | ]#}t          t          |          j                  $S r6   )rf   r   stemrJ   s     r:   rL   ztest.<locals>.<listcomp>  s(    %^%^%^Ac$q'',&7&7%^%^%^r<   zpycocotools unable to run: zlabels/*.txtz labels saved to zResults saved to )ynext
parametersrD   r   r   optr   r   projectr   r!   mkdirr   maxrf   strider   r   typehalfeval
isinstancer   endswithopenyamlload
SafeLoaderr	   torchlinspacetonumelr   minlog_imgszerostype_astaskr   r   printr   	enumeratehasattrr=   moduler   r   rI   shapeno_gradr   Tensorranger   lentolistappendboolcloner   tensorr   viewr   writerstripcurrent_epochbbox_intervalr   	wandb_runlog_training_progress	isnumericziprq   r   process_batchcatuniquenonzeror   setitemaddr&   r   r   startr   anyr   meanr|   bincountastypeint64sumtupler~   listvaluessortedgloblogjsondumppycocotools.cocor   pycocotools.cocoevalr   loadResdataset	img_filesparamsimgIdsevaluate
accumulate	summarizestats	Exception)mdataweightsr    imgszrQ   rR   	save_json
single_clsrG   verbosemodel
dataloaderr   save_txtsave_hybrid	save_confplotsr   compute_losshalf_precisiontraceis_cocor   trainingrD   gsr   r   r*   iouvniour   r   confusion_matrixcoco91classr%   prf1mpmrmap50mapt0t1lossjdictr   apap_classwandb_imagesbatch_iimgpathsshapesnb_heightwidthtout	train_outlbsipredr"   nltclspathpredngnrg   rh   ri   xywhlinerk   rm   rr   boxbcorrectdetectedtcls_tensortboxtipiiousrO   detected_setjdap50ntpfcval_batchesr   	anno_json	pred_jsonr   r   annor   emapsr=   r   rP   sm                    `                                                                                        @@@r:   r1   r1      s   0 D H 6e&&(())0 	szjAAA tCK'8'838'Ccl[[[\\ (	6H		h==dUY=ZZZ W6:::U\%%''(("--u+++ 	6vu55E ;%2ND 

 
JJLLL$ 8--,,$ZZ 	819Qt777D	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8 	8$	-c$t*ooB>#tR((++F33D::<<D H 3* 3|,c22 H;%E%+aE51144V<<DDT%JZJZJ\J\E]E]^^___8'???sxxU&tDz5*b#SV]a.6${{{.C.CE E EEFH
  20111D&"---hhiwug7N7N(fTYT`TfgghhhE(**K	 __A+M(Aq"b"eS"b;q(((D/12r2r/A,E5"h2;DRS<T<T<T2U2U sp sp..#wvffV$f// 1chhjjjciikku**V$$"yAvu]__ 	* 	*!##A"U3888NC#%%))B  U%C%C%C%C%CWMMaPQSRSQSTT AAAqrrENNNelE65&+IJJMMfUUUNNNIT\EEEE599EEEEZ\B!##A%cjI^`nrsssC#%%))B	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	* 	*$ "# S	T S	THBWQQQT]b0!""45FVB,.66!!!Q$<&&(((BDb	??DAID4yyA~~ qLL%+aUZ"H"H"H%,..Z_ZfZhZhjn!oppp JJLLERqrr*E!!!RaR%L&*Q-PRTUWWW  L\&*Q-00>(- L L$T4%el4&8&8&=&=a&C&CDDrIOOPRSSZZ\\D1:LC-$----tDh1TY5GH#NN LRST!2 : : < <t Cd JKKKL L L L L L L L L L L L L L L <  8++0JQ0N0N-0JJaOO [  [  [  [ MQKKMM	 [  [  [H
 +SX,Y,YZE ''(:(@(@RPU_c_h(@(i(ijjjFRwWcWmwL..udEBBBsw  	<-1Y-@-@-B-BQ3ty>>>	aaa!e--AAArrE


c!!!QRR%j1n,


szz||<< < <DAqLLhKR1aS1YY1G1GX[\]^_\`XaXa*B*B*B*B*B+01q>>"; "; < < < < k$*Q-UZPVWWWG *$QQQTl !1Q300SW]122.fRjmVBZPQ]SSS `$225%)VAAAqQRsF^UYDZ\]:^:^___ !<44 * *C,55u5EEJJ2NNBaaad+44e4DDII"MMB x{ *")%BQB-b"B"B"F"Fq"I"Ia (+uu"&a.!9!95!9!I!I * *A "1Q4A vvxx|;; , 0 0 : : : ( 2 2 215a41#&x==B#6#6$)E LL'++--aaad)9)941:>>;K;KTRSSSS  	pWq[[<<<<<A+S'5!U,KTXYYY__aaa:::::A+S2B32G2GPQSX,Ybfgggmmooo 873;777E
5zz eAhllnn !-u5I`hpu!v!v!v1b"haaad8RWWQZZbVVXXqvvxxbggiiGBs[q22bAAA[^^ 
,B	"tRVVXXr2uc:
:;;; 	 LBGGHG266c%jj6h'' 	L 	LDAq"a$1qtQqT47BqEJJKKKK 	8888r2rBw&788888E5*;UUA c]`aabbb  :xtELLNN7K7KLLL 	:L. 	:xxxxU[\d\i\iju\v\vUwUwxxxKlK8999 I8,GHHH  5SZZ 5OVObDz'488EgFFKKhj?	a#:#:#::;;	<yHIII)S!! 	 QIeQ	  	  	  	  	  	  	  	  	  	  	  	  	  	  	 	5------5555554	??D<<	**D8D$//D _%^%^ASA]%^%^%^"MMOOOOONNBQBJC 	5 	5 	533344444444	5 
KKMMM 1emuaT(--778899aaHW_L_aaasu/(/A//0008B<<#D(##  1Q%QE3I$((**s:">!F!F!H!HII4QRRRso   !GGG#C0UU#	&U#	>_	__%A@@A@@A@@B)AB= B=
AC#CACCAC#__main__ztest.py)progz	--weights+z	yolov7.ptzmodel.pt path(s))nargsr   defaulthelpz--datazdata/coco.yamlz*.data path)r   r9  r:  z--batch-sizezsize of each image batchz
--img-sizezinference size (pixels)z--conf-threszobject confidence thresholdz--iou-thresg?zIOU threshold for NMSz--taskr0   z train, val, test, speed or study)r9  r:  z--devicez%cuda device, i.e. 0 or 0,1,2,3 or cpuz--single-cls
store_trueztreat as single-class dataset)actionr:  z	--augmentzaugmented inferencez	--verbosezreport mAP by classz
--save-txtzsave results to *.txtz--save-hybridz-save label+prediction hybrid results to *.txtz--save-confz%save confidences in --save-txt labelsz--save-jsonz+save a cocoapi-compatible JSON results filez	--projectz	runs/testzsave to project/namez--nameexpz
--exist-okz*existing project/name ok, do not incrementz
--no-tracezdon`t trace modelz--v5-metricz.assume maximum recall as 1.0 in AP calculationr'   r.   )r   r   r   r   r   speedg      ?g?)r   r   r   study   i     study_r  rW   z	
Running z point z...)r   r   z%10.4g)fmtzzip -r study.zip study_*.txt)rK   )Sargparser   ospathlibr   	threadingr   numpyr|   r   r   r   models.experimentalr   utils.datasetsr   utils.generalr   r	   r
   r   r   r   r   r   r   r   r   r   r   utils.metricsr   r   utils.plotsr   r   r   utils.torch_utilsr   r   r   r1   __name__ArgumentParserparseradd_argumentr   rf   rI   
parse_argsr   r   r   r   r   r   r   r    img_sizerQ   rR   r   rG   r   r   r   r   no_tracer   r   r   r   rK   r   r   yrO   r   r  r  r   savetxtsystemr6   r<   r:   <module>rY     s     				                         , , , , , , , , , , , ,l l l l l l l l l l l l l l l l l l l l l l l l l l l l l l 7 7 7 7 7 7 7 7 E E E E E E E E E E K K K K K K K K K K $r((-JS JS JS JSZ z$X$)444F
3S+Tfggg
s4D=YYY
S"C]^^^
3B[\\\
UEHefff
E4F]^^^
%6XYYY

B5\]]]
|Babbb
L?TUUU
L?TUUU
\@WXXX
Crsss
lAhiii
lAnooo
[?UVVV
%6LMMM
\@lmmm
\@STTT
lAqrrr




CMMSX&&{333MMz#(##CH	E#JJJ x+++SX[^\^]]^[[lS_4}|#}	 	 	 	 	 	" 
W		 	 	AD1cnclD$RW_dpsp}~~~~~	 	 
W		DsJ,,-- 	+ 	+AAch,AAttAww|AAAAA    3133Q333444$sxCNAs~s}^a^k%*cmE E E1aQBJq!*****	0111 d 
	r<   