From ed12b23dca8c6af6754d4cb0700f9e794869b5a2 Mon Sep 17 00:00:00 2001 From: Ankit Sachan <> Date: Wed, 24 Aug 2022 19:07:51 +0530 Subject: [PATCH 1/6] dev branch initialized --- README.md | 187 ++++++++++++++++++--- benchmarks.py | 2 +- conda-cpu.yml | 15 ++ conda-gpu.yml | 17 ++ core/__pycache__/backbone.cpython-37.pyc | Bin 0 -> 4083 bytes core/__pycache__/backbone.cpython-38.pyc | Bin 0 -> 3812 bytes core/__pycache__/common.cpython-37.pyc | Bin 0 -> 2495 bytes core/__pycache__/common.cpython-38.pyc | Bin 0 -> 2526 bytes core/__pycache__/config.cpython-37.pyc | Bin 0 -> 1343 bytes core/__pycache__/config.cpython-38.pyc | Bin 0 -> 1336 bytes core/__pycache__/utils.cpython-36.pyc | Bin 0 -> 9880 bytes core/__pycache__/utils.cpython-37.pyc | Bin 0 -> 9706 bytes core/__pycache__/utils.cpython-38.pyc | Bin 0 -> 9698 bytes core/__pycache__/yolov4.cpython-36.pyc | Bin 0 -> 10282 bytes core/__pycache__/yolov4.cpython-37.pyc | Bin 0 -> 9298 bytes core/__pycache__/yolov4.cpython-38.pyc | Bin 0 -> 8921 bytes core/config.py | 2 +- core/utils.py | 34 ++-- core/yolov4.py | 27 ++- data/classes/ppe_classes.names.txt | 3 + data/girl.png | Bin 664559 -> 0 bytes data/helpers/custom_config.png | Bin 0 -> 27212 bytes data/helpers/custom_result.png | Bin 0 -> 999879 bytes data/helpers/demo.gif | Bin 0 -> 8601828 bytes data/{ => helpers}/performance.png | Bin data/helpers/result-int8.png | Bin 0 -> 1881827 bytes data/helpers/result.png | Bin 0 -> 1880035 bytes data/kite.jpg | Bin 1415684 -> 0 bytes data/road.mp4 | Bin 801181 -> 0 bytes detect.py | 201 ++++++++++++----------- detect_video.py | 126 ++++++++++++++ detections/detection1.png | Bin 0 -> 3155515 bytes requirements.txt | 4 +- save_model.py | 26 ++- 34 files changed, 500 insertions(+), 144 deletions(-) create mode 100644 conda-cpu.yml create mode 100644 conda-gpu.yml create mode 100644 core/__pycache__/backbone.cpython-37.pyc create mode 100644 core/__pycache__/backbone.cpython-38.pyc create mode 100644 core/__pycache__/common.cpython-37.pyc create mode 100644 core/__pycache__/common.cpython-38.pyc create mode 100644 core/__pycache__/config.cpython-37.pyc create mode 100644 core/__pycache__/config.cpython-38.pyc create mode 100644 core/__pycache__/utils.cpython-36.pyc create mode 100644 core/__pycache__/utils.cpython-37.pyc create mode 100644 core/__pycache__/utils.cpython-38.pyc create mode 100644 core/__pycache__/yolov4.cpython-36.pyc create mode 100644 core/__pycache__/yolov4.cpython-37.pyc create mode 100644 core/__pycache__/yolov4.cpython-38.pyc create mode 100644 data/classes/ppe_classes.names.txt delete mode 100644 data/girl.png create mode 100644 data/helpers/custom_config.png create mode 100644 data/helpers/custom_result.png create mode 100644 data/helpers/demo.gif rename data/{ => helpers}/performance.png (100%) create mode 100644 data/helpers/result-int8.png create mode 100644 data/helpers/result.png delete mode 100644 data/kite.jpg delete mode 100755 data/road.mp4 create mode 100644 detect_video.py create mode 100644 detections/detection1.png diff --git a/README.md b/README.md index 8b6da877..e6ee5e1d 100644 --- a/README.md +++ b/README.md @@ -3,62 +3,142 @@ YOLOv4, YOLOv4-tiny Implemented in Tensorflow 2.0. Convert YOLO v4, YOLOv3, YOLO tiny .weights to .pb, .tflite and trt format for tensorflow, tensorflow lite, tensorRT. +










