From c7a700dc2249e8bd3a2c9120dfd09240e413c8bd Mon Sep 17 00:00:00 2001 From: Joseph Redmon Date: Sat, 5 Nov 2016 14:09:21 -0700 Subject: [PATCH] new font strategy --- data/labels/100.png | Bin 747 -> 0 bytes data/labels/101.png | Bin 783 -> 0 bytes data/labels/102.png | Bin 469 -> 0 bytes data/labels/103.png | Bin 936 -> 0 bytes data/labels/104.png | Bin 532 -> 0 bytes data/labels/105.png | Bin 325 -> 0 bytes data/labels/106.png | Bin 415 -> 0 bytes data/labels/107.png | Bin 619 -> 0 bytes data/labels/108.png | Bin 320 -> 0 bytes data/labels/109.png | Bin 644 -> 0 bytes data/labels/110.png | Bin 526 -> 0 bytes data/labels/111.png | Bin 787 -> 0 bytes data/labels/112.png | Bin 745 -> 0 bytes data/labels/113.png | Bin 736 -> 0 bytes data/labels/114.png | Bin 438 -> 0 bytes data/labels/115.png | Bin 787 -> 0 bytes data/labels/116.png | Bin 462 -> 0 bytes data/labels/117.png | Bin 521 -> 0 bytes data/labels/118.png | Bin 708 -> 0 bytes data/labels/119.png | Bin 934 -> 0 bytes data/labels/120.png | Bin 718 -> 0 bytes data/labels/121.png | Bin 808 -> 0 bytes data/labels/122.png | Bin 560 -> 0 bytes data/labels/123.png | Bin 689 -> 0 bytes data/labels/124.png | Bin 306 -> 0 bytes data/labels/125.png | Bin 697 -> 0 bytes data/labels/126.png | Bin 492 -> 0 bytes data/labels/32.png | Bin 283 -> 0 bytes data/labels/33.png | Bin 415 -> 0 bytes data/labels/34.png | Bin 412 -> 0 bytes data/labels/35.png | Bin 729 -> 0 bytes data/labels/36.png | Bin 922 -> 0 bytes data/labels/37.png | Bin 1179 -> 0 bytes data/labels/38.png | Bin 1026 -> 0 bytes data/labels/39.png | Bin 373 -> 0 bytes data/labels/40.png | Bin 678 -> 0 bytes data/labels/41.png | Bin 661 -> 0 bytes data/labels/42.png | Bin 553 -> 0 bytes data/labels/43.png | Bin 368 -> 0 bytes data/labels/44.png | Bin 406 -> 0 bytes data/labels/45.png | Bin 321 -> 0 bytes data/labels/46.png | Bin 332 -> 0 bytes data/labels/47.png | Bin 595 -> 0 bytes data/labels/48.png | Bin 888 -> 0 bytes data/labels/49.png | Bin 447 -> 0 bytes data/labels/50.png | Bin 779 -> 0 bytes data/labels/51.png | Bin 888 -> 0 bytes data/labels/52.png | Bin 597 -> 0 bytes data/labels/53.png | Bin 825 -> 0 bytes data/labels/54.png | Bin 954 -> 0 bytes data/labels/55.png | Bin 633 -> 0 bytes data/labels/56.png | Bin 963 -> 0 bytes data/labels/57.png | Bin 960 -> 0 bytes data/labels/58.png | Bin 353 -> 0 bytes data/labels/59.png | Bin 426 -> 0 bytes data/labels/60.png | Bin 640 -> 0 bytes data/labels/61.png | Bin 350 -> 0 bytes data/labels/62.png | Bin 641 -> 0 bytes data/labels/63.png | Bin 722 -> 0 bytes data/labels/64.png | Bin 1626 -> 0 bytes data/labels/65.png | Bin 855 -> 0 bytes data/labels/66.png | Bin 764 -> 0 bytes data/labels/67.png | Bin 902 -> 0 bytes data/labels/68.png | Bin 702 -> 0 bytes data/labels/69.png | Bin 390 -> 0 bytes data/labels/70.png | Bin 371 -> 0 bytes data/labels/71.png | Bin 928 -> 0 bytes data/labels/72.png | Bin 391 -> 0 bytes data/labels/73.png | Bin 330 -> 0 bytes data/labels/74.png | Bin 570 -> 0 bytes data/labels/75.png | Bin 779 -> 0 bytes data/labels/76.png | Bin 347 -> 0 bytes data/labels/77.png | Bin 796 -> 0 bytes data/labels/78.png | Bin 631 -> 0 bytes data/labels/79.png | Bin 982 -> 0 bytes data/labels/80.png | Bin 598 -> 0 bytes data/labels/81.png | Bin 1076 -> 0 bytes data/labels/82.png | Bin 733 -> 0 bytes data/labels/83.png | Bin 976 -> 0 bytes data/labels/84.png | Bin 357 -> 0 bytes data/labels/85.png | Bin 646 -> 0 bytes data/labels/86.png | Bin 874 -> 0 bytes data/labels/87.png | Bin 1216 -> 0 bytes data/labels/88.png | Bin 908 -> 0 bytes data/labels/89.png | Bin 686 -> 0 bytes data/labels/90.png | Bin 627 -> 0 bytes data/labels/91.png | Bin 344 -> 0 bytes data/labels/92.png | Bin 605 -> 0 bytes data/labels/93.png | Bin 339 -> 0 bytes data/labels/94.png | Bin 592 -> 0 bytes data/labels/95.png | Bin 326 -> 0 bytes data/labels/96.png | Bin 385 -> 0 bytes data/labels/97.png | Bin 818 -> 0 bytes data/labels/98.png | Bin 740 -> 0 bytes data/labels/99.png | Bin 743 -> 0 bytes data/labels/make_labels.py | 28 ++++--- src/classifier.c | 64 ---------------- src/coco.c | 2 +- src/convolutional_kernels.cu | 8 ++ src/convolutional_layer.c | 10 ++- src/demo.c | 4 +- src/detector.c | 65 ++++++++++------- src/image.c | 43 +++++------ src/image.h | 4 +- src/layer.h | 4 + src/option_list.c | 29 ++++++++ src/option_list.h | 1 + src/parser.c | 66 +++++++++++++++-- src/region_layer.c | 137 ++++++++++++++++++++--------------- src/softmax_layer.c | 24 +++--- src/tree.c | 44 +++++++++++ src/tree.h | 4 + src/yolo.c | 2 +- 113 files changed, 330 insertions(+), 209 deletions(-) delete mode 100644 data/labels/100.png delete mode 100644 data/labels/101.png delete mode 100644 data/labels/102.png delete mode 100644 data/labels/103.png delete mode 100644 data/labels/104.png delete mode 100644 data/labels/105.png delete mode 100644 data/labels/106.png delete mode 100644 data/labels/107.png delete mode 100644 data/labels/108.png delete mode 100644 data/labels/109.png delete mode 100644 data/labels/110.png delete mode 100644 data/labels/111.png delete mode 100644 data/labels/112.png delete mode 100644 data/labels/113.png delete mode 100644 data/labels/114.png delete mode 100644 data/labels/115.png delete mode 100644 data/labels/116.png delete mode 100644 data/labels/117.png delete mode 100644 data/labels/118.png delete mode 100644 data/labels/119.png delete mode 100644 data/labels/120.png delete mode 100644 data/labels/121.png delete mode 100644 data/labels/122.png delete mode 100644 data/labels/123.png delete mode 100644 data/labels/124.png delete mode 100644 data/labels/125.png delete mode 100644 data/labels/126.png delete mode 100644 data/labels/32.png delete mode 100644 data/labels/33.png delete mode 100644 data/labels/34.png delete mode 100644 data/labels/35.png delete mode 100644 data/labels/36.png delete mode 100644 data/labels/37.png delete mode 100644 data/labels/38.png delete mode 100644 data/labels/39.png delete mode 100644 data/labels/40.png delete mode 100644 data/labels/41.png delete mode 100644 data/labels/42.png delete mode 100644 data/labels/43.png delete mode 100644 data/labels/44.png delete mode 100644 data/labels/45.png delete mode 100644 data/labels/46.png delete mode 100644 data/labels/47.png delete mode 100644 data/labels/48.png delete mode 100644 data/labels/49.png delete mode 100644 data/labels/50.png delete mode 100644 data/labels/51.png delete mode 100644 data/labels/52.png delete mode 100644 data/labels/53.png delete mode 100644 data/labels/54.png delete mode 100644 data/labels/55.png delete mode 100644 data/labels/56.png delete mode 100644 data/labels/57.png delete mode 100644 data/labels/58.png delete mode 100644 data/labels/59.png delete mode 100644 data/labels/60.png delete mode 100644 data/labels/61.png delete mode 100644 data/labels/62.png delete mode 100644 data/labels/63.png delete mode 100644 data/labels/64.png delete mode 100644 data/labels/65.png delete mode 100644 data/labels/66.png delete mode 100644 data/labels/67.png delete mode 100644 data/labels/68.png delete mode 100644 data/labels/69.png delete mode 100644 data/labels/70.png delete mode 100644 data/labels/71.png delete mode 100644 data/labels/72.png delete mode 100644 data/labels/73.png delete mode 100644 data/labels/74.png delete mode 100644 data/labels/75.png delete mode 100644 data/labels/76.png delete mode 100644 data/labels/77.png delete mode 100644 data/labels/78.png delete mode 100644 data/labels/79.png delete mode 100644 data/labels/80.png delete mode 100644 data/labels/81.png delete mode 100644 data/labels/82.png delete mode 100644 data/labels/83.png delete mode 100644 data/labels/84.png delete mode 100644 data/labels/85.png delete mode 100644 data/labels/86.png delete mode 100644 data/labels/87.png delete mode 100644 data/labels/88.png delete mode 100644 data/labels/89.png delete mode 100644 data/labels/90.png delete mode 100644 data/labels/91.png delete mode 100644 data/labels/92.png delete mode 100644 data/labels/93.png delete mode 100644 data/labels/94.png delete mode 100644 data/labels/95.png delete mode 100644 data/labels/96.png delete mode 100644 data/labels/97.png delete mode 100644 data/labels/98.png delete mode 100644 data/labels/99.png diff --git a/data/labels/100.png b/data/labels/100.png deleted file mode 100644 index 6f9f2f59072dff2daad063320c58f7c646b70435..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 747 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ba(Z#RS85kHJc)B=-cpQIw?YwtLpvZxb?`H?5mt4A~B6h<`*d=h0 z(2|9{7o9{L#r2v3{;;z&F9?l}X1S!rd25GORJX#jV|5AB^!_j=Dg9{HobmBG$E=%$ zAMf>izhiFnPGr{R>hE>;tiRtYzW3Pjkfc(9*p%SsD?a(neOb-lGJVsEBUS>tZdCt~ zpAxxnX?c9wWA^E*7tQ50n;cS8U0`(MOYjnIg(v5hUYQ?ve9!kw(M$LAoP5SPRqt`PC^^p7j1srlPnUG|kPou9Z$^SjL~;gxfHrlbVuGT7Yle;;lq z{`-myLwHisk?i?ZYzG=TpTsX-o5v)gGG&sY_gcma%OWROx$({~6|h zbnzX2t5X?P<%X^gJ!8ueJvD3V^RmXZU0ZLlpE!Mf(IJL<{#@0lojc2Nwk{5pWa!jc z#nliQt(zUnePGMlv@1%g?-*RxT6yuVn74!bz#=z$gAj%ao&(x*3j*Z3J@#-Ye7IV3 zB}G7c@%1&LtJPmj53dQ%jb&a?q}Upk^+8**H2(jE&%A;Y@BbAv(yV;h%l5vc#AHW& zYuWxu;(hm&`t8yJjA}v`zB~NU$IEQ~lJLV{6$OJW-K16Rdwh?Uap&L3%hkW|a_${@ zAHT>#p1u8t-2)3&TmVMDYKdz^NlIc#s#S7PDv)9@GB7mLHL%n*G7K>^vobKXGBVdS zFt;)=*d5SUgQ6ifKP5A*61Rp^yk-Z$2@GgMPGVAO4nxZIn|YvQ&EVD-q5`ba(Z#RSf$}V#E{-7{$KPJ_^#}oSnID0RYkgW2mHHNLS<$N` z!Q*>#S*xx~xNEoAR_>-UCzsiaqPAX|tLx^nM1e!9gQ-`+mC4>gV4+9AMirIgn%egZ z3*T42-)H?vYQln}cdqXK{;%TuXuQXTFfGRCtcT;MqzY zhP8eUC)pYFs$X$2oIjHFmf_?4C`(g@k9*d>WBTCcqQb=;&k*$ct#_z=j??iYJPf|9 z;p@+ttWJKU%EtS4RpQ9h|q^U#DhtJ8iL=efQsA zTWxP7&3epV_k+D}#(%Zqn;(BJ<>gbKb^G#5j}O*j7yn(aiVynl^p?Reiu2Y)M}hmm zB%)g48c~vxSdwa$T$Bo=7>o=I&2$Ycb&U)|49%mdKI;Vst05cLm`2YX_ diff --git a/data/labels/102.png b/data/labels/102.png deleted file mode 100644 index 7500d0d1e5152d9029f9f8495b2cb026495b1855..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 469 zcmeAS@N?(olHy`uVBq!ia0vp^VnFQ40VEh?*gKB`DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tW9b;qYY{@gvE-HXBLIa30ER9*$|t##Y( zFekiKs$VP1aN%=Lp&x_ESKYk_7@Aobm|7W`>l&C_85ryi=&M1|kei>9nO2Eg!zo^~13(SzARBTLlTvdS U(k!p@1LFc1Yp#AS>zopr09ZJpGXMYp diff --git a/data/labels/103.png b/data/labels/103.png deleted file mode 100644 index 4b2f7861141f54765ff720ba814244af5d3a26e8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 936 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ba(Z#RSf%0=bT^vI^j=#O;>k$$ta^U0tABMu2-&!X}r3H4*QZ$_y z#hDh6HKU0|w`)c21nKB4>*q>ys$^VLYFcojLn%{OZ0cn0ZacBMiESQPbtX%V7aK1> zDtmwT_q~cO+wNVR{k!h{p6c_K?~UXVS(Q^&GeXy{3jI1?%Xhb2g}@&h*;6_e1+TVT zKbTVaCFJ&G%k4=@tPFFNls2tVnr?gS@NxA?D|Q|}w^XF=`jn{f9S_&;njSYvTuzqh z#ro)ib*o)te_Pjeb$p5U-JX}7U$gXDi2dF@ll6B`Ua^?L#BJ^0QxzM%OPMFwtKa(Z zui0eizYo!aiD*JUDm*D;^y?=)1~leQ*-jMG z*%8q3(SmvIZA@K7p^9?!k)wb)6GD58%^Bj1=ZG7dgrSY^qj0xxW$YovX z7vmP3Sj3>0A-kk$(d4Si=G z_{P?uGxlv&L&HsrPcjW*8#h&PDwN)F_~^y3E2mVvLCpCsgMxY1>XRl6=Y4Mpe%MeVWiIlrvq)L1 z5cqatl=vD-q5`ba(Z#RS85kHjJzX3_JdVG;X79)3D02Mcdm$07MR_VgSv_9q&BvzQ zm?+`=W^b!(xWT~!&d018YxXp3DGSQ%X=S|_q4UIjo|PKEH=b<%dD#q) zCml|5B3GC~1s{|!yt(stQQZ87Q~Ouht$43->+q8M`{nzlJ-U0$)7a>l>PwCVda8S) zrmcw27F$+jv&G!*_l(7C(s`C=j|9KIYO-~c8$& ze{|B->hjmnmuA*eZ!v7CDNR+dWeE6sr7THHmcd|>ilnU7_TLlY?rpw(Jo)#gZ44FV zSNE+AWBgGPl6p2wmEl-lSAB)$Os(fZtub8-nxZCj9lEcw!hWTu^xR#>FYYV71BR1o ziEBhjN@7W>RdP`(kYX@0Ff`LOu+%j&3^6pbGBC9=GS@XQw=yu;9ne>Uq9HdwB{QuO lw}w-^W(UAA0kk0}F)1~NA>&@Yk|I!u!PC{xWt~$(69C_O$B+O3 diff --git a/data/labels/105.png b/data/labels/105.png deleted file mode 100644 index f45299ab236d8201411bebf8ae3a426098743d6e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 325 zcmeAS@N?(olHy`uVBq!ia0vp^{6Or<0VEiX?@@jZq*&4&eH|GXHuiJ>Nn{1`6_P!I zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W> zdx@v7EBgaZQ2|!z=;BxEKp`tn7sn8b)5(9%H!#hRXj8b~IC0{{z(%!an+1WvH8Kn_G_x`=wK6i-H88g_FxVZ?SA(JNn{1`6_P!I zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W> zdx@v7EBgaZQ2|!z=;BxEK%ps~E{-75Z>N(qU|Vo5W1__lGB z=_To}d!Vt+%AxCu64xZ}kJ*p%b-fO}p7-j(1D^`c7t@s)%v22`89gQiHH1vEyPF<= zQ`^}1blt}1_iIad15JHcPyyF73JX z`gmE9aLew4czLf4-#|DdUdbvRNsg}4#l%yn8|P)z4*}Q$iB}Oc;fA diff --git a/data/labels/107.png b/data/labels/107.png deleted file mode 100644 index ba3793ee628eaad532dd491624f63409bfe9e8c7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 619 zcmeAS@N?(olHy`uVBq!ia0vp^NILLH*O>( zE8o;O#kX<8h7F$>b7~laG&H%pJYDWhw_~sDmC{tzFOHO%C3&`X&6J~eRtKMdU%Bpc z$^E&HkK~7bSbbu$y=q{?KjQ`ObX?x8-xvP>Z~rHiSZTxObBcSfGfcX|8L+-2_t!kL zyIw(llR6kLd{XGnsk}ICit9FR#upWnT+8;nsG8W~#(m-&DD7(4)%y+2}4qf$_w@ zUTza+UtSom+OyYXnrbgYz~>2*U9PKWMsgo$xXIwjDZf=t;T8LWUwRJjR{gPH=?JU2 zlGU(6x?$C8hMgMB3(Or%UN4@;ta6pl;px(wZg-Mo9u$6Y?>E|~boNI(ciMz6_qZH> z?i6L2xK!f6<&HPXD=N7f9#Ftsu=*EKM=GBDU3&{u<^AvZrIGp!Q0hEu#|2fz^wv>_)k YDK&>7+dZv#Hc*Jc)78&qol`;+0O|$o@c;k- diff --git a/data/labels/108.png b/data/labels/108.png deleted file mode 100644 index eecb2168701baf50813efee22dc3aef88db3fe34..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 320 zcmeAS@N?(olHy`uVBq!ia0vp^{6Or<0VEiX?@@jZq*&4&eH|GXHuiJ>Nn{1`6_P!I zd>I(3)EF2VS{N990fib~Fff!FFfhDIU|_JC!N4G1FlSew4N!t9$=lt9;eUJonf*W> zdx@v7EBgaZQ2|!z=;BxEKp|647sn8b)5(9%H!#hRXcL>?+Su55@P#NdbMxaQi~l#h z+1T2yHy^59{3p;(wdR=OJbTZl%nTF6*?ph&Y<>bXK()j*q9i4;B-JXpC>2OC7#SFv z=^9w-8X1Ndnpqi`S{a$^8kk!d80-${t3lC_o1c=IR*74~DPFS!Kn?658*&npQgaw` UZZbWy017d9y85}Sb4q9e0PwtAVE_OC diff --git a/data/labels/109.png b/data/labels/109.png deleted file mode 100644 index cc2b35fd850270350f82c98b5f5952d1977e588f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 644 zcmeAS@N?(olHy`uVBq!ia0vp^WdAqwX{BQ3+vmeM~ zFY)wsWq-gaD!?ioUHnR&fq}8o)5S5w+!o_v9G<%H_D{=*|wi-u|eR*<_lF%M?vd zea)%8vrn(O_20l@Y*0FHT}4LONPsW}X}>sYU?0}3&Cy85}Sb4q9e0L4c7NB{r; diff --git a/data/labels/110.png b/data/labels/110.png deleted file mode 100644 index 9e712a8c52fd10e02602be438d0efab1ff73efc2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 526 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ba(Z#RS85kIuJzX3_JdVG;X6Wq{D01NAezlH-hm%W+Ob#iwi%pzX zu+g<3@Ac&$j3SvC8M%1{x#dDdf-KY39NC>sYUJ9}_m-c(EFc~AZst4d=f`(Hzqk2L zM}dP2zhhWr>Q(vBGk;?ClvORh>1h?e?k>w`B_-8{z7v}Y--&bSe-d^y)tP0#uKr!X z-=4hZ-?CT#d3XHk#_O5izF2>~#`AS5tHu_#?1}xy_k@=$t8!PkShhV{M{duV;E1`U ze}mV)XIRmCbu-H&*@h60*d30l(;3cOk=$v%yp;EV%lVB-abbK7JHx`46){9;PA%~f zWj_$Awf5NKP?wb!zm<0-f1Q0uYxO@**EhG1tXh19ZI#4^nR^7|mjXjbwZt`|BqgyV z)hf9t6-Y4{85o-B8d&NY8HN~|Ss9pG8JX)Em|Gbb><;LwLD7(#pOTqYiCe=dUb6$> eH~`v^lbDp6!;ojr(=GxOV(@hJb6Mw<&;$U#@51!} diff --git a/data/labels/111.png b/data/labels/111.png deleted file mode 100644 index ef920c5b80eb2a89efbcd73396200ae786f07e97..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 787 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ba(Z#RSf$|)lE{-7{$KPH%?=6xjap2>7ooTzYw`8Uq3HtVV(ta&1 zr6$#bO}t7kE@^fwXz>%QIGx?Xe$e^(zm_J2m?IPXw7nIC9xA1@C*+!+x)v7v{pE)< zJ@5CdZ@N%A@A4UA`Lt)1_n+5R+9rxmyusTQx+dxC{8cA+OzRJRzdvM^@5^=na`Z$K zg^v7MZR}=cxkV#daMjGq*TN_1OZ7?Jef-aNUE0cr4?KUj&JOQqHJ_d>`1O+i{h7A} z1ZUPyyYf4l*SR*2Z9%fqpNU7cPaWeeWo~dTb_>ieNnw@QR(u3Gep-{G~{=Dqw4yH=StOzFzdkS zTATs#_dS<}lrnud94h)&B-EW@M(KnzOfp~YU*&bU7`XI4gZiJqy&Mkr0)-i3E`2|h zX5Fwo;k%1H!}{ibRSXA`xqX=~Y?IN*?K)Dza zta!8icE?V+&-%q8FcY)JgZKfSlh_HoXo8Rx{sriDdcT7Hg?&!y^mx4*&0O^@WanB0j9 z(qaH56V(#eh?11Vl2ohYqEsNoU}RuurfXoSYh)N=Xl7+#YGq`uYhZ3=V6Z!&uLea! rZhlH;S|x4`r+Cc{fDD-q5`ba(Z#RS85kJvdAc};cpQIw?YwtLpvZxb>y4ZLZkQ?In50mm_;QiF zuwqur0?)iN1_F*bqAZQv|GUI;RWbx;?h2fs@}I@=qq~5L=By4ij>bbA{|+4u*n9cW z*)zMJ-&5z71&8+)29n-?E+h+!S zR#M_+c&wDId$8tg3(MgUdHt2Yw`nIW5e)h&*-u(s|w3Y)Z*lIC12e!ZiLagXHRZNcR_S2+&M3H$!WWrr+l#N}7(*6M{Z{kgE}(8*OS z4sNSg_jNJP=?E%xk7bx(@0BWB$`T+I{OUyD@m5`?(ibai8@$$D%iXe>y})^O{% z;oO8*9_OB2tlRy+Z(qBHQmwR-(sAXTS+%cA8e*p2fAylSz_R=@_jdm)`!@A|T`ImP zWx*Ab&Wjt)g=lXo+MjUh*V$Jgdp|robmqvRYo0ct-#5JOx^*Y!^_7qNzx`fxs((`P zAK|~;njdy1wrRdP`(kYX@0Ff`LOu+%j&3^6pbGBC9=GS@XQ zw=yu;9ne>Uq9HdwB{QuOw}w-^W(UB@3ur@5Vp3`jL%~_*UFAR_22WQ%mvv4FO#r)I BGEe{j diff --git a/data/labels/113.png b/data/labels/113.png deleted file mode 100644 index c6432d8654b1815e06f5b722e152d8db237e39d1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 736 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ZkN5$)bni;Qpx;Tb-9DjT5tanJD#PN^s=U$ZPN>e(i5yio~SLc+X zBgZMTMsDurZOlS{nFY73jJ=?x#B9DUX8VN$QyaCN6+MiOIA}$CD%^PBZBah!$5xBj z=Qhv%RIV&KYO}id{LeeTZJxIt?mZ%>v|0R0knYu>`jxl#e0%=9xcjyB&qqgRPj_CX za_@_|mHrto(R_=*t-B{`J_$75dRP3}j_2Cp;eUViNLybnPkR0M3g3qv#-Z1lufLl& zRVCLZ=lb8e!GtA)%J-KQnWSm0<@~oe;IG)h*lmd{@!x&xQ``xD@1Hr&biPom$y5Y1*5K za$W7SG>`gAeRu!ZdL_p5!C8<`)MX5lF!N|bSOxM6t*T^u$(9Fuf)XK<0*TCG$z`$4H-&7P0 rx%nxXX_dG&*toiBf>RaHhMdHt)EtJwT`XM>fkF(Pu6{1-oD!M<7fLOY diff --git a/data/labels/114.png b/data/labels/114.png deleted file mode 100644 index c99d94a580273f9caf01fbb7b43ec26791cbe5ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 438 zcmeAS@N?(olHy`uVBq!ia0vp^l0fXq0VEjS@?7!&QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fI^aqQ>Oxprc!S35E%)!d=K+EL zK(PMYfddB${``NhvV!Sid@i<8yyJ%D=aDsusn7iOWC@+s9(Alabt`Q|E zi6yC4$wjF^iowXh&`j6BQrE~Z#L&#jz|_jfLf63D%D})^;@?yh4Y~O#nQ4`{HQ2bi gX@bKFXhTk7QfdxEkuvY?XrK^-r>mdKI;Vst032YEMF0Q* diff --git a/data/labels/115.png b/data/labels/115.png deleted file mode 100644 index 567c48a263dff29ee25167578b15dfd2ac8d4893..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 787 zcmeAS@N?(olHy`uVBq!ia0vp^ia_ki0VEivX$Z6cDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o(Tp!_eOP{RubhEf9thF1v;3|2E37{m+a>Lw;B~!k z&p#}hzB}8i{H(F+``U_m-)rZ6w{X@GT)5OB*yL!vvd{PMmoHzJA6+?9^sRLHl5cCj z2;4NhB>hdN&A)b9#!zr9=&-}3OzY_9y&I3Z+|%9v_0Z>;ZihUX98_wva~7^x z@<;h*+0$T$j9+U6XGDM6_Eh-Ng^dsXnD70>{qp#Md#QGpW^r?PKE1QErF{#pzQCjq zi8q~APaK>TGrygzixyKX($%X|0p*>C4o zDZHo<+#!Ge*R_iI<#F@N%5rzy&v||GHh;YL)2x)(@bB|N{+^ROyZ)EG_CF@?Gp_sx zSuXDeCKJ^X*NBpo#FA92BN!gpF@hpYTy zrL_46lMFi7D@gDreb!~!&1Kin!7+{X=KW1~cb-*ty z3_}dftPD)8j4X5w%&iOzd?o%(MbVI(pOTqYiCcq>tD7b`41qS}BqpWiFqE9itIGol OF?hQAxvXD-q5`ZkN5$)bni>9ix;Tb-9DjRlw^y^HK-ZSeuaP$U`T-7qqyaRq4Hf$8!BIu&?NO2K|(-ehgn}3{4Ob=cnbYyPPGs&`C@ZF{S=J1y-Sd*1vj`@`dtL(i{V7tZ$K?Un9u)&~CN@Al4Otl$rP zerbO*f^=lnuT_;DdF0h+rpU+}Dsf6RerO9lC;c}YZ9+!&kw)U3E%jyej zhkg#(c7M{BYd2UTy03gK*>Apj$|w1hk4izSeul?b{O*~`m&P2j^NPjN*>hJmYQ8HK z(U5+p)_->L>h^bcPW=ko`r_R7EeBPeK4K3%HvRIAJ;8OrkWejgjVMV;EJ?LWE=mPb z3`PcqX1WHJx<-Z}hGtdyOTqp5I$+`u{+! z`SS0T_RoLr`?_y=@R6d$+t$38DED$=>dEg@T?0j4i%(l4qtUf!MZKfifyX61Gwm!U zxx_VW^ebYu@lv|U)%;mDg*_+6BPf}v?oR&wle5hY?y;X-ZYPnOUnIB3TXITs!0!lA zZs|n-AT~?Z-rZN{s2k7XR{6P=uWfbgv4jG>vkT@h2kRQzbEscZ3Vz_!eTVV9wu*J) z=lS(1@;R9yCw)I`(Oky8V~W;KGX`PbBFU`FxhlsKul65(WOieI*(Z@Z+UoiT@A6%e zXmWn~L}$&vn~p_-zwFgduHRZoV>r@UG{ASDf5vw?LeIb*Y{DF%4uUy-{ zOt*SfS~2^bqvf@l-15+n=2_b-4L3yx{L9huW-k8!Hpn{Cu7BOH{ONo2z0cp8wI$d5 zCbx5MS!C8<`)MX5lF!N|bSOxM6t*T^u$ z(9Fuf)XK<0*TCG$z`$4H-&7P0x%nxXX_dG&*toiBf>RFAhMdHt)EtH~l>~Vwpb&$n LtDnm{r-UW|hTId^ diff --git a/data/labels/119.png b/data/labels/119.png deleted file mode 100644 index d4fb1e9509d1634d23355d6c7d577539a5f3fc8f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 934 zcmeAS@N?(olHy`uVBq!ia0vp^20-k|0VEjWTz-KBSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq8r{zDi(Vu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJKpuOE zr>`sf15Qx^R+*#X^+3%`vproLLp+YZy=L7Z7b?U0;eOA%O}lnQx_;QGrpdzFwC0qS z#Nntn>QcOF2bEew*O;&ziSiIPXl*sS)zRd_Eq&4TPV6J)jV6zx9cvU68+A8zxlQIh zxpBsE^WPakH%^qVwtjx6`1zdwf6u3O?bs3+_vlw+f`SAGThsrT4a+sU7X8R%-LVlw zFXT>Lq|x;#^3>dfecpBDOfoN%=Fe}5ozl;9FlPFitMX+VBX{IU8!?CLFSp+op1p48 zg@ely@`Wk|Yc4%M*L!WZ-23F^TovY?E4eOy{PJ>U)g?|t=^nd|OV3V*Hf>{=E3o;) z2M!hX1ra&%_2TOqE}GrA8Caq0sdD__!?qZm4Ufevt|h!bd?9GklsmPbx%{~u^IvxX z^&F_UEY*LoW|v^vwsjna+`C^J`>#5?e?`1~qx2_Hp7|>m=r6RGXytsa_u#^=KT`8f zwDKB+C$c}hmlc;(QLTQ&=F61t+hh_l zH*M19@JH8{a0TkAo_t*p{cBo}|Mq!(e|zQL?T{0<&y&4sx@!N9xoa2nHOy2y^0PIM z#dA{pL48lPzpel=kJ@@pdbQblstvRM^4SZ&ePNVeT9}gL z{dQ&bnck(V7>}QOu4xgJ_&YIwU+c$hh1rf~hc4zEJYg^Tg)isS!dEZCxxXDOR$mzI zTpz<{pVz$oI>)nwSGpDZ9=>aCo}T#RylK-@Ly_GNH@8_cByUj8X1RGeo>#X^k`j4f2MTH60MS*dX>PG zt6Jh3QIe8al4_M)lnSI6j0_CTbPX(ZjSNE!&8!Set&A*m4a}_!416X2O-0d=o1c=I nR*74KjjNj`IBx)L$Vp5}&0#1HPS?Kz6k_mn^>bP0l+XkKK=qc1 diff --git a/data/labels/120.png b/data/labels/120.png deleted file mode 100644 index e2fb2ca1d7986946f4afe9dd3d88185e44e063ba..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 718 zcmeAS@N?(olHy`uVBq!ia0vp^N600Gqlb3tq}=N zTHO?+(xecic-VEqqeEspMN1+Bx*NsPlDfrMm6&tWB`+y8#fUO5p0R?n>(qjOF*57F zpR3US%ztO|?)LM=^FPmdF1Jp2s#0L!5fwGVl|K7a=MU+^D*q|e(qwwn&HLglRI>ODfhqFn)~&laAfsAo%wU_F)pY( zTqMoQU=!Yu@z;uhU)6K@cZL@hI*Px9D!xiHtos|Lc~OJm<=gH@&qMsaMKefT43uVY z-sSS;FBij3Pll*(P94h_GrSl={su@`zWbQ}Vy#o>zp&~@jY=J2=Z>zO>#@k)?U|@2 zUsUfFIhRS|ak|NYDzE2jNc)*xw)4zyo5aW<7k!dBQ6>5G_J23aC+_qK3udVKx@&Tj zuKH0u1~%1|@(t&bBr91D^yYd-t!GYHHRVZ;#&jL?eCHY5lkTQ5wCye37Wz4_!G`g{ zv!id0eupC0qL26O)Z*qa)+z54(Mi(e2F9>ziEBhjN@7W>RdP`(kYX@0 zFf`LOu+%j&3^6pbGBC9=vd}d!w=yvBmH0OmMMG|WN@iLmZVfiBZkpgU1hgS1F)1~N Vq2lljBUhjhgQu&X%Q~loCIE}N5cdE8 diff --git a/data/labels/121.png b/data/labels/121.png deleted file mode 100644 index 1190195044f082a25403abdb8ff1e4c0c8d95d0e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 808 zcmeAS@N?(olHy`uVBq!ia0vp^N-)-h7JzI5bPSU(HlPitPZw86D2FARo`V<@};#$aR z$!q7e^?HYvU;REw|5zjQZ&}HtXR9}Cisbq~Tj=ET2SMpSn)y#XQTwsO z_|II;$$MD6=c{?HYy2GgN!Mb!%1@EF$}rXbwgh+UKZjRN3Y*tF+4Go|;@L^pp8i!l zss6!jm*;2G3j3K+eDPN&$TT+ANB!PYu)pt4R;`pJ$L(PEO`_k@c;~EDzkm3X^oLKE zt3Fi-@*F;RW%8SLrgh(x#Q*RA_xe(|&-!_a>Q$3uayuXSia@(h7sh0oB zw;P@uu4{fH^d>51X82s)_offLe$7c0x#ss>`Srt)UlR-^{_N(j+#<)f#QbNnvBY~N z{iKwd!<$Y@PoKTv@!55fx+gz=%R1;1KG|f$F5i7|tGAtgdh_VQD^paqryn?U@rzRM z;`eK%B6hv(-k;^#we$b$f6Sa^AFcJ@EIAHLJE|qF5hW>!C8<`)MX5lF!N|bSOxM6t z*T^u$(9Fuf)XK<0*TCG$z`$4H-&7P0x%nxXX_dG&*toiBf>S5ZhMdHt)EtJ&E%%u& Q1BDnoUHx3vIVCg!04kkQ=>Px# diff --git a/data/labels/122.png b/data/labels/122.png deleted file mode 100644 index 1a33dac751bc2340ef39323d6a474456b5e0062c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 560 zcmeAS@N?(olHy`uVBq!ia0vp^ia_ki0VEivX$Z6cDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o(Tp!_eOP{RubhEf9thF1v;3|2E37{m+a>O_wWU)|>Kt7Vks7dFM{M1d$)8>yJYJCJInTd5>0{0E;OC|_zrR^N zm+rK>8o-~TBs}wnR_4WcKkr|E?PfK~@I0@JTYI0eM7P~9I7_bKP^-$)E?2lr^VNc zcmG`F7f!YQE#K{L@i#AV?wl%5U>K^FxJHzuB$lLFB^RXvDF!10Lo;0iOI;(w5JNL7 z15+y_3taxiGNd3H00)|WTsW()?nl6rU{NEpba^RNvSyuRl3)LGl4=3p00i_ I>zopr05>zl-2eap diff --git a/data/labels/123.png b/data/labels/123.png deleted file mode 100644 index 63c1532afe12e22bbfc84832ee3c2bb44fb64826..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 689 zcmeAS@N?(olHy`uVBq!ia0vp^VnFQ40VEh?*gKB`DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tWINk)tqzX^Pj+a0%+txs-)z147w4R` z^19u>?^nLf(Oscc`oA)!?oLGH8Ze!HTGlU(EPNZtGgR%hn--u^4-cP05=%h4s%nO~^<;r^z&hkI*F{q(G# zCqKyFS#$0m_j28r&ejigXY^Hm;pIE_r;@`xsg8B?X~Xr0yzc$XDZ4g%!?g3?XWZ94 zxG{0!Z+*S;1z$}>et1s1Rx6`UscX#cWKp|``t259ND@S z;>A0-&64<*KL|QEd7%|QzpJz8J%?m#KFNmZg(v<={+Q(RF~_t#(fXm;AD4X4TBd;B<+rD|huR-h{yTRvU?1D|#UJ?=v%ZL_ zkH438=%^=qTEBQ@ao(ic+HdUm?wq!_U;6gr$D+FOiHF~vHE!Qsx>q3U>i@a+FYM;q z9jOb^0!E^0iEBhjN@7W>RdP`(kYX@0Ff`LOu+%j&3^6pbGBC9=vd}d!w=yvBmH0Om tMMG|WN@iLmZVfiBZkpg^0<<9~F)1~Np*ref@_(QZgQu&X%Q~loCIC&o8Ug?S diff --git a/data/labels/124.png b/data/labels/124.png deleted file mode 100644 index f595ac8a671b87fea378f60980d16977bc481003..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 306 zcmeAS@N?(olHy`uVBq!ia0vp^LO|@v0VEhi-)Qa!QY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fIH=O_6MAz0<1De#p{8Z8Pq*p978NlC;vI$z&AspZQliEHz4Rf_7sn8b(@(EjXNNe7Fg$plW-iT}W-6q7(5dqy{|}82 z56y@O4zsANhl@8FX_YB;+=^NmE2YcQy&xh}nPZZk{Q(6wd5xS+j^;P-ZoF~*?o8JW z-^_}C&aixb=JC0+O^)X${GXMd;vBua?_BMx?*)6WPJ1S`@Ow#f&K>*fG7`UUF1G3S z&CA|@f7P?3c7d>XIX3-W8@J9nmA6A^xz7C7r7BMyf6V!y^2eh>BurS(akE(QYTq3U zuME@wA32<0{7iT4RoOFFXQ(@{yxabu#OAcCMqSVTHr5$;rS;!fTTEN?T}Y;5=TFvUNpabSD$cx4 z(0La1Zp)L3#r3ULcYa8VC-ME={Nh^gxkA4x^*_=*M`Btp>O4!mq5ACm2K#6E=QHoK zzZG)g(Ee=vp!D6WoqIQ5dAD)>y{C)5&Y#=J&*kYAW2gM|(%g32P#3d3$-kbo+FDNK z{rCP4 CcO9_+ diff --git a/data/labels/126.png b/data/labels/126.png deleted file mode 100644 index 18fe078c461baaf6b244bdea7aa40376c7d2587e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 492 zcmeAS@N?(olHy`uVBq!ia0vp^YC!DC0VEhozHt8qQY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiK!pu03=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZEE?e4Z_K|2pTeZ{L~I8VXe2 z{`>Iq_3Yf6lOkjoKE5ntV|&hSVE#Yu{jrWk9ZR3vU&-y+`hP<61GkA9PE&vX1R3!E z{EzvG_b*47WY@jFSNHB6ds<+mc)W54$K#B>2CH&HZm!rgaV-x6pG#xw5o7lTpl4M} zTq8Vj#|1%!eIM&UWUvSaiG9YRKP)@bPHKHUX zu_VKYk_7@Aobm|7WG=o*+?85sCV{F{oRAvZrIGp!Q01{+s5 gO|XN2HsmBGrRFdwEX#P^3>0GUboFyt=akR{0QPE0Bme*a diff --git a/data/labels/33.png b/data/labels/33.png deleted file mode 100644 index dbdc66f0e14171b41b21f65af627d586fd9faecc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 415 zcmeAS@N?(olHy`uVBq!ia0vp^!a(fF0VEiH={Yq5DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);7N9DiP{RubhEf9thF1v;3|2E37{m+a>G}kw@M={zQ5ALgTA%j;guk z?&nQ6WUw#N483qJ_X^N`swJ)wB`Jv|saDBFsX&Us$iUD{*T7QO$S}mv%*w#j%E&_3 zz}(8fz*pkmR1^)l`6-!cmAEz7xVmYA0|jV9PGVAO4uj&w{M({HAqG!ZKbLh*2~7Zm CqKF;< diff --git a/data/labels/34.png b/data/labels/34.png deleted file mode 100644 index fafd8417ab3b528f6fab212b61366ef14263b65e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 412 zcmeAS@N?(olHy`uVBq!ia0vp^5ELE{-7scB?I{LcDTvFXea{TA~QBAk!>G~3kQA$!Bk<5K)9`G-U+ev5~PG`1)K9j9928c~vxSdwa$T$Bo=7>o=I&2$Ycb&U)| z49%9nO2EggN>`3COAZZHsmBGrRFdwd8Bo%2MRHG My85}Sb4q9e0Cv5Gi2wiq diff --git a/data/labels/35.png b/data/labels/35.png deleted file mode 100644 index 1a5cf1bdbe2ece340b010d6cb53cc58467d58892..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 729 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ZkN5$)bni8Ak#? zu?RYuHSP)hBoUeN@RsX=RELyZx3wR&Oz0FZS=jVos^5&sXXjjgUNU!~s8B)T+F$lH zppd!d{svGW!HpHt_kt?y{# z{cN_i_S%^}zLjVAzdj3i9_pRC;+}fc(NgQ@+?5}#K5vM4xh5Ws%*FV2tx%@o; zw1$_74S|a^dGFA3F{1_?aie8=l8nUh(ApydrlM6VJDsr<_%1 zFIw0h<;`;SlUKmP*)mMQZ<{ui^L^u=E3^FChsSE$Oj7q7EHWyu*}qP_VR>3tA#cU) zivel-_c7L(oc_v|;k%|kMR9IT)pNsuDuo(X2ZOce>*l5`bB%g^Q@K`*aSCf`VCf{~ zJzF2`nk>WkR=DYu%5jI48Y=`i&TJ{`+q~^k)MEbGw-+(YsTJR5v-OU@sNe-dMUDQS z({-D;8k-FFSF1<~X{?BKD2$mO^N;0MHOo}_@~`p_=IxUGDt;sV_%rUXqO-urRxNRj zC`m~yNwrEYN(E93Mh1pvx(1fIMus7VW>yBKRz?=O2If`<2EG#irlM%b%}>cptHiCr j#??&|oSc9*D-q5`ZkN5$)bnwk1NT^vI^j=#O;?;(;Xas1=^9lNJ+UklonTG=6D&Z)|| zXpys9lAI40Cl~*vz0QhPmo{-&T~*xmmA_L-dsVZ-lfe$f|0>SI2Dkp5iArAI@I5}p=gq7= zl?FL+JXg(*9SPhv%Vwj`?&_~gE4ROjc>inK+`}tZnciOf{E=Yn*C#WoZ(e11b3bL% zrulxN`oZC^*-~UWysng_&wZuE@Xt*!_@s|0L!)E67TbeODpP^%0=1R97;Y%~sg^UI z2-o87U@C~YpOC9}AYi}kLOF)TPT_V}Z*pHXGT_ zM#qNtA6X|&W*2xL<1m$>z_!`R#coCIo-=pCQ@9Vr_?92r`lRuf#2$;;X}VMAczvF> z^|_Vtii=FoKW!Jf=f&ndC+F(IWBGAjX;MtTB);2yt!hhoa6+gy{%Wn9SIUz^X}zsc zd!}^oWC?#Tt<;ue_X~}-W!rse^$H%@=v5J!O3gw)cZ6>IEjjhi4Zeu;K2fT*bqx1s zOyzv9wT5vGfCdX0XNW zzBY?N;d+QPLq_RJMutPnZm~Ihj#-t(?6CKwOOhkQte|tRvjr5?^X6vFwVFR;T_01y z0lVL2UwPYw{k~pcSYT_pu(s>!@ky_?arw6@Th4dxnrfmxr7C!}p3eKyXRkM!uK1I+ zpl0#bv+h-4`9EyfUhbbZ>$m#rn2glbza?i`&0jwA&E&@?uSlNMIb)w)`L9fhqvi0@ z(5Z^gZL30r?=GpXw>(v_J$-q>!C${m{rIo{cKa3m4Fysi9-r491g2Ki64!{5l*E!$ ztK_0oAjM#0U}&amV5w_l7-DE z;_2(k{(w_dfK}$Gcs)=v^8`;9$B>A_Z?8vpgoer-|9IZ=oW;4G7dLz~1*gqi88|B{ zc}A>?u;P^$OlqQm362u3uC5Pjt27oXEHr2qsoI#(aq5Gn4~O^enT?k!PI~(;n|7;7N361Hr}{dViwnPpMzT_^qy;&yK%GpGI5`u0(R%!cC#(E+p6bWny$5b-JvrRdbb_m zU1`c)w!BC-=d8nL3%0|Tlh?M}3t!zSQoMYc#*yHF$x&NfUs(S>u~sAWaC3q~R;k#v zZ!gu(%n#sN+q~^cR&(OUh`-v*(^BoN6kD!6dOU-zdeI*jTRF~|iY)?eBC>wWuO4lR zZfe{=#qs%p@{ONu&-8s-?7Tr^isSV|hi+8LTyy(*dBxAQGPlCo|F{FSn1wEQSi+&$ za`+ZOGvi#OS}UFfuPrOBLGkq&ke*Z(nR zSlkqsvI@I)?7@eM?GKmRgiTd(*88jQV{zr>Mq%E??`KS2Qy6Y6zCA=+QdRseU;fcY z@4uG!Nyb?JdRO{(ulXJ8w8RkiDfu!pV=|wx*Dju&7&~SCdC{EW!uc;sdir;Ld&U(Y zYwx@MTVoy9#b;K>4o}hFb@*QU!cVg|Wqeoh>64qk)xfk$a4*N_Q;Vb%lBbv-;t#xM zDfY8A^}^=I1<6z7TRcyCT;8dCy3Ta{{nlj~_qn#KDH{iA|6Y4Mg-DRR7OPXUdr!~&2 zVEw$_Gevfb`l{dZo|Dfxgv%~Z%G7%OFk?~F!zQ5@7tKEeRC)V0-0jS2>kKYcNG;O(dvd%UCmc_%oQ{oEe%pjGMh zmxvwjP7CnaaGCDjbdgn}YR`?^VznK-I}NhLJdeL={5Rux*F5`2kDIp5sJ2a6{P{w` zs_U`$%`6qy-;mgJas9)s7p!;9dM|Ih5{J zFuSUjxJHzuB$lLFB^RXvDF!10Lo;0iOI;(w5JNL715+y_3taxiGNd3H00)| pWTsW()?nl6rU@<(fHveLCZ*;us9s}|=K%^ac)I$ztaD0e0stHH3?l#l diff --git a/data/labels/38.png b/data/labels/38.png deleted file mode 100644 index 6720b27415a1ddf978f0c0897af02e71e514235b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1026 zcmeAS@N?(olHy`uVBq!ia0vp^Iza5n0VEibugx|AQY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fIYPMu7%=ApU z(5;}P)Nw*dOJ(uYogG=qj{ICvkt%si8(X;-#)wR@)tDsmW?^TFKxfnw(I;BZzOMQ& zX8e7QqpZO_B&o$r*xst--R$?(Laj{jfI%@r^B z^nWNZOchpAGTO`EuvYFvjGDu)_;TiKMv0;W(=_vsGx)VX^0&9lVsXAvIprO6T~Y7pJ5ZJNfwMe#yLcU0q0&FV1Vgi?^XzAL`W^ck- z#lJhaxVVM%2P-L^XFM@yd!lOo8|S^ZrQfD3Zpq$v%I?^LQ@2B3=X@8Lb3ymBmcFi8 z4EF)I!^WYvaz1Qlo*=W~p%TM8X(`szqI;|P8QgPCk4-%+ylm0po6DSK&F-)}tPB3X z-7Tj3aPvlkg^S*;dHjj(_pheFyYm@6O5K+q+jV}H7^k8D~G*AlE{lQl}Aru23y; zjVMV;EJ?LWE=mPb3`PcqX1WHJx<-Z}hGtdi_@% diff --git a/data/labels/39.png b/data/labels/39.png deleted file mode 100644 index 1483788aba499eda831c54a813f489d416c35fc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 373 zcmeAS@N?(olHy`uVBq!ia0vp@K3fDb8nYODe`V(#_&V2S;^W^kf+dp4(C|bK^vobKXGP2M$Ft;)=@Rj&C6-7gCeoAIqC2kEiu5OxOuL5nzNlZ%3 WVNkc=sZ#(7F?hQAxvX;eg^|hKTDbZCk zjXdjiBtGG2T(H=ry_>eoJmIb>zjV!-$Oz5AtS&e6Q*DtMEf;4Pezy`Uf3~amUUWot z+4=RK=gsRcp0}N2uiMf36XxBEEchJqRPnVM(H7i#W^$_WbEmmhi=(|nY(V#eaddv}CuM%D7X zd-`Gr_ik_BPmA5cHP@RZ{8x!N>-p%k!L|A`Z>>t?x~~_P)U02)ZOZ(n9gN{#cchM= zNP78o=DWioosV_4ou6KjXn$_1MI2v1?i7o44bP0l+XkKQ9c@u diff --git a/data/labels/41.png b/data/labels/41.png deleted file mode 100644 index 83fa209e048fa870b51c48c4e12d70e7dc51a2b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 661 zcmeAS@N?(olHy`uVBq!ia0vp^VnFQ40VEh?*gKB`DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tW&hi(`nz>8DrEXP+ySVfb+U`^;H}n{=nNa8H!8e6#3+ z*C{?ezFUdns_N=b_tiJwX^{=rJ|$v#&arsXn}lhHXL#P~vN?bIVW!Rf@6Rm@zU{1y z-&hI&vYn|3#{;#edGXpaZ<{}?`22Bs(^b(OS3_5wtK_Ub zt?9Yt`+<;WGg=Lps%^=hc6qAc?*ton=~i*q=l+MDA3f8a+jjj2N5$-)0u|FM zmt36uyX~Q~VYBmwxPtopdtB12+ZSk6FqeIKc5r{szm06WjrEVGrDpy4S1y~qXG!`O zri`HXPbDoTR7-LjsHs-|U8{cHu{7?KEnjlwjeYs;)-&au{!cgg_U`b~*jGERvnSfU zKW8#W&+M(vnUp%#vq`b*59P$Y>u0tI-6LTBu=3f|+!;M*%ni0os?22AuKYPQCL_JB zZEvim)t}ESS0Cr~zM5ZWu%BVxjFjzD(j8oZ5v5w<8c~vxSdwa$T$Bo=7>o=I&2$Yc zb&U)|49%9nO2EggN>`3CO9boZOBPXO3h)=yuT$_ Q9Vo=$>FVdQ&MBb@0JN|U0ssI2 diff --git a/data/labels/42.png b/data/labels/42.png deleted file mode 100644 index c626053ce8e6a16673160148daf9305072b6529d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 553 zcmeAS@N?(olHy`uVBq!ia0vp^Qb6p<0VEjMtTVlV6id3JuOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=Ijcz0ZK3>dAqwX{BQ3+vmeM~ zFY)wsWq-gaD!?jpRJ{GKhB5cU(I)Po?Nr2 zMab(#{0r%M&R5h|&tQ@R2A*n(YeY#(Vo9o1a#1RfVlXl=G}AS()HN~;F*LI>FtswW z&^0i(GBEI!_%{_rLvDUbW?Cg~4K}WBn&9XG+K`i&l$yh!<+hh;E>MWU)78&qol`;+ E0Af$Vd;kCd diff --git a/data/labels/43.png b/data/labels/43.png deleted file mode 100644 index 1a8201537c18df817525cc8d6512acf09ffeab54..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 368 zcmeAS@N?(olHy`uVBq!ia0vp^YC!DC0VEhozHt8qQY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiK!pu03=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZEE?e4$$!o}@FXaCU0ty$Fx5Fil6%*IU;BA@c*Kle z9QuEe!J3(w`EXIm#e;7y2d2Jw@c;k+zZIe{_`g}C{yBf(!w722AzSF(6dHbIHGc`ZqFOqV4+S~hU`45z`AE=QCyy|=A{i<6> z^$OQjG0L61Bei1EE#sckN4^>O{*tZQkn`zSp0I>%^tN>iZrs`wd@>>RcFdVRd7~ru zfBxF1Uh={J{?YJa$3M50P6awkwZt`|BqgyV)hf9t6-Y4{85o-B8d&NY8HN~|Ss9pG z8CmEWm|Gbb_)7dk)sUN?l9^VCTZ4_OnEu7>8+Z*2d${_6FgS2VYop>j@mUd_oXm&+ z|9|ts>-zuy{@&9K`kws^e0Wfkhao(b)A66p-xEL+R7+eVN>UO_QmvAUQh^kMk%6I^ zu7Rblkzt6TnU#U5m63(6fw`4|fv?2BsVEw9^HVa@DsgMDadp!KI~!<2PGVAO4ukHE So73%pLJXd+elF{r5}E+eCtRrj diff --git a/data/labels/46.png b/data/labels/46.png deleted file mode 100644 index fb834e6bdebba0c062957b885b45c7a3e386bab4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 332 zcmeAS@N?(olHy`uVBq!ia0vp^!a(fF0VEiH={Yq5DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);7N9DiP{RubhEf9thF1v;3|2E37{m+a><4%z(!v;JQ`tlP8rslde~hL2|jrBeSLKL#{RwZt`|BqgyV)hf9t6-Y4{85o-B z8d&NY8HN~|Ss9pG8CmEWm|Gbb_)7enilQMmKP5A*61N5$S2s3YP$r=xSzkH=Bg=n>5WHlS8s~gDHr84 zUYTpuHY&#-V*luRZ;9s=HPuZ4Yo>T~sVMdQj6SpH`@8qOb7jlF-dkVomtGp|_Pg-U zRzuzT+vXE=n=7BM6~19K*^pty%uZv5D)oRGi3qd3m8E<-DwCKRDn;U%+ zvr~-qXvJ6KFt;CU7p@!lO0k?;cCOodepz8a7GJ4Yqhau$+Vjh!fBah=F4@O;!M4-N zy}>p3`PZ2mvnyBw%{~fEFg?0|mDl5j!^c_PMmfq}USZ5G;xm`uol}*sOzNcI=1_&l zm)j!QB8*Gt-BW8iAjps>R(g)XGWgHa1--}K)@@-usCFSZe2(IRC9{|QJHGkb>5tNT zVk4^GNluFf2D563YeY#(Vo9o1a#1RfVlXl=G}AS()HN~;F*LI>FtswW&^0i(GBEI! w_%{_rLvDUbW?Cg~4K}WBn&5~8+K`i&l$yh!Z+88g5KxH0)78&qol`;+07{+RMF0Q* diff --git a/data/labels/48.png b/data/labels/48.png deleted file mode 100644 index bad348527b08ac0be1dabfa1d64145ba235d0ddc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ba(Z#RSf%3VYE{-7{$KPJ_&JcE#IPkH4+qP*-q$5>e`iDhI6m2Rrncp ztXL`1@cC*$5PyL9iW(k;OeITphxr{H77p)K4*a{Ytm^OYrN$p+8m>*qTE|ck7*xxU z!@cr`T0{71m z5R1xUWY|CT)R|S6yq+@7$X}_&5VJH!p=9QkiA_PRkyob#-AmMqS|zdO^^e#7k*frb zy#7(R`+q<;!;j>ZoD7S+RGVrIqpVJJK2A?M6J*aY)tCKI;fKvDw+A{`wx=BkVrH0{ zU3-=T&vhi8Li{9A?xsUCavn6^v}@#Z~nc)};W^4-@31uZ!Q zWX(m18PcvE_x#SO9aM;3c;>QjN za6UI>^8ltr)e_f;l9a@fRIB8oR3OD*WMF8fYhbBsWEf&-W@TV%Wn`{vU~Xk#usfiy v21P?|eoAIqC2kF;c+C!gQ#;UxoW!Km90r5k_kTYJ3Nd)P`njxgN@xNAQ9Etk diff --git a/data/labels/49.png b/data/labels/49.png deleted file mode 100644 index 14d91ded1c0ccf1c17e46c08c751394acc83f69b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 447 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ba(Z#RSfkIn6T^vI^jwk;)@4%9vpwFBbdfHNwW7V%%&hH|5 zq1(@b*f&odb?~^lUvyPKrGM<4Rdufq@M!+a?F+tIzC!9`?*ISEfvrOQJ}RdP`(kYX@0Ff`LOu+%j&3^6pbGBC9=GS@XQw=yu;9ne>U uq9HdwB{QuOw}w-^W(R;8*g-brBqpWiFc_Y>ak>yF#Ng@b=d#Wzp$Pyc9+rRr diff --git a/data/labels/50.png b/data/labels/50.png deleted file mode 100644 index 6360e06a2195788c129d08fb2fd0927f01fc41e4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 779 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ba(Z#RSf$|KVE{-7{$KPJtn=RrfbL``LKRp-QcqPSWN*Ovwj)-Kb ziyhSHNKzI{dThUdMbS+sr%5a-a%Dt^t3Zvbi*)=24lfTyM#I47E-wSY=9mw*Z13f| zZ$^JNGcRuMJ!^aQ-5d70{Wot)nhA&=329pO%6?VIo2q9Q4?Kt{TeWTB!rbKNtCW^G zsr9EkdOUagSM!Ox_E!Qj2~k|Ifl&nkUWqWKS;^tj8M zu)V8TzCm}Q6~}?KEvHPGbS9`sCa@@6ofz|QD?|K#@vz^P4r+62R+c@Q+dLk| zS5v+}&S+3?o|N*S=I4C|=JHcYJT|Lc{{D)LW4&5GdDSoVuk0p9_k@<~d@cYc57iRa zh?11Vl2ohYqEsNoU}RuurfXoSYh)N=Xl7+#YGq`uYhZ3=V6Z!&uLea!ZhlH;S|x4` kr+Cc{fD<6lhMdHt)Eow*(2KK91BDnoUHx3vIVCg!0KCUS00000 diff --git a/data/labels/51.png b/data/labels/51.png deleted file mode 100644 index 97c57301396bd2bf27e1c2b6232c60cc5822fc4a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 888 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ba(Z#RSf%3VYE{-7{$KOu#_Yet`Ic~o>&*RCe1-gN9L1$t#I1erO zkl;NtP+XhiNC$_Cf8cUH(Gd3TU8S8bgl?`?=vuHKgvoPFbKW=pTmKSnW^K#Om_2jz z`op(pe!us|tn&4y`mjF~~acBSXdU%xEnwMrMtG)$UdEM$^hXZF$d z-;aO(FCWHUmHBLFeYNGR{3i+B&Bt2HUO%c{F`+6f;rfaA75Z)yU6;SzbLIHEdmC@& z>+9v7Ec$J{FSa&BcVqCrDKoNI5-zULSGDs#cOY=8{GZjR0ysZ7lvW@w} zkqrjsmku1U*T^hB^>JQ`ja+};m!SQ3_?s1M?#^Q3dm6yWptU)FjVGhciOR z&0No9itWby7tds-CodG9-y)!7yhZ=^o5O9ZXELArq`WrQH}UzhyUAbv9JGlpIbtgt zTfA;+#f+!huS89W?@UgW3chN)cf8A5hW>!C8<`)MX5lF!N|bSOxM6t*T^u$(9Fuf)XKPVt%@0BT?d*^rZ%l$yg}taNQvEKrES)78&qol`;+00b&?^#A|> diff --git a/data/labels/52.png b/data/labels/52.png deleted file mode 100644 index c69eaf638e4d0df87b337bb00fc350e1a7416ccc..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 597 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ba(Z#RS85kJ7JY5_^JdVG;rtiU=C~^Gb`_;xBj%@~0WX%rdZOq&t z;UjibR#+@Xg3lz^F;|O&YtascoWsjDY*Om-yxgP^zQuxtmz!Id?XdlN#|w((=i_*c zKFlk4xRd|8-FtnTIhQ0t+BrXk-d;H+HS$_!u=DOKGnq7M%C0&DgQ$h`yzdW0=Ld&q>uH(qQvOw(Wfsp-|uhjggv0_*#aKN-^ZB?#t|DJy#JKr5*x=2OC7#SFv=^9w-8X1Ndnpqi`S{a$^8kk!d z80-${t3lC_o1c=IR*74~DPFS!;HU)Jkdv5{n!{kSXOlfBoiKR1`njxgN@xNA7wp-@ diff --git a/data/labels/53.png b/data/labels/53.png deleted file mode 100644 index db833ad0bc59651bdc05eb8caa9b0a9afd620129..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 825 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ba(Z#RSf%1BuE{-7{$KOudpDmmyaom1-T#$3tk!7(W(oOak#DZ1? z?egfp;o5DnLSsjijBIJ4z{{W)@&PhiG@4d7buY8}v05;b&2`a*Fpd!B&@HChGCx`D znZEn`y6I2Y*xPNqcRc_5!RG$+~*0=j>_*L1n*cH_IrO26!l_og?e%;8`1 zIzC|8*V)V#h1aU@JX}@C*kB!W+^OnNquQ=#jEmZv0{-SYt~l&#^)Y$nLY?lQN3)Nf zV%+kbt#c~h^`$=TQVnO1Z`S8J8t{DI!pZKuvciHlI~aWa@7j3!9YXb` z+pW(&P&Y5V9q()Nc+t8mf_LX#Tq$@uyXWi^@7bsG)qd$7?>jHGHTdVHol$MCn)9AY zt-5t((WjVSi*v6my81|R_NistnU}9#cQpD1%YySKH9o!l`Zx4^-M!$0&rD7o*J5Yb zvF?7u(4U$A(edN#j#thw)#=Z5nw{W{wxooad6IBD~yR-u#e zeOW%|Q#@Bk++Y8G=JT8DwO3zU_t)L6J@$0cmVXDgX!QSOt+>G^uG6Ef08C7(C9V-A zDTyViR>?)FK#IZ0z|c(Bz*5)9FvQTz%D~jh$XwUJ+{(aUcR*haiiX_$l+3hB+!{{t injHXYUD-q5`ba(Z#RSf%5A;T^vI^j=#O;>meE_a^U0t7sjnrwpc{^$Ooaq-> zY^3G!%RtMyS7F5+Hy4+V?u>9D5f{BRVnN*Df-V6;YA#As6jNqqd{dm+(f0GBNpOf? zxAo^|_bOZ8-l_;IPOp1^&-nSga!KzW?HxbGw=DR#_><&f{r*|IejOK{woK%WM${5} z0rOd0y5H-(uIhj9Tn%w%u%>&n+h&vca6 zuZ%I(s#aD~(*1qKp#EIMM;V5Xr4xPDtroiaVwEkM!aB$5hgu9qrKJK5v!y1@EMbV- z`D!t1fQDNLbHU9}QHE>L!L{2N__{kf_#em}Xq4F;b^4rNtJA_Q9;){k3*!ID89FFC zBwe(bdzop%bc_Bh))VuW?_XBUaHX%d_QRs&jI@)xblbN{`79A`P*=JX_GVk&H)q{y zmsgAx`kSY2Jodi7rLDZg38%@D${Vf(h~nmxO(&D?e- z^trNX@h!WoO=XvMfDio9dy(HY0meyzYv3?>>cPOEbvlhz3pd_^!3}zwjA!xr*G&s|15>kViEBhjN@7W>RdP`(kYX@0Ff`LOu+%j&3^6pb zGBC9=GS@XQw=yu;9ne>Uq9HdwB{QuOw}w-^W(UCe1!zM~Vp3`jgIUm?xJy7G22WQ% Jmvv4FO#ozpiuwQm diff --git a/data/labels/55.png b/data/labels/55.png deleted file mode 100644 index c74c1723e2ac75d782ebfc314ceef8ef87dab555..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 633 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ba(Z#RS85kJzJY5_^JdVG;w$b})pa}bi^XIFUHea3OrL^RVkZW__ zq(tYI0D&#$SMFW7az7y0+1uNhx3z0UcS~@##cmB2w+_!+A2j6Wu}zWWje1E>VM#@+bXdGKYLGH*>1N%V&yC*e&x{j2M(02+V=Zk&XQMxJA_w8y==Ob zwNCBeWsj?O4hFtmmi1q&LU3gjKilh-xAwEexvok(aN&JSZ}anst3)sCzPx1Cvwx}; zHOneD@W1_ek@;xVlC5@E5^vobKXGBVdSFt;)=*d5SUgQ6if rKP5A*61Rp^yk-Z08rVTLD-q5`ba(Z#RSf$}>%T^vI^j=!De>k$$ta=bqOkA~{m51Lb4BLfpHE-&YH z^w{j{+SJ{&h+p}jnBzNb#S^&~mNjJwM+k0vABUBS)GyoFvLP<|K}>Fw7Aku zE8h5MExq!6@}?N;RF^kG`Nc}2j~vYyrt_>~YcRgG_8sE{;ma#L)EqA6_Xcfc*m6>d z;lfk~i>d4HZ;)&Vk7{pYypeuo;VmYKODhT)x_GsYvq@am$o#n_@(PPX(BdakHZUGt zbn7Q0L*{4W<|@Z3_bhpRwheZftsXh-3!K+yaWh0KWxi^9p|mpCcs8Skbis_9ZWA-s zubjgeeTVnF`{Rx0*Ji6c-yK)W`|iWb({-<|XFWP*)qFC0o=^JAa{Qh) z+Mq7GhqHGEY&TEZy_j7)qI}!FLo&z@W4u`92)?GclX#RY?uN)0mA6qS%^p#;w*-B=HJ3-5M_1RB!T3xwg)X=n} zJ!sOc{hK<;tsF5SfHOQ&86_*EsOUO_QmvAUQh^kM zk%6I^u7Rblkzt6TnU#U5m65rwfw`4|!R~;*8Wat=`6-!cmAEyW;x#(}&Nx6DauSnL Xa~LePvJ_th3Nd)P`njxgN@xNA{jiwM diff --git a/data/labels/57.png b/data/labels/57.png deleted file mode 100644 index 9c849ce3e54af365a61be16dc35e466b3a74006f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 960 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ba(Z#RSf%02DT^vI^j=#O;?I9W{ap2?s8T?+KOBa7|Td0v4)A=G% z)6GL5=vH%q1-Z4P(p7>REt8}&Pj*XIBafj8WP)-Zj`Q^7n;7pd-XQ?Tj{B`f~Bj>wSxVe zBV3mJp7QhiBInktcb_j?^KjZ#hCNq8w|1_}`ux_1?SudED|e{LM=`uR8p6zw zxtLG&C_`jmwCraaf0rkc3~RSVaUW>#KC8kwXZsZchMkZ4gc_Ix1v{JN8KzWZ$uqp* zUVZK-r^7V&RE9IUAiD!q>*N#}+@=`KUVnYD9fQHL zs!}sn1h;7E8R?~F2mUb}5X|MD z`z@qbg4SKSh9@V>G0*>AT&S>P;9aybpOfL3vUKTl#tq>mOD7d>3U_f~%byWD(=9mbgZgq$HN4S|t~y0x1R~14A=i14~^a!w^F=D+5z2BMV&v zb1MS_Ux|NHQ8eV{r(~v8;?`i}>ZS?y7SM*A#H7?52CHZ;p`Sn@22WQ%mvv4FO#m)K BZfF1i diff --git a/data/labels/59.png b/data/labels/59.png deleted file mode 100644 index 4d3261a6bdb8e486a244c60f7e1ac0e6a371ecf0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 426 zcmeAS@N?(olHy`uVBq!ia0vp^!a(fF0VEiH={Yq5DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);7N9DiP{RubhEf9thF1v;3|2E37{m+a>kCyfpFUfy;;H%WQITq>gY46LjY_wwn;hkC@*TTa`CIJF-#2fK zTK*|-NM*d~)+k$S#ofBBsHkFcP5J!!?>#R*7oTTWw!UqbFDM*TOI#yLQW8s2t&)pU zffR$0fuWhMfu*jIVThrbm4T_1k%g{-xs`!|uf)HpC>nC}Q!>*kaci(~b<+fg57363 Z#H7?525TK&rF@_egQu&X%Q~loCIG4Jl%fCt diff --git a/data/labels/60.png b/data/labels/60.png deleted file mode 100644 index a18cd000731a5ad116fe6b2abf06f0e2b795c432..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 640 zcmeAS@N?(olHy`uVBq!ia0vp^YC!DC0VEhozHt8qQY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiK!pu03=F@3LJcn%7)lKo7+xhXFj&oCU=S~uvn$XBD8ZEE?e4Z?9Txx&G66`4l>((^MA@Jj@`3frSurGb${D={cwaaL&OI0qsJpO%LL2B zrfp4lmF951@3h>ats%}|=U7_Htx&kK>kpgowAf6=$5OsxzxQvv-7!1haZ;OG$5a01 zNqMJ!_kTLZ;QDRX6_-Yvi@)VL#cw>V5MB5#_HB49kHf0&p6Xw>a+D<-X7v489r@YV z@J-;;2Py3D7YP(=2Z?A0RJYXQ;eDVDQqj{>n3dvRb8g^Ikr#2s6 zQg~q3FGYb4@1!T&6jRgE%qFKk*r^<-$KYwoW2N%)yzgZB>*~`Q?Z?E`k98Q#A|B!xbTFb4Y&)y$A*wK7ROt$4~7)AfKirD|${r&E}$7Soz zfBpN#=Kb$I=YQXF&-yO)979whOg$!V)^ZUenu`R?hIOql2qGUy;9AF!1)h z?Oe*ATudyjzkZUFVV-W(R&xlNVIdT9(>GE|+ff0^9Ec=E8G^!Js|RdmxBGZ|rSh+##u%bhC2GB!dUJE9WJi?doB);Fgg6l$O|F7r*pS!{=9b z-W0FZEWg;^8T6QkS7@5eiwDiq&Sp3*bJv#Gnp4ktyISx`U?EQ&r~d2YtrLZJrk7q8 z+PwRtklVhwN9JouPP>zD?)%}w*Z;D@3>n2wmt_gc3T*Vf-156zSfFKY$Gl+4$2=|3 zN7vt+a>7{Z(+Rn~2md^*YyXq~BlX;aCHD-q5`ZkN5$)bni-FKx;Tb-9DjS&Fhe*{;=srMQ(3&dcxNrq4cWl4a>W8? ztu2oxL}^U9uu!2RWY-Fdk_%^#-t=_dEh_lDVMp2KE1GwuT|HPkHCvsMrp*Ybs^fdV z=g!{A)1zCYKjnVE%YU!>{`bAs-W-C?i5DFHii>`>m7T&rd##IB>ECCP_QK|?UJK`y zS;Skt-76Sw`YyZMe`-@!xzUcPOv54B;_f zMH)=)Cr$p$P$MoV$#jar=E5lfeTEN*UvAsWKVio8)uy}$CN8eidulYH`=!>xUvJL1 z{9-Q2I(TaJl^tfnRWZyPr1s6^IO5Kbc63ElB*Q(4(C2&%(|4&|jSJbH~?lsAL9T3 diff --git a/data/labels/64.png b/data/labels/64.png deleted file mode 100644 index 699d56619a60211a3a3c890163176f79848cb097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1626 zcmZ{kYdF+-8^?cRsu`w(X)Oj_%qVs+nwhoe@6gbnF==uNNg>A$M!U@<5+*5stnjQR zhsk49YjT*(mN5-tokAH!S%;Dcn^+xea>~xN@17UWi~Igw-|u~WuKV3L-E%*4lZKuK z0ALf#4fa;4vuapa)dH1Y?kuQeU6d2s2>@v}Zsq8Dl{X4=^JW8Z&IAB{DgaBWi2o-5 zXQ%*7hX4TO1EBMxP~l~-I;e%ZGhwinmi@R<IW%nOT@6S&YY8xgW?1XIIoGJVTH9i&=x~Hgc+AJmz6=%F4a$G1q zogqR34tb75blpj=J(n*ccnw`M#*F7(m5nafHQ2BGJ>hvPYs64jdSur5{n+U_#*yIL zO0Op)4CG~((Q4&7gD69c(TwS-R{!4taqg^};f=6u0KGGgxVIUUZtiqwml*LMD@PE4 z6nt=5AR#l)fc0nBN`S~7R-A8{CyHnVgF9l{P59N1Vp^T}C1}CRQ$6`nQGXeddbQQw z%MiDPjr<5p*x#&)X;Si2!D=2e(fssA{!SP8CfxwLIGjF!${FM=QQNNuFTV)`^LK(V zIpd6bThJ*P-J^dNNF0`4%xD3UauGGgyQu%V$#`?CAOHD=*WUGtEB*c%$l-(797o;J zfR=C+BX?Ww=2XA8)3Og>`*rJ?Pu+=&O`5aljvC^Al*JFvDzsjEm_u^}#Bd|);)eS0 zJ(cUI&B=Swx}MSan|%W>As?#^x*VbcgCZy-%$K@F25IDAythSXCPRM7mUH$KpB{78 z=&LufL-2;pwtMJ3RM z+Oy;nA1{7ta_eTSpmT0o?Ev-@CcNM?L`gpwr)si)y?Y{Xlx0&|*>}knP`hC(^u`0_ z5V)+sn}RWBKuQC+E5tT@v{B0$bv586!ksK5N;iBAQ1+JXonh#RCdD`@VbpgYY}J05 zzh$`9V7N|*{1S|Q;H%vn70;jp8)2%T2X(Kry*_ah!>{rZf{{xmyBfaV-b66R3AyexgHL|C2rVOz?qkveA*#DFwiw7N6u#b}hd6UNL~D zZ$dN^7<0_T3c350I1`6 zB^Gj>War1U9@yGuq4@LF*F>>vYbRGRtG2~O|-PS*2NWPybQN_h0usKXb3{@wcg+uo+c6`2+v>VLgo7VZ`(;(BqdTg8g&vz=@<7%rK*tY0NHs;b@T zyw=}W6BRFPKb@H-5?rE{YM#@eex2R-rny+2f9us|tCx*|%+?D(WEt!d7CZV*R-&a& z=-|PCIZTu5pDlmGx4~_TTwL5q-=En=XZRFt7`%(;#<2c&;#kPMD815e*TJY8JP%#^ zCiCkWn70TVy3MrZYx;G&%ly#?j_AGEJ0W&AGgtoOW3Crw&iteoF>wo9)WO9%>V?O2 zJ+qIv71$g;`Te88!a1+)B(7h-aWZnl-b;r3bFzH&*~+zK-4Fh0`_ip8BiQs?p3C1q zUZ>_ImAYj_PdgPkD{Kzi+4ZaKZ=@Rh3chuc_d@7q3467s*<>(4J=9?hy!_!sis$?KzM z>DpO+<^SH8%(=r97J6Cxz(Tf?8{D(v!(Lox?U-l2=<)5-|F~);zPfK%<9FfTW}ovc z>e82O3(tA0TGj21vNK!u`&fgjYL#?^u#pJAyMOX8Z=0V`wY+B5{AdtNO;M z-_99YvC6OA($@VB`|!`^(BmDi)6!n1SnBXN-r!v(viao(8@(R}Kd$n9dvf5U*`~cU zm)e%u|Jr}P{@45k^~~W9XB?|^39<(!HPsT=h?11Vl2ohYqEsNoU}RuurfXoSYh)N= zXl7+#YGq^rj1emX17C@MQ&BYJ=BH$)RpQoQgTe~DWM4f@5yNF diff --git a/data/labels/66.png b/data/labels/66.png deleted file mode 100644 index af54954da501053a578bb2c31e4c037392ef941d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 764 zcmeAS@N?(olHy`uVBq!ia0vp^Iza5n0VEibugx|AQY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fIsQVGragH{`@%GB<{5K-@+9Qkf0s~g^DD_FP10QP{n7n<8{)3KIKAsPcg<2E)jjtX zO#IHjWFn7t>D9%;KZUWMh#tJB&#+WpWyANgk_Vn_j!-Dw{nvXd!xt(3H@hzHw7$&o`&|8d zHpYUTkK?!BI)8ZC!A+CHy25|^&U1aa&dzVn?3mLVwSGxWJg>kLbN~LIWtUu=?(Mf1 zchmaP-21R2b?#KIvsR`i+A|!N@|`NZH~pG1$J%U$AL6P@7r!@U$X1#m$iP>tv_rVz zM7?0l%Bk)wzqgzcJ*XZP+VQ}b;SH~l#U37q@Odorte6z4oR{W*@7cGG%XZr2q@44A zE?iq4G`I54%*=#?994C1T~50_PM>tyLsPYV(&TvWr(wlcHnp*Tw@zAiH1I)<`8Bcc zK?ls-9V5Sfo^~$J-O1$l@fof1<~7{s@;Vg{Eold(Fx3**h?11Vl2ohYqEsNoU}Ruu zrfXoSYh)N=Xl7+#YGq`hYhZ3=VBjn9Zz_t0-29Zxv`X9>Y+T(m!6^=CLr!8+Y7T=F T>y_8vfkF(Pu6{1-oD!MEC+%JB_q+Pu5rHjX$HM>CKfC^8`DEkHrbTBf)$DG5e)icx z=z!MRHCB=HLdEj;ScN`V8*cBp`*qy?+6&9`CvIn~+oSkERa*SdpWka67Z+JgeZ8Ce z?W>8==i48>oH=oNIp2+yx9o4)O`9*d;k5HQy>DUZbp^Vo|MO(qS-p^5zjXIBv3XU0 zf|jO92ThXAjnbT5{`>f>HPKV<>{zr_ZTfsYwgpO053BAKZz!m`Y5wxgYtj2JF0k#A z*&o1mz>>40qwLzpyT90L9rsCYyL$ikiyz&$ek5!efF>S3~!7cwlrwYRXAqH=`eBQeAWdQZoHnDBKez_;mq0#%X{|f z9W6}WFWn%Ryq~=xF?oITtBgBW+_y1YkY003+FISXUrDKyA%<(-(c=eK?f7*rPJb=K z6dksYE$?dibL@ADHHbU@6J)ryV)Ohtj0@Bn^k1@tyj&Ci@?!bRPv750<;H$nbo==? zPJ6p$#(PWdJvHVHQ7x)`HRD>;k*7=JCbu6is#qJQH1BWZBh^`a&~u!E#5!< z`Zr6dw=;^rEdTuN=bcF>BhJ;XfBnYkS?1-=7yA}%4gSc#(Q$Xh=WTzt+$ni}?7+{< zZxp`&{Jr%~{QC;EeR0p;|CTveDZWhgK(~s#+}C>rhpyLGHcTzv|5x_4yo8@h8h3Yh z`L!!Dr@n`+z54sZs{ieOUO_QmvAUQh^kMk%6I^u7Rbl zkzt6TnU#U5m63(6fw`4|fv?2BsVEw9^HVa@DsgMDadp!Kr+uIeIf+TBISkH4mv1Km Pg%~_t{an^LB{Ts5s^yiO diff --git a/data/labels/68.png b/data/labels/68.png deleted file mode 100644 index f824c02cf702325f80ef1a96069da63009fbbb69..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 702 zcmeAS@N?(olHy`uVBq!ia0vp^`atZ-0VEhY9x9jvDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tW)piM#IR5ed3`u?Cyh%^ic5s~Cuu;$} zvUBby{vYxw%TL%loNBYx7IW$fI(2ATqM~cto>sQQ5}zaH7#g3+n78|?&FboN?~CKl zy}VPr-g!f4<+qA+|BK%!kM2z(^aB-u<^e zJ>b6adCD8rz0Q*!&-L!`c=Gg{QNbt4{HWP;XCBku|0-{xW}jB`%z5sYw5*<*1p50t zbv5JiFcu6ym6R4m%s<@Apu@cC>l|~I1GBCf zGaUFh`C9o-#+3NicX=6PGHuf&=dP@kWq6(y&vRh$t!hS&)q9UG>t}ip^4pw&>xvyq z!_sfz3?VCO1sb%r+A}POeBJz=;m6iGX$Jq<*YX)Iybb$xfs3Je+0?(a^BE5mF1#au z$dutr_V@XL!t1pD?z&lMon*B?d1j9H*86SCKlz#{ammkE(dWPN{m-yxt7gQu&X J%Q~loCIDw1CyM|8 diff --git a/data/labels/69.png b/data/labels/69.png deleted file mode 100644 index 8d8d290a5de21adbff896f79b19f0101896f032b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 390 zcmeAS@N?(olHy`uVBq!ia0vp^Iza5n0VEibugx|AQY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fI){JJ=*BIlf)-NOAp)hyOv~vv5%9KQN15 z$b9mW8LXXmm3o3_>bPax`R~ubBgEgQCD+n5G5D@m%*t~<{HGMu__y&t3~85<`Yzhm zHrrjaU*qTr&ytA(d8Lh)czBM4&Eompp4FBrlWPdnd8dn!k+B76AwVGpPgg&ebxsLQ0OgK+6#xJL diff --git a/data/labels/70.png b/data/labels/70.png deleted file mode 100644 index 4c843a141f56c4516a7e5a2e64fe6441d9f06cb8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 371 zcmeAS@N?(olHy`uVBq!ia0vp^8bIvH0VEi*Y_0u(6id3JuOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=Ijcz0ZK3>dAqwX{BQ3+vmeM~ zFY)wsWq-gaD!?jpRJ4kDsCvuZ z(}&}e!p!ys&Fxk$(_aZq6|Cr3WF_KK(YeX0g+vD(8Q%{(QSKf1cV8zPt9GvqdwS^xhgz7T!Gb=IhdawOjXO z`TnygghcGxpB5g(zwwxl_te@qi?Rc=zTIg4)nfM2Vqf)^gg*uRXJ5sFJVpS@LZ=6T>Gq z+v~he+Zleun!hvq;uIt|QL1!n@eRwfyK|S>v~@nwobvySW6#|9e|w^POQc>eUw2%s zO{%!ZGc>w)3tNx1=-K&?*EZ|23*U}=DlRB^Q7HY!x3(ifr}TACot-5s&r$DhQ~BZ1 z*9A-2l$2^!SN@w~yLZ~(TOB*4XXY*XP?%)CeQs=<{u8UtP43Uu&-}YbS@?Tac%8-ES} diff --git a/data/labels/73.png b/data/labels/73.png deleted file mode 100644 index 3bf278338e8fa738741e074fdddaae5596637051..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 330 zcmeAS@N?(olHy`uVBq!ia0vp^!a(fF0VEiH={Yq5DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);7N9DiP{RubhEf9thF1v;3|2E37{m+a>KYk_7@Aobm|7WG=o*+?85sCV{F{oRAvZrIGp!Q01{+s5O|bic cHsmBGrRFerPGU2v2MRHGy85}Sb4q9e0QqNK#{d8T diff --git a/data/labels/74.png b/data/labels/74.png deleted file mode 100644 index fdca39da8213af231a2dd6837ab4f436121f93cd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 570 zcmeAS@N?(olHy`uVBq!ia0vp^ia_ki0VEivX$Z6cDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o(Tp!_eOP{RubhEf9thF1v;3|2E37{m+a>rsPO3QQpzf-&U8el|&X{>N z4=vq$GFKKV2-+*$*>N(Fm*G5X!6T#V^I0C`KGHursl!F((e@VR8NUp3wns^;W@o1C z>UmkR{{<8KrYP}-HIh4)yl1fb_Bfv51p9kK-UGe5a*Q*$UG$g(wz~>9{B&3n#vrwQ zngw%$Y0oyE1OLP;te6tc%6lDGdvjW0(swR~;Pq)8CK?PAtYthWt-F5q+N%8r1>aPq zt=kcL#%@mh46fH^(+&ljXdJKk6jh)x>B^kHY^&r27k(=$v3=WmK>XF)vk{he*F}4B zY1hAh@@3WMJLko{W?OSltXJ51_5a!*EW2VC9&q?{^%XEQRZCnWN>UO_QmvAUQh^kM zk%6I^u7Rblkzt6TnU#U5m63(6fw`4|fv?2BsVEw9^HVa@DsgMDadp!K#~09soW!Km W90o6L{^X-TAqG!ZKbLh*2~7Z&Gt$EV diff --git a/data/labels/75.png b/data/labels/75.png deleted file mode 100644 index 155339413ee6b8a673eb12c1c4023f14802fb7a5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 779 zcmeAS@N?(olHy`uVBq!ia0vp^xcUMCh*az!1uqq6}v%|(1O47_c7Z z5ooY|)VZ=rZc4p^(xlaOuU@Y6WDw(hryrj5sI9%)aO>gIa-|7b?X%r(8*Dv%HhJxg zTMwr`jy|>X#-Y{TqH`>_AAUV=jeqLnR~3g{q|!6m&HdLLy~3BTyY>)}tiIK>QudzV zKBi#nJ=tqGgRSqFUg}sWYiF?MNU^J>{X2Ux}6&w9JRar>syn&p%JP0_iwdS+F*RegNvzo+q5Uv(CLiM20cYMA-% z{ms={qJM9_$@gb}d2DwngGhdRMp@j2k7uOcubTBg_s7;)*N5%zwVu1LTXEK`(rkgy zjgrXYubmmEcARiDJ$?W7R0i{}sb9aoSQE>+h3CbOHRel%CI+8e($B2bs4dMn!}{CN zbu3a{zv_O~#4wrU+FJE}VZEYjbbH;Ne>*)weqUenvfk@IW2eZM7iV7GI}c1AswJ)w zB`Jv|saDBFsX&Us$iUD{*T7QO$S}mv%*w#j%E&_3z}(8fz*pkmR1^)l`6-!cmAEz7 ixVmYA6CluroW!Km90uD-q5`ZkN5$)bni&E-T^vI^jwk;)@4%9vZObjT3?3V&a9J*&$a~ ztO^WWyvi*!&{veZ>1PR7nCQJO9v+_mK(JqKzU6BmZ6ERXgvBj0$xzp6S`3E{^B(B< zC-etswrYuML`h0wNvc(HQ7VvPFfuSS(>1WvH8Kn_G_x`=wKB5MH88g_Fz}W5Hx)%g rZhlH;S|x4`Hm+`(U=IOp$Vp5}&0+9)lymF@P>8|P)z4*}Q$iB}XSi*- diff --git a/data/labels/77.png b/data/labels/77.png deleted file mode 100644 index 5ef2e73f0177ae6e059d56e6e05fb79532f7ea40..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 796 zcmeAS@N?(olHy`uVBq!ia0vp^WdAqwX{BQ3+vmeM~ zFY)wsWq-gaD!?jpRJcfYo@$-iHApkh}M$)2qh)X zWlfr*N!xD!5&tFptKI6kiOcpi3V#&ew7*~%Tq^L(QGiL%Y5TUWDEm9dFTS&Tzx({p z&$V?oWw*0`-*x@>=H5tCzfD5wL5AHk4`wm_m=Kn}@~qg)US;cduRo`kek*?eBk7>n zm2b1GEUvVk@iea%{E>5X(}8D9kxLhZ&o5(|Ipvb#jF-XJii}>fu2}Qp#xK1KYtorx z89pZ+^HfZU^7?7czr{;Od1=gVHXBdQHSfDFEM=Y`I(rLa+|QtYaV)poT%RqA`L=00 zd&69jn{VZEr}G`qQ3}@d?p?KurG$^oAb0vvXN7Fm4X@2jHBBY=RvSI`kJMwZ-TQEj z;nPd}HqM_nuP#4eTo~(ipZ)mtr{Aw1xSOr0!yNE8|55jT6Z6j--_`j~=SxUEG-Lbe zzvTz^_64Lx^J+f-|H9~3fKcK2t22$WB7O^8 zQGds9_OjZUw?$t$9=vu>__Rl`de)lqm3JeUvUkV7H)5Ytn{w=qUby#%ROT60$tTig zHDoz{opf|UtPFERLH!jy8-vum=|@jJ*G+gf#c;MC<5Tm>mF|sO`T8cING; zhu9L-l{T!r?BID$V?(jdYi(`n#@weCZ`W;FTX?VE(m<#)X`LU^=#bjI$UcDL1 zBCh9>$M}I?|3LhgI1e9@qnwQT4=m=e&DwV1^V%hIZ#`LBSrv8byzrcDs@rYeitmYM zd-0Yrz`is8+wKEd;ruQx_e#q*>u`s;3?Q8osqzbV9iaD&nRn>P&YuDWG%`ZO}>nMxn*4&;aU*sz~H}ZLK(8bHW zXO)fau_gRH{iJctxeSY7k$v&1y7SlP&Re-6{gX=9qWA3aUy4#cAL)2jrLej@H)31m zf)$I-Ed}XfOn7_w$;>kuBF2kEXR>pu~HPkg4$gpaPvkA3d`abNm;S>1}&8atNEy8T<}b`1mH zsytiq%I$VaUQzrluAQ&jCunRuzr|+xyhD{APIzD6p1I%QuYJ?Jm^SX;>%Re`Lbb#- zq9i4;B-JXpC>2OC7#SFv=^9w-8X1Ndnpqi`S{YgB8kk!d82C#3n~I_#H$NpatrE8e j8&@|?aAX5*$Vp5}&0+B4Nm_mfD8%6D>gTe~DWM4fOfvuD diff --git a/data/labels/79.png b/data/labels/79.png deleted file mode 100644 index 1e74b73c2406dd13a36710fb4b3d96a2461caf01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 982 zcmeAS@N?(olHy`uVBq!ia0vp^#z5@J0VEi<7CQz4DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tWR6AE1YtMSXdd>BW zDo%#pytg(C3si!)D^F)QF~2k~O^dtX)s1^{0srSjpIhcvy7qR#I~k?~=Np|ptIr4K zS(GpFE&bIr*>d%#vu?`nj34f7ROjt_BRKhGxb?yG>PcoRH!J+yeDg%<*Hurdw0F*0 zQe-NW{-orKvrOl2Q=V7J?;or=>T+uF&MBwn&3IuqUr3j)@4RT$vv(UVAJ2b%{Lv-d zohyyLJ+1X#uBWwox>&Tx#`1G9CHFR{^Zt+cJoi!LyuBwXGo%*%lrxH)ohrII>t9E= zpyd9TtX=a|r(E?t;=k{BRlj^jWNTH+c}l9E`GYL#4+3Zxi}3=GY54J>ty3_}dftPD)8j4X5w%&iOzd?o%(MbVI( qpOTqYiCcq>tD7b`F9B`HNlZ%3Veqd`o$dt`V(@hJb6Mw<&;$Tc3a9Y^ diff --git a/data/labels/80.png b/data/labels/80.png deleted file mode 100644 index 1a19fa1127ac6964574355705570b0c3663e6ade..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 598 zcmeAS@N?(olHy`uVBq!ia0vp^Iza5n0VEibugx|AQY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fI~iPq3$ZdboEt60;n&?^Q(89d){aTbTn;8|i~C}5=3Y6Y zarov96T_O=8Gm0-zq?yIOzPIRL=8vIlP_zO-z91E80f5jeJ$j|fuQ+}2Ud1>h1fe%gY|++|i5nUZkR=l-C|`KP&F#uOEvRzD>#O-?><4-|O31dltPvSQC2p zZm@fuar}4l`6pXz6vZzzf2hmOxbyGJi5D||?zE^7b+PNTEwVpe!1LcW=aGCe&v&yw zyz4?ecUqjxm;elE)e_f;l9a@fRIB8oR3OD*WMF8fYhbBsWEf&-W@TV%Wn`giU~Xk# y;4ATODvE~O{FKbJO57T3T-`LmaS5~`Cow5Chauow?krIBGI+ZBxvX)RY#882`l``ta49WPgL zMwVP$YVg_l#H7X(>p~V}p2+##b^ct*7uDbIV=TY8r4?>n%=m2g7uMe!u3mk5cW$un zzqwZ=E~jKY_1)*YYxA`Q=l`mGoFsNn{!9KEi{EEwo%?-;?`(ddib7w;#vdDxZ+ZQ8 zgP~^Q#@LJEa-ZcGiXR_zY13wyF|A-`p6s(~&hGe<1&j4I^EYftSuxR^5 zC3e;{ z^(o93l1$GsJkj%-eVuVfmTA=5E5*SsaxXG}?tc68BKuQ^ZoS~*O+RsO4-HbCzF6a6&Ofg&LvShtT zgQauc<<CTK^}Exf z^sj_WKil1_l4ly*zkGG;_1Nb@)9$a`bhqH*Vddm!YDy=YuNfzP+{vI^^m?&p^8e`C zRoAw}?UqS!vHHH}5u>r)zetyTzV&%iwpV;p5I(zq+m>VUc3n@;M{N6aRjQWt-n~`& z{TbhV{@f3JSh$Jh!Q=%yTaTZ(&b^?r#_h<@!s+j4+11*dzkf>j+0B{%8A_IAG&1i! zrv=PMswJ)wB`Jv|saDBFsX&Us$iUD{*T7QO$S}mv%*w#j%E&_3z}(8fz*pkmR1^)l p`6-!cmAEz7xVmYAb1Kk=oW!Km9EQNgtW_W(22WQ%mvv4FO#u0`>b(E} diff --git a/data/labels/82.png b/data/labels/82.png deleted file mode 100644 index 4cef220ee23f532a7c2b1014c9ce413ade94f965..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 733 zcmeAS@N?(olHy`uVBq!ia0vp^20-k|0VEjWTz-KBSkfJR9T^xl_H+M9WCijSl0AZa z85pY67#JE_7#My5g&JNkFq8r{zDi(Vu$sZZAYL$MSD+10f+@+{-G$+Qd;gjJKpuOE zr>`sf15Qx^R+*#X^+3&xmpok@Lp+YZz2>dq5-7p`;eWyL6IWc0q^Rno7(Tr?C49=< zl-FC6oWsgCZJrtt5gBkTC`iRxwO^vL$HqDA*qJOg;~B@(Kg#x2{(9#(GynVD;=1Q| ziuV`4+soFp@5H5>_RRlyFEB9dl<(AKn|v}RY3-)1Q;)`}D=7u}q3R_-by& z$mL(k6mj?d0f&pO@#4pI-d+7(uxI1)P3x|zbk{99Qed{SF4{9sQ*yxvg=Rj@1p?<6 zt_=MX_wtP-gG0vb;DgsTgflSs9bqtIXo%(m24$V)2L=YNqY6a~3>&%*-ZExb5V&;z zwS)1z3>#QlOMkoo1_e*{CdqBtJ7ynUte3IUt*_=+%y#$J=~}TGPLFsplbr4|8l8J> zy-3#2R=;u4!n-q;FIXyl>qc~ZdjIQ>#<7oL-R9q0{nVR*!|Iomu$yOK`_!U5IgTTu zYN-$Ryw!<{YiVFQs}ps+?*i@k1eac*MfwggWpyq-| zwwrvK9OfHV@NzQFm5%iBX6!XKu=i@5e}B!3DNMIQc9%qQt!Q^#8O{~+Q^##d!!wDL zx89B}vewZ794~yj^P&Y87_wD4T!iDs%bQ3r{--uqm?aZ3%GXR1`*T^nS(G@#xt$X+K z;q04pfpF{e7Y9F^+@E=Wj^*<+|7-4N9J+J%tN0t6KlX>X56K#t7}!ZppEGa2h1i|T zU-lGx?f1LCXKj{i#gYX-rLVWO-?}0qFuC=?xvOQF)4tq1c>V4-S5*_YL)T@Z7sT=& znk7^pKGXm1&8Wzb8Pl|q?eCY~mkikQ`(v4RVp|FuP7dJS^+4o?rA2orhB`k>R(<1oXT zE!lSz8LWIaOgg+qHiqqh`Q!Syx1?-#B587>l$b@*9Kbp4-)`RWn3 z!d$OR-n2jUn4DOBt%_gV;T~NbC0X~+N*})N<=fElC2oz!wo9DbWfBEH?%fwKF=^da zJ1!liN7a$Rt0YVAtbVbf<3vF2Hox^VJ2|^6vcIf-{!Aue;x!hAQ_opWt4{s8rK3a5 zXO6U_tnAIg+i_F(-4Se9C!`vv&(P|(ke{g_-sK3ZXE(#Ic3GD7%QB>{lvFch6g6CZ zv0QqC)OT&h>K*J2Pme{cRGpq1{O=9h3BIlCBpQyCSy#w29Cs?%yzc8Xk8fKh17X=$BR`ER(a(~8gY z&6>S9^1sCK+t$DK^Y~W$^;~(HtLyaj%xSxC{dxb?=Fj=OPGVAO4nuH$%4txRWbkzLb6Mw<&;$TB`=A#9 diff --git a/data/labels/84.png b/data/labels/84.png deleted file mode 100644 index 6d5b72b470f5b6b5e1b3e7c968f1faa01797533a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 357 zcmeAS@N?(olHy`uVBq!ia0vp^8bIvH0VEi*Y_0u(6id3JuOkD)#(wTUiL5}rLb6AY zF9SoB8UsT^3j@P1pisjL28L1t28LG&3=CE?7#PG0=Ijcz0ZK3>dAqwX{BQ3+vmeM~ zFY)wsWq-gaD!?jpRJ_)kDK&>7mdKI;Vst E03^h1qyPW_ diff --git a/data/labels/85.png b/data/labels/85.png deleted file mode 100644 index 734e04314407d0c6116f019fea6699768589f27a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 646 zcmeAS@N?(olHy`uVBq!ia0vp^`atZ-0VEhY9x9jvDVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tWD=;p%H$LruZ`zc6)(4m0+-E3=J-fR1=gl{t8MeIs`i*gd@$YJe zs?z)X2e#f!->PS8&*5Gx)vc<(HEJbJOodE|xpYpyFG{ z*$|=mApGhRzEzcBf0w&*{?HC}FTdJTv^egfqkgfL>|L%;lNqPZpT;%6x8ke%w)=m# zP2cOOFS++?abNxY+cUpj*EbRC-&(upnf~Rv*}JWS<}>%ay(h1J(Zn|#ug^*i_F7lXN#8X|RvCa(M8k#uOS#JP>%6JJZ; z_|L?YmZxx{;n`7O%&3;QMwFx^mZVxG7o`Fz1|tJQGhG8qT_eK~Lo+J_Q!672T?2C~ z0|Q@)e^XI3HK9PD zJL^E>uBT5+rn?__rm{)y&Xr#E>5YFqpG>t{w0Q0>*@DtZCypq6$XULR*(Ut84ad5- zhxYd!ym8)k@BVqu%Vn$dZ%mnYPHV$n=lcwHZ(heHq)J}b-cz(|egAxJJKa~g4_1CD z&12`E{^83~gQ^`1?=y@0ihXfUNS69_MKvMb@jm;#tXDbg<@}HDiy!)QlCgF}6YGB7 zmsQa=(-`MUA6)IcE6@JIrS*-`w|-pU$no(0zf;1kf9sdaYZa@lq7S^Awogdxzu}Vo z4B6}-(-XYgO2V4ovwv}ZaJuOp^Sq2llf@62YQBg+_Tba9I^jJ5mu|Ay<$uX-`T5xO zFXN40{?|8F7UXwTRk7;Ker0~8{mJA_=O#b+TUTouGm-D_;}Zu?#5bq!D#>eW72bPm zvBCT0et+32_OA2MZNGhK<^QNl7NPH_^#uo~YtJdR@hno0u`z94r~a*GQqTPGT@%?# z)-{)Ueo_iyPrp*V&}vGG^T#0hD~~@XrWaK#*=Q4M_5HxC6m}g;%kF;?eEv`hZmUfG!aSr(Gp?%5f2ZT$KnD6Ly%=hrjo=j_e*i^nxQ-|tKy48|4se3?b^|t=(B&b&%OLV#g12Y@2b21ytplasZX`UHKHUX zu_VKYk_7@Aobm|7WG=o*+?85sCV{F{oRAvZrIGp!Q01{+s5 gO>p`K+K`i&l$yg3CeLTz1r%cNboFyt=akR{0Hu?CwEzGB diff --git a/data/labels/87.png b/data/labels/87.png deleted file mode 100644 index c9994b439ec69492e59bf67076aedadb513bd8a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1216 zcmV;x1V8(UP)004R>004l5008;`004mK004C`008P>0026e000+ooVrmw00002 zVoOIv0RM-N%)bBt00(qQO+^Rb2^A0p9K{!Zga7~owMj%lR9M69*UfKKRUF3g&mAZQ zDTr?^5KIgbHBm}65h{v7T3U^U7!reT8{N3k#DxnN{t2wq#KfIZ_eK_0p;2gg3or7b zL`5V-5im%w2vnr~xwtcPU*>k@!kF|dX6BsdJUQRz+}}O-P7?l2tNknYw0+wCU)awj zNs=VV&#lttR7rkpmEKH}BuU<&)^#7)**a&a^qp%vzI*3tio*y}xqnKZAz`;M>ww-FFq%C#k)+1NKZ*u&-G+qhk3iIuY>%I9S-+ zzvjZO=!K2NjUNPOA|h(4=|?VO-h&2V_RoEcfoU+_6|6lc2fH*P#bGb*$HizA|m27xMiZL zJp&8to%FEkgUQ`R_J=#N>iT_uRuQ>9BUZ>y9SFm&$W%_-L1XgrrLT2x;+qai4TXXM@ zkEMk%kXMSQ!{u++$X^EbLzc>R=-3|Mr+*V@VCO8_^*<%$Jz^#)l z_P1a@78i!|uZ8`%NbaC1g&!+bZ1JtKuQ0dRdgtd$pelQe-%ua>HCo%#sg(RSC4BoM z>Gz67t*bXy?YV7A_y&CidvmbFo`;VE>Cm>QYUxchTpUcM|3yyQr|thA`#*mFf}?dI4v+YIxsLz82*(2 z001R)MObuXVRU6WZEs|0W_bWIFfleQFgYzUF;p=&IxsalGB_2gs#ijBLW_KAT zh-`Z3{3-W0+bchu5MsD? z{Ek&v_Mfa>_jny%Hr$EY+sg1{zxUB_297P7q1N_ouR5gn&*MA5xitH&QQfK5!=Vgo z`l`P67kOXZyyPC|fj9o2vTQdxZ!nON-;t1Ctzy4+vKX)B-SEo{7E1N9E6wW8hlMd7 zSmnXC_B$)X6dsQtTZW^xrxv42yxZ0X%u)~A*p4^#Qz`1DGZ_2Gl3-Tyni-t^F6yZGs7MIGH23*#9* z>i6tdiL;J-7U#Le%+UX8fnV*NueWMw~&-~M8wOWm`I^SMstY;SkCt5 z=c_d7m7P_kdu~`}y1d$^WwzSC?yTpvSu%d@T@(%F8D*M zN)%6cn{lSBU)O;r^=Cc*`oFY)kezRO+cq7Tav4-hTq84VueojTn5vh0X^F=|7GE>AjS<|UIy_1&F6CFwKbpVz^_w&6 zqSel&mIHuW1VW(n$rqa{a62c&+_@4*OuNY*^=p5RFGGs= zqzmhH7-qib{I%A1_H>mc<=ft_Kk}$ojDc(V!f(2p3oRsA7HnPgseEm{`feYO8Z#8NU%j<`%XHQ@>-U375n9%sJQmvro#m z{}yG4x+c2XH2LuH-0~^R30|C5IfeICJY5;)v3W+>uUV=;;frL$wp`UL-{{kmO8y;@ zSAE@OJCFZ=24BO))m68)`@AVzm0Xkxq!^4049#>6EOm_xLk!KV3{0(zEOZUbtqcr&CH_rC(U6;; pl9^VCTZ4_OndAqwX{BQ3+vmeM~ zFY)wsWq-gaD!?jpRJ1lMFamL<9@a{LseOLEJ3(CBC z^>;`0`*(Nc`2(Y~S6wuHu)kH|=OZIwmDh@r@(tVmX6?P5$>310`g)bFnq81W=0V$? z4ztW`!vEZ}$erzSa_7c!X1&v_o3}hHOr5$u^JwO1TkzCwl9xAGF1s7tXC%<`N~e zLxo?);r>A1J$~#xr(C`Gb|{;Fag&Y%27avMEd%K*=Tv>% z<->}!W~OZV#VW_gJZI&@W&Kx=H$Tbzvqb8{`-l2T?-OksxuU#*(V$x58c~vxSdwa$ zT$Bo=7>o=I&2$Ycb&U)|49%9nO2EggN>`3COD#j cHsmBGrRFe1iR~y}2oz%QboFyt=akR{0G`I@aR2}S diff --git a/data/labels/91.png b/data/labels/91.png deleted file mode 100644 index 2a9affd5e99c770d6ddf196036d23df8898709a0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 344 zcmeAS@N?(olHy`uVBq!ia0vp^!a(fF0VEiH={Yq5DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);7N9DiP{RubhEf9thF1v;3|2E37{m+a>CkdVj-$}FVdQ&MBb@0K`UOo&W#< diff --git a/data/labels/92.png b/data/labels/92.png deleted file mode 100644 index fbd8ef9f124fbbc6e3c7f42e78967444996bf60b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 605 zcmeAS@N?(olHy`uVBq!ia0vp^B0%iP0VEhCK1KcjQY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fIR{aW}fMs`irzVBBP(@W*+YVPM>|GQKF ze%z1GJwLA>`pB%^eDL_nDd&=`ZW)Jte3M%wcBJUgV+paS7@fqV8&;xwswX{r^ZxMM zCq18c%qS4emcL}mz3;yFj{+w1+Y^<<3T!Mz_f$<>rM=fC#N~*|I+d8C54^MXJ^I`% zGS9l@_DRXl7BlB?U5j6Sea)?f-x`E>%qkGo-km9_bOai)JutXo(BfFYKdz^NlIc#s#S7PDv)9@GB7mLHL%n*G7K>^ zvobKXGP2M$Ft;)=@Rj&C6-7gCeoAIqC2kEiu5Oy(C zKM45GlvP*YIoA07{fZkvDDgCD#Zxw)obR4lw+?!wMDj2={pUNCdUDTEpqZ*At`Q|E zi6yC4$wjF^iowXh&`j6BQrE~Z#L&#jz|_jfLf63D%D})^;@?yh4Y~O#nQ4`{HQ2bi gX@Wfhv>_)kDK&>7w&Tt-CZG_5r>mdKI;Vst0JM2&e*gdg diff --git a/data/labels/94.png b/data/labels/94.png deleted file mode 100644 index 5c6f7af1b7f8a7e66113db1d640f09a2ea88702a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 592 zcmeAS@N?(olHy`uVBq!ia0vp^@<8m#0VEh62rc3VQY`6?zK#qG8~eHcB(ehe3dtTp zz6=aiY77hwEes65fIhXCmBsJTyClI5*2ar>mYKMC3vlpFw6HYOOcHR~*0SSg@z-1nx$`@(X9qVQu3X;# z{pY>+^YuCZ_k=wCfA;xg6;Cl~YZpQHy%)-Zyj*YIPZvFX{b#_l!`FXA**)EU?VrK- zjnno`eNe`KY3`x!zq+jRY>)oDE%y8O<;E}1%bLzLuYRn5U~vcghgV(mzZ`tt;U8d~ z`z>|FRpnQv5t-i-E93+}GP%vFkhfm$;i|>`haa!8<$TQhPq|e;@|E_I-Kq0i z8#i~)a-5<0Gtqp{nd@KpcJXo5Gw1FvvVYTbeR|yf;J82+ALsv>@8l0=J-mOg{f_&? zca<-%y+6E{`#uZz)9|fKW=8XyzTHo?f7jaCAyA$BK}9M_&wlZeU-eq+_k5CmRnK^| z;OPS2ZOZ?FVXRu>8c~vxSdwa$T$Bo=7>o=I&2$Ycb&U)|49%9nO2EggN>`3CO8&>HsmBGrRFfi30~d411QAc>FVdQ&MBb@02cu7d;kCd diff --git a/data/labels/95.png b/data/labels/95.png deleted file mode 100644 index 2c94ebd5f07d102bd5cf81e8df6f0e2dc38a65aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 326 zcmeAS@N?(olHy`uVBq!ia0vp^>Okzt0VEh^n){JBTDG`Q2QxE3kC&E4Qn?tE5BCSLKD= zU9n4WS>ID-Ltd}EFt)NJpXmSf3;rDRcv@!2Q1yz<#igVm4`_^PiEBhjN@7W>RdP`( zkYX@0Ff`LOu+%j&3^6pbGBC9=vd}d!w=yvBmH0OmMMG|WN@iLmZVfiBZkk}X18vAj ZOiImRh)=uJt_Kui@O1TaS?83{1OQePUHSk3 diff --git a/data/labels/96.png b/data/labels/96.png deleted file mode 100644 index 1bab8101d6cf17f4651f35aa29bc4441a2c830ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 385 zcmeAS@N?(olHy`uVBq!ia0vp^VnFQ40VEh?*gKB`DVB6cUq=Rpjs4tz5?O(Kg=CK) zUj~LMH3o);76yi2K%s^g3=E|P3=FRl7#OT(FffQ0%-I!a1C(G&@^*J&_}|`tW9-d*@;W9musnEwQu~Y7T)&WS2F)%!iNc*> zQ=--~zFDxP;hm}ltKiQ_hdr;~oh}VOy1nF&;dPVC!ZXg_vpKnt`Zsiue{YAowxI;`~z!;mez9#{=dHfU7%Xx z8c~vxSdwa$T$Bo=7>o=I&2$Ycb&U)|49%9nO2Eg kgN>`3CfM6R8*&npQgav*E^JvP3>0GUboFyt=akR{0EQfW=>Px# diff --git a/data/labels/97.png b/data/labels/97.png deleted file mode 100644 index 2478e62aae5a0b505866ad698b4901748150ba4c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 818 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ba(Z#RSf%58}E{-7{$KOu#%@B4JIbPqnG3ZiMR9BMdABVT@4k|+V z8$}dN-C1qFD79&0I=PZd`ld=yF>`DNI_Ycfu2;WgQa(*2bQ> zUNK|tn>Q*>2ea=brkCB%|8}+DY)4dsic)!Z|_ar@`z-%(eO z>DgZYmMY7hkp56os#Fz`5AMjNpF>Ze=2ozbh4WyA5%i9hL#LlmNie7IfH2VcHfR!WnV9z z`lqA6uR{6s%}H9%KJUEhKmYXqAV1rkJ0_j{m-RDmY3HN0%({19?^1jBT`JDsA|q(( zYQ00!J3j4DSeH44U*VevV>@%>!-oy`PoBGZeUI#uq&+K4KW(y3s^w_d>;0}Qz92YA z=-w1*q2-J}R+)U{YWS?U*m3oyu2ub!3_hMJ^~?dGQ*0#uvX%PtrMi07-{Vz%RJ28; zl%*lPRMyM?#$?^l^;_oLx%R31yGG5vi;C8}U)!q$)yuMeU@*9Bahp3m#oX%ryf@3Y zYzttx@!cedInO3TBYjt-;qz-pISx!%Hb>KWQ*~O4fFZ*)(^}o$tTPAZ@+!9cU^vk7 z`7C4Dvq>{Axw+rp7?85&rA_6ndV}0k8}_U5tqawXep?GnMXDvP5hW>!C8<`)MX5lF z!N|bSOxM6t*T^u$(9Fuf)XKPVt%@0H;%+4LONP YsW}XZ%Qw$z1qv~Ey85}Sb4q9e0Ip0<5dZ)H diff --git a/data/labels/98.png b/data/labels/98.png deleted file mode 100644 index 29d3473a09ec912e6b9e7462ce17b3bfb0e25fc8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 740 zcmeAS@N?(olHy`uVBq!ia0vp^szB_?0VEjaAKvf}NU@|l`Z_W&Z0zU$lgJ9>D-q5`ba(Z#RS85kIEdb&7 zaqU#eYaeb0G1$~k7n->G#pIIjOXnA*1w+?`RphSZJbzF1Cd+}g zm06GCR9`dn%*gUm^lW8d;uI7-Z@cf>@~1t_G4+?W%VwGJZ540OUAyb7i^uxp=+$At zSM6CkGDWv+S|y~gF0^&&shW_^rE&~^F21@H^nB;R|G}MioMK9|lq{JmmRy~cx}B3|{}?lHu~$bU-MtDI_&q4Uu}KQH~whp z`OBjVzAypfUA4qDq9i4;B-JXpC>2OC7#SFv=^9w-8X1Ndnpqi`S{a$^8kk!d80-${ vt3lC_o1c=IR*74~DPFS!;FJZlAtx~@HHRU|Zr5phpb&$ntDnm{r-UW|aQ-F} diff --git a/data/labels/99.png b/data/labels/99.png deleted file mode 100644 index ef3f4530483a57ca2e584244fe016a7cfcfb69c6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 743 zcmeAS@N?(olHy`uVBq!ia0vp^N>}W}O~9o^w{w9o}p0rHv_?ejd?e6locaL5EsD0hNhxKA$ zC1TKzfk^@;`?*<{NZEf@z~07@S0+S{r`DMKNejQaoNXw zLCD36!GwL{eg+eki3ST2MTM9X%sb|=Ca8CmFl~sN>hi#dLH@6{cDYdJk)s#=1SVQI zyy@3}FU+-Swj7hj*aW zo?eD6Z?iWoU$?XNs-R`*YRT>WT&wyI_1kxMoOsqeq0nZx^zu^kGXDGi<+mTtlfO65 zu2f}pY~I^d8ee`Kv5kHI?!WiXpOwr!=PbFWecUpAY3rkFWjlZRTshXS_C{aFZ%desuwh?11Vl2ohYqEsNoU}RuurfXoSYh)N=Xl7+#YGq`uYhZ3= zV6Z!&uLea!ZhlH;S|x4`r+Cc{fD;$chMdHt)EtIn&%M7_0)-enUHx3vIVCg!00n+8 AkN^Mx diff --git a/data/labels/make_labels.py b/data/labels/make_labels.py index 1dacdc37..c8146f6d 100644 --- a/data/labels/make_labels.py +++ b/data/labels/make_labels.py @@ -2,18 +2,22 @@ import os import string import pipes -#l = ["person","bicycle","car","motorcycle","airplane","bus","train","truck","boat","traffic light","fire hydrant","stop sign","parking meter","bench","bird","cat","dog","horse","sheep","cow","elephant","bear","zebra","giraffe","backpack","umbrella","handbag","tie","suitcase","frisbee","skis","snowboard","sports ball","kite","baseball bat","baseball glove","skateboard","surfboard","tennis racket","bottle","wine glass","cup","fork","knife","spoon","bowl","banana","apple","sandwich","orange","broccoli","carrot","hot dog","pizza","donut","cake","chair","couch","potted plant","bed","dining table","toilet","tv","laptop","mouse","remote","keyboard","cell phone","microwave","oven","toaster","sink","refrigerator","book","clock","vase","scissors","teddy bear","hair drier","toothbrush", "aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"] +font = 'futura-normal' -l = string.printable +def make_labels(s): + l = string.printable + for word in l: + if word == ' ': + os.system('convert -fill black -background white -bordercolor white -font %s -pointsize %d label:"\ " 32_%d.png'%(font,s,s/12-1)) + if word == '@': + os.system('convert -fill black -background white -bordercolor white -font %s -pointsize %d label:"\@" 64_%d.png'%(font,s,s/12-1)) + elif word == '\\': + os.system('convert -fill black -background white -bordercolor white -font %s -pointsize %d label:"\\\\\\\\" 92_%d.png'%(font,s,s/12-1)) + elif ord(word) in [9,10,11,12,13,14]: + pass + else: + os.system("convert -fill black -background white -bordercolor white -font %s -pointsize %d label:%s \"%d_%d.png\""%(font,s,pipes.quote(word), ord(word),s/12-1)) -for word in l: - #os.system("convert -fill black -background white -bordercolor white -border 4 -font futura-normal -pointsize 18 label:\"%s\" \"%s.png\""%(word, word)) - if word == ' ': - os.system('convert -fill black -background white -bordercolor white -font futura-normal -pointsize 64 label:"\ " 32.png') - elif word == '\\': - os.system('convert -fill black -background white -bordercolor white -font futura-normal -pointsize 64 label:"\\\\\\\\" 92.png') - elif ord(word) in [9,10,11,12,13,14]: - pass - else: - os.system("convert -fill black -background white -bordercolor white -font futura-normal -pointsize 64 label:%s \"%d.png\""%(pipes.quote(word), ord(word))) +for i in [12,24,36,48,60,72,84,96]: + make_labels(i) diff --git a/src/classifier.c b/src/classifier.c index a77f9df8..2ce62078 100644 --- a/src/classifier.c +++ b/src/classifier.c @@ -13,50 +13,6 @@ image get_image_from_stream(CvCapture *cap); #endif -list *read_data_cfg(char *filename) -{ - FILE *file = fopen(filename, "r"); - if(file == 0) file_error(filename); - char *line; - int nu = 0; - list *options = make_list(); - while((line=fgetl(file)) != 0){ - ++ nu; - strip(line); - switch(line[0]){ - case '\0': - case '#': - case ';': - free(line); - break; - default: - if(!read_option(line, options)){ - fprintf(stderr, "Config file error line %d, could parse: %s\n", nu, line); - free(line); - } - break; - } - } - fclose(file); - return options; -} - -void hierarchy_predictions(float *predictions, int n, tree *hier, int only_leaves) -{ - int j; - for(j = 0; j < n; ++j){ - int parent = hier->parent[j]; - if(parent >= 0){ - predictions[j] *= predictions[parent]; - } - } - if(only_leaves){ - for(j = 0; j < n; ++j){ - if(!hier->leaf[j]) predictions[j] = 0; - } - } -} - float *get_regression_values(char **labels, int n) { float *v = calloc(n, sizeof(float)); @@ -488,26 +444,6 @@ void validate_classifier_full(char *datacfg, char *filename, char *weightfile) } } -void change_leaves(tree *t, char *leaf_list) -{ - list *llist = get_paths(leaf_list); - char **leaves = (char **)list_to_array(llist); - int n = llist->size; - int i,j; - int found = 0; - for(i = 0; i < t->n; ++i){ - t->leaf[i] = 0; - for(j = 0; j < n; ++j){ - if (0==strcmp(t->name[i], leaves[j])){ - t->leaf[i] = 1; - ++found; - break; - } - } - } - fprintf(stderr, "Found %d leaves.\n", found); -} - void validate_classifier_single(char *datacfg, char *filename, char *weightfile) { diff --git a/src/coco.c b/src/coco.c index 939a08d5..f684feea 100644 --- a/src/coco.c +++ b/src/coco.c @@ -318,7 +318,7 @@ void validate_coco_recall(char *cfgfile, char *weightfile) void test_coco(char *cfgfile, char *weightfile, char *filename, float thresh) { - image *alphabet = load_alphabet(); + image **alphabet = load_alphabet(); network net = parse_network_cfg(cfgfile); if(weightfile){ load_weights(&net, weightfile); diff --git a/src/convolutional_kernels.cu b/src/convolutional_kernels.cu index 76a3fb31..709f77fb 100644 --- a/src/convolutional_kernels.cu +++ b/src/convolutional_kernels.cu @@ -215,6 +215,10 @@ void pull_convolutional_layer(convolutional_layer layer) cuda_pull_array(layer.rolling_mean_gpu, layer.rolling_mean, layer.n); cuda_pull_array(layer.rolling_variance_gpu, layer.rolling_variance, layer.n); } + if (layer.adam){ + cuda_pull_array(layer.m_gpu, layer.m, layer.c*layer.n*layer.size*layer.size); + cuda_pull_array(layer.v_gpu, layer.v, layer.c*layer.n*layer.size*layer.size); + } } void push_convolutional_layer(convolutional_layer layer) @@ -228,6 +232,10 @@ void push_convolutional_layer(convolutional_layer layer) cuda_push_array(layer.rolling_mean_gpu, layer.rolling_mean, layer.n); cuda_push_array(layer.rolling_variance_gpu, layer.rolling_variance, layer.n); } + if (layer.adam){ + cuda_push_array(layer.m_gpu, layer.m, layer.c*layer.n*layer.size*layer.size); + cuda_push_array(layer.v_gpu, layer.v, layer.c*layer.n*layer.size*layer.size); + } } void update_convolutional_layer_gpu(convolutional_layer layer, int batch, float learning_rate, float momentum, float decay) diff --git a/src/convolutional_layer.c b/src/convolutional_layer.c index 888eca33..1d93b3fc 100644 --- a/src/convolutional_layer.c +++ b/src/convolutional_layer.c @@ -235,6 +235,11 @@ convolutional_layer make_convolutional_layer(int batch, int h, int w, int c, int l.rolling_mean = calloc(n, sizeof(float)); l.rolling_variance = calloc(n, sizeof(float)); } + if(adam){ + l.adam = 1; + l.m = calloc(c*n*size*size, sizeof(float)); + l.v = calloc(c*n*size*size, sizeof(float)); + } #ifdef GPU l.forward_gpu = forward_convolutional_layer_gpu; @@ -243,9 +248,8 @@ convolutional_layer make_convolutional_layer(int batch, int h, int w, int c, int if(gpu_index >= 0){ if (adam) { - l.adam = 1; - l.m_gpu = cuda_make_array(l.weight_updates, c*n*size*size); - l.v_gpu = cuda_make_array(l.weight_updates, c*n*size*size); + l.m_gpu = cuda_make_array(l.m, c*n*size*size); + l.v_gpu = cuda_make_array(l.v, c*n*size*size); } l.weights_gpu = cuda_make_array(l.weights, c*n*size*size); diff --git a/src/demo.c b/src/demo.c index 6c653a9f..91562c04 100644 --- a/src/demo.c +++ b/src/demo.c @@ -17,7 +17,7 @@ image get_image_from_stream(CvCapture *cap); static char **demo_names; -static image *demo_alphabet; +static image **demo_alphabet; static int demo_classes; static float **probs; @@ -94,7 +94,7 @@ double get_wall_time() void demo(char *cfgfile, char *weightfile, float thresh, int cam_index, const char *filename, char **names, int classes, int frame_skip, char *prefix) { //skip = frame_skip; - image *alphabet = load_alphabet(); + image **alphabet = load_alphabet(); int delay = frame_skip; demo_names = names; demo_alphabet = alphabet; diff --git a/src/detector.c b/src/detector.c index 1f48c618..e020be5d 100644 --- a/src/detector.c +++ b/src/detector.c @@ -5,17 +5,18 @@ #include "parser.h" #include "box.h" #include "demo.h" +#include "option_list.h" #ifdef OPENCV #include "opencv2/highgui/highgui_c.h" #endif -static char *voc_names[] = {"aeroplane", "bicycle", "bird", "boat", "bottle", "bus", "car", "cat", "chair", "cow", "diningtable", "dog", "horse", "motorbike", "person", "pottedplant", "sheep", "sofa", "train", "tvmonitor"}; - -void train_detector(char *cfgfile, char *weightfile) +void train_detector(char *datacfg, char *cfgfile, char *weightfile, int clear) { - char *train_images = "/data/voc/train.txt"; - char *backup_directory = "/home/pjreddie/backup/"; + list *options = read_data_cfg(datacfg); + char *train_images = option_find_str(options, "train", "data/train.list"); + char *backup_directory = option_find_str(options, "backup", "/backup/"); + srand(time(0)); char *base = basecfg(cfgfile); printf("%s\n", base); @@ -24,6 +25,7 @@ void train_detector(char *cfgfile, char *weightfile) if(weightfile){ load_weights(&net, weightfile); } + if(clear) *net.seen = 0; printf("Learning Rate: %g, Momentum: %g, Decay: %g\n", net.learning_rate, net.momentum, net.decay); int imgs = net.batch*net.subdivisions; int i = *net.seen/imgs; @@ -124,8 +126,13 @@ void print_detector_detections(FILE **fps, char *id, box *boxes, float **probs, } } -void validate_detector(char *cfgfile, char *weightfile) +void validate_detector(char *datacfg, char *cfgfile, char *weightfile) { + list *options = read_data_cfg(datacfg); + char *valid_images = option_find_str(options, "valid", "data/train.list"); + char *name_list = option_find_str(options, "names", "data/names.list"); + char **names = get_labels(name_list); + network net = parse_network_cfg(cfgfile); if(weightfile){ load_weights(&net, weightfile); @@ -135,9 +142,7 @@ void validate_detector(char *cfgfile, char *weightfile) srand(time(0)); char *base = "results/comp4_det_test_"; - //list *plist = get_paths("data/voc.2007.test"); - list *plist = get_paths("/home/pjreddie/data/voc/2007_test.txt"); - //list *plist = get_paths("data/voc.2012.test"); + list *plist = get_paths(valid_images); char **paths = (char **)list_to_array(plist); layer l = net.layers[net.n-1]; @@ -147,7 +152,7 @@ void validate_detector(char *cfgfile, char *weightfile) FILE **fps = calloc(classes, sizeof(FILE *)); for(j = 0; j < classes; ++j){ char buff[1024]; - snprintf(buff, 1024, "%s%s.txt", base, voc_names[j]); + snprintf(buff, 1024, "%s%s.txt", base, names[j]); fps[j] = fopen(buff, "w"); } box *boxes = calloc(l.w*l.h*l.n, sizeof(box)); @@ -224,7 +229,6 @@ void validate_detector_recall(char *cfgfile, char *weightfile) fprintf(stderr, "Learning Rate: %g, Momentum: %g, Decay: %g\n", net.learning_rate, net.momentum, net.decay); srand(time(0)); - char *base = "results/comp4_det_test_"; list *plist = get_paths("data/voc.2007.test"); char **paths = (char **)list_to_array(plist); @@ -232,12 +236,6 @@ void validate_detector_recall(char *cfgfile, char *weightfile) int classes = l.classes; int j, k; - FILE **fps = calloc(classes, sizeof(FILE *)); - for(j = 0; j < classes; ++j){ - char buff[1024]; - snprintf(buff, 1024, "%s%s.txt", base, voc_names[j]); - fps[j] = fopen(buff, "w"); - } box *boxes = calloc(l.w*l.h*l.n, sizeof(box)); float **probs = calloc(l.w*l.h*l.n, sizeof(float *)); for(j = 0; j < l.w*l.h*l.n; ++j) probs[j] = calloc(classes, sizeof(float *)); @@ -299,9 +297,13 @@ void validate_detector_recall(char *cfgfile, char *weightfile) } } -void test_detector(char *cfgfile, char *weightfile, char *filename, float thresh) +void test_detector(char *datacfg, char *cfgfile, char *weightfile, char *filename, float thresh) { - image *alphabet = load_alphabet(); + list *options = read_data_cfg(datacfg); + char *name_list = option_find_str(options, "names", "data/names.list"); + char **names = get_labels(name_list); + + image **alphabet = load_alphabet(); network net = parse_network_cfg(cfgfile); if(weightfile){ load_weights(&net, weightfile); @@ -335,8 +337,7 @@ void test_detector(char *cfgfile, char *weightfile, char *filename, float thresh printf("%s: Predicted in %f seconds.\n", input, sec(clock()-time)); get_region_boxes(l, 1, 1, thresh, probs, boxes, 0); if (nms) do_nms_sort(boxes, probs, l.w*l.h*l.n, l.classes, nms); - //draw_detections(im, l.w*l.h*l.n, thresh, boxes, probs, voc_names, voc_labels, 20); - draw_detections(im, l.w*l.h*l.n, thresh, boxes, probs, voc_names, alphabet, 20); + draw_detections(im, l.w*l.h*l.n, thresh, boxes, probs, names, alphabet, l.classes); save_image(im, "predictions"); show_image(im, "predictions"); @@ -360,13 +361,21 @@ void run_detector(int argc, char **argv) fprintf(stderr, "usage: %s %s [train/test/valid] [cfg] [weights (optional)]\n", argv[0], argv[1]); return; } + int clear = find_arg(argc, argv, "-clear"); - char *cfg = argv[3]; - char *weights = (argc > 4) ? argv[4] : 0; - char *filename = (argc > 5) ? argv[5]: 0; - if(0==strcmp(argv[2], "test")) test_detector(cfg, weights, filename, thresh); - else if(0==strcmp(argv[2], "train")) train_detector(cfg, weights); - else if(0==strcmp(argv[2], "valid")) validate_detector(cfg, weights); + char *datacfg = argv[3]; + char *cfg = argv[4]; + char *weights = (argc > 5) ? argv[5] : 0; + char *filename = (argc > 6) ? argv[6]: 0; + if(0==strcmp(argv[2], "test")) test_detector(datacfg, cfg, weights, filename, thresh); + else if(0==strcmp(argv[2], "train")) train_detector(datacfg, cfg, weights, clear); + else if(0==strcmp(argv[2], "valid")) validate_detector(datacfg, cfg, weights); else if(0==strcmp(argv[2], "recall")) validate_detector_recall(cfg, weights); - else if(0==strcmp(argv[2], "demo")) demo(cfg, weights, thresh, cam_index, filename, voc_names, 20, frame_skip, prefix); + else if(0==strcmp(argv[2], "demo")) { + list *options = read_data_cfg(datacfg); + int classes = option_find_int(options, "classes", 20); + char *name_list = option_find_str(options, "names", "data/names.list"); + char **names = get_labels(name_list); + demo(cfg, weights, thresh, cam_index, filename, names, classes, frame_skip, prefix); + } } diff --git a/src/image.c b/src/image.c index 52869796..ad7c2d62 100644 --- a/src/image.c +++ b/src/image.c @@ -53,6 +53,7 @@ image border_image(image a, int border) for(y = 0; y < b.h; ++y){ for(x = 0; x < b.w; ++x){ float val = get_pixel_extend(a, x - border, y - border, k); + if(x - border < 0 || x - border >= a.w || y - border < 0 || y - border >= a.h) val = 1; set_pixel(b, x, y, k, val); } } @@ -70,12 +71,13 @@ image tile_images(image a, image b, int dx) return c; } -image get_label(image *characters, char *string) +image get_label(image **characters, char *string, int size) { + if(size > 7) size = 7; image label = make_empty_image(0,0,0); while(*string){ - image l = characters[(int)*string]; - image n = tile_images(label, l, -4); + image l = characters[size][(int)*string]; + image n = tile_images(label, l, -size - 1 + (size+1)/2); free_image(label); label = n; ++string; @@ -87,24 +89,19 @@ image get_label(image *characters, char *string) void draw_label(image a, int r, int c, image label, const float *rgb) { - float ratio = (float) label.w / label.h; - int h = a.h * .04; - h = label.h; - h = a.h * .06; - int w = ratio * h; - image rl = resize_image(label, w, h); + int w = label.w; + int h = label.h; if (r - h >= 0) r = r - h; int i, j, k; for(j = 0; j < h && j + r < a.h; ++j){ for(i = 0; i < w && i + c < a.w; ++i){ for(k = 0; k < label.c; ++k){ - float val = get_pixel(rl, i, j, k); + float val = get_pixel(label, i, j, k); set_pixel(a, i+c, j+r, k, rgb[k] * val); } } } - free_image(rl); } void draw_box(image a, int x1, int y1, int x2, int y2, float r, float g, float b) @@ -164,19 +161,23 @@ void draw_bbox(image a, box bbox, int w, float r, float g, float b) } } -image *load_alphabet() +image **load_alphabet() { - int i; - image *alphabet = calloc(128, sizeof(image)); - for(i = 32; i < 127; ++i){ - char buff[256]; - sprintf(buff, "data/labels/%d.png", i); - alphabet[i] = load_image_color(buff, 0, 0); + int i, j; + const int nsize = 8; + image **alphabets = calloc(nsize, sizeof(image)); + for(j = 0; j < nsize; ++j){ + alphabets[j] = calloc(128, sizeof(image)); + for(i = 32; i < 127; ++i){ + char buff[256]; + sprintf(buff, "data/labels/%d_%d.png", i, j); + alphabets[j][i] = load_image_color(buff, 0, 0); + } } - return alphabet; + return alphabets; } -void draw_detections(image im, int num, float thresh, box *boxes, float **probs, char **names, image *alphabet, int classes) +void draw_detections(image im, int num, float thresh, box *boxes, float **probs, char **names, image **alphabet, int classes) { int i; @@ -212,7 +213,7 @@ void draw_detections(image im, int num, float thresh, box *boxes, float **probs, draw_box_width(im, left, top, right, bot, width, red, green, blue); if (alphabet) { - image label = get_label(alphabet, names[class]); + image label = get_label(alphabet, names[class], (im.h*.03)/10); draw_label(im, top + width, left, label, rgb); } } diff --git a/src/image.h b/src/image.h index 7e7ecf6d..6e80ac2e 100644 --- a/src/image.h +++ b/src/image.h @@ -22,7 +22,7 @@ void draw_box_width(image a, int x1, int y1, int x2, int y2, int w, float r, flo void draw_bbox(image a, box bbox, int w, float r, float g, float b); void draw_label(image a, int r, int c, image label, const float *rgb); void write_label(image a, int r, int c, image *characters, char *string, float *rgb); -void draw_detections(image im, int num, float thresh, box *boxes, float **probs, char **names, image *labels, int classes); +void draw_detections(image im, int num, float thresh, box *boxes, float **probs, char **names, image **labels, int classes); image image_distance(image a, image b); void scale_image(image m, float s); image crop_image(image im, int dx, int dy, int w, int h); @@ -69,7 +69,7 @@ image float_to_image(int w, int h, int c, float *data); image copy_image(image p); image load_image(char *filename, int w, int h, int c); image load_image_color(char *filename, int w, int h); -image *load_alphabet(); +image **load_alphabet(); float get_pixel(image m, int x, int y, int c); float get_pixel_extend(image m, int x, int y, int c); diff --git a/src/layer.h b/src/layer.h index e07ea42f..e461fbc6 100644 --- a/src/layer.h +++ b/src/layer.h @@ -101,8 +101,11 @@ struct layer{ float *m_gpu; float *v_gpu; int t; + float *m; + float *v; tree *softmax_tree; + int *map; float alpha; float beta; @@ -112,6 +115,7 @@ struct layer{ float object_scale; float noobject_scale; float class_scale; + int bias_match; int random; int dontload; diff --git a/src/option_list.c b/src/option_list.c index 7d68ead2..f935af30 100644 --- a/src/option_list.c +++ b/src/option_list.c @@ -2,6 +2,35 @@ #include #include #include "option_list.h" +#include "utils.h" + +list *read_data_cfg(char *filename) +{ + FILE *file = fopen(filename, "r"); + if(file == 0) file_error(filename); + char *line; + int nu = 0; + list *options = make_list(); + while((line=fgetl(file)) != 0){ + ++ nu; + strip(line); + switch(line[0]){ + case '\0': + case '#': + case ';': + free(line); + break; + default: + if(!read_option(line, options)){ + fprintf(stderr, "Config file error line %d, could parse: %s\n", nu, line); + free(line); + } + break; + } + } + fclose(file); + return options; +} int read_option(char *s, list *options) { diff --git a/src/option_list.h b/src/option_list.h index d0417aa9..054b3fdd 100644 --- a/src/option_list.h +++ b/src/option_list.h @@ -9,6 +9,7 @@ typedef struct{ } kvp; +list *read_data_cfg(char *filename); int read_option(char *s, list *options); void option_insert(list *l, char *key, char *val); char *option_find(list *l, char *key); diff --git a/src/parser.c b/src/parser.c index 44ba1c45..09eef42c 100644 --- a/src/parser.c +++ b/src/parser.c @@ -232,6 +232,21 @@ softmax_layer parse_softmax(list *options, size_params params) return layer; } +int *read_map(char *filename) +{ + int n = 0; + int *map = 0; + char *str; + FILE *file = fopen(filename, "r"); + if(!file) file_error(filename); + while((str=fgetl(file))){ + ++n; + map = realloc(map, n*sizeof(int)); + map[n-1] = atoi(str); + } + return map; +} + layer parse_region(list *options, size_params params) { int coords = option_find_int(options, "coords", 4); @@ -256,6 +271,27 @@ layer parse_region(list *options, size_params params) l.object_scale = option_find_float(options, "object_scale", 1); l.noobject_scale = option_find_float(options, "noobject_scale", 1); l.class_scale = option_find_float(options, "class_scale", 1); + l.bias_match = option_find_int_quiet(options, "bias_match",0); + + char *tree_file = option_find_str(options, "tree", 0); + if (tree_file) l.softmax_tree = read_tree(tree_file); + char *map_file = option_find_str(options, "map", 0); + if (map_file) l.map = read_map(map_file); + + char *a = option_find_str(options, "anchors", 0); + if(a){ + int len = strlen(a); + int n = 1; + int i; + for(i = 0; i < len; ++i){ + if (a[i] == ',') ++n; + } + for(i = 0; i < n; ++i){ + float bias = atof(a); + l.biases[i] = bias; + a = strchr(a, ',')+1; + } + } return l; } detection_layer parse_detection(list *options, size_params params) @@ -759,6 +795,10 @@ void save_convolutional_weights(layer l, FILE *fp) fwrite(l.rolling_variance, sizeof(float), l.n, fp); } fwrite(l.weights, sizeof(float), num, fp); + if(l.adam){ + fwrite(l.m, sizeof(float), num, fp); + fwrite(l.v, sizeof(float), num, fp); + } } void save_batchnorm_weights(layer l, FILE *fp) @@ -937,13 +977,27 @@ void load_convolutional_weights(layer l, FILE *fp) //return; } int num = l.n*l.c*l.size*l.size; - fread(l.biases, sizeof(float), l.n, fp); - if (l.batch_normalize && (!l.dontloadscales)){ - fread(l.scales, sizeof(float), l.n, fp); - fread(l.rolling_mean, sizeof(float), l.n, fp); - fread(l.rolling_variance, sizeof(float), l.n, fp); + if(0){ + fread(l.biases + ((l.n != 1374)?0:5), sizeof(float), l.n, fp); + if (l.batch_normalize && (!l.dontloadscales)){ + fread(l.scales + ((l.n != 1374)?0:5), sizeof(float), l.n, fp); + fread(l.rolling_mean + ((l.n != 1374)?0:5), sizeof(float), l.n, fp); + fread(l.rolling_variance + ((l.n != 1374)?0:5), sizeof(float), l.n, fp); + } + fread(l.weights + ((l.n != 1374)?0:5*l.c*l.size*l.size), sizeof(float), num, fp); + }else{ + fread(l.biases, sizeof(float), l.n, fp); + if (l.batch_normalize && (!l.dontloadscales)){ + fread(l.scales, sizeof(float), l.n, fp); + fread(l.rolling_mean, sizeof(float), l.n, fp); + fread(l.rolling_variance, sizeof(float), l.n, fp); + } + fread(l.weights, sizeof(float), num, fp); + } + if(l.adam){ + fread(l.m, sizeof(float), num, fp); + fread(l.v, sizeof(float), num, fp); } - fread(l.weights, sizeof(float), num, fp); //if(l.c == 3) scal_cpu(num, 1./256, l.weights, 1); if (l.flipped) { transpose_matrix(l.weights, l.c*l.size*l.size, l.n); diff --git a/src/region_layer.c b/src/region_layer.c index 5f8b3cc9..c3935cad 100644 --- a/src/region_layer.c +++ b/src/region_layer.c @@ -48,11 +48,17 @@ region_layer make_region_layer(int batch, int w, int h, int n, int classes, int return l; } +#define LOG 1 + box get_region_box(float *x, float *biases, int n, int index, int i, int j, int w, int h) { box b; b.x = (i + .5)/w + x[index + 0] * biases[2*n]; b.y = (j + .5)/h + x[index + 1] * biases[2*n + 1]; + if(LOG){ + b.x = (i + logistic_activate(x[index + 0])) / w; + b.y = (j + logistic_activate(x[index + 1])) / h; + } b.w = exp(x[index + 2]) * biases[2*n]; b.h = exp(x[index + 3]) * biases[2*n+1]; return b; @@ -65,11 +71,19 @@ float delta_region_box(box truth, float *x, float *biases, int n, int index, int float tx = (truth.x - (i + .5)/w) / biases[2*n]; float ty = (truth.y - (j + .5)/h) / biases[2*n + 1]; + if(LOG){ + tx = (truth.x*w - i); + ty = (truth.y*h - j); + } float tw = log(truth.w / biases[2*n]); float th = log(truth.h / biases[2*n + 1]); delta[index + 0] = scale * (tx - x[index + 0]); delta[index + 1] = scale * (ty - x[index + 1]); + if(LOG){ + delta[index + 0] = scale * (tx - logistic_activate(x[index + 0])) * logistic_gradient(logistic_activate(x[index + 0])); + delta[index + 1] = scale * (ty - logistic_activate(x[index + 1])) * logistic_gradient(logistic_activate(x[index + 1])); + } delta[index + 2] = scale * (tw - x[index + 2]); delta[index + 3] = scale * (th - x[index + 3]); return iou; @@ -85,8 +99,7 @@ float tisnan(float x) return (x != x); } -#define LOG 0 - +void softmax_tree(float *input, int batch, int inputs, float temp, tree *hierarchy, float *output); void forward_region_layer(const region_layer l, network_state state) { int i,j,b,t,n; @@ -97,7 +110,9 @@ void forward_region_layer(const region_layer l, network_state state) for(i = 0; i < l.h*l.w*l.n; ++i){ int index = size*i + b*l.outputs; l.output[index + 4] = logistic_activate(l.output[index + 4]); - if(l.softmax){ + if(l.softmax_tree){ + softmax_tree(l.output + index + 5, 1, 0, 1, l.softmax_tree, l.output + index + 5); + } else if(l.softmax){ softmax(l.output + index + 5, l.classes, 1, l.output + index + 5); } } @@ -128,12 +143,12 @@ void forward_region_layer(const region_layer l, network_state state) l.delta[index + 4] = l.noobject_scale * ((0 - l.output[index + 4]) * logistic_gradient(l.output[index + 4])); if(best_iou > .5) l.delta[index + 4] = 0; - if(*(state.net.seen) < 6400){ + if(*(state.net.seen) < 12800){ box truth = {0}; truth.x = (i + .5)/l.w; truth.y = (j + .5)/l.h; - truth.w = .5; - truth.h = .5; + truth.w = l.biases[2*n]; + truth.h = l.biases[2*n+1]; delta_region_box(truth, l.output, l.biases, n, index, i, j, l.w, l.h, l.delta, .01); //l.delta[index + 0] = .1 * (0 - l.output[index + 0]); //l.delta[index + 1] = .1 * (0 - l.output[index + 1]); @@ -145,7 +160,7 @@ void forward_region_layer(const region_layer l, network_state state) } for(t = 0; t < 30; ++t){ box truth = float_to_box(state.truth + t*5 + b*l.truths); - int class = state.truth[t*5 + b*l.truths + 4]; + if(!truth.x) break; float best_iou = 0; int best_index = 0; @@ -160,7 +175,11 @@ void forward_region_layer(const region_layer l, network_state state) for(n = 0; n < l.n; ++n){ int index = size*(j*l.w*l.n + i*l.n + n) + b*l.outputs; box pred = get_region_box(l.output, l.biases, n, index, i, j, l.w, l.h); - printf("pred: (%f, %f) %f x %f\n", pred.x*l.w - i - .5, pred.y * l.h - j - .5, pred.w, pred.h); + if(l.bias_match){ + pred.w = l.biases[2*n]; + pred.h = l.biases[2*n+1]; + } + printf("pred: (%f, %f) %f x %f\n", pred.x, pred.y, pred.w, pred.h); pred.x = 0; pred.y = 0; float iou = box_iou(pred, truth_shift); @@ -170,7 +189,7 @@ void forward_region_layer(const region_layer l, network_state state) best_n = n; } } - printf("%d %f (%f, %f) %f x %f\n", best_n, best_iou, truth.x * l.w - i - .5, truth.y*l.h - j - .5, truth.w, truth.h); + printf("%d %f (%f, %f) %f x %f\n", best_n, best_iou, truth.x, truth.y, truth.w, truth.h); float iou = delta_region_box(truth, l.output, l.biases, best_n, best_index, i, j, l.w, l.h, l.delta, l.coord_scale); if(iou > .5) recall += 1; @@ -182,41 +201,32 @@ void forward_region_layer(const region_layer l, network_state state) if (l.rescore) { l.delta[best_index + 4] = l.object_scale * (iou - l.output[best_index + 4]) * logistic_gradient(l.output[best_index + 4]); } - //printf("%f\n", l.delta[best_index+1]); - /* - if(isnan(l.delta[best_index+1])){ - printf("%f\n", true_scale); - printf("%f\n", l.output[best_index + 1]); - printf("%f\n", truth.w); - printf("%f\n", truth.h); - error("bad"); - } - */ - for(n = 0; n < l.classes; ++n){ - l.delta[best_index + 5 + n] = l.class_scale * (((n == class)?1 : 0) - l.output[best_index + 5 + n]); - if(n == class) avg_cat += l.output[best_index + 5 + n]; - } - /* - if(0){ - printf("truth: %f %f %f %f\n", truth.x, truth.y, truth.w, truth.h); - printf("pred: %f %f %f %f\n\n", pred.x, pred.y, pred.w, pred.h); - float aspect = exp(true_aspect); - float scale = logistic_activate(true_scale); - float move_x = true_dx; - float move_y = true_dy; - box b; - b.w = sqrt(scale * aspect); - b.h = b.w * 1./aspect; - b.x = move_x * b.w + (i + .5)/l.w; - b.y = move_y * b.h + (j + .5)/l.h; - printf("%f %f\n", b.x, truth.x); - printf("%f %f\n", b.y, truth.y); - printf("%f %f\n", b.w, truth.w); - printf("%f %f\n", b.h, truth.h); - //printf("%f\n", box_iou(b, truth)); + + int class = state.truth[t*5 + b*l.truths + 4]; + if (l.map) class = l.map[class]; + if(l.softmax_tree){ + float pred = 1; + while(class >= 0){ + pred *= l.output[best_index + 5 + class]; + int g = l.softmax_tree->group[class]; + int i; + int offset = l.softmax_tree->group_offset[g]; + for(i = 0; i < l.softmax_tree->group_size[g]; ++i){ + int index = best_index + 5 + offset + i; + l.delta[index] = l.class_scale * (0 - l.output[index]); + } + l.delta[best_index + 5 + class] = l.class_scale * (1 - l.output[best_index + 5 + class]); + + class = l.softmax_tree->parent[class]; + } + avg_cat += pred; + } else { + for(n = 0; n < l.classes; ++n){ + l.delta[best_index + 5 + n] = l.class_scale * (((n == class)?1 : 0) - l.output[best_index + 5 + n]); + if(n == class) avg_cat += l.output[best_index + 5 + n]; + } } - */ ++count; } } @@ -244,24 +254,31 @@ void get_region_boxes(layer l, int w, int h, float thresh, float **probs, box *b int p_index = index * (l.classes + 5) + 4; float scale = predictions[p_index]; int box_index = index * (l.classes + 5); - boxes[index].x = (predictions[box_index + 0] + col + .5) / l.w * w; - boxes[index].y = (predictions[box_index + 1] + row + .5) / l.h * h; - if(0){ - boxes[index].x = (logistic_activate(predictions[box_index + 0]) + col) / l.w * w; - boxes[index].y = (logistic_activate(predictions[box_index + 1]) + row) / l.h * h; - } - boxes[index].w = pow(logistic_activate(predictions[box_index + 2]), (l.sqrt?2:1)) * w; - boxes[index].h = pow(logistic_activate(predictions[box_index + 3]), (l.sqrt?2:1)) * h; - if(1){ - boxes[index].x = ((col + .5)/l.w + predictions[box_index + 0] * .5) * w; - boxes[index].y = ((row + .5)/l.h + predictions[box_index + 1] * .5) * h; - boxes[index].w = (exp(predictions[box_index + 2]) * .5) * w; - boxes[index].h = (exp(predictions[box_index + 3]) * .5) * h; - } - for(j = 0; j < l.classes; ++j){ - int class_index = index * (l.classes + 5) + 5; - float prob = scale*predictions[class_index+j]; - probs[index][j] = (prob > thresh) ? prob : 0; + boxes[index] = get_region_box(predictions, l.biases, n, box_index, col, row, l.w, l.h); + boxes[index].x *= w; + boxes[index].y *= h; + boxes[index].w *= w; + boxes[index].h *= h; + + int class_index = index * (l.classes + 5) + 5; + if(l.softmax_tree){ + + hierarchy_predictions(predictions + class_index, l.classes, l.softmax_tree, 0); + int found = 0; + for(j = l.classes - 1; j >= 0; --j){ + if(!found && predictions[class_index + j] > .5){ + found = 1; + } else { + predictions[class_index + j] = 0; + } + float prob = predictions[class_index+j]; + probs[index][j] = (scale > thresh) ? prob : 0; + } + }else{ + for(j = 0; j < l.classes; ++j){ + float prob = scale*predictions[class_index+j]; + probs[index][j] = (prob > thresh) ? prob : 0; + } } if(only_objectness){ probs[index][0] = scale; diff --git a/src/softmax_layer.c b/src/softmax_layer.c index 31f3e03f..0aa9047f 100644 --- a/src/softmax_layer.c +++ b/src/softmax_layer.c @@ -32,21 +32,27 @@ softmax_layer make_softmax_layer(int batch, int inputs, int groups) return l; } +void softmax_tree(float *input, int batch, int inputs, float temp, tree *hierarchy, float *output) +{ + int b; + for(b = 0; b < batch; ++b){ + int i; + int count = 0; + for(i = 0; i < hierarchy->groups; ++i){ + int group_size = hierarchy->group_size[i]; + softmax(input+b*inputs + count, group_size, temp, output+b*inputs + count); + count += group_size; + } + } +} + void forward_softmax_layer(const softmax_layer l, network_state state) { int b; int inputs = l.inputs / l.groups; int batch = l.batch * l.groups; if(l.softmax_tree){ - for(b = 0; b < batch; ++b){ - int i; - int count = 0; - for(i = 0; i < l.softmax_tree->groups; ++i){ - int group_size = l.softmax_tree->group_size[i]; - softmax(state.input+b*inputs + count, group_size, l.temperature, l.output+b*inputs + count); - count += group_size; - } - } + softmax_tree(state.input, batch, inputs, l.temperature, l.softmax_tree, l.output); } else { for(b = 0; b < batch; ++b){ softmax(state.input+b*inputs, inputs, l.temperature, l.output+b*inputs); diff --git a/src/tree.c b/src/tree.c index 5a758f78..cd9fcd12 100644 --- a/src/tree.c +++ b/src/tree.c @@ -2,6 +2,43 @@ #include #include "tree.h" #include "utils.h" +#include "data.h" + +void change_leaves(tree *t, char *leaf_list) +{ + list *llist = get_paths(leaf_list); + char **leaves = (char **)list_to_array(llist); + int n = llist->size; + int i,j; + int found = 0; + for(i = 0; i < t->n; ++i){ + t->leaf[i] = 0; + for(j = 0; j < n; ++j){ + if (0==strcmp(t->name[i], leaves[j])){ + t->leaf[i] = 1; + ++found; + break; + } + } + } + fprintf(stderr, "Found %d leaves.\n", found); +} + +void hierarchy_predictions(float *predictions, int n, tree *hier, int only_leaves) +{ + int j; + for(j = 0; j < n; ++j){ + int parent = hier->parent[j]; + if(parent >= 0){ + predictions[j] *= predictions[parent]; + } + } + if(only_leaves){ + for(j = 0; j < n; ++j){ + if(!hier->leaf[j]) predictions[j] = 0; + } + } +} tree *read_tree(char *filename) { @@ -19,19 +56,26 @@ tree *read_tree(char *filename) sscanf(line, "%s %d", id, &parent); t.parent = realloc(t.parent, (n+1)*sizeof(int)); t.parent[n] = parent; + t.name = realloc(t.name, (n+1)*sizeof(char *)); t.name[n] = id; if(parent != last_parent){ ++groups; + t.group_offset = realloc(t.group_offset, groups * sizeof(int)); + t.group_offset[groups - 1] = n - group_size; t.group_size = realloc(t.group_size, groups * sizeof(int)); t.group_size[groups - 1] = group_size; group_size = 0; last_parent = parent; } + t.group = realloc(t.group, (n+1)*sizeof(int)); + t.group[n] = groups; ++n; ++group_size; } ++groups; + t.group_offset = realloc(t.group_offset, groups * sizeof(int)); + t.group_offset[groups - 1] = n - group_size; t.group_size = realloc(t.group_size, groups * sizeof(int)); t.group_size[groups - 1] = group_size; t.n = n; diff --git a/src/tree.h b/src/tree.h index c713866d..b0b0ecef 100644 --- a/src/tree.h +++ b/src/tree.h @@ -5,12 +5,16 @@ typedef struct{ int *leaf; int n; int *parent; + int *group; char **name; int groups; int *group_size; + int *group_offset; } tree; tree *read_tree(char *filename); +void hierarchy_predictions(float *predictions, int n, tree *hier, int only_leaves); +void change_leaves(tree *t, char *leaf_list); #endif diff --git a/src/yolo.c b/src/yolo.c index fd2fccc9..05f2be6a 100644 --- a/src/yolo.c +++ b/src/yolo.c @@ -284,7 +284,7 @@ void validate_yolo_recall(char *cfgfile, char *weightfile) void test_yolo(char *cfgfile, char *weightfile, char *filename, float thresh) { - image *alphabet = load_alphabet(); + image **alphabet = load_alphabet(); network net = parse_network_cfg(cfgfile); if(weightfile){ load_weights(&net, weightfile);