| zO_)735~utDAP&i~5<*=03%GOi4RH!Lt_TU<^CoEsUd^-p{OtGP-+SH%?RJwu`|yun zm}n95J5J781cUqVnQb6~2&zbzJ|ZFz;QP8wlDBMf?pJP!Wpg zpwW%KAra}ua7N9oKHxSRZI^n&Rld({UKTv2gfvrVH@0-SFN@SzZsm=X7b3lp7Xztf zk;!yY3S?@T+9zdd y6QQEXG)7eyj4 5%qK@PUJAkcvwxCCMYu`H}>sdAWSTrsf2HO`~sVl$gc z?IKuGozO)_s)3_VUE)Q+?GAMf#xli?VeC2i>(S >pmHlWCfr!5(_5Pv1QW<)QWiI-dpZH9+UOk)2#siyF4O(%|A)s- zZyQCQ62=NXk&L+}V*rPl!toMgU(L8WU8yrB%8W6uz_m|p&!keoLxrAns9wVHGLisD z4L*YrPihhMoUO+$R+8`RWw?f|0Uu->c?h5R2}l*_)RHk|)lrBSQ;}zM4%s%ZiEv&o z5)sYoBA(Y4GUKSCqP9+e)`8ZmS`{r3zZM_WL~=}FT*quYgwatVTE|o@9VY(Nq>A*u zZ9F4Y0y>f^6z!cr|4_wZ8T#*GXLH=De8wII^Q2gTm8&RWmri#i0FBk{PS6QXAm4~a z(h2m-XJZ%dLQ0AgjE3g|8X(vw|3LG?!@r;Z`Rix>`}c-lul@MwxBY{A0FIimLde}A zZ1Sy>xcVShaOK9ecBC$(VkY00u5PT(g*2`{ hkl2 z5w|{ZwTES~3;ogs?ZyS_mRr}5E#-t2zFJ+>>( mt{~#sx*;njSbzOEuGPfC-(3 zYvsjsW|_CawNFFD%!p5=YYNCC2=-J-m+;KyyHFHd&@Wv3Y{u*!B a{xmn>`XUWH6RyiUTpQ|gHZ?Bs zJ Y}TbY^$fUfXe+rXg*_fu#q)sBP2;@gemKTBQ;a5fbgim+^RKY_BukH8bO+ z3F}iM^^_j~;*cCGA;gtmz@6jV5T|hCia_vYoTMh5$Zy}gdGo&Cn>=kc>j>5-fBZsu z1EJsDW_}UaJb<6x0>BZ+61DMT!~-54ARY=l42I#5JP+H1U*=UFAK-SxYrKAd+7-Uc z8+-vMRo>)_K#BP!z69SI$6uk=l@pMOwo(V@m(%H%z79ZuK91S}$L)|uFHjHjkduR2 zo4h~-wIh&IvCE$^lMc2DHDWT`XC^Ch7GZ?y39Rdzs@NBKq75_Rdcty^T+i~JP$Ex7 zGAg(uDv_AoBGF>Z6tE>}0f%FwZ+Q_N$@YZ0WfaSD)|Dc;n`| 8`NJ4|)FO`VZoIS9=C#fui+@I2kZ43bWt zjabLaa=vuB!m!RvM_!nuE0W2WgAY7;+cRyZp%3Q_INSx;ef9eQ%0Mp~bc8uR#?t_> zpbSbh437iYk>}_rDsdSc2N39BYZHPUn4XOxJ`m5`*oG|nS;`~@TWsw-LN?Nqu~3%4 zk!*#QXd!zRKeMrC0oPw*Tcb3UOlwMCqQ4%mKh;9%b(U{uX8lpIo6CZ6y>3LV3)Pdw z?#;bI7CRr@G(DLaadX795h~eOPa&WHMx!FXHQrM(IMsCCIRs&X>v$3GUwyqqZh70V z^C_k@XCpzWty2mmF_8{mp!Dkrlcy(DN_mk|>J`}LsqLwd5@?H{Y6cb@cFBPNKm~r< z#XH8N;whU?Y$OHS-b>xt*{T5o{f8dHPyYm<3{+y!5c=yVbg3!Pb3BE !T& z(<+aql^M^Fl$cl65Wp(HYFR1C0`h0kQH96H81Sm=%R|79V%|8$eBm(mQsa`SeN%gm z${2LSWyqV`f%>70_#%A2hnw|bqx8Ld7);}Q2~I9M4zqB2BZlHw-f9IegA?dFq&!#! z%tkxVk^IDkLS1zPq9M*F|HATI{l8!S`Rf {=a4vTG!0%Tp zw$)xHA=}zEwuQ=tq&nLdwyKTFxX`vbW}HJ&*%;c4b~C2!@+qSd{fT4>*wr~L%QKU? zQ313i$4%!bPt+Trwg26>ZvE`+iI^M@m?fi34_Zy-TE|8p9<)?^ziZoU3srnMGh*YB ztvoF99r!NHY1cN88+J`WqZA{W`(ZV&*RGs3)jZYLj1BVK)_v7bCFDfC117X;wvpxI ziJ{&G+dK^s)dMybw$7o2AlPFmY|K)V?Z8a1K{vO}vmG^i(4z^+Qg1n*2pF(4SIVx6 zZPO78Iq^ePUICK60l+oZGW;q5!6dkb30i !_+tlR^3!RT3h zfUaHPA?){Q O%l0u1df<=Xxtvx8Y-(vvj2cmO}}*8?%Jbd@{N{zuE8t+BH2W zl%eUwsE^=w`;rnm<1mkCF)@(#3qIS$^YgAO((RjYNBhSevb2g Oco;3ks` z%XuDL{7W}Ruy;Nz!R 14E`z Xlwmau1;2KQ&J;fato?{uZF zipf~p*nerp+mWj%ebM{|uo*!;*Im%$rzXNnSUrN>Yt?gZwR^*y)kAo-+`Gl`8jQ)6 z84k8Pya)fTaB>)eAJHsTY7MU0xSPo=7fiXKGZJP{@Uv=*vJvYGTX8{!NfY^|f_yrk zE}9;Lf4 Up;6(T(yt=JFlFq gIi>!w@y!|EnLSqbTq3o5dg5TUSznDweJLjY0l&M93jhEB literal 0 HcmV?d00001 diff --git a/core/__pycache__/config.cpython-37.pyc b/core/__pycache__/config.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1cff50dc8c8a422e19cab11a2a56e7697353bac2 GIT binary patch literal 1343 zcmY+CO>o;p6vrjYAF697j_o$oNka-LG*DYjQV31k7}Zu{4UT0b85&)7+&sl2aO{kw zCL~u5oL~lSFdRC=DK{=$IC1I)m|-~T#0)1Nn4!}HGYkjbTPugIw7>V?w{M@GcK1Ox zn-;KDHoklGV^R?Qq``U1qj(p)e &UJ5i*d4DVT;F%s?Iry*!UiK@l!t^ktZZmylPW1amMCS78BOhDEpr zufVHOtc(#$a2;NQ*Wm{5%kT!g2{(Hgp6ddXF;k_7HDMKLt|t{;1O;xvN;H#!71WcN zEUfbADOlrnI{KF!+{ST^&A?mS=HYE_3$V^@5#HhU65QeTauhcU8+?ra!tIqPUy0`{ zMfpl>lCQ)Ha2MlBtO)nGorC+_&hvUo>?&+p!g6&?r?D)Cvexxa>fT;(x>Ql18+4Vu ze%JS1UpYK i9uLxfd285po&k^3w zc>La%h%w!jah9+^xJH;I+$U@j%7nXwV?sc12;UN(BD}|xZ;SHHk?%TTgYZ7VBz#6V zLwFAo3&)u8t*|$Bylf>S-z3D%vmK4V0s9fA!YN zI^UoehImgfvEBRc?Ah--kJ{DV=YRe1 `aTEj4{FdYf@!CII(*S6l; z4O5nF>UE6GM1oD+4|lDa+SI~KB)HqjP1druX0plrv~F}*)37XNH%!fHgbCYJ^_GKQ zY#BCdt9HXlKTz#jgIT(xIcdGs?${G8*Hv3(YG>O?HBF|sblXXy&{}mT`=M&?blOa7 z8?}bz dp)JG6wCF>TchQ;X^}n)nf_ zeNr|K&xFw(+*FQ#x0R0Xj(nv%_}B}S`tW$rA9lf40(amKNBjNZartD}A0FK<2m5_5 zaLWf>KX6BjtIFPR Aq&9q!gFrm@MAJXHlFIGrY^9 P949aDBHGE5cyatcE6!s& literal 0 HcmV?d00001 diff --git a/core/__pycache__/config.cpython-38.pyc b/core/__pycache__/config.cpython-38.pyc new file mode 100644 index 0000000000000000000000000000000000000000..4c368c2c83fff1cb431f8bcdde9774023d0e860d GIT binary patch literal 1336 zcmY+DPi)&%7{Ki~f4nSd( z{7zHlHqF;Q@1p9zlSN=}?CS7Hf>xza}omIMjn zkboqlKt`T}G@OSFWMK-XAqO*%he9vUb5l@+3z&ToX5j_o9F$-l7T^*r!i%s3m*FLN zIm(qW;|g4bSKw8+#>X QkEjhS}evZw+8(in%O|A>D!F3Vd;`#z?a(yw%n}u84$8X_!E~;1J^-58_ z5}VX3u>#!2yb>$I9j@o$F4qgZpAx$STb8g~8Pka@i=nJ_{NtL}4Nm4(6zBvUrQ7fL zzUwR9VRyJP=p4BIID@(49HBtCLbyg)AiPUx5H<*P!q %|nD!p&NA$eNqJ$X#>S7j{GJPwrKDkr6Ae`u3@H&6~c{k0pb8!N%5!8nE~ z-UBRb_x?S7`s?n8txE5UKYw`e_oIhf<04LOpUj*scLTQ@c*B7bmHwsDTwZi!7taCk z97a^jNw{P?5@Xd+>hAZ#_@2=)!c?`PT9#&oDYaRx8>SVeBZIxa9%jyLTW{`#Da$tX z8s=sqgH6Ks_N=Pf(85e)@UWActYt0DWRv-6-DtChVOh+so0?S*6Sk@9O$XoDG;G#V z?YfhGN42YUX6cURr1fU2ZBJ~urrIh~+dEFGVKTj`+fEV 1K$7F`pc?rTO$N^wb!$>Mc bb)T=@ncbaTd@UCrq@=Y>*;o|_kN_=342vSg4~Yr|B?4tp6RFmN?b+Q~ zEM}KI0|G>P@*z+$okX@=Nu?6!FK|ATkIEs39CAoiZoarGhq=TRA5u)^kh3n%@Ab?s z2vD|Dv3*HtQS;{Y>({S8rr+!LUSq9XF23}i|I&QsoTB_tdF*EZzl ``up%q4;seDgu@bZKw%He1 znN?6zW~bQ%n*>(zN}ko5=uIA|-qa!9n?6tuR5sPt*)*F0-wdm=6Od75H8zX)2{y;( z@vgDw*eP}r9JB08>?!s%usQZ+_6(~7n`i2V(pY?iIVtN6HPKt`PLjVr=nw9lztPf& zjGvx8SMd&C0T3#$3#`GG#%oMtdPj@3yO)^3a)bp>XLaXUo@Uz7L6dW3CBlV -rp_nLk8{$M8xc@8s_;L{r`Z-*WaSKMIBk5;Y?c7y)FW#LNX z1>u0V`-9yx=~|tM+I>Ir&TPA3 Afr?!wS3Vb1n2j>_7@NSC$VK>)Z1O;h^O4%q1VNomvFVTW_j0irTX7*S#w9ir z+aIfY&qszZ4%BPP$Ljm1;<6~SnJt5VhgC(nrUV*05m$sQX`ir~uqACao)AheCn^VO zJSir7`FIM@WHa+hJPpiZr-03fvdC?jAFKTIcpL>bFQ%#rjU}#%YOhG;wuU`F$7a|9 zJJ~VNvMQxdK>7*vJ@=v#+rjjq3?b(d*Tj^V5z}J2ZN#&OwZKYZ780qCIWgBOQmJQ? zbn2yp*@8YA+aF=PWii)L4^&kVCxBN8yZa!ei&_Vxqw+h7$oDD-3Upq 47w0s&I6N3RnI2)s|gBd`sSXngY#ZP136 `tTrEPxBWi4_Je3`HOX-|=y*w?<3*%I9#2eELlMHHwB_-@>o-Gx-%Cn< zFx-inVb{g5O{kActxfJ_lp!CmomP|-A_xqJgAh$Z$lUe(PB#iM(>`d8c}^ vy#G{@@DXOQCgXlz#BBI{8rju-Vd70-*$@N&qnH4qqeD?YHs>&n4}Wq z5;(T(En`14MABR&wzMKyC2gPZ20&^+444plESM9UF#Mguds?lkRhX4LQD9_h+JeNU zbz7a&=1^mUe_H34AgM*4pMJE#N_fTw-&bN4#sVh)K>OD7v9|YYqzY{JYs&kz_q14# zVH$cG14XDpzo^_@ct?2$+yB>;x0E|DGEf73JyCh078^SMB19(zFWA}kxEo;`g%S6M zjT{!c?}nlLpy`*)(f14!gSnBLXg9AV1`&=g%p~_ >{PVgUrz>X;VGTDYm?-{)uG+&MK5;v(1Hd4del9u-cNiPI>oP8SXtsZ=B+_Fe5 z$DF-PMrkA?Sdeu(PR<8eojs}>xB6o#zZ_U3A3f-?9#x_VNrfMP9t pguBY5));2LSPNz6(^3}D(%y<*M?*($n6Z7h=D;pcv zHyXJlcjMNTS2s9)9e#_z8#JcE`rB_bCDZZmT9O+cD$({kZ-F(O15mJ+E9xY6cLh6n z8V_)FQscyN#AO+O;APZAN)Mj}OQ*qkIVCjgRuzk@9_Sm2EYVWSk~G@-I -f;iYBQo`fBu>z%xGP=b(i` z&9n+z?>!vUaXvPoafZmBgbN^YCuu`kktQsWuVPjb%Mqq2bZFC75sD~?B92TgE=9Rs z9_ ~clD0Ol2&<}4%i}d@KjJkpqC;Nvcf5xB65!ZK4^wMhev*z{ zHsx!V=@?8;k0OqNe)FE&-+=>$>XhXNgUj+{l)BL{`EArBI&6NT z@pPTCY~M^pGpCdmhc5FN;)Gp1-D4Xinap^&hl8-?g`p3*;VA$`I)~Hh0`_?o@LAO& zORq1fODb=n{&tH@HvLZGA=6D;EBq>y9%dV6`5R>6)X`S@y3$r@`#-=IdWcPPjTFO* z^ho-X5Afj*&?YWON{$(z6fz1n63dgHgDqu(nqr7_2ovgi26>FJ9hc!T{wua+ndRqY z5AYiQIj%$&whkzwLR6ODQo@HvX%7{6mH%+}p(u{{;t6m}$dcURgkMx7&4i>8&CF;P zXi_P_XJxd)W3<9Wg%#nAmd5g@j*bAHsV1hSUpgan>6gBK_aR19kko2qv69G%{Hy~1 z)P^dO_ldsHha6>F!<%}XU>ILpgHqMtcNXAZDxxN4MOB AsZ_}$B{FkP@}Yi0OtPtT6evxyiH{J)-hBw~mb}{O_3>d!Ckt)A z8QOAm26e#lel12=EYzy<5POm=LtFp0c9)JTHPhbzepzY&R9IU+o2Yw;KTGfl(u3T~ z;xICrpB69n{V-|`wuhHKpiZdAyt4lkz(zD>3G!1nf-6H_) Car7Zh-&24r5$_pBgjY(`Z_QS@}2bc8Dr%= zR6W2WhnbqeI*Ms?I@z)h@q?E;Yx4KQm;F0fseS9Y@Iw8$<<)ir>58c9x3&V9BNVK@ zA9%MBb?|4=90wzci9w$O2GXd?-1hdOjgejEOT=NqfhV$4z47My?dEIO-`aTX`n%1In{WK;t?PFj z^VZGv>&+`y8YlU$Q|Ecw8gL&?=^DapPq=-=>|W+8f=~>*gI## _ZS@D%vPc0kK4O5>Qyt3@O|Xof6@rz6!LJW&iw_ $1MU>sgCN?FCj|}+ zv_d2xeO^Cchy)}`E-b +n}a+@brONY0DlctIjXByGOB+j1G>hs!Z zbx!5`kT>?XD5N# Tu+Oc*gSpk16GtA`e52gEh8<#U?Rdi%rS3DBuXtVbWp5;khXkevs!zew!$f zsonoxv5w#6q08Ovdb+94U8pa*OZCmA`ttJfQvH16NtRWxTv@8Wa+HN6?OnK2_rv %r)CE|tN(Xom;cg*FU0i7_)d|~NdIcCdOMCM68ui8VON|SQYfI-F^)r|1 zK+-DeVR3co9OxJD9@hg+8J2k++eA8Y>thp?dT455xO;w>QNct8rlF-R=uKwpcv%{w z)FOdn)Phc;Mn2J^w# CS~}Z9&d)Qca(A{rbQ{a zxD!x gok$R7czrgfDvcgJX5^kZPJ*%G9tkGLPjS|sq4Z+4Y!8KM@$~lcy z^`Aah)t{59LUB_=aA ;9;@FRy#1s_`2T7&_-|lO|J-cG6E=hki03hZ-y}dM zDgSK(zXJfL=L5pYA>`z4@ec|7E`hHTcu3$I1b&ae?-Td~0v`b+6J8+Gn$3}+m>v-x zGZ qw^V-BJ~ic=KJU;B%f0${xnl@8rg}uZozQWH2#NZF*X}D6vk$w z3or5W6F&7+ezp_-7h^V =YEY-L`Lqt+4?>;D>{*Bh(N8>+$(TX7TY^cOnWd~& z6&E#CF+<)T!s-(+ZwveXCQaE@#D9G+@; uf+MITq3`P00NmBWRhYFoKI7#7nw7C z%fNkUTPAvOD p(A(X(41oAyP62RaSg%4$7Ruoun7UQ83-CH92 zX9`LildLQRBYr7&OrekjJOzxQglv)u99cS X3VYnAoQtqgHyQ;fknmUuMydem70edd z#Mrv~`a8 >G~k@ zF4V(8J351JyHxK+(J;KQvf}bR|K9R|cUFe1y>jlwv*(x3p8v|(wPh4#LkfWEWA=_8 zb$2$Gk-b{k>>`4TLOgmVjkISOc(DVZgW{u!sQAABQL-sqlCl^yj_aGaNmoZ zk4(EHl`A3s4T3_I>zpIP(Y?K4V}jo$iDf8L6IUR(!yWV)vfw^CNb=iW)EzLVl4V1h zxD55TJ5FiS3z0cV(=vLiAL5@s`e76QHnD~O(EyfKITWa&4MUn^)FAbi^6B-bV^Ozh zGx_Btek@j!tFcasPRS$1oI@_7f?S5BO(Wldf4V?cV^JklE}~=sLd8)(sg0c;%A%7_ z%e2OMAVRg__%x+9M_LcpEC(7tyEljIdJdPNl~{}N2 5S( z*H2I#(p=M9CJT3Dw#te63z!W5F68n*Cm>y8ibeTf68I~C#NG*>7&`xJs{R`Slm<-! zjg|i`z}^!hCn`2HeSjO|w|axtQsaM0?MNpY>g@)I3o?Po10r_;k{pt6!~5wuR6P7| zopiOa>A44eq-#ZaEh_)#M&5wSD@%EkC@<*b-3q@+V&5bnRVpv UMoIV G%>56BC(#W6 literal 0 HcmV?d00001 diff --git a/core/__pycache__/utils.cpython-37.pyc b/core/__pycache__/utils.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c9ed088bac78baa61ba234fe42bf148cd49a18f1 GIT binary patch literal 9706 zcmeHNNst`Jb*;Ut*V!7g0VJCcC`~g4Gr#~MO&9?J#6p4whZYCiD#&QnbXIrQOm}r7 zs|Fa1v%CnP1lguUg&huCr gAYD9!Z%$M;X_@lunrD5d~k$sy2$TmRrf5Q zDM!dUnLSaze*Vn-xzztZ|Nl9!l* q^WgmTUgsz+!p $W5$Jf}h@4emnGdxa L70 zE`6eIKOY&wc%WWWK2bkB5tl`oO>G+d`>ZO;(@LPRV{t{4B<)i+ElQF$6ORdH*A$gK zH69n^8&*64m}66ON<0b7X0yPiL|K@dxldGnYBY~Ln-ddNh2|1hMRm78<(9UmvUxVe zj Yl19;u!EMVRs&;bTQq=?5O;%BCOrYo&ud$An8x7 za{8Q)%LM4_J}wbBMqq+KmB6nNxIlmu?D6Xa0s __=RLRU@3@iQ4;rYS`V9KxpW*jd&X(9cCIj%8 zw7))<82y14Bw8>?>=y6$T7DNp`$2SWB{8`hw7n$X_99Xuk0&`)LlMHHxasl0>o!7v z$4iQSFxZM3VaLU^b5I|bdgr*8Q3kxvwwh6rkH9b-^h0zB!SkNyw>wdYm3Bd^&v6S= za!MJwA*WK18r=xo9$5QfLuz(G&L$na0Ntk1!Pe34wO|6=jXuZA$JQh^_wM>3wk9z` z59?GLiMo-fzB5MKn664PcgpL*!J@P>DS_8%TGnPdp5+G(=J%We+GjI$>|x*3PBqqj zH%w9vatoZ294%|UZ-}J1NJ`R*WR)a7;SGS)fEX|#^w=;bCBpD`0`Ez+s#alEETX{3 zOl$KJo779{tTv09653Dd{1P}d>7&z+1dJqgWbl0@R$(k)@*im5eLmK _EyC%Cnrd1DkL{ z<+N9a7D!?)7x?!;gtDRV%diMqq;D7-CNy7-EQ#l+4mMK5+m@F11xe2b7S28m_ErzR zKI&PZo}-o<8IR(SM=&qzbex !??6Mu}L$9hzW#v~PfzylTAjqMkP z&|3z!)>!4Fq`XFemQ|nNbZYQZ0Ey{x?%wC5%Zc&+o44L{N^7^@x_RyTTI2T3)%TMk zsjV9{JAEEHr7NpfUwiYdv?|lH_ugN-dga#jv~@1)o8+>VPGQ*PopVVpYn$j@FOXZF z $`kCQ;!ktS?mRpAIq%p^=x=+KVz zT|+1$FA6v^wYV6W8y5N*Ol|8}r~a`Pm%uGQt1x4pI2KY2y~{Ypi=redq97_W%10Uw zz`Q6E26q;)1^vchi#dP?Xqz_wTT!B2OzYu ZEk ~_>x?{9lJK>SXk`S%jF zlc@LjOT^R+n=Xz-Ex6}sLB}b}{*9D1bBbwk;4+UPPCy&hIU*>@c-Dq{I0&0w82aEF zo&Zp!b2zEaL(Z#!Csms)y}qa}s@z5W?IsC3{f^@);vvxr-+|J@Y{O80n=G6<6s2z| zEtSOoAw=jAgytF^h?5>kfAS$d+ynH9^O9mR1C)G5F?TIyk)IQpyE&21Fhn|p3H1Ym zJjS>bm*Fw~GsLpYtT{OXyvBcwE0GP+0Yy}Z%B)Q#d~}%hNP$=RcXu9%!mwRDh8AP8 zBt@L?i;AS>z-dU!Wi%T!sT62uXSDnQTK=NK3h+jYBmNVIX8_Ms6O+;}of5kAOJBe9 z2s6q{YBjQ1QJBJ-QQ)7Jpo-*uVl0dyXW7#5rV+;&=GW4oRMYS~^YAYfF)e09RUF$h zv0Daz#LDSd nPu`50b3<}xRy<$UJ|LQSUScyk1yx=`en z7S9jIh)VEI=c(nMn&D`-r($MRHb!G(oC;<$n{t(HBuAE;mF-YJCdOGd3zWv$#K(wY z?>vHcOJ42d>gX_~lZC`@ibU>dfHs %FTrR+S#xO=a$4wYQG*zH68 z!b?DgEl2YsuZDV%?n|#Af+`5*JG2aS6~iL{?c(se4_~Yk-fcwv25+y|Ro+C0qe^OD z?7F>m=3aV$%KyTn>>U5hX{4 B&ivsPHFd(z_JhV zoSRy+KD6D9N6z+#kk??G+Bu}C& z$LGH)ccR(vb0^>G2ho~5DR5w*7a{@a^ZEfpBp^|8VG%Z $QdRi}ec& z=N8Y`Yo{;OfTUG4!otepS %u_YG~BNaJT(1qr&o_ zHJKiI*XV5}TGWzxj;0$WIZV>;ZS{cofkccReDkEt{JTE$kN`nQ8PrQjF5AE%vXYcC zO2b7UIV`OlDxHNYB2AFBTuDp0uGfkhTZ5#)DM8U-NDwAv_>~@Sgs^3lPAH^B$+@r< zQ1V6My5HY=;%t#Rjfy|R@ +JXX8efBQ*o|9@Z*_-{bGKgS+$fqEVj_)P+I;_=@m@H+r-PQF1n zIc{9KMIRCNO# -3H&aB-y`t*1U?2x#=JnL9~(oZpBxenDF3KYrv6T8*hnh9 z(f$mrPfv2H`4Pqm$v0FAKTqvXA&XGcZ5V-RjsF39j7-2Z3gk4)lehzK?u(N+^(cO^ zllYfo0+>04P?*dBVKWM@OAh-d 9?fLOaAkX6?`9rLTO4$8~F9Inje&*ffYEev}y
et8kbkACf?+H}?Iqt41=-so+T<~Z z;sdp%0!O+_W@UAj+qA;}h>G99O$xI&HO$UJMpoT4;xfx48(O}Ij4dn3ngz_Kgme`C zfnW-8me7tP`-fSSMq|pgh!X0Cvj7Dg4wPU|^59; U03^&ccB*cThVEJ+r?TZiU#3@ v>Xo;kmC=KNRBoLfRscBDw6HfrAXqt4d)64F4+>m7tbQRoNl&iQj^ zmWQm<(Ky|jrwNK@2&(}gQ8G_2jej4n9edbA7Dq0{K0PBLMfEIoEAvgf5*@dZX@=tz z6)oh3v1YsnxEp0j5myxmMZ5ry^vjc6;N7Dj2DhikpvWXfQn?c1p9&~AxXw9Z3f hK?rNv^rTHqOx!u+ zUe$a<{*Q+x?|_lo%l`cWDInyq=(Z)XaFM-3m%ZJiYyA|}A+41>DFy4PARoes`b$_0 z{{i^&KP4a?Sc?AmpA+~CfTXk)JTZ0tmsI^%1SqMP0-7uTYk=)1W=>SdK7D{2qqlm4 z_EO`2Lj6cB>gw$}i1RWX$9qI>0VF0;S%drOVN}@v- CJNR_hWjZG-CNm6H|H!F_>IVZX4a#aUbD%VWQP3()f_uuMz mm#}0dB&~$(Wq**wa^VF#XO9 T2*TP%t+Ut(%s0w?WnasMYx;b{7*~|f!XE~O?tGESLU`4!( z>{G17%BU%^6KsTy0xSCk-&q}59lfLaV-N7%@jc~^%Enqc8)p;Xn_v}o1TreD$|mtX z!lu|X-c|MlJI0QJW0F0|9$}9Hn_{14kFgrCX{IhK_1XKFld@D-6TR7LC)Vv=w|DF8 zm8M4I?5E>R&kJ~>=K+MuYXa-ArtvD%nBLa<+RY2hU?ySVqgmZqX3=chI%smftU$QX z&~I@m>+6i`G<)H#Mb>!M&1Kl>#Rup!Lv-=f5Pj;iL-gsVhv+kBhv>6s-26b;snh%L zXYVO>Ju%mN% f9E7*sa*O-^j^F5dw|kp$#7)dlf)B4OydL>HTJXZPAYOQ}w-t7K z9*Y)YKa6_3)$MJaOxNpV-0B9ge{$W6VxQL*7n(ipFKos^H=5tLos3bl#)EEr?$A<> z0w}7XI%;0aYmQpf@+!}P)}$Rb_)P<`@yONxBNeN!^I4(E)t_Nn-(Wg3u sY@eN^D}y;2*GxC{>kEV@LXBQIxblU{z6+w8{R6P LJcGYkUIW{fEDhiFGUlEnvJe6D8p2}v} z1Ut%(wGFhaNa-Vxegu8bJfrlB;rIg?Le8UK6=PyTjEnJ>(Vu)!8>_noF$sy($CQ}b z%~NT&NYbg7wgI_Q!?C?DMt4hMs;%y+sv?d6uMl?gXHvSTwlO+cwsy;V3bbCqK7VA1 z)5pADB0%5vev!Zt0%HU!1b&>rIRd0!_diD3E{4EpqZgq`1esfY(C)+$X4(a >T@IX)*(8G8d9(Gax`h@d1yBE4zaGb)q(-=R(l+;085iN+`kn>SenF$ ze9TjAB &A-+%2ty`-{@Xqy%24VOeWwe^wASSg`Kq!Jm!Pbp~xyE7e#D zyeLT}$R%)#vbT)=ff 7x&Rw8?0?Hd7{&DsH5tP z%3lKQp$XDfmlOOJ5TUFp{32|E7VE3VstMg!V@u*T)xkn)cstVWJ}v3F(8B4b!P@HK z+ryT5YB}Uw&14h?GQt^Ir{nCro7EKub;DL4NcpAEA^GS*@9S|n9+6ad19wy`I6i sxHBKB4IWDx5 K!0Mj9tjH2Aw=7BH ztuOJ%(TX1jz|N(` dTeQZ87kA`>Cw4|UG!srHeFaZMC%=L*LpwD|ZPJ$; z{6>I~eUl@ef<_88(=TknH*s9|t-cN2GlX>%j({+a(#CXRO*q1;z%7)RNtmY4(H-l% zhEPOKZx2x++~g&8v>F`r^+UBZE05JgcIc~PEJzNq0S z%!v|VaBcxx&~zNT7z1R0w&w6}iXyFKS`SwQj!8?KR)kYgsO8}rv>))=7|{b>^mn+1 z`V!z+P7hXRNq&}gx^iz{q$4psN%A-nx{X_2chi@jFJ<{|@1i^ y4!(%=})Ubu8b7-?9qZtqPaVR$ZC<-7qI!05K zZsIsh+Nf3mJgz!q_4PS*PUTJ1UvJWeAN-C2Dd3?k7JVKD045w}`^#kQ)WLT8lG0L1 z4enway^D?WA|7lhJ(iy3U3|PdXw%P0ipdO6av8 hj+1^AqdmfJ_momW^MeraJSf9&80;G=3{TzaSzLYE%um78}lqMW2w zVuuxkDXd8ao@x=QNPZ~#LLYLJEe&t#afD%fEe%Rlg$J60r>Tglm=qOpWY5G(8T>9Q zrG1f?TUGi~ac;FBrkEv0#Sv!DD6IS*e0z*#T2$qDrwKw$s 2#3a!c#a4El(R z@Ka}qb5G51@a?G>S%r;I-{_}|(M+XMC6AQI>?z5I`Vle8vQeNk%EsP9Op8?@|8{)o zz_Cha3~j&(+Hj8ow6WFRs`e2k3$>!Ws~m;)GNq+|O}j}4m-++n;P(&DNgaR^YxAcP zb^D&06yPDG$GV@zWMn#%{P}JW#m(OO#)WrKj_9 !T6Ki};^1)~c< z2D}GGNuCakbeRN@rw~IOgz^;-?x{-{1VYj-4#V5<&pOeqM%-)g_R2k#x4?T?S)KD; zZ+(S%7w(|)AMq$VM?ZEbDc3^-q2-bTNe?J;v8Itbkj9)GF8x3WQBPXe!jV-sm!wU* z{}E*H8UZ@5>MH*N;S@3)8ZD=&;x5s91ZW}BBd$i+ae(ZDeD}Hb8TtGEbHNR))sFK- zbguTq{9>z)G)CMBnrk5p6Q^&CqfrVP0 (cb{Co8x{nMtsrrUGh?{``hvIz(Vsm;;`Y?6WOg?d3EV} z R^1)qM!@49wsh&ux$weW7bDKRE5rxV6AnU#_&}oM*dmxf+lK5f!{v8KwB~6%$eGA` zxXh7jr3V$rXVM)&hhQ2= g&ng >&?|x=4$iv^K-Sc^@mv&!E$M? z_WVH>lC*v9MlFbHr_Y789 %nY z&(77)&7PS%Td$qGPy>=yQ4h0=bEiQ+hxf1^Xv%O;o0leu-ei#GGbj8eaA|IEHW=P^ z5M`E1QHYal54~&jwh}FF$s9=2ixV3I4AwW-fdrvMjCJ_yNr?rw0_Gz*f^aje7ZW>M zyaBS96f;W0Ly$QrEgmSHhC(8RkZ~@iCA;gl;>PAilIN7XXfUJ>lM?()pEn{{G)gt( z)1s7|-wY`+BXK?GZ631Pi6b=|6@Q57MV|psa-(no4ehvk{NM5VSIgdqJ15i=8r2sy z1R1{x?gQ#bd8eT|{?#Yy_ XcL7EuZ)4+wSsx$)MliK-`A0nxOM4!)US9`BNto8q&4Fi7%`<9cJ^^i&6(xv%1 zs{ay!cL{tM0N%&@gnx~|FA?}<0$(Ta4FVq!_!R=bO5oQB{5pZ(07ypsP-Yz)1AQJJ z5ccWykSWt_w>V&u`fRj6MxoQAnrgm-ej-Z!D*6AZMxUVMfl~g+FdXQ3RpWbTeL%yj zAdt5#58Mviw@(h-)N%OX4%{D&hBI>lQ7~yaVUr5(Ob)ss g_95AYbGlFP3wpSelY#3F4B9k$}ilPAPGcl=P zEi1THsfY=3#t``)fh8*K{GGHqFCakc`mz6s8LB}K>pA}Oc=2B#@QVcABk&ahUj=|e zgD5A>J82t1z52sgE&f|1_O}WA4uGpS8;eM;`_lVhf!FSZUe`5wrw6*hV1p9%7Lvr> zjgIFU&HvO|QH=#}A$k*1|5w%uR}M8i$4KQLG>(irvjrq$Xv!kmktSO5YTQys`Xj-#W-4 ztTi~_$b29(lO|A+h0>96s>zfo^88YoLBR(S#yKQdk;&=jg$V~7IeuhL^j!;Xx+-#C zqyPo=%$&q1s6=;xkZKDgVCl|a5V#P(lslv#eOmxe4jHn-9krzbN4`s@Wp!q+S<(06 z!aKNBVGeE#K14!RT{HS6mP0bMbRG#?mS59wb9xM;DIyz%|0b9~NF}tRNc>?8#bJ+f zCZdSC!5Bb+gncF0lpLg&F&AXz`p(VgZ`On d^@-`-{b9t4c1yX{miMe^QX=} zb?VGKin1XE47DM9JBT}*EAz utBN;z!6eq=^i@*^Tfo6y2zSe?C~le>wn5t6U0v(1sx~ zFldmvHCB3!=sMIbHB0jHi%I-Y>>(FtiPWCbEs8yb_&<;M-$9O`O8>fmOu(#4YU`ln zpbkoo`l5EgBhk^8bXa;Mr+^5x2(P3eH8<8)ap!hN<8#PMo48ag B1Dy2>D+FY(F$!qGFrVqF))l)hl&MZt~xwcBBDy^?Dt|8BVD-9urstNKB-u zHg2b Xad(axiPpDE>^c5G)fZ|AGC PbIz=D#(6paMBe-lcCy`p literal 0 HcmV?d00001 diff --git a/core/__pycache__/yolov4.cpython-36.pyc b/core/__pycache__/yolov4.cpython-36.pyc new file mode 100644 index 0000000000000000000000000000000000000000..bf13aa58c43d978755e5fa00ecd7c412f38c55eb GIT binary patch literal 10282 zcmdT~U2hv#dY&(m!*5ZdBua7|#qoMWXKionY(G*rvFkYNbRBtXIo%DBf}nUPi84hh zGgKrMhrkxvTpC#Pu0<~j6ewEsU-VBbc5ZgjUI{3QUiYSbo^xh~LsD|wHXEQM=FFM* zyyu*E=Dg>5KW6R}i@Bqlf3x+=4-Dg9jl|DE{T>eg-%$udm_4Ims UT#0%$eV_EL!?Cd=VqfIGQ$12(I|?n$l+WPc~QW*EQ+Fp^PDL2 zzhjHJZA( ujFqV%tZTz7|7M2orXh$0NgU~hPwqM;|hQ+I;= zXHOnK`SRW7u-iWgFYf4zv~CIXS@CxJ2ZzIEuXWP#g6zhppEMslzQ4H{r1l4*(`#h9 zzUujphL^`A|M|mPpZXoozt!qL?+$N$I5_I}1})*=8g}~rz}xN(j&A5@aAUaL>kd0N z_FMk2 SijjFNj zh&2A07tSah&a@Erbfj}?V$RfFS~}9+u|!p5UyP+#Ow6#9s4pk#wM2a-QC~$pqvp#f ziR^PFazlyM!k&{7S&-<`gha0;X1JWFzn-YCC+cq`>Q_+Ds`;`?BKKU0axy1fnclIv zLpIK^T*eujo~iZ@&rL!5cq5bNPt9a|FUorfb=r>i(oVY zH$rNa+aGhgfX{kAvC+2(^z(sRL@WnYVg>zcroJq(cG}|HtXwHPt z> {Iyq Hr2GCBT-i_C?MmV?U{87mrrl=92dp@GaWqK1Kt7MW2J zd(JL$N#qiX%&2L0k*7x;FY;Wp$haG|R%(&8oq6?@{vIC11uK06P5 Hkw4CHg__AJZEt{z~TQX3W ~Df6C`NS^#|PQ? zvhD_X vPlZ{&^>K%r~Ds{rJO&n?dIO#)C&so^E=#a8KU%Q8cn2J-z?Q z!=F5P`lBf{4bpmszvDB=p)imQSmI%MzmKany>0%unPUjNhR{$$AWCFPPNDrP$g03S zw1h3KWn()9EhZ1LCc?o#B`w7Bu1LSIKX*o%kvqzca%gvOz>PaKqci&DQBUK@$UL%9 z=@$S`mWuAO4Rn(f)Z^K)`%;)awZoY?LRPXQDD#|`nNt()SZW2C1(DG;k*eXUX2|?9 zazwgqQ~-BDy5Pp*lY3MIr6>!s2tdv$NlI$OEWo;~YB|*A6jw=> z`yCeC7vAr(_&pY}Ch2&w>9vlU;#iy{FOS4-;u5;Lowz*k23tYq_@t?X%^Y|g(L6p0 zbmeF_$cB`-s`_gx`%bHEA=(&TtK0u4i0ISHFwC@h85Vxds+l$Ox>d5S!ZVl$+~*J# zdVd0rSfRNVu|nUA6 xqXsY%yLUC>Gm zoJp!O+q04-Rhj3!QqGH1xsXt0DsDkSO=DH2;ud95mY~W?MW+-vFY{34iky=bD1HUp zmaIUc0=BP>`8A~sN>R9qQij4;wyEl+X;t?ap`WYjXSBRisy@C9mEOBcraxfuhb-P_ zfjqe3-D7c|#UHUCfO{XZc*x=-7V9YL^RJ@Oxvkc)y{mzgex>(_#m6lEn8lA+JZA9; ziwzb}Sp1m9l+W=lX#b4Er&j`>0}5G<6>@z_Azh`K9{a> Q4BCQ3(GUjem&?B}(DSGPh@IFbV{3&^Szg$i`n_~O}5XaiDmj&=bEzJLs69?EBr zs>km^nyQlKrjlk6oN2ijDXXj~>?PHaiz0gpZZ+n=gkx62F_F>V<92mJE27R&)n(AK zav7VAGxI8kD<{6nOVa4WEn}PKfbRCFcKi%d)s$3^lvFF=vE@p_cEBN^T@Y4iJC+k0 zj@*u1p+hfgl=c_q7ssKzwNTzw@TBCbTvF~mWm}VLav|D6(|bmlkBe+X-PV2$vyFPU zsTzy(o9aa!iE%>(*-rm(zvCeftT&F@YU> Ya}{9->q}-8wHg2d ze?_6CTEf-5>9Kzd2orW{I|hXR2X>0?nX*-CJ6vF|z+=e*v!{t|M7w3dN=4S!QSRi+ ztyx()W|QvNMb>O?#+p@Ttl9jlTQlz|7Hn+3R1Imo$xS&!7 (%fXG+fd(B#PLaxK(MkNi7-{a5_`>VxjzqG$ZNmM@QDPwaN6;aGp< znh|-aJh-%;rw~Z1a6;0-rzd5@H)EaP??_TqAR%mkGd(H*HFimM#n_?ek_JZ_d3v;- znrns{!IA7c?!|y4#Xv#i!(MDhuz>t-5wh4Y3GnhjbES BY!IdJw{L%h_1=YH7kH1}J_ zL1Ak!=yh6sT=>tmqeho4NU0!0J8iMS&>mU2;o_AJTz@$FX@#|ZP}ayl++~b2=!qb& z-;S$Dr;*cKYC?$MKX2sQy_WAcF;2% (KT$JFPeU41?|*5} DmKgzOze zM|yxs><$Xs-5%_r9{nm6{4LxP(~Njaj{h}t4sZ^ij%uB9O*iLg5GRN2wZI!E80gC} zrdGaO$qr*?#JVFFDual5l*L&q3{(*+kb^J9Xcfv2zYTA6vFM0G!+4sZ$gG#9DabuR zap0Fg#V+P@l+Q-4BI5Fk#zH159INyauJMdzd?WGoV*zw8 l z!J~~rnFTyK yxRa}Be5Io-CM#wzps9Qe+pMn|$Ic_2UiT7pboE&+a+1px?P(=X$$DmD7m zX}K)Z&soF$LW&w{1xQw|8T6M&D{@6LU@PvGKt eZ0S7Sq{L)^svA zV%!TI;Q#nQ!4y(y>0WEA)AMm2>~x3z7_L;UUeRvuID))~k%JUobN2`WM1h^|;Bf5E z0wYKSEwK6rL8jk1;`b2VXY6Mm430qV2XBN~lV;l+0D?OGp*J` RL$V)a g^V@ zuZpX`-QDq24v*hTsjmps%OdqM!BeSbCQendNrm>xomc)(;Nl4(CkL&eolwFjo{zFb xjQs=mF1`ah>~-E}nnZb6d^pHq;a_lb1^2r9o?CG%RkylaeXV+>`eyCz{|2%X9K`?t literal 0 HcmV?d00001 diff --git a/core/__pycache__/yolov4.cpython-37.pyc b/core/__pycache__/yolov4.cpython-37.pyc new file mode 100644 index 0000000000000000000000000000000000000000..0a0efaa0c85a7d8001430dd0ff154113dda36d06 GIT binary patch literal 9298 zcmds7TW=f372X@U%jI37Bua7|$1&W}sqI)!dP&{HjxTXqM-D8fNwzKsibGPAc~NFp zmQ)OZ6iFTp6n$&a2O9;77X26f6Giu>Mf)V64}IuUU)t}?ESDEu>Yz=4mcq`?o;fpf zcK4j`Tvl&pv#y5U&V^sB|Nae4`wLwRe+hK1;_&~DhG|UiXr3<5hG)vN)lGN_U5zEX zwr59urZe=U<0 zng%Pf8O$kSw}=YbEGvOFGeMhU^PtU6&=y!3w9*7^ku8BX$CexBlX-T6ooE?Pb*%Xu zI|=#%JI$VFr_d`ieNC&pxQ{#6Rx5gF)|;&`x!3RXAH8y`ZV?$jI-5AI !Cd9Eg{L;ZT(QFRhj;JX zee_B-X!rJ_i_7XFsYXI|mb~rW)^Bwcf*aaPdZer`PG%n13;7^!z?=cKSQ#)iXFBG&}8}alTvgg9bmf za mpPN`^h zOIS~J?3vh13QL$RgSjmIcqBz;Op5GSe>k6{K8|iniEJrR?of%GNTU3q5*Y_1DvU`{ z9P1C~lSIeSQ&OUolxXHqiCp0dM t-11wjst znB>4dA FZ`4IAwL6F(TDRoiX*lPuVX&tfG|X*<;r zK}r&dGg?#f?tiQ%kko3YkFg1#SJcrmM358I4tD6Q*Xj?~`@M#jVm1D-*9cy{9471i zZnxhHv-N)OQNObtwEMkUCv>*A{91RbgWC$4#MG (w_xS5em2`@7L-_rPeEMm;sxKQQXks5EocWJn4d&2u>X*U)Hs z!N};*A9|;8xW>#g(BwL?In%Ah=KL<+;IuglYXDQ6FzKP85!IB2Zc3wrx (}?zr<^X;ouwf~{j~l^H znw+45A8;5fNzU*w0pAFC{=3g0dTy~i`9tMV@I+uaDNo|SJ2?t=J_kLPW#&*>06D@I zP7FIEi (DQ?dC1*77oSe=CL*UZy=3sac|CnVJ)5Dyb2CaI#!}lA7nycnOIn z{0tFZq~--`$hnSLd=i&$;qX5|Ll$qr;$0l$c77D?v{5*~H%%kl;IvDO2ZRMN9{dUy zF&@C;BC8zQyt4nuxl4^W+F2_MF&Q~qvTZnMIO`#9j9jC#dy|o~hJ(kdN$K9Qhq^Z# zS_b`wbIZZG9j0Z6YnE~& hE~*=g6Kw4^w$B{Ft9T2-8BRUs|mr>K#d zahiHkQKobRTB-dQhflI;dd|oUy@7oDc)!H)fA@ZIQ_9UBiX30g`_07=@I}2`3c7xZ z T*hM?Sr4LGWIb0@)-ye- z@}6m`%y_KT& lA3us4E{1`bqc8HM?NBcSZ5JiD$GNRgzu@&^hG3xhydW#g|VPD zDUJXSut|frrR2mwT9Rb;WAlMEum{c{HE=Q8!hyu)sXjboUK;a~IBb!YGYrhP5if!M z#Gx_Jb)w)p-W}<90=p+#v@>z01g+ynS7~8C)!}gyi%5_d`Cjx`qKvDuCejN?b=BA) zgSi>ufEzELxCdFRlNA|}MU+5yU<`8LNsAQFIWK!IdIiaq6M0cUvM>37xv5o-hcyPF z`vBBP8^@5c1tNZbdZUt)z7YX*!{4ZFHNwR3w1osUbh;q7c$ !H27SCzurTfD)lyL+MP>}-Uoh!S_@d_|?X z(|Vd2S^}@Nd%uN hiNhNDAMB0gcg&2DJ{+@Ee5cR>n@F_1kEPhrK_~m#-nsM zGp4)HROl}BGS*#aDs(q1a ~PE%17)c93uu2J(QHRJ&J4Qg&ubBh`ZDW`OhzXaOvaQI{$ z2qU0;rC9k+O(~xv)lklfRgmPSG*x<>ze*L{L|q7K0N^CpJgnEG+Jyz!ObuakkRD_P z*+FiQ7f=*|+Tx(F8^8k ny5NHA=7js7a`A3%LVM55)1Ols4Ev&2`LB0pw`4e z0rCP&+68o*gYxcuNL7|n-Ih` V~)X&9D@-#hJ`WXB5q48N@>d^?N9WNb|ZPq zk-SUti7bhEm>az{W3Vii#jG?JXZ3LVkPf0^j_gLVjXXkDWlLlxVXD#F?lw3|OUfLi z0g+lM!x&kSG$3h8u>n<1JcGq}c^PF4@xJ= ZR#9mk!LC zV4*oH({ol1%vterv21eZ&}_3^I6aa=87x`1XEDgB>{*&O**%EZMOnHu@~I5r9C-eS z!>0$TnM?Xvc#s+RlB@a>@&)S8>m~HcFnjz-3i+COT+Qg5=Er6};c1%xOP+=zD(P*Q z1CtzjoYZ8r1Rg_Vh-1t+$nzNRGeiGr$q4X^^+)cMKT1EFKSITWywjwW@wY+xQhgKu zE(!4;JEaO%(V=7hX>`abEg7d|G<3?&S+7GshtZH@pr>= oj~B4S7kmraJFzsPo>gI&bW#J-h9m@1=+nvNw>8s0AjGHq12J z9e6Lb`WaH(ui}=daEGsH_&ci?0KSN;NL>?-?zonMT;eb}Rr%r!o*W-7FXO4486~Ai zCI=2w0je`d;j9z^Du!3 EpB!p0%qq!^@ zHxXABaotgC=`0bgl{sLg zSCHCt)mSr$w@hF25x)|3c#O{^9>|Z_68ETWrp3IvzvwO(a971L6*!V&K_nkil#Ba? z6lKsdkSt%;7$s+mVo@ML+RSd|K+VvXRNMu)CMon$WUv%-&WNny94uo!q+^=}#K80= z7S95Zf+r0Prr21GEgcv`lo^dJ9~fH}b7Dy>H|c9;CUS_f?k_(AQpsPsx^a|>LQU;z z)cM;R60lIPN_J}NjgF6Vzts->N>PQPquh-m%rJougdH+{vi(-OzdcIYfDA+gEi`&t zq1|ij&<9WcF3mHy`a2-^!WW|2M77TQ0G>uK;Qg(=>P|b@z(+&cIZO{>5pWn|q`%#* zoCqx{CCD!ZVM59qCTUY(m#k+{&hO>lzWZMF&fT@O>iygIZm!*y1rASrgp@F-yfKwR zLN`K3s;pfFL1l_@YUsIg6A7_i29UbdNBxC%9F9=^!n5c>czJpI9l9&OUhCj1E0J+i zzK`e?3^uTm9*>6`j8 |=_TqRNPz;h{XzUzgpf)HKZCi!I864LNw1P?Zt@ z4FM_;6sWpnoCT^z2YLuwjR!!~`+C_}0@fNRnUu|vaYDzR!8b4$VGTC*=}(I z^W=Y0$nUT6ql>J}b6LTCnMSFkBa> F(*dugBimT_ Nl6PZ5gwPF2tB% V{vCuH-0T{GsqQSW)ZOl-f|RN2 zoSqxFN!jbAgS0BMuHVZ98I+&oDenB#46@wi-cOAn$J5-$J 8x@B|e8XC5)DE!8^gr;LT0(PV!UWotWay^9p$7Dc%BK1n(qYYFhVB@zeZto833j z=VSbF@aOqi{scdRQiYo Pcwv6MC9a07Z+%Yudov;vo^cAR O|0)qw$tC-ifY~ZZd1hR @12Ih7^h_UDmg&35f!knIm;7ja50{$D- z_s#dMAsbplJ7V`NX>;>F8<*Kc`BC|)h^<>P#V!2VJS9!;%o}B+Wy3aMop E&;wH!Q+-m^-bWx)-F$>W#1mR}zZ+tx&K0S;vA0@pY^)CY%^=O|Vx!-T zUc3}LjX|$B=*PLnp#R~ZyA^c?{dza{wl>3hZ?lWnidrPpZ`7k|Mv$qCG)U}8&a)ubxpFQg$wc+ zuJ9!g!z{9_nf#%27MIWF9)YL&nR01*y|GKb1B;k-X=xAPj#F+uayH^x%GoXDcraO* zIpfxZ<4wA}Jz?g@@-e2BjG3BoCmNG+;xaWRJ7mmJ8*(9MV$5Ut7?UMqCT$Rcl7Pe0 z2tj@lf-;m4bqIn4;|?XpyA=HPgU^3<4w88r>r*&XA0477U{33kI 5FPMaJy||^x#Z_47$Q6Fz&8{#lu6TxsTF|diNv-e9(h^Sm z39gV7Gt4~8jv}jCG%O2A{GTk#WJc9_Uisg@xlZ}92Ohsj;yKLZtZNa*_&Khl=bt2W zupozSkVA}qRHjU(fawoVkgfvwk86N0nM5p?DVQz0>jLZp$N}uXtik?lt%m!vTm|&) z<=BcuRAsT*iQRYKTY2rujjOSvfp*o3eco&UwAUaL=SF3P!sGP#vFgPcg%W@%0Q}>O zzSqLekDCeHSh;=c&DXE4#O{^l*RJ2ZwIVL!ox~-OAbsuDmA9|{@aC DzBt0ZD$>xm~rB2Ae^9>{z z!sHBS+~MwB>wSCZ4!vP|=%clb3wZs$Il7}=2JIYNuFR+w4DDS&1n}>9R0qCE96XOl z$8I!*(Nk?2nIzMa`tg&ejCAjtNHVDf> AGPSZL`vYGz@^G zhdK0 DT;3s85@rVzBN(b zuJIkdJNdZH*Crleo~?<;O)*%F-JRW vRmOj~nSTQh>pqzzMjT2gDWVS36at31kv zvlBK9i-irtKF2l;i-is6WPWVJQ Yo+o5(Ven?&9r@_iz=h^!E~O=KqLe*?VV;|d8C zAm_sXi&F-8=70fuCYhq3mQ!YU8VuU0sSNa~GQ)KojldKTL@9(GR%+4q-9`vak3#4$ zGt3Ti!~C!yVJs5IYzRb57C$y$H-5DCJ{E2`hsCty9F})Z(jlAi37et_o1Y*!BY+=P z3t3$Yv!I@ANU0!CMnLBBvhl$!7*|Rb!M70{Pv8(C14FZhWoS}Xnw(dfoJ4y^o*bE_ zEUEBHTw9)`otG@D{{E!;D<}Qo(Cr?%rI(}$b%#mLLn F3BZ%Lb-{ze5hYgdZ=0x-lCj`yrr7cI}vh^INj`T^_l`_DcTK`pN zi?eMm9%yqh$d7eXBga;U?;zok7TQtCs{@-uPwmIbt;yfP#3 8gn?>y1E+fz6kz0zuN^>aTiT)Hv=bkd2=S)F8Pr3Y5 z=4mOH*QcR`p8lsZ4 U=@lUb6Oa2d)(40&giPi=(^|GW9gpUF>| zN6AlBrVkv(-X~~VAbv=MHt(~k;6?CEtYLT-1xf{r> oB=N?*4eRZJC?s&(3QQ5}2xz2#7kq!_>aD*n=MhZu36tE0QC>IzRWmA C z 6wynqPb^2kD zCQ0bt#7;nWFdgaQY^&2n_RzgQO{S|+Oc9@N=xq2LLfSc2W<@gClxKRrtwWoc{|9r} zXHHtQF$YuoXhJbGj6yMaE7=xeJ2&)T5ERzZxNCEOp<#i2;0W5D!L)%`@X3Mlq)a7S zM%qFiL@1hr%nq}_mJ9}Tw3Myz3Q6UFrjF{% *>d9wW8iSLqn3 zeeHp@)~(2fW9B8!S;-LyTVdv~{Y9M%cg}DRr>VswHN)KMw=5gSNLiz~fK-P2CyXU* ziHAU9vW%@VlP3rX4NpQBPv(yrD@w2Xx~}D5mFaUba3gU?*JMkQf&M^tct>MBBTwn~ zOWtxGZ&j+$5rZS=rL#c?33y* _g@F#r Sb-V5VWggiCeZ;( V*y{f_%4vm~{eYM#QaUZlhQCKZ$KzJF#Iw%p&i&OY6 z)ujMH5un`}Z0&EE5FdyMUd;NNvD ody{A6-EP-}<*!cVgwiNWS> zZMze#;ae4r9A`$s5kYYrDZ{N^^>l30W 1;x^2yj3# zSXIRtG!SR;p%6!NO;vf5Vk@1X8S3*mMb|}k4zV@4P&x&`_&z=d+%_w05fPVRk2v=^ zAg5Dir%n7Zv5odfV2G*4wW_J}*+QJcE?{$4Y=9g4`(N;N9>aW!=6PieVjU95C&bVn zG1U=xfG?TgjJ|cM<8nG&R8sv`r!5%TsSo+;)1UgZpboNyI!&dwQb#IkL#rUJLN>97 zS;F}fEQgF(DL*ksDihIeH}+n}KPhZ=o3GGGfWl5lG%Ecd1$lnfd&YaoD|w}|SDr6F MRz6#Ps`Ax;0@;GM%m4rY literal 0 HcmV?d00001 diff --git a/core/config.py b/core/config.py index 7ea25ff6..704fbef0 100644 --- a/core/config.py +++ b/core/config.py @@ -11,7 +11,7 @@ # YOLO options __C.YOLO = edict() -__C.YOLO.CLASSES = "./data/classes/coco.names" +__C.YOLO.CLASSES = "./data/classes/ppe_classes.names.txt" __C.YOLO.ANCHORS = [12,16, 19,36, 40,28, 36,75, 76,55, 72,146, 142,110, 192,243, 459,401] __C.YOLO.ANCHORS_V3 = [10,13, 16,30, 33,23, 30,61, 62,45, 59,119, 116,90, 156,198, 373,326] __C.YOLO.ANCHORS_TINY = [23,27, 37,58, 81,82, 81,82, 135,169, 344,319] diff --git a/core/utils.py b/core/utils.py index 87f7d158..641e798b 100644 --- a/core/utils.py +++ b/core/utils.py @@ -124,7 +124,7 @@ def image_preprocess(image, target_size, gt_boxes=None): gt_boxes[:, [1, 3]] = gt_boxes[:, [1, 3]] * scale + dh return image_paded, gt_boxes -def draw_bbox(image, bboxes, classes=read_class_names(cfg.YOLO.CLASSES), show_label=True): +def draw_bbox(image, bboxes, classes=read_class_names(cfg.YOLO.CLASSES), allowed_classes=list(read_class_names(cfg.YOLO.CLASSES).values()), show_label=True): num_classes = len(classes) image_h, image_w, _ = image.shape hsv_tuples = [(1.0 * x / num_classes, 1., 1.) for x in range(num_classes)] @@ -147,19 +147,25 @@ def draw_bbox(image, bboxes, classes=read_class_names(cfg.YOLO.CLASSES), show_la fontScale = 0.5 score = out_scores[0][i] class_ind = int(out_classes[0][i]) - bbox_color = colors[class_ind] - bbox_thick = int(0.6 * (image_h + image_w) / 600) - c1, c2 = (coor[1], coor[0]), (coor[3], coor[2]) - cv2.rectangle(image, c1, c2, bbox_color, bbox_thick) - - if show_label: - bbox_mess = '%s: %.2f' % (classes[class_ind], score) - t_size = cv2.getTextSize(bbox_mess, 0, fontScale, thickness=bbox_thick // 2)[0] - c3 = (c1[0] + t_size[0], c1[1] - t_size[1] - 3) - cv2.rectangle(image, c1, (np.float32(c3[0]), np.float32(c3[1])), bbox_color, -1) #filled - - cv2.putText(image, bbox_mess, (c1[0], np.float32(c1[1] - 2)), cv2.FONT_HERSHEY_SIMPLEX, - fontScale, (0, 0, 0), bbox_thick // 2, lineType=cv2.LINE_AA) + class_name = classes[class_ind] + + # check if class is in allowed classes + if class_name not in allowed_classes: + continue + else: + bbox_color = colors[class_ind] + bbox_thick = int(0.6 * (image_h + image_w) / 600) + c1, c2 = (coor[1], coor[0]), (coor[3], coor[2]) + cv2.rectangle(image, c1, c2, bbox_color, bbox_thick) + + if show_label: + bbox_mess = '%s: %.2f' % (classes[class_ind], score) + t_size = cv2.getTextSize(bbox_mess, 0, fontScale, thickness=bbox_thick // 2)[0] + c3 = (c1[0] + t_size[0], c1[1] - t_size[1] - 3) + cv2.rectangle(image, c1, (np.float32(c3[0]), np.float32(c3[1])), bbox_color, -1) #filled + + cv2.putText(image, bbox_mess, (c1[0], np.float32(c1[1] - 2)), cv2.FONT_HERSHEY_SIMPLEX, + fontScale, (0, 0, 0), bbox_thick // 2, lineType=cv2.LINE_AA) return image def bbox_iou(bboxes1, bboxes2): diff --git a/core/yolov4.py b/core/yolov4.py index 1edd656d..ac2a1cb5 100644 --- a/core/yolov4.py +++ b/core/yolov4.py @@ -296,6 +296,7 @@ def filter_boxes(box_xywh, scores, score_threshold=0.4, input_shape = tf.constan class_boxes = tf.boolean_mask(box_xywh, mask) pred_conf = tf.boolean_mask(scores, mask) class_boxes = tf.reshape(class_boxes, [tf.shape(scores)[0], -1, tf.shape(class_boxes)[-1]]) + class_boxes = class_boxes/float(input_shape[0]) pred_conf = tf.reshape(pred_conf, [tf.shape(scores)[0], -1, tf.shape(pred_conf)[-1]]) box_xy, box_wh = tf.split(class_boxes, (2, 2), axis=-1) @@ -305,16 +306,30 @@ def filter_boxes(box_xywh, scores, score_threshold=0.4, input_shape = tf.constan box_yx = box_xy[..., ::-1] box_hw = box_wh[..., ::-1] - box_mins = (box_yx - (box_hw / 2.)) / input_shape - box_maxes = (box_yx + (box_hw / 2.)) / input_shape + # box_mins = (box_yx - (box_hw / 2.)) / input_shape + # box_maxes = (box_yx + (box_hw / 2.)) / input_shape + + box_mins = (box_yx) / input_shape + box_maxes = (box_hw) / input_shape + + + # boxes = tf.concat([ + # box_mins[..., 0:1], # y_min + # box_mins[..., 1:2], # x_min + # box_maxes[..., 0:1], # y_max + # box_maxes[..., 1:2] # x_max + # ], axis=-1) + boxes = tf.concat([ - box_mins[..., 0:1], # y_min box_mins[..., 1:2], # x_min - box_maxes[..., 0:1], # y_max - box_maxes[..., 1:2] # x_max + box_mins[..., 0:1], # y_min + box_maxes[..., 1:2], # width + box_maxes[..., 0:1], # height + ], axis=-1) + # return tf.concat([boxes, pred_conf], axis=-1) - return (boxes, pred_conf) + return (class_boxes, pred_conf) def compute_loss(pred, conv, label, bboxes, STRIDES, NUM_CLASS, IOU_LOSS_THRESH, i=0): diff --git a/data/classes/ppe_classes.names.txt b/data/classes/ppe_classes.names.txt new file mode 100644 index 00000000..f0e5eae0 --- /dev/null +++ b/data/classes/ppe_classes.names.txt @@ -0,0 +1,3 @@ +Person +Hat +Vest diff --git a/data/girl.png b/data/girl.png deleted file mode 100644 index 0a5fce3291545d220260227962140f0d10c075c1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 664559 zcmZU(WmH^2ur&&SKp;qPmp};aKDfICcg-NdVQ}~05Zv8@ySv)}gS*S%?(*fzyZ5g3 z&aXaIdslT;_m920J4{(o3Kf|U83qOhRYqD|1qKF=0S4wn`X_{c7CbJrT^JbHI7=}x zWf?Isa%D$5GfQhA3=B {DSkYQzp$w*(ME=f}yf5TxuqT6vYX_Az{(8M3Z6=G4;(&IGUp8j%)SVM1I z8}-=sGeSSI>0>It4e7S_*8%D<%6 *DinQrdm;=5a0#us;Yf3SZoxFUS#bFZ{LcWK(6I|;KoJ_~g)w7u*U zVxE}PW(AW^J=@|p&~`h(bD*K_979+LHPx6q7BV4o&*;8zpiD $vK%gm{=$Tk;%!)`5k|n0aU~#|C|2rPk_P#1hNM(GrPLFGP$xd z**Tgsv-0xtGPAHTv#~M$LohnI+k%YU7;T*>|0~G<7e^fEWa?;X53;ngCI64O#wK>o zAOQ-B|48&d-+#>$=w|u9nQWc@yR3f&GXIB%nU#r!`F~>nqw@cU6`*YC2DH`^x3mG; zI{nKb$ivFU|DX8(pXYxw{vW3H|1!C_xc@Kn|9JkJ$ B1^l0a{;OO6Y5mtOL1cdB z|7pD-GVZ}=LKqlf7#VR9H8 PzZJSp@o#>q^`n1p0?@pnM;A z8NB?n%CkyF(_8h8d!k7A7&60N(@Es!>o4#qjj-_JpZxe=y53^mPoFknw~ktSD$y&e zs_qhaR^uCmphv$9A787_(>=WBylmwRm|rxXI8V+(SCdvcS_OIddH4a#3UAg6kja|i zeDWiMES}$Fq#7?57tPxjx|UQ<-PF;#=u$&ch{e>!h{eU!h(pxWh}1(vh*DC-1!Sb8 zq{I$-BnAg8wlwVuP6BvjL!yylTH6WtcBq+lSzeUcOC)4_sxH_7eicL<+!mTFlc?yE z5NK;Cs9JyK4gOf!0V7fkmJcoV26<`tJYYX~lGfj1CVrV1@90UExUg9LdzI$u(4pSd zgzu=r{i^ K7-7-_d*qe_|(p^**jtqCIvdTj~%6k-BEtn zaX&YhrT}Vv>y-#RQjQC*RboovM*}xgI;TB-E#Vq*jy-t0QGK2#XX2?5m9hmV9K6CS zv-q{QEZpAorz;CQX*V_ncqOY6d>x;#ABqQ9+ ruId=)!(dAj_V>^G05s-e%);$n%xwG(x(!DxUwy_w_7rZMf3l^Dm5 zXzMobQb%@&owsIhwibXQqU41F)WxEfsuLzAU0D( MjnO@=2 zqTP`N-kXa@{q=LidERr$!W`*O6W~un&p3;wOnn4vJ`&qN=*#J&*{j|4LRn%P=R}I> zzyZ>PNVX9AoVVI9kY~mwI<30*gW%{&ef;U3Se32nrkIu|O_UN!@u!V1ZP{8xF`|Zp zt$`puaUA9WumfM#krBril8XhScKN75*AYLL3JDPpXL*!El*o{LE|m69k><>UrF^wv zK}IduA3GW(#qroW0IvQYB#@28lff(tD=uBT>S23LQ#>s8>F5~*2^@;`%fxRo_ZE+Y zir==-JqB!N%AE-M%ZzIXTiCSZ1GPCsSkU1Ud3+qq`etBG`B9H~QSJ^3!p{@hU}FOY zoKR!?i`j}8y}$%V1N@USe&65L{Jp1_{Fqaibcy2{jEdEvKc*UaToDc^D{Tzg9%>?n z1EJG*qcYWZbl#Yu30%7z`{D*)LrC1q0ECsd?ZM}c{s(!>5f75O6!~YtMP~&1+T >N?&K@g4P@6x6ds>(;qc6%eo%rl`=wIr$ghR_X9ba;2M0P8aG^IriB-^7`^j zpO;Z7OMuVK@iBvggw%eTy5z$%`Qsb`k02lnF266&Imi cbh_S;-mQt$hI=_c-(%m^E5PCDV&;w;!7~zWBAGNNk>ji$S9BE z&Ms{+OVYG9rtgd$N%_JBml}Ns1Ss&SjOQxA6V0+KHzJ>HZVcr**TJ%iAD8R#c~NmJ z^y;x9S&8o{BxunxeCx&AV-y`v9ZisV0R7 *SBxmI7F3 Ygq85u>=Qhi{<9XJ^j7)Wb z4Sz^U7y>3yC+0)cRm3DuN q|=fj3bMhUPkFmUm#XSl=*o7aCRtK&>o0_Nzq;_MZ!I_ zM6;k2%iJMbu!q3pyFgEC&sI%2TGXCJO a+`9c_|0V;wQ7s0K6cugo%v|ty z$-w~phq&2;!V;uIjF0_`x)JaurZDR?^wNoTeO9KgANw{rk(oM|7x9;z)98)jx3H#Q z*+2s3O{5xzB`EmDI%da)QaMrk9VYP5v>7+oKTgn?*z`BXmzb-=>N%brZ3Mk*Se(H^ zaUhTTo&a|umBHRvb=vWV_((@48wxvokck#F%#uf$Qs730$yCvNje6r}245jv2q! zc>`us02d!Q!UaB`HtU$Pk;Z5Al+7t@t@%FMJDN>?vH9$--2|!yO?Wow(+Yt|8ExwH z3sO28%5}HO|HOyqFYU{q&2GMtiM3r&?Sc8S{!MN5GxwQ`%DC(IZXa1OUH$>FqhKos z7m@}mm4%PR*K?;F99mXxQCP~3X%wF!%;3qYNy+E1=8=UT4qWPpdqKeFVg|hQ ?j=~ADGOOpMoCIJCL>x%Gm7rmN-`A#YYt!FepTsy=nqJX+t~*XD5v=<>mtUC{ zsoQ-R5TDOFR~Ap&u9#%VTE3ld{kbpXmb>o}VDhc Zc#u|uG+jULXF~6xAn1#+X=3dPsDVj hCs5_kI>{GO+JxLz5Kgx*YCWMo*ZVOtehP zBK6TJC%I|^qVS_&XKl#WhZO@pHr==;*G%kL|8UB2p;aX8*G$#;6s41C5J*Kum3`FT zd|G#`7uay#m6f<0s>(mNKSqA;BMYY(sa~`!wGF}M<_;aq1Uf5n2o`QA)zZp;k!ql2 ziL`p;wq@}}%e2+m3&!OzgX3=zLwB;=iF41 7<2R9HZ)i&MyF}$= z>Q~kb!MT>68eXGEJe)Y74Y>6%<2NN@3xn7U^oxcR6?io9*<$rN=%sLX*xkj)#eTee zG`-30awo-~H@L|8!z3vaE#D+&?eejTHy2C^gN*|ZJ;bS03u-@1dq4bh<@T`9eiY&X z#^m_Bbri5vz#9MajW~!C`z$=vUv|RIb}GE03zno8TpczEwTe5hxu5B_CA;t`v?QBj zZMUm2*UYtqnpdAKQCT`!jnmrhHCh&U$=$my-0ee zb#Jx$nN`C!l0LE=4b8&&ns;+dmEiNzxAGtRGxgmO4QL8c{j8E~x;wY{@1ypXC%sWQ z 9o{>N;eI1#H)%WeFPimFy~P|?gB+T#yWx_P^XB~ zkk*FS?%IE8Qq~`pxHKDMW1GN;7pH@fEYmlh%*l)doN0q1dc~<@)=~7_CNUXLmu8Vk znf+vF{*BJGEW1S+B}0aJ+okd6zUG4wOy#mgYBy?NDNf(SvkcLTNxdZ=0q>$tqw(`9 ze@gK*bui?$ Vw2eh~r^RsV_rX{qwyi5s?QM3*aRB49f8))*~o `d1-eo7sXtc)S_AKvYeT0uY(-SdY?P) za4Tw&oWd`wu5;J>DchkBSmVQfflJ}^1{wBlvvtVZgViw(=aIuRJe-hP0ksCCd@s(i z+C$72fKGDqW(VMNwo=af3GcHRNEB0cX*&O=1r+!mk2Naj{ElLy?~SPz(Q~|<5mOhK z#hjU`;yUaFYdA|&ZxoeX!e7{o;5&9~9Vc?Q&+QQsXKL0uYpi+$#B@3o{MjKC&Tjc} z0mjznpti7zllp%3Lv<0iP2G`?zF%jr^xW23 f_fI=NRu#A wzsd3refOZzIy$3olQSE2~xxUisMCEyQ5L_ zD47_k(v=Dui+e|GyC^wAP(Im0&&Xza-Qg#x?g#F%dA8JF_D)5hhz-RGeq((^1LJgV z%yV9x4YUL+t;-Yx62(2c^K@nNoO=a9pc^xf2`A1O6=U2QN2R8tu$qsBty`_Z_;F6p z38!-+Tal|y-%ZO{qQiV?mY7YT>m&^N6hzX?6FWDmOwTQIR3tW5=Of!Z$sN;s@10MG zdKH8juFPSBCseX9+}HEHqCNueddvv cdUOB}-c9PXCYVF8$4u}Wh4<<}u& zYh2+ECaUfww^@I{U!kp|r!-G7_rzQjIjb2*zXD_IQ?ac1vZR*EsOKg}JcJjS3qh-= zOfE+i>R9Zp<|>3^xTWuQ1t0mZR`yenkm3)S0dp{j0iWB-Fg}*vR|5XJ{NgQNAI6YL zbi!|nqpt2ZDQAc4ZeYg|_E)3V!3?G+I*} -7H(VUfEqZWWa*{9>E zewg2AgAw%Dv0?!^* sfrB=Wwc6K8MGB;w5X;~+yNu_360MX2A zQg1?W4fy8ZVd83F=c!HYF6~C!bgIdC4eP|NZE`6 u6bitH4f0ATSeAn`$pT~cJ zh}%OKWuNsET|}nrW;-cKpS~LDDiS9 Sc+G8hxpExlrecxgzu}0Q(GRb8cCfAU0g+c zaqJTKjzlyEI`gy5pIxSR#zn*Fw>~);6rT#@HyzH67ujq@pVMPYj?nl7NqaNp1WxX? zQVh6GM^t~aDv4Qj;F>PsPxx}V#L}+unz|ukg!Zml!1XCz`LtuR71d4MOYP~2&%${p z{jiD!hbZ;}OENy?E*WKcp`dluQ5f4gv0gY?A2s*a!Kg7&@;l%I>SR`jep_eBu@wqu zv=x6LL+*B1JurbN-d(^drw=PbWC6rrlPnP2B0>#i_eC}~C|sK*fD*c0V4>t&tZ5q1 zOfta9z+Z}o>>jfSBQ9Uz=qoQNY9Ol)v?OserBDv@%60ugAXf}_Z^R(`y_kvPqf(l^ z9omM>gK8V~AU7r%bCFM2IAIXaL)!_#+cC^<=W0;JE#86`dmouGN1V*Q`d$^^TOqdf zr)0c9_&xGrX-S)_cF5m9IWNCX)l*jQPhpKgbYDFF3xGJ4ckARhe9XU;0Cf!M+&XkD zZ}s7fsHwo_`ueRV#_b-rm4}VG7@&(cMgLD3L@Rz?V4}jhcUWe;^{X>>ANnx&da^VV zNap*(3Jz{nH9y*az|8z{Mk_4zdLcIQnHk~ugpr@5-M znQatfy~nUVAus?wvl&7Jh#$K6tav2Sp~H-j89(mmzpyD5A$E^4!WTvJj2pHfRt+mg zAlC3I>$zxm>B4 EgoK<#GF{5ub`)uRhR^7Ic^xB4s@jBBGHw3-=`r?&AsQNM~ zb^3kMu-n-3yIGCU1nR{iQ7!Ka&4HFCdl88?-#cuku%&e|f1lgON$>HSb!MMFjMhRo zrJ3_FrVe!5P`wu9vH{bzlr#c^82>Sz3zvF#WSu0-%4f;wAAD(wQv zE{m{#VVm6NSm+vX^871n%|FOs90=D^d{S!pc0MnHp=XMMP+y9Y=FMwwyVaQLl=;() z0>KLJrahR9m&(MD;ed^F#cw^1q1i;7=|Vg&Ue +3q( lGDbVc&Cu~?PIShUXX^~et|>z zDsCXW NTH(sv3x+r|55_F`~v2|CgGC&FEG9-{O0&gioY zXPSe8hs!sB3j+K>!40#dntvaLIh^;9^pMecDE)SoCVrn#fk&Xv3{El-FZ9#F5YPym z#WSN)$HIg4RDURIKAc0^zlAaufj7BR0_Ac4Df#mxGcH@RDlYVDh m6uPq$OWsMR!mN!oKZx&rq$9l!5T5$Ec8c3gF?XLDifwKlhGYvPu1 za&;}pzgF J%) !+G>$w@t{EldNmjO(1dB(n!3{k$?kE?!rhR9NqFRG$q@{g9mu-fbd1 zJ$Y`G$b%$r^z3=<4=i=8MQCHB7SNx{QyLP=4O=f=Vfa ztaxp32vZhblH%;j46lJXN5VR7Ua5SD$I|>b$T5<64~}QeESB7=20;mi=H3(^T4&vG zW^cCno>v&;bfDJ5Vk#L~R#7I`jMP3q>)Ib=7L>vMKPuzwF2Xvha5{g6C5G4v7U93? zh3#4eW!rK!cbUL>bUurCj!S{`LxL}>F1^aJScu_CFw(7$uyxd%tgB +};qM-1-_$bdeuZR({YDE4EY|TDOz)w2 zkF@J-cYEVM$Xc7Gxo=~?Vq`x0VZP_u^?KTK?(_Dz$$OFH-h(37Brw_NZXVI^K8g}2 zvew8C*6ENi->Xg_oi*fT+?&!Gmq;8nlI8W@l*ooCN2d)yN-JF8uz}^2HyLa@Z~o^u z*R$>uo3S#|eDyF7bT{sL9(nQ&rXZf>(3=h^!Qz>`$ZX1b+xzKOdONb0A=&s!=jUUz z(Wc^81<_>Eq98 OOo`^8!orKXvj(Tv*bTo%R?3vv1|v8?sREv=x5`!?JoQPjs) zak{2SBU80sBr;gF+|HWee*1ppDx}6?!cbha_V`|5u0<@#)}CS>StrsOHDSf)>u_wP z?rA0rR}83QOj+PMlB7m+8^IZyu;0jW)b$~vP^Tpd|5^(`*>||8y3CR14apcuSqk@K z?+j<&WItJNP7^jk93xPGjDA_xwU()m4RyPNpAI1~5;gf!!}I~%@Tf7~ThBuHgK*9@ z)Ly!!rNSk>xovltgyR_MUg-QNxDi#nx9G1Dqzi)Be3NWMqr4?PjOu|bmpZ}p hEp0oq;k3~s#!Ee)HneQJ zw_ug|C1$NXP%O!bbu6Jt7ZrbN_Xk&{^LH=Nb5+krP6zzN?IiQ4XTN8xzBx6tcNwgq zk9E}lG^)YEF@x|R{H_L`l43ScvbV|Ja d{a{S!lchh6=2zwt7= z&}`sME-G^_Iy!)1pwB(Y0VtDdc|mH9AZ5l8I4i@*S4Kc)?gMg6XfjtoLwAqIlWao^ ztH>3Cf%;%xN}OLI8!}Y^fcyC*=p=tSn}Ya^T||qAFTu~kp<8=nhG=i6F~0q&yuFt0 z4i~z__+t^pW=_^hQxY+q^NTm;7x^; zw)-T$Nqv^K)ot lCmzj&JQkJlV3RBguyE#SZX@v$ks-i5krGT>2xxPo!U_9xgmZvfnDTqt31dfV zP^MHa^U(Y8WAkc^Ei4hy54*>`+WO6=$*^&Q1_S8B9!rk{46YjsH4mdl=4^WSqa8Nt zF* a25@xVWzjZ=%)`Tgu^?%-b^hOIv-?)F 0m95rl#CO>bC9^pda zg)(^^ZB%Oj^JBjJH8+ft&XK(=JR5O%>GqzQ^w49v=|lVOR6_r1P-kfE(bq>k61aq& z-_& rEu7OU z*}R;9Se2oD+wzKu$v$TBXzM}Xkr6}mx0eGUAeRKmZDb5Py;Sju>ekeV+uh0IW(4zU zUm&}(5OG&Gt!XO0mu%PWUn-M0B4Pkvub?Z!?^I$3f{a}E*Q2=}xoAV5t(`PIL;ZQ{ zqOnI1Ox?fxK~uvWING^0NAA#cZ=2>P4IMl-!lMOz9{cukZuf*H8{co^oys=(PMuWL zQUv!$pN!8&t+dHJaql-=rKuZAHroVo)!SWnG0?_HIEV!xmm9FxIA$G&aE_p~Abhyd zgsZT8G(W dDkG*Hxgdz27oI%*Do_dvWTy zVUjZI)ZS?0?iJBksE^3PN4R?YkEtn9#1WUm5^+m&bM_MpD&_2dl;OI5I5Zi|TSYNJ zH4c2?lKoUu#*{|x#ko<|{MHQL8TWA8ZyJl1K;gv!hUpNxcqMJrIt(7;#eeEjn3^6v z)D|T3n%X!T4 #DySiV2b z6wdZj>WB^ukC2sfRctSbVDv0su#HvAR^W$c{xqq6K0RtNHn(i)nH$Bg^ZZAI$()L_ zG5oL0y4_(P_SRbYMjfMwj!kj~e3@9%`10I641xPBKEI9~DHzj*MCa~PzOs3*6B?$o z4#*Is!tWLJh+$|qbX8ETBElz0Y1h|le-ot|njyo1*co|^9thdg?=C;55b01$Du$0T zb6E0G;@D4>>1N!{4{I+C7u+RaM`) _$nI+a% zeSA`~FACS}LJaJToz{-mJnT-5$qK_bQ(HWsN(c6r*5zOCI8W?iPhM@lW%AIBS_*+L z;duft8sJYQD))-dXJ#oEwuoLdt?%wVS)`_Z9IPoG45T(Dp4H8&N0$uq 3%lF4>}?09IHwC5dP$ zRoNS(D#P!cwUhOL%2ho;sJ#gAotd`gPL<=4{;CLbkaoI96Y_|$z#oEb%Xe#xf|3%# ztOw`mrsH@gsbl_m(w{Em*HrMl>@P{7trZ+2OwoKh{03G3yxOg*QEak)&gjsjeaAvG zdHDnrFT5tZh%}P;hH^6~|ASoqu>uWH3w zxj7&mP1hmJ2F5-kx*e?@5|g{Hx6I?@_IIsGc~F}2 z^exXjN}}alMA@t01$PI_)Muqp_di(|OI?3FZW(niigM3SBEZO(M>CZ>IS)2T2Dr57 zOrM=%!qF05nqdt?d- AV824T?5`GjsD45e*0hvH<+)_?IdKXe8#SIA znKoXyD%YG6mlR&PsuCZ$-2d&*lKP67(BAjut 78GnQ{ZyM7t zou++-0Bc)!?oBr~&^CLrV;v9T(yqk2&h*O2<@C%Aj*tY5+MRlyhX(;9hj|rDX)|Tx z>M(rZVG`0_4tzQPbR}Jv&tA=X8V5o_9I=!U&^sT0qClUr9ro`UO-xA4r+NPxV}94? zqw7lB#)XP(v)|VsyPqd06(V2RILa;gE)Y=;LxCj)K^I5CJ+4G9m4Ofr;0oa#`6?7v~-<6HK#4 zI?zG_T9R~