From b3b6caa4622de8feeff2e7c68809d5e2849dd0f3 Mon Sep 17 00:00:00 2001 From: jm33-m0 Date: Wed, 15 May 2019 14:11:23 +0800 Subject: [PATCH 1/4] add query script that allow users to quickly query images using selected method and pylint-related stuff --- .gitignore | 107 ++++++++++ database/emacs/emacs-01.jpg | Bin 0 -> 124124 bytes database/emacs/emacs-02.jpg | Bin 0 -> 77146 bytes database/store/qingfeng-1.jpg | Bin 0 -> 57494 bytes database/store/qingfeng-2.jpg | Bin 0 -> 12376 bytes database/store/qingfeng.jpg | Bin 0 -> 43685 bytes database/vim/vim-01.jpg | Bin 0 -> 52764 bytes database/vim/vim-02.jpg | Bin 0 -> 38640 bytes database/vim/vim-03.jpg | Bin 0 -> 5529 bytes database/vim/vim-04.jpg | Bin 0 -> 6123 bytes query.py | 47 +++++ src/DB.py | 63 +++--- src/HOG.py | 231 +++++++++++---------- src/__init__.py | 4 + src/color.py | 302 +++++++++++++++------------- src/daisy.py | 253 ++++++++++++----------- src/edge.py | 334 +++++++++++++++--------------- src/evaluate.py | 264 ++++++++++++------------ src/fusion.py | 274 +++++++++++++------------ src/gabor.py | 368 +++++++++++++++++----------------- src/infer.py | 103 +++++----- src/random_projection.py | 335 ++++++++++++++++--------------- src/resnet.py | 257 +++++++++++++----------- src/vggnet.py | 317 +++++++++++++++-------------- 24 files changed, 1779 insertions(+), 1480 deletions(-) create mode 100644 .gitignore create mode 100644 database/emacs/emacs-01.jpg create mode 100644 database/emacs/emacs-02.jpg create mode 100644 database/store/qingfeng-1.jpg create mode 100644 database/store/qingfeng-2.jpg create mode 100644 database/store/qingfeng.jpg create mode 100644 database/vim/vim-01.jpg create mode 100644 database/vim/vim-02.jpg create mode 100644 database/vim/vim-03.jpg create mode 100644 database/vim/vim-04.jpg create mode 100644 query.py create mode 100644 src/__init__.py diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ef0516f --- /dev/null +++ b/.gitignore @@ -0,0 +1,107 @@ +# Byte-compiled / optimized / DLL files +__pycache__/ +*.py[cod] +*$py.class +*cache* +data.csv +.ycm* + +# C extensions +*.so + +# Distribution / packaging +.Python +build/ +develop-eggs/ +dist/ +downloads/ +eggs/ +.eggs/ +lib/ +lib64/ +parts/ +sdist/ +var/ +wheels/ +*.egg-info/ +.installed.cfg +*.egg +MANIFEST + +# PyInstaller +# Usually these files are written by a python script from a template +# before PyInstaller builds the exe, so as to inject date/other infos into it. +*.manifest +*.spec + +# Installer logs +pip-log.txt +pip-delete-this-directory.txt + +# Unit test / coverage reports +htmlcov/ +.tox/ +.coverage +.coverage.* +.cache +nosetests.xml +coverage.xml +*.cover +.hypothesis/ +.pytest_cache/ + +# Translations +*.mo +*.pot + +# Django stuff: +*.log +local_settings.py +db.sqlite3 + +# Flask stuff: +instance/ +.webassets-cache + +# Scrapy stuff: +.scrapy + +# Sphinx documentation +docs/_build/ + +# PyBuilder +target/ + +# Jupyter Notebook +.ipynb_checkpoints + +# pyenv +.python-version + +# celery beat schedule file +celerybeat-schedule + +# SageMath parsed files +*.sage.py + +# Environments +.env +.venv +env/ +venv/ +ENV/ +env.bak/ +venv.bak/ + +# Spyder project settings +.spyderproject +.spyproject + +# Rope project settings +.ropeproject + +# mkdocs documentation +/site + +# mypy +.mypy_cache/ diff --git a/database/emacs/emacs-01.jpg b/database/emacs/emacs-01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..b020bfc102c1f70c822a73ffcbe32a0e08cbce6a GIT binary patch literal 124124 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 z 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%0AOtYo0-1djIO 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≠~ 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 Q8u-5&_;)pM@_79J0q-?YcmMzZ literal 0 HcmV?d00001 diff --git a/database/store/qingfeng-1.jpg b/database/store/qingfeng-1.jpg new file mode 100644 index 0000000000000000000000000000000000000000..39422bd24a14db2a6d5f96f698b484ca7d615463 GIT binary patch literal 57494 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
s*v%if}w75a)m@n>Ut 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

jAEjzLQ3$$<$;sWgaC|bXKb3QMhYLEM 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 literal 0 HcmV?d00001 diff --git a/database/store/qingfeng-2.jpg b/database/store/qingfeng-2.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c9ae8f1a017be50b78213c1e7540b2c055c5cd2d GIT binary patch literal 12376 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 YMD)1hdo;6hX1Ob%DXx{s!}wbJKS9-@Z2$lO literal 0 HcmV?d00001 diff --git a/database/store/qingfeng.jpg b/database/store/qingfeng.jpg new file mode 100644 index 0000000000000000000000000000000000000000..74a71ff5b018fae74b30053c258b958750a83d3c GIT binary patch literal 43685 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 literal 0 HcmV?d00001 diff --git a/database/vim/vim-01.jpg b/database/vim/vim-01.jpg new file mode 100644 index 0000000000000000000000000000000000000000..2c4df3ee895bf22859dfb0af41bb13091255f652 GIT binary patch literal 52764 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 `h~QBKZC!Y(9q%bW*&gj0(U zGs#c7sQ;qS-mbZYHN}!<%?qond9^{*_gvCLj)}ZuoQHuMrz*j57v0=zc`2BzBlNTl z(Dv!IMO}Y>xu0r&K8F7|PNNf)HPvi+)tT~3RMeM|aS<6A5?z>|QNaO2rtd!Wzgz3S zZv1CCyZ6vQQGZ&0p^OAaGy#zp?!@~8m-8MNFr6T}eg3R0r9l;|CiX)M|E}E4G36I9 zMY&`!QFS^!QE^JyuuGaydgmBfpXsB{1vinyQLJDTm+|TQHZL!T5Z|4(w1h+Cz9v00kUwK^!$otA&JQm$HjX*4KeS~c2XT{GG_L$_l(LqsZRG6GDq z`txcWkGZ+&!31P-a+nOr@Wj4in5~0|40Mo zmo@I7&CIfqXzoW7C4j$w;uVjpv)Yn5;Rs(F0OeU2EmTgXdtAo9Y#kbg*$uT6QNZx8 zZi71zrd2oSqb$_-PXgu7V8U6L`Z)}#>I-{fXKtLxRx|t#F*xt z#Q0lTN+~?nKgJz!vKwzwU=O()2(#fE6+vtX4;Ss-$xnL^BSpl$Ge~VnFxT|iFdc@R zRoB>rt~;BohQ98m(p0xS(ANz=b@LwJ_O*$s0gC<(oUf3z8v zj{r4$`f}Miw|cZgTpTv*z@{nD(J};b-(TL;fAt4H$Mo8(@lKzgC67w}@r#+&vwcJ3 zFqspzFIF@aWP2=w6j+}(SSa_c?RZiC2+9gcbdl#+-O+GDak2DiKCEAYZeGT&CU}4E z)Xs%|pnna;C2kND;-6jMY^&aj%uQ;E?Rx$Qjh?NNKY*#&ee2ZBDw6#wAyVre5CzQ% z3$QuV(OaF2RPl9)N)#SBG$*J5quCxP?T~xsa=&%^dDn=eWn8yVK&GI=GCAz{oeRJP z*G3o8Xg`-jo53NRR?fokeKw~n$WehphoJG%cZoYAy*+Kh4*dGV-vMZ=?syj+US884 z@JJl+w3)#2@Pu&v_51Z$-=;;a5p4)Qj2Y24Y80Bz+4CFaPMA?4OKFugg-FA^mdCQ* zbjBD~T5R3-07!pPOTCn3dlYL!EbbaH&8hZ9D0K17@onj2BN8g)1Q2A-PXm3WUmL4z zWY(gJdEQcy1;up7bbiplg5)Dbj|)#^HKO<*QZx|3O1MZJ`b1v{X1&q?utG3D?ykgW z&1|MgE*)AukM z-wm%u0(kJS9-(;kNko};mgcwDX=i;F7B{qX2j7_->tmjJ7|%L`(n3*~n&3W~*=Bbr z40$hN-vC8ZH>@?nzQQDkY2GrYa-;(cM*Af}EKLFzhiPa3?5O?I>;D`MsS%|ouyZ?@ zPryW|vI-_bI;XAqnJWui;huqk%2L|6J>23y_%P1P-P#x2lw857J45cPBIh?+flQGL zRzQsW!uYv*=p}#@@Ex~(vB6RSSB~U48T{wZ#;AiF33zMuDqzP$vhWIxL zn)y1eV)2?vAr0O9jRIxR?6<@V&CO0u-rD}gsHp`3VY=)t=f1!>?ohJD2ESWlDualS zaQL)?VKclZFz8cd!yHlFkNUd+y|)Su$vjV?PR@#u&PprzBDtQ83ewqy#DqCUv7 zl=Byo+=`oL(cL8Y_}IkpK#+2088zhEsg~n-tFmMm4>WOTb+GomuO1wCB-@4Ozc%2_ zZ;N{dKnf9uYOR368VVH$djB!N^p{uvv51p0lc`ZMzLo|%>0Dyd0l#t9wA02vOVvAj zM%43ir=$5$$OA0ta7DW{Pp#5ti*&Ea?k3bP4!MUuNYw&hAqW3p+zdvIX0f)PSeSD; znwIM&NA=Ju+F-zS5~Y7WaMnRn-)dU6f}qfu?93OYK&g`lP5#EQ;ar&#SJydv%`s2j zwUe6{ZolRZfLXTebx!5>@$^$5f2MLbMnbaRx|uy(vB|r)*v8zaK?jL(p&K#rwstY| zCh1?s^_q-D56C1vqFVxQLd225y+ACV+ZDL`c|= zIdLACOht%ON8uU#VI{EUc~1)}`Cj8)A|p(Ti+j^ivtI^ak2Qi->YNl6OUXNY)=4hV zlSiD3ITAqV6$#7MIiaCJ@!ni%pG>CMZBU-4(n-rLD~2dPZLik3WGPa*Ak;dCBGLAq z^P<&3Nq`ens86!LZ9OY-xd{1?Ek8h8tmsv#X&&m^fz1P$I(Dm~v{`jT#6I9ODLRK> zww7=f7W%PY4yXEpbt1S+%$2J&tr;uwG8yR;CFIQ0DH_Spz3u=ZmZ#+gr#(3g-piO4ngDcAjIFrfA2l%f|Y~A*F z>BG!Ys)ipDrspxdN2`-Oj47I{+w;!z_i%2UWeW16>$7toswXG<%xY6@!vxB%aPujR zaR0c~|7z<$W0s3F#|PgrG}fFF4dgdTFW>SpH6p_#zqQt8RpjpF3pJp#0_g_rNEJy# z*J9;`C7An1n85f7&eKEAgasi;%8E^%hm^w#;H2}zRj~S9^i^Z>VWK~$ zAN9%^9-#MRv>U&P(XSY?WIfI8%RXVhroweh4K)`;_{}Rot?qZ%4B*Dly%XmW9#rB( z++r?~^|EjB-AgQ=rKSOoBgjGg{OKz9* z(3gYs^9fw(1+xW=Fy{$D%vwrzP+82=s`r}QLb~O$T~^g{;L)!#STmzd5z^CK5#qKJ zFv*Yja|(zz#nzJ3^ybgql~^v+mUq0I?@na`S@`IySSbue-a(l_DaU2-xxTbhATkV+ zsdY z&lAZau+lUf>|lBQJRynDB;(m6(7&T^l^bl zg1hl~XhrmtBsDV|W3)5BoMF?P*C|jrX@!|@0TQ-B_>;q@QI{ACmx5=pSboy^s_IZq zh3n`j!TlwV`wLk5YVhK>X3ed8fT`71H90wsjBk&O@9Dduw834{@v4Do;j`CRBc^11 zqg2)In4pyL{WZt)ChG-zO25ImJ1@^St@S#v)Y3{7@vz571w1{O=y|560qoNv8dC-5 zX2&O~sF_8s^hA*{Q>4@FO3rRrW2gm0-Nnwc)K4*f6@dYlS70^Fs*A4``$kXl`#TE_ z<&Iz_U}SopMYhg6*Z!jM;lG!GU3oyvYWZ2oe}1{Fp6XAOQmV1rnul6gg->(~IIPJH zSz}yMrZn##nv}Z?$*ucB4rXNz#>_D#+YcdgyR z8s2i^JS|G78AjC|=E3)IQf+QlS**tC_MjU6arN9`=}_%My^M~I?Dd1iiBL(-x(C2b zaM5`@s9jFnEY|YO<#{=yf>9T!s)ts|?jG>E9K&>tL>sTY2F8W=qB4lhcx(%koFb$* ztI)-5M*xqh0fm~JJ-u#Upycb3u-qg$7#Bu@abbxOtKwh_eq$IFp79!2_&XJT&3 z9=dFvVa!TPHNVVc3({N_f6*fk)4O-5f8-oKLW%4{=Ck4sbFVYZ(bl987m{2ZLPCDLfS!1PSQ%h*(1@yLYN=eHEH|RS7EdZk67W>!sq`4^kw*ol)0X>5 zkx&+jTX0a*WmEs=VBv{ec#lsKFMJS6miJEoLQ9Mf=EV&zMVYl=54Q^x1VsfsP_m)grd`y(2RWuNj_NyO)N$hwAj z#bHhvF2}*#p$c%CSMxME*;B4nS@i8e!3S(|?DfLe_-qWA9fv0@R z2^FGbCH_V?T*;l*B;CHRpCp+RO}*;uhh-G%5T-=pjOky?AgQ2nFo-C>hE-XXnhD$} ztSGu)$sok_kuIeTg5J(`oUviaK4>d_wFhWui~WXcvAL84WtY-xDB(d{dlyP!>AbUr zSv^@jsz20riQQKQfuqW21$E;pVNtN8?9h}A4c3aOjzq$DrLc-kAthn1$x^FtlwX`! zMGy5>O6~yLtn{|4_5}Q~z_n%mgd@K#-m7?kubxftTi6!Tx2h+qv-Sv<8zU zP@p2HCO`z zrH2Lt4+Ta_umYo&@xNHhe`O;7zK;wtOve5?!MKJtZfuM1w~h_(8Ttq6StN(j(jb{t z-3Ph0Nue|+t^rXO-fjQp6#zaJjbbh63ZH}hVSYjU0&GDipJwyWMo~_LV<*ToBpeeB zpHW{UXE4E0fizvUf1$aPyD+%eSp{_t#sN#@Kbhv!bx)K3nF1!t9Bcw~*k{s)y)UjN<;?$A(LK?rX z00|1=*1y?W>?hPQujpZ-UzA{=$>@yBNZMsQ0PW;2cBgm9iruK*maH>8#A@nzdL&G$ z#yMjAlbfbk8pU}v*Sb0ns1IqW9+=?LdpuPMR3*>Vnuj!vWwY;k!C{79hgRw=rv(E| zm^9%(mT-HyS)${(e5nO1Dsh?hs!h3m`_6TfrM_+;7bbe96UE$6Q>-u6lQ>;Ba1vT6 zpt+Tyv%)}Q_0>_;GG?ZMORajCZ=qy$i=6r%a8NI7tzGgHqGjbg0YtlwzUu8wt`tBC zLpf1a@gb(9JW^Dco`?Q$xLEF!10*xG&F454ts~*TlrkcD z3zFcGWVJLM;_HAVxW(rt)H_naNq;l7dv3PFvcodP$MJ4hc6_&^AYr=@mPu?1v#Guh zdKpw=XjmM;!5pnk-pTG=5M*1Zy%-@x`CGdMtvf6S1i!GcYRzJjS4mCp9$G7ema|OJ zT=x*fq~;lz#^e4`VWBj898R$RsjH-VVb095GM0ZCqHiCX!*Wwf913xE`igM2W!xzI zd5-jNMSsO?dpKhrjvbjlER8ADdJZjZ3LY9R+%4hk7Hn9VdgQ>W{_>+Ht@+o;J#|m$ z@ZGtjRkqF8~hb$!rd8P(-)F{BPWZ&V*p#}DF(?xS_5nQdDX*FFtpgBGp z<9o|_yOtE}3S*0#a~pp)70I!GZ_bORi&L!gXW(&iDXOl7=0)OJpBy@n8r~Gt9|$6z z3i+G$^l@+cbg9h=s)b`vG2Wv$yt$U(t2z6-Pv+{vHO26OFXs*gnGQHeTl zS*{W3so$3L6JN+J(ESL*(Ypjd7=mpk#ubu>irr+~-(qqv*0NKcd@sT??q2|cb<5>B zLKokS4_d)m1qDuy@%5N5tx6=V}0a3b4(3V zGYLNQr|Qn`kh>x$D}LhXdz4&@sG5Jkk;j9oD%ucPxc-nM1x_ba|b$0&v1)cRuGgAE19v) z$=i6)U7lC*(J?ioGk+tx33T1XZjRyzKEDcc(VZ@ZCZ6I8yqmPEvM8`Se)V7^c{+Pk zQ};-<)jy<%=NKsbUYe_;Iaf05{;AbKl+mGNdtAXXss8*XktEB3C2Y}o0+QI#fE#+SicE8^>mdO*b3eINH-$pX#ymM~`Y z__SwlInf)-n zx`7?q{!ExK)izrk^%-_tGI{pB?eh6>tg~4}mwxssBRYR>jjek`bB{_t)zEbB*3&Jn z1DHeF^!wuZM{m}X;0luU`Td~@S-?XZT%2P{0>0*l{BkfG?;5HiOz3VsF90s&wN$jBs17T zV8|g=e+Bx699C{g9pMOrl`>_ty0yjy$31&D8B2yCn2N7%QLJ=nEVqjCk(`zDq-5*A z>q)%WS|l@ar`q#=|2_%Nsx3zBVCvlJAUnCEHvU%g@H-c+<;~f;N~=Z+kWc!qFr4#n zxPj-bGk6-$Lxbh{ul00Hgrfz<+8{}xfZeWI>=AFuJe!x?nKUXwY+xsnhFYIYe_wj{ zB2D*O*K*b!nD^ODldU)`9+pb?y^gl?%)g=-JzG9Om6=$`8>Wk_zNaVkGZ zKZ{+nY$6u4VG`f=P3jp53V$D`wRv|t&nHSqN^{z}i5l7BFs!79eR3@CN8BD6-~0>1 zy!T3eib|3&+8hD|KUBe$k17rnRhMmcKP`ln-+xgYl?Iy6SBO!Q4TLw&)S0(F)ZZ7e z7pu^V_T|2QS{w~-*Dr!qJKmLdZRG9}5gUnc6P`WvLn6mnpR{sY7rA-PVqWYdnviI} zF`QQ4y+~CM{9&&3 z3KnH57pV2UE|~p)SbOWRDBG=V93_=hLZlUyP(Y+xq(m4xrKG#N6%?fgX&7KYnxSiG zknS9MXrviBB>ir5KhNW{_kO?M{_XeUAFg4JV-C2vuJbzATIV{K7UcB-w`I??Y-XEtT%trw%=BwV}iSg7bnJ^27#fhjx$d9=JdH)Rs+VxK(Dq|d~ z%5AR+P{`OV5V91Wv&g|XHi6xXOGep|uyq^iD*uV?bBp4&C zY>TO7c#m?_W%~y{WCc2cm&?aL#<7~0 z-MA*lAzql@9FwZ@&7`AlH3*esO9 zAZ{Oy@GJM<@ouM_S%4!AR$ih?UT!TsvUd!-cIL{4JCWI%!)UZ^ehK>D}t+Q>r?{n$)ldrVtxTeM(W|ZhjMNsTr#I{@!2{-exM-2;rGL?}wdK9eya-b4`U5Ep{}n0vNCmsQWeBY1nQMhUnPY-T z7S)7m9{7n)byC&^2h^O?t>3uW{%;9^$1g$<`G;2rKnU`GCj>T$RR?!?k?GEg|KEh* z-oFw8tv?8XO`Ec6?OBNX#m9~e*|VpA)sOyKZ9v`DzIc_?6}Pm-@@?~Dy{nDzzqYJv z+!^%9xqjxKI6Gcp$8k8SJqmv>A1Pno#j?)drB0IzTk1kFttPp)3J(m<-7Rj-Eb8oA9L7KvP2FTWhYMHisRX9rp zRkEB;1#5THUh_QT4h?-XjvcLMsI&dd>{BREwmFaRrsQ`xOtfIka+ww|fEY$eZl0TX z^s7iIwH^O&C90&dj?P&nZ;;c@%E9^pU?nGt2={cXcP$am(evID(|^{Zmmz%EQ<74c zowl}r^H_ppEcb($l(d}oz`itXc_?_?Y4VsS(Up_);eDK?H9@IYqGIFZ^5GQkb-;s{u$I6Dtr z9v&%LXN0&BUfu&zl^?~4nxttt!4Xn?+xDzi_FGBcqDZY6-f!{t9paZD38gs`wD*g{ zD}ocHICacDPP8An*jNs4cN`rh+h3ZgfMhi=ooL2qW3FeH0Ht*A1e zw(P69j{bIjemKrVQo@~UTlGW?%4PlfvM`*dVCT~k^?ecFyX#faxj28Fhn;THwh@o? z77dqt_@>kgT!Z+paWMLy?8KR}ZZwIC^Pbkyg5f&(p@A`?P69~XMJo$E0%(Xo%ZCII z%%ZI`bmPwuWS+fA$(9Lle1pI>je{7p3RT1<9Li+pj59umCU{3u1KB&OD|Ql7^Th~Y zCnNoJ5PI~?zC*Z%66TN>+ zP73}9a^m?HIr#{LA8A%cxR^D#nr8WAL5$X;U5p9%LM#GTf{Af7MG6>X*#hQPMvbgs zn@XqvEd1I`G!P;jTVV{S&k6%#)Qfku+N(HDr?ZF`hfg_02J^(<1y zu_SIqIDEPD&0L$fs?UWM+RCXw=ov}=>HFzA^Qa*M!031F= zK3ElAW@U->RWNr6S-0HrX+qW^te`M{0ujqOC?Nn}n+LHYj^j6k)M8vOy4hw&+IRDG zzthf`ovwDd7@q64*Zb~92`EcRq{kWtj}=Elg+w|{L@S{ku6ga8UN6|9TKtRaI(B~R z7Q$pB@rbYao;X{nAR3Z%7CE=Q3DFC(zzd9u!ySx_VkKybkV0ra*&uDYRz}#9l3p5^`91!P?ZgM9n?AF44|8UQTW#63N6qlqiyzQx(J8<2O8t0 zA{Q?+Oc3|odmgHm%GQ21w-r&7ERmD=volXg>XjFg5Nxd5jl9eWn8;;AQ^=xYUexfE zO|;F5idrA4AVP||rgOmVSQ<~NiziCljR0yT@G;Y>GDvNWOUxzcQTXnA8!8^?HH^m) zb7m9Znj7k-4+gxSwHI6>3< ziu(GBvovz)?*l5MyU95FGMlyCNFQBIE$NpS|apNd&5J147p3t%@% z0K1vlkONZ?<(KTTA5#5{f>H}Ze4+ip);Hy+ex6VKbkm^|9o=F9QAS&2ZxPzE3 zQM>z{R9}^t_-ANDb!B1H&KoWEY;UMJf%jLPKv{x!BEfH1Tvz#oP$5(pWh+ode0vav-NKvX5;Vi&&!d* z0=HQ_hFqjbzuw3NGR3R>hWI$3 z`x^f#?E549X-(OhuJZXdT_a!t<#^UMah&X=DPkEA6ojSA9@+^$O)y_E?yecRb2q{^A{546!_imatRw|n1+)JC*7w$))P zGwh_D3$Hdp(!}mj#x?!}U<6L1_fRwYM&eePd{SfTJ)3J?5VO=Iq|;7jG9lkC05Q7d zHm!M9+h;L)4Y^^98ihL|wS$L)jGOJ>>%zQ#pe-`GWP*eL8?NIwA@P{5OOPHAxP``e znDX`UqhWxCqlop2H)0FnOCQGAbLZHn*_Sj5-oBisrY@l~Of_BON#+533oyHr-M3wM z{j`g_nNoeYBOcYGygV_=#x3F(jUw>-bKJ&KKOW4cVOx&@ZHY3Yx?wq}W*AL37i z!C_)7AZxL{5*7I?LL(p(_SOsyjaB@Qf)U^mOdI9O81I1Ed9z7P!eiA|Ev|z>i24G5 z;X+Xj%?vY`-V#F1`#qJr8H_VDBEzLUX1Ua+tn64b0(CkpP1?4f<4&TiBxJf5%qQUx z5X{D8T%=)aG#+DO{vb_?J22f=$d=x2zIF%W9*cx{dGzgm!9s|;w(iLTz-4;D`9UN= ztY?8nMxV#EqE_&)rm(n8Dhl4J_P5lQU8qSb1W-vN(~OU?d!ia1uGVF^VdUPWYh15A zU_2eCto%;MDTM-3!s!HFrv_1B?_NPoi6v67S`1pAWO7vOTU+?y)+S>9!Zfd7$t3JA zh`m|~K6|!gS~s*H$fttzxu0ro)W_s_r&; zMO{??$g1K2S=HRYz~2dt%fbaHQF1=9)ihUlgPVVgd2yW`QNEUs5d$(u+YB3d!_+t!>ugzPjlpPF=0HKl9^4gFUJ-Ehs=8O7z zxkP7hvD)#s!Mo$UE_;td>W_VGsY~T)goiRSji+h_$s|hmr4EWQjI@58V*m#e8-|d&&B& zroJ7NtbGphm`189f+&UiOV5N7;m*j*?bZtLEK6{)#(e`^N`cFz*zNVj@1u{;3AZ`D zon8sBU$Pm_ihS>)&Phuh`fqwgY1H*SYI_?s6=S*AXh}_2v(i%_8a3IBS~w9U`X@!@ zb3V$GyeZ?7jw>v3l(5V$sthnhP>YmGaYX&V;FTbYSnqQCgV3q9ZpqJ$?Q)J~Z%}^z zu@l}F-Cn{hE`1Qw&c`rIR?>*O7P;%X&Jn5Z1Y;fhWsx(0O~5tBzd``I#`82jvC}&e zpn#{fw{%O%w(oM19a9^mh1tV$=&M3&v5v!27M@FOlKKm7K7&`+!?i{qR?93W!QX8*Wvsmod!K#F^& zv9YFDy_$E{CuF_7l(wJj4FM8sY7*_q;E=BrkUH+#GqpobI~t`gRhp_sfa9UlN1+Xm z5tPB@p*CZf32+1KM}Nx;Z~P|_4Ca?$`@{)%-*VlZ3sHY^&V9NM{%R_S{g2YrV$KxJ zvoq9RY(^yIlEZQq#=;UPt=)i%KG3LDa|rgjjk?|IuC}Gw5nA~JZ5cUK5Gi$5uT1rw zwNQ@6zunbm%tK{Hr`B-{x_XGL?$N zv1Y0Z7W#{jyhm~)i#kaQ&KT5q6{XXmZHT>`zLq+NBq)bmS6ZGt0YHzGrqN4}tn@;9 zJT@}v+sr4_LmZY4sT85z#JU>ob%xmouUCK$BDeCC{-@o0w@_) zwduCdHrf;yvKSNew}*j^aUC!lbR!{`;dH1(;#CBTzaC7|5#qp}tezS~d9)K^&6V$9 ziR3okp>cFaAeZQ~GRJ(EcygNOr{~&D^ao?5J}7o+P-{t-!(LAaJ_akV2}?7X)+*`c z4~!}FOsr*4lsC^~*wN>R+DsPoI!f4==x3C$Z!PE~@T3_l?C9lj46BMdm&-BQmZfcS zgim(Ou)h?FBy6mGoahDKu&xP*2d>Z*FW0nmrv@>%b!GvsYm0gE3t3HuD_!ckxNV;e zx->PuhvJV$1*j>!^mI!a6)Kh6nXmJlDV^SoODgMUdgIK(T_;=__gjhU4n>824ELXr zhx)I`BkF%0c|0!=cU#!DTj_nLACyMfYLL7-7d#xf|=nn$_p&ej}OEWXsk}Z-R^o( z>WmsCK|wL?2ASZqIG%uT%QD9r4P@o;@U5vA({&OpX1p=)of_l#weZT1JzKqEr?gxn zv#MuIscX0AM#Bs#UAg?9qfrtW_9-N$nD4c{I|>$C%x*cv8|UULv!*wk5vnM+joKU_ z@^>B?xx?SNzP=KX33H8q2vNVox5c0&Ezm_M5z(pjsUYfT!wV3dCryn?&c27H@I*Gc zPgQ|nCe~xzPm!v#P;@J zow-f)QGEN_V{AZgL_eMU{~7M~b{Ks*qJ{QSgGZJ0d2 zM=U49WKcyGkQ z?))u+(%E&|&2LYiGTe9FIPz7qlo?ui=83Fj3`-u?QZ^7ja{!H@a+rg&yU9Mi-K%)b{wOETxpAwEWKuzY)z3 zXP5>P>vk_y0e3UY!XR0hDI6N_kJ7O*JF45F!Edyj!}C@5V-;N9&#LH>k_Q3erY>9M zkIglW;GX6**07stQAPalNK2LS5;t|KtRb%mr9s#92CXjzU*byp+%+7LA%^j0~q+YPfAByS~UbXqaZh{7~kJ3bW>tpZlcDAG@{EEi~`g-dv%juSVK@ zvrcty&vP%>eYTn!R9s^IXTd7&WG{NmZ#SJB9-}5qFXo(aFFNWr&CDHVFg$6#*`u<~ zv}OY6QiUpgU4L!u;cd?jxP4xwp#i(;JSU~nhAmB>%L0*5gQKsP`%+^PKhR7>S~oob zf#+SZa!#k$|FIUr-Nxy~l67u6+iI&gTX1q_?Tq8gF?nWOu}3Ag_(r-|Y0cyYktrF$ z70^r&-iRX+-%!^UE593X=74^vy}zoI{)Br0OPDf|+%PTYlIV&lXE!VXp>Xh4*xhCN z$`1*h69o{02N;%(fS`*{PqQC^efnti=2JMNk0^fy9 zG<-#i1q{w29xl~b6e=};?HlE`ag@JUyE#LoyJ!!q85>p`?SH7MBh~}B6;$9ep+{~ zZo#t341?Legjzzwy(ADV!TwhqA6=cF>gO;0lSegx46}q6n5N;;pS-q<^nT*O{2N91 zxrDRBxj)`i27oK5yYA(ENC-98hG&2An*}d_i^>Wc=6^bL%P=6B{OiySiSQXRTbPH+ z9*!U&-AU3b@(S~rbs)1N7OJ0zZZnhKn7vE5I&)-94#jPSsIh@6ZU}P-8Cx4B+Vu$C zNKbb(s;qSr7t1?7{dmTQhj*hR>GUFb1Tu6`)stIW)AZ@&!r7n(ICLaB|2T9DKM$Qp z&AKs&UDgT=3I?%@OK`Szybt<1P7#TTtmZv{z@OtCKCre2Vhrk688Y#|0nD!@HU{?f z-;dqQzaBfQH~-gT7n%qI1ABWCl&>_}Ij`-IEWIZ!ATbkhVG~dtVA2m_94Vm1p?^pH z3fE=C#S-#3G!maBJk0g>=0qJO^9TMPX!=l(Y}V2E52Qy?<|N--A}T_Z2%d;w?G)IT zc-FzUBqtdX-Q3$D`^2n4jJbE1lm1A?-T(^7ZpEXV{$xvJ^o9$ZJg?OxySi==+TvEL zSyNjJGzT2Uwv|qQ8@xJw$|tO4bLs*zlC8> zC4KjLyZhw1iYK?ZNYy>hCTXm>W4NXD&8OC65=TpQ=7{^~Z6Ma7ezro<=X6Mre%V~j zRIG5|jES}3ywxL+fUdh`=ki8_C=6%pLzRZ6dEp&F`M_+O<8yOYSN`hdc_PcZn{PhU zZVf#OMML+2K+!O@ZtqQ0bQ|Ux2XtzZj%+SBvY4An+!gM4E6wk0FG|W9`>JNTEwjEp z^;LD($M}a(b&HkC?FT8ZQO@eQ?@2hHUL7VZDPpXQ_KRH=bsbJ+E>(g1G+k{-3qS0 z5M0BQ6L$*hoX&Z$F%MKeXO)@FgA9!vtX`XE1_5OvqZblytnj7%P}5W%AT2s9j|lF{ zLxN0jhEhh)U!eKt%HI$D9fk$rb^jYCV0B9Um~FG**BnTB*~X)S3QkYmV}NABpZ+A7 z)KdJOUg=H;liTN+hrC__wd9*U{LfZ*V0`jplGtiP))p~v`J0PTr}D9@5iY@X509qt zo$-315XD^W*>R6g>k3-%+*0j9ZL2tQs}Rr1Sd-q>36&>#i_Hfk8oKcHq1DIci)JM?p=n9DQel}hW8mght8NU@vm|T^ra`gz5QI2MasaCXszNY3i1QZ6i{b- z5crg}-8l=ck4DWdGdOv%j{r zh>m6*hisujfd$Of8gbPH%OONR7-GJ*?EH^QLT&n0f}!#f18-0GiJNfFS+*h{+rLVN5H9gJNqhgz@4K8~b5!&T2wf3KOIR6Prq6l@s zv*gJL*KIh3o5tFM@D<786bosg=NJ_C`f8hCK!0h=cvixL!kQ_nb&axz3q)dcVRFTk z8ngHDI~{C0AIpgwtHv}+h+=XL4iCz>z(OoeAtjANe0?*|?eC@8QK0!V0hY)6zSI&i znp#1{DyV?9b1!G;*cJtub}S%5a;h zn%06f;AmLfRs0a>df&I3SR`2<;($hhMv11t!|LczFZ|oxbG2m2vkpyZQYmhy^0BHO zUS~3!bYlB$7XtOHpWyn>yKsK#*EVEYTk%#oJlsDiSy6^t_;FI$8DbZ|nG*@xY4EL^ z_zPWA83D~Zuz$OROxsNJ^7HJ$^v#15uazcP*=TMNZ3ta{x$Hf{!uZyA;nTm~Ywn?= z8SNU&t4J$SP}1tsZS2EX^9&Ln2FpvDjF77bN-@-j9GP*M+)|HPGa+V~Oqtx`57e-} z4#%-h54NX|lw3m$hnKf!J99cSN3$CJ6$}1t^=oXvKO*_bo(fMOl7~)um=Km7R;5iI zSGw_FiKMis!Z&oh;Y`k{`DVA9P-zOH1k_Tdm9>wHC7clshM|Hn>UNtmbv74@$JtB5 z&?PRq_0b?&Z7@ z3!@#qo-jAg@E>TW0ff#NnBNB9oTi0Z*vQ)yBXc^<*TXNefoi*uez{Bn+#u}k1;sJE z%DWGfcen4`d0NQ%(ZlOOWp;o5sy`QglK^z#J(QumOPj!2&JT|X&3dul+9%xV54ajF zjO1UGs|qlI9S=tm5S(3yHBf_vx3cFi`0Dz2Tblp7_TtE_GQW9{0aGR~Hw!01;_C9hiY&4Ih%BQB zpy{CnLSi{zRC0b#`~4HWpL;teO5tBiLN3DftP`%!vOM~A^0qTH(P~wi-(t4&!PflT z6nW!+ZUgkk#~1A<@LAox=buqOGjoy=zHk%Q`ss?w*f7lkc|uEM?H0PZXm+1^To%P5 zUPoH>V$f$+t|*qAfC=>SEO^rz4W&G-=C!v~Q`+)s*$U>!%qy8-5j-T&bH2&qh%eVi50M!zQpZlt~l=I@u#ru3@DJ(48z<^jWR?;R$IY zL;VSd+yj_Dfr~+Wo=F_zZWWa_Y5J>&z;H%_OF44ib+zkU{WcL(rcTvK=WR!!G^_S| z+0ZOUpQCMm@uPmWhGEY*DA@x2K9pmPHuCY47Z`v1t-rp*i{aejNxUi!ngrlXUMbv#}u&n;Up z5pH@&ct0T(IgkI>tuZA(mZcd313XykFnKJVwh>%sb-E9%W=&we6?c>bHmAguYw{Dj za5&$%j5of}m`y_8h+WY;=w@4QJ6~lS6a%tz*b7hy3Fr}QCNua z+&YCT5$CX#zzq!cJ{4n-uKtvVru)ID2KAB0XCPTE>3Vi9^ws{v-Dy#|gm;7y+EDm< z5M_gCLuscq_jxs_z$*rnC$r60*X~=93_JzQT&G6grCb?-Yxk-;#)|0H=$u9C00mZ< zOV3H&&Dc-B1KBSaqnG{@#sdFy7zr6!Ou{S{g4UPTr!{vKKIRFV@%3LKt^FK zBCX56L$|s-T!djIU;cLY{qOhR_5a-lEZx`QvO5CJb@j*uGFRVZi6`G(6?AO1c*W)%-9W!jss}VF%OmSw=7DsKq{|!0eg%MeIm5 zQpPMbC?W{T|61cCSGf4VXqnsfA{Z<;X+6s-b*xakql(8?l}lA{SvOkj>z@P@ScqCJ zdfCdqXQDTx-!~r3QX3lNT-9}}Y9BAM7iragUETnP0rpybKGmfjCh@vow0rul;@w)o zG$7z*|G>p19_=_~!*Nowp?tJ%lJox@Zw)nx4%CD;2Bt$Bxh4LEORVU_;Jxi=z!UD z+tl0+exN;!$6D~bH&aSAxQkP-e4C){nEtDO)Zd651{vJMM3=TpkWw$On8hp=uEg_p zR2u3Tmu3rW%&*vAuhDT0LIl4su~r@>++DWIxq}1I`?zCFDc+z&=dxz9LROLGh87{0 zX5#+_|0c+nCGW{3Q!i=6?n4dz)p&vXM#hs?E4S{^Sq|UC`4X}lJw~%YkX2Me|&FLjj!vSA%>mY*&t!x;=kT}oPcR6N7YWc5D+81x{*})>}DHQJm+jL z-Di1E9o77E%2B47+z|Jt)yXEM2Q}V@9YNU}oPE>Ki(=x{1~MTMrCl1v^7+T^`88@% zQu2kIe5VnM!=s_;$8U8<^VL1_k@j%)?{0kjANp1(0%3&(j$LGYOT>PSKhP3jLO;+r z_<->$_#Hc8LGtIxxjy88w-fI{%Uu7Os_v14@6{W@+j}ng-wiJnJPhni4`79!d?Eqg z+@xAAno35vP#2qFpiJ+gU)@pGkEKY(8I{uH0|xgdzSN<~rJI(`YyRHusrdr+mG zOj=Wo!fEY|f0;0WJ@%aDE2pWTG+P{ywTpmCmAEQ9NLX3WN0Bv57Jlo}V(FsUcU#pL zx8d8-<*VUyv+wzss`|504ltBLB>J8tA7CxMSorC+viL5?cQFfi#VglCe)6$uS zr|(K&Pry%jAC|;=G+W1BykS|)x9@NtrP3%YWlr#J0K`GPJ1(TR5k# zpU0n^_vzI&WZ+;kqN+0`iQ+ssOy-t5>Q*F&XHTVq6~}BtzV`qVOrQTdK0Q762cL%j zoljfC#})uSy*7Rd>-uQ%lTUwj9qxk|#08my@qRIMk7V7_%FU5^W*6fV<`^aEf z1EogX-Zhq06MmX}C(*;hEc@j7*5I?idSJ%3K*$d?f+u=YpnW=T^C{Es_6C;=w!j>3 zxkZuY;5)~}UL8zv$;G~bMPSP6SsUKHR?_+jX%=I#(;GD!i~646trP{ZM1kc(L9%}K zJ2(3|TL<=C_fMJ=c2;Y*Y_?SEx()g{YRQRZx<X+N@^>6mMKlmMCtt8)xFtCH#tTkhnu9zX3B z9Q-=!rEcjQ5rcI8*h{iIrY6i+Eo_f(Zx-?{nqaGX?l*tu;OPy~wH(w!EOUtNMMSftUSfjr5gf%~X zd}MdIcZ-J`n`kVdb`3<3{gJh7b{D&kn+y6aJ4rMfz5}mNP5($r{J>#b~W7x z5!@q!t}p01X0$0Qll+xa9{6XP7ssn_C@+7U=e~8^s}9Tyes`F&FSe6_bG8hSk9JY; ze*b45LnBE7Ug#1_!I^o`^RApHLo$F?VCsb8`@|%1sbazVP^S^B+s)%M^B>J%OmA2s z_^`)M&O8`A_4l36c{dX&HMv@y9m5iC#b;{tRDrs_%R26dVe%ub3tNs&lo7>;s?h|) z5zae+0Bt+>^jEn2tPBAnX}zimy=~?-7>m*Hv48|>4h1;Ea;bPOWjrUhs9xnL;~MtZ zD~GZs(N_&Bw7ks98mpoizf=UA2(jG0UVuYp+If|bK0(kybHDm~oGKNsDq0mrX};C@ z@i;nDP~RAP!G*Rds(m_E)q3$5&!;GMRYACX%ii}@Gi~0(QxYnHV(&zd`TZ=s%6FC8 z4~7B!q6@JNI*f^H^00upTUX@jh^1s_#F;G%Wl0q`=ek{ddSF7{;#3Li#cYZ?Dx?s8 z=F+xXmvwPS^1H9qKkpX15l?WAcCx@V%?TTbf- zZ;4*W)a{*gG29tie4;7CQh~1^*cq@>JKIS>>P+vLX*Y?rj9zLpL?W!9aTJDboV1t$ zv*MxrAQ%;;Xo;-bw&naR@_<@;ire`;(OBf64`tbkE?$+v=@HUy3A2lNvg>2h$#W~I zbW0iXG2Z>e(TX=hqtl~t;{IfjXL`+n+GC}f>G5f>Vyz;?oEqFi>j zNq*REkuE{%13s63^ZYW~W3uM)x?ZxaJ?Sv!QX?d4YVEukR zl%4pr?)JjQ=59S7oBCaPHx@@~)q4ckZuF|+n&ngmao+{a5j$&fumsMQ_A|pHlfIW! zQCr&S_Q}#}kG?djbyC>4Vuj*;bj$j*>lv`WDLRZ|!JhD$vY~DsoqA~SrBrkEOU3I| zeJhgTA|41ZgCYgZw@yJtfyhZ+0Wq}-W89zv!y;07Bshtm3PrFtOL6rI;Lv>*70nUW zss&p((43wt1~7fg{>pQs%#5OHv{Tz>Xul!O+dphMsrn9vT7bLxlnzN)Xp5N)m8j?; zi?R6Ta;IPkk1yBu13IYJJ9p9xy%>Lv;w9{JmiHi|G8K+X<7P_>WAjT{TSIv#Ps7Qz zKKw{vbJ6)thtJ5cFVtX4TFh6wlCds3MR z4dJbhsB2=PpQGN?7C7D9x$P%*^&$WE>%TLf1m>&?v$Y<1VFnbC`~5)E!!H>Wy#+~y zIi_h0?f{1T*UBQ$FaRrQq6N!#CNFiFAbaX3qf@tRBQu&SExZGio8UP$!5v$gRVl}v zcJ}cT31(fjJP$|L82H6m+R;20)2sRr$K%!A5;?<0?6~A>Ny2ib zeQU=M8%=1)nZW|r92>S|2`f`MftJu?O0gHR3sjrg5m11!Ul1f6N^nWo!=duHJg9Gq z4HhnK6QT8M6C&LG0%TP>E3V9iZj&$?Yqk4%t4xXWKhR?Q)z$@{RV(=B-mIv$1|HXN zvQa6g;MvMa^TEDT%sI=;$*0#wGE+eh;+q@b+%)HAf`W-p$A-NK&O$<#`yJytb7luC z)XF?-7f)X?rXv_nUyOg+$|?Y(KK8Y`y3}i zAbm$nkDAiL@*SlYf@k6Zb|GZN(F-5vw5tPPiHs$4i2{m`mtq<%Bcv*;`n{=)DwDoJ zZHD|8`)DZ6smspV*v=GGP)F4Q5+d=d=5(q4N?Sot?zU;U{S-91pH8Rqy#y3QIO~kU zg8g^)t$v`T)44<0mM4G_@}fsr{-Q-cn`$srHY1ir5}|U=+@BsUs~f!T$nV7$D*BL> z5%rz(js9gZRu1?hrgb7y-AvYnyw(af?$?k*zz*SaY}Qe$#f7_BQZ%)ICXh93#eqenq==nDT_BmB5$ei z&&Tl&1i2+CI@YRViQ&4$O4A=0Vn@9tbC|wm^C^{|TkR1SuiMe?>XNLu7v)sfIj(dJ zpX zoNlRiF1bXhwC^)N4C@(KYk*#kDbAuRe^ak?sX-nf5Xp`7n@4w$<&V{tg*W96&eFpA zT%?wpratdA586ht5|zjhf@}k_wI9Eus7UeO1Y6ehu~>@8GL@!N*8M$y^7EA_tgnmP z$bG3VSB}_E*O`^F!vFELX=TN9@DDTukryMoq{KvRd%(I4flXLmtRxi90gOascfgDK zJxlug`oA2WA$SLgs=?FDwHdSMxazh`0(!v2nt>)9irCuHQ zzuX-e=G_+H92H4UDz(m4-cFXxL5Y~V@)SLVEq1}u4#G6gW3w2&K!>rIPS5=;v#x`3R<~BKlEaYEt|cJ z0Q!0KUd*Bg;d?sRH|wdfcNaY4NWv^3ew1#tMxCo6)MtM|`e}G;OLGeBOs7-Qd&ZqS zr7UP8*Wbn4pYCHWmuh{RE{rPMo=rx_qF8cklnhe!_NZ?pZ|^Pj4>Y9+b2YfK>clY* zwti8C^>h!6?_&H|>h8(r_lIl-kx%$>P1t%U;>x_mkS3|_lgh#tR(7z>Gdi3JTmQz?Nk}Zpd>9d-6IC?u1xhZYJ4&g1^$c8J=2_&{d^V-&hNzEH@LqR(EH2WgdS2!dm2Fl_vQ6{toh%4?OwufKcMx z{k!$21}%9YD}$YSDR|D^qL-ib1Fa5gSb*9^W|I${=6;L1R_JIAky^JZ?iQDl?CRRM z$0JV1&Vf76q^xGBh+c7GP?MH_*2-SV&515Th*D<6NF||D4CXM@qKSTy9c?G&%YpF5 zlDwi>v*o#KVHmP)NVPv$dZ5*78;Hql!cs(L ztqdvv!!jCPAxctBwu!ED84_HqWMlJgQ%{ui!lj3S%yD|SabB1!sRk%p`^}p+C3yFajOa3Hbc|w;DEmTRxv`1b*}-)7rv(u zjtCMxn#rp5)cw-#gZfUjiJFGz%hQyMOlP6k9P9i)sLw2^Dk8cB&rP!$qJk7NlO%i; zD-+g7`N_V|_GQ7v?+@6lQ6mK}S1(9e5Y{%DGf-!q21C30-mK$8Day!-J@Bm!kp%su zki3HZgm6`IXeN!Z4^tjTd5f7>?+x}A!ZoKp>Xi>M^0zOp0aeg5diO7Yb~Z}Y83wh9 zm=0i?ungfm%Cy;XbrVbK5gEatfy$FxuG3rtmq_kgusTrq7hJwUX$XDQIekT+qqEJn z)z19-4*YI|#c<{b$FX%=e}CfTY$W3oCA_)M1JZN=ovg2Kv7X0~4%;OzcHyj^nv|Ik z{PsfRyJ5NM$#dmIPn}+v*^bjp_{Vb*tWgmSu<*&E2=`_cm+|K=ypYE4I=eWzOlAoz zW(Zq|(WrF!#^AOc^&Dw8YiBkN-HNfyv-;E}C}pF{-o6D}bY@9LzQ~Ci+Q6-0BTt;m zyp;Ee33efOx-YsGwLsJ$7OMN)B_`OM9s3PpMXRI9PES~~Jgf&nBz>JR)hOr}T~@9d zGFTj}3fbf$*Kx6IIQMzRY17v||MJkZCoSo)zg2`R$qWx3v7^0bvz{qEIBw;c6)HtEiV&)y~I|wZ9Fw@{^T%be25iv zhGdN2LbY`u1x!pldJf|kw^l#b1y5D%4<;Q`sS0YJ%5pqkk=*0H8Gjg>d}`op$8^(R zvikaU{0DnoJ%tj&isNl-By}v957mdeo)P4)rkv5_Z}atf{y+m^j>KwM;K~tHNO1|; zKwqA^{prF{V%q7SYL_SU5FUgI@B~pxGRDs+m zu4l>olJ-g3zGf7TbKhq1Ng=+aRPAuvJ=A5RLz*Bkn-8hV0I zo@IQTjYGf9dfsus^Q}L~I7m0BdT(^X9KI@@toR6u^FFJ?U$IKd#q5Z!nLnVl6{ML*@qeVnIwx~+Sw^a5g=y|svLcRRHwV?o zNcDWrN2KH#_jh-W_aXp+I{I^7#%_?HdTt)~V=Nv<4j&cAOC^P1 zR!D$%gn^!pc;lVLZhSqWL2KJy!qA|*iw)pm?i+}K{_5;|0#)_5*zy)4O{-fea5 zlRd~KAZAdE%Mc=$xYrgzF0jSV>DnRsW#hQ9+ z2`unnaVTMGDb|(n$_Y&NvqG-w!xfYj5f$;6g4RLYhg@mTg}$b!s&b8R$@4iZZItU( zsZOqhDsu>*c#yJ@MkdC^_Ok!(1h7$E*~lf%Saao~jBLMB(d*n7GVu^2Q&Ljt)e;(76G>n_6tPYK zE~gzZdt=)Cj5=6S%Dp6r-uM=vMeF6Sa+u~`1I86ysf_aafx^gnl^BVMGotr<{7%^h z^+s$N zb$$HtYdGiTvsdon=(Cm@`*YzKwjDA&QWEynbv4FrSs~Cb;($mjzmwc<-N(k)w>M4K`P565`QmJTf8*Ly!os&0Qo z9}k}5xg|R!@-hsYlYiIbafxvzSv++gS+fD=5cF_E;n=D)F zlv>`ZuCIi6kV{)rqwD0-neN(8TqdAQwC zaz$gqjijXMA85uFZimT)>!Z_|D2DL`yP}mdxzg`mY5fNPeB@t^+(k2^K;ywAH#d)u zN3yE7x6v;#1lFg|by(XsNEbL_RpMU|b2`@3yxEJ6N3hsVLsri7{l{zB%1q@zicM2q zEAPGFxxkp{g8daJV!a{1*58bBoCUbo|CkC$X+&u`D(F*v1aC>=tG5<)DY zjhOiL97qw-l(C!?TZa!?6+D^$r@gZdi)vl_KPmz$DIpCT5G56*hY%4^Qlwj@bLb8Q zrMn%v1{h$F92#lqjv)r=9JyqVlzQ)361*V*fcEr9tr8(*g31$VjLeawG0liyT}$*Yylt9T_5GmqmKv`Tb0yVQsYb{zpi>CWhfNl5d~@q@Yu{@2CNkiO>%M1pnlUjx*!o*=iUoS!8RI9$6Ws9+KA1~cYu)jo5LBC4 z2Y;FM83HZ3fOq&>;i3hq<$~&9TYQ`ol%V9FcS24pd1B_FiL>>6<>OhOw>hxY=yzi2 zYTHxqO*9SAcqI2qQTND{8ox<_EaHXK=U~&VNFSCT=6plA4=gh{7Qc`A%+tkgAg6B) ze*b4aC<@ zJz{$&V2}d4Cw)w|g<{fdQl_Q##&;x&fS0k^QK+ObQf*X(%@XSS`1@Q)sud+56yl45 ze!wJT_ z(r=*DXfhJ{pB`+isVAPn@|8&XdtA>Qo}DTcObv2KBs#~#>UZt^cXrPOvOwfx@grPm z!N7pIjAz)d6-6wGpYq5f7fS<01DR^cP!bO*e9FiFpz!BUBn;uk*_l`QObAoxZ1&N z#QBkvs}@xaQhS^&EtOUGC}-~;a#7w3o&QmaAb)_q_Y6kU&z;|nQO`HYNQNR?Z` zh>eC*?x{hQV-ez$O(-56{!ZF41Xl?!HtXgdzBv4$&Vvdmzr+jYivs0bL@Dqf*I!upq8lKT zwGEn$%StUKLz^0y|`-#8_D{Kku?cyV0mu-@R`-n z!UY4vQT4Cc0i?8AOtq@vq4za%irk8IW`V0o3;`Kxcb80B!#>cXMik!S*do{-mlJ>D zyC4P!LZtZY7Vt)-E}}Y<7Q~!W>6_1BC5(O9Q3u@3M4f#j<)4R2t+2~UiHS%IoW_^@ zoGD+MDqTm`70z~AQh){dr0M9-d=Gk#u#%PUhWv|b@Xr(f#dr<(T69RLT_Ql&? z@Fq4^wNbT=tWkZt{y>9+S-oHSU5)O_q~_XCh;SJEmkq5wu@)u6V#6SMafghpIPss zN3HUOj!UwX)gapvd8^cN=|{;=?O14PXR3khMr1o4h{$P zWZT}cMyz@Y*|43gW8f__^){NwmsAJ5o>84z3u5U(I`^$Wt&hdI3zMr>GhJ; z9?D}tdZ*f!LlH;}Vy#s8)kmM00g1sy|1lKJ!LF?Qb+EC4`teuERy<&4*0qg?)Lp|* zpDawo3_DgAJmLvTa*pfi(V5J=-1Yz>1&7sh@!Hniun2?4mRGx;7MAs% zdlL>I`!0`h&%F!nIydsp2xfIxR@?B#XeEh(iGs+4S`$Xa{)P+)&Z>P9vBDBdLV5xW zX#D3Sx6>NB94*{aG4|H=z@o?uo$MRTlkGWWZ)?hHBG@*2YpH|FUyB)@(94X$j z)oqXAY(LsT!l&{bwy?4K;In9+uK5=go$m=;qK+w}Yd-bV`uB-4>wM=z zwUWE9@3l`OT0tmBf=T8J)?a>tVB3~tPejPb)tSZeOr$(Cy)-3pfMc-y(b2>F2;v5k zfjTqTNs=KzslB^oc1ZUrHHPTLcLoESQl4NFb4_3_6egVs2kuC%heU%)3w*ItDeI}I zOcj89v%T%~n^5_l^unXh>9L%#-aUu9uyV5-Z~NK`ojcysDpREb7aRk`RvEEqPKNg_ zdgox@?v+#CTS3Cs8`Oe_K`AU-U+I03w~SWUtoYOr2C^jEQ6rAklh^82ar^$3mi*J< zf1IK4GhNFayN;uk>@uj;fwimmVN1?FI{td7_|2afmow3{lR+>+V}ki3;W^Kl@xym7 zE40}K^gqcCl5>!OEPg962WDbRE|!9slBwDs()&6X%XRXBrx=g-Vx^6Vq{Iqsg{x0c zo_I|Gzl9R2zHK-(OBCf;6_l#-<}=Z24&}TNBt^VSb3Hc>=>u>KXgl02F8!ZBF}~Ew z)8TIva8*_)8}`pA+eUk-4RDyn)?6`0^wM8xS`Ec@y7QDO@w%Ey7Pxs`8sx;RwBW

JR{X)20E@?$R&K-s_;3vZ%|sT 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 Z=z*B#|HBOVf2aQM3jDWMK

-e*lsDLJt4{ literal 0 HcmV?d00001 diff --git a/database/vim/vim-02.jpg b/database/vim/vim-02.jpg new file mode 100644 index 0000000000000000000000000000000000000000..a924c08a3534441105f2c7a0ebeb01f3aaf76297 GIT binary patch literal 38640 zcmb^Y2{_d6_dkwLBqfq%2xSUclPr@ZOb8)a!XQlcE!na!QzRN&wnUg@Unl!+khSdl zzVAC(1~cRL)a(8FytnWF`hR}E>pS7BqV1)z~?;hLw1pj?EHB$3Ucxb7bz(yDKAr8zD#w6_A1pCnk$ztUuC#T zLq`t=gDI&QuQAYHqooJapG|U(6c}@!>=GH-C3>pMRP_I^Kc{sdnv3VsNj6E(v4Kcv z&XLlbJ8c9(06NLe{rQ0Y@i|8V(0GCT;w6g9zzZc;K_ur$NlDI=o>2|F?E^dqou?tA zy(K7fflkAioXwG5=xs#uMRwVOda!2CHixi@liwu@2F7bl%(pqYxOsR*p!Y?^#3ke& z$tx&6R#JYZrL6Y-rZ5Sh8XbH>^q&i;3d`Tc+5?0*>hCtsr=O44(H@JMMuFwjvp zG{+G`^7VtKcIzOPKMICUZ)4Xl%xO|&9*8#BG1#@dJ`$Q!#d}@HHTp&dM1Q=0hKdRL zC4I({6x?^oD`X=Bx}F%8-voPI;zI{DYPArANAUgp(tmUu*-yi3rmUs*GhI8EMf~=y z>=?E*Da};v+%Z9?YqUwUsajd*U8p`+(45aWe~=Z!GsF8zE+Wx~W>*c|IN91WF*jL5 zvhgtF7!JvN7-`_OSaolA)AKV=n%5WRTff;ZlzLaT_N43%*t&q&Dps)`3A%ySRp4~P zOjSqen^l639St`cy*{F5T_zs1M-SpGDoP~23x&g~UtC^{lyrWk7uA;aKB1tcL$9Dz zR$?fPM`4t8eTj_Gg!`OFlPmK}-5?*n&un5`*N5O~_uLhz9ELm%b_>FGRGE%9b%aBP z7?kK(Z7YWAXaw{5!Db0>yatCYHxtD;YrdH3>)cI=U&BkMePhaZTL+0jhpZgzLaj|W zDqeFjiJeGM!S03&tm%+YYOZ5AmpXrgtFd{kh{4?T6m!NaCS|evDZh>f5~E*!n`zhC zB^G-i^@|EaqYcDS&+2O~<|^&g^e$GyL04>r7FR_)M-x&@C9L`*ak4+#75ws#Ty7-z zX~6IID^;zUi%Z)n6A^=Fi@9nPep~czvKLrWjNQ+9z&#@W<8$5u!AcNVs5eE#Ks-pY zQWBe|R!rgg^X~P3fA1$&lU*$Tp=}_tNuUW-h8l_dW^We@fjLt0~)JEs}J-BGQ88Lypm{ zQn+)xTi|-kH5#M5xplSV#lV5Ebo!qZ$k_d?Tj3PEhA|8Gy?=j71Lo2yx%MGsu=Ho1 z%QZ8$1oJHQ#MCf`nGmP=9|Lz04o$9%rM$b$$((OE#o205E^H;1y*-$x_oIWn@2ulG z+yoV)nR4w|6raC*0e=+nretZBGmS5$xmi18)rbSw{D16G#VZHrGjS+NK1yy$GaOML zH@+Hgy$a=j%C1vpUu-F9Q7R%aK%zuc1^MjY~I;Hw+BoJ%g)H28>f9-S|i~dG9W%d?V@3vyFzTCwiX}T^QZ0W)u853#_d5GR7_njP`Nh?~gBET@Ow6cyLRX!j#jN zSIXMRup&IoQ@@JQlpSg#7-2BG`ba5ca1t#ZBLhvCp34f*f6BXVk=1BX zD6-JeHTPUUl8y-)ZbC60o@W3l@34kV6crYzO`v+@vnAX)@7XGmgBMg+y$On2fKDoaHrjYo-)!$@M*C3C^*0#Etgnc<{C1s z{oMQ$n*!g^9`zdpO|_y$(TKaKx}ez4FDW+)*oSBf<0}N#b9Qu>?ETG7LG=OXQxGf0 z^_sVezNYJ*Xqjy z$ZF&iw6nS*f*lE;P0M{K`i|pS_|Yk-_!Kl(Y;w;%PUf~U!kJb0PRrBy5G$2a&^hG1 z2jWBY5fy6orKx?%_2Z%L%ChyQ9sQMyYUHg`hgZ)=4s>O#$L@G=j7u_d5h-7uf^hp1 z*Ce%!EuR8&(cNijhzd>?z>}SVB9?Al(5Vc)p%~4V1}ki71}R7~3jAY)-3q!$vFS62 z)?GsT6jUCNd}p1KW%;xthAUzTq+P(4#2&FCi#;`pJ>g&fbG_pKzF|2BTk5Y} zg#2F|?&w+`GFx$Z$=J!aWb+xZV~T!Ki2R)y7ZJMw!)-Xboq`I7nnu#blPEs|%y-KI zM2Eu-DKGF#S*vVXroHS zoPz!@ZU`WbXB0z##{7%;OU_if4Q5G=@~LLObqXpwQ6oN3HUDe*=t6^E#J5YQpf|tp z;V`X?4c3^6mJ>0&R+seEkH|4X#wqAV7IG%Rmj~IM#ziC_1*~S2)$lJ>`YahMbPD?F zaSECi07j2WagR#zb;JJUZRF1Azh0gV{+sbALU0_iTN2oOCS=4Sb0l$jw&F?ID3ns7xzR;9|Hrc2H0n$u-7*9!l1dr5+UfOQ z-v+qA?%sPnX$n!s0!nF|PV7K{XCHEGd!vx+x6b62BS&OvnT;h-Xdgc?ku)JheCO^uK=NuABNlayiATd@Xn8}UG(C+(|&_h@gKA-CWF30IeS(N_mD-% zrrYYU8QQ;zdGH_XV5AoQl53K1n={`jsOq0)s{Op_h{_X=7Y=U{IHpep{KuIdJc&B6 z!+o10%KvTmeR{rvuo;z2b4AW}U==qskyKz;(nhx}b|**UD}@kWANs%qmyr;D@iB6P zc;+bvE@MYxXO~Yw+S4OygvLLzak+EluD%zKPx~Ijv(H^>#?VvHE9|cLW$3dNxNErb z>g%Zy%mpr~{Ctkgh7GnN}bum11HhD`qA#(4Pi3`D-_Fa_BEOcu+FQcHn$Kx%tZB9U>f6M*xe~`i zb%}}BTZVHjpLg^$R~nR@b0e=T`dcnImy53`EcGbu zwXFK_Gv)sIXB3O+^I6~#pB(fKg=plMZ5lf&8EM5SOAW0NcWM*Pe%EjDMY58Vck*{q z$>fTM)de43f2$y_iMNBLdHmIxb@|8pTD=A9CTq>9+5s+^dNzF&0fXgzlEa0$!AAog z4EbW&nPY!UOAH`PDh@h+veY;f8HQ--WqTE(@Ho_>L?YqpSM#W_Qr*sC4E`?Qa+LFV+sd-*$+-&t|h>72aRYekV;sjYY#S!+c?ar~{QA_OYf~ zN;6~0bxURRz+ekbs6y>aoi#82SkrA-6Pa;VN*1v#nb}YGDVi+o=(NUKF9uUFPuXVh zkK~3IpY#T2UyCa`_@Q*rx26ZNPCHTMqceTJ5jgnP-N%-FL&PWj?eOr4@qX%w^*-=^ z&jH%=4g-`p>SJ|c{O39zxa^q8>{x<+dSxBz=C67y^<~}y449!neu#dnxR*`=JEoQg zv4chPDNx*4Fg!~Yn4(sK}hhmZLbWG7wxe*1V(ZPbTHdLW+M)W8U$?>0uAXL>ms zQ4Eauv)&&9fFWp4lIDVH&bWho+dJcZz5|^+q3p)?)Oioi)@&N&@$Gx8$^v;Q@_z4l zP;u1iM3vz(bNcQ_qw9l86Nt1vg*EjsROkv< zeUDnb|F(Wv&M)I=Xb}^LZmTFSLsU`rK9WYwQ!gM$8^x^p7P6=WDvrpRU$DzX*4#Gd zn;LMD2z`SJZ&UZu!mnq35XZbzoadeMJ13*>wT?Z%w0cHr|}`k%CQi zogLKry{)KbbQ6w}rA!Mu-oW4asSyQ3Yo1jOVFua2*$Rro)c z>4I`t@=|G)o0#Y5%+2Q?rtxD7KsF#ygDacoK>s;GG1umTj!jT>UT_U$wwU@Ka*Sf++rApSL;Wfox5h4Vp;vJ znR8&FE6xV%b5Ve!xLMbs@GVUvz9V7R^i3AnE8dC;%A04={+yn|!Jzws^}vOfT?5hA zSXPYma-043eoxlG3^<;bO7XQo2cxI1zwYo7yEwVjZ+_LOHsdQ!<4vfeq3=#%IfPvJ zNF`y&BG(l)-`H{(^1I-BiG{tlK$Ly602xG8Q()e9W6pUu%nM#Od1FWV%QT=YUPgm= zeVfv(hq4@<9ShLELM*v#{8}=nNo*%iK{Lg^SEi|PPok0I_kW*)LWY(TpbXoE`vjU3 zMbfcV00tSC!@Wf5{pN10)l+YzYYj)#Nd~M_-(nf zhXACuA-A6cfnKvU_TLAK>somojv_m)8 z@*C?S3M=xhGqaw84$yfJ>qCNV-G40)F#E6Mi6dTgAND!7=!cA(4f&zR{%x`+u+qT# zt>f#l|5z+On7LqU&3Q}hL~XDZ2`LRfqvY?0v1gPl5v~9y%fBh%GMyp(v-YoV|Fyx$AAo!} z{we&7pC=arv4D3&6ccO#eZtv6{IPrD;eW{ofwL1hyTlML+rw}jcj3b#QuuL#6~JOO z>3?i4z#3KBwi_|UZemK$q-N%CLx;{UuUsvRUtlhx;mfH|n) zJ8h7gEN3ci^&hfA^RWhYL#$Ia{@3d2TkMmuW<>gD1DyY51I}!-7bgzbX8hl_+4E<= z0c92GiZUVxMx<;5BmQa4u+rH2zEhC!{|xB+BTk(;`ZEn6mi)#M0B-@9%>NkJ)<0#0 z0c3PNS48S$gDo70q!a#OLI0*5e@J@puO#*ULt*xTAi?_-^j}=0{r8YRTy(o0!d9*V z4u_xd2!)^Py?QsxSJA5iyJrgTb0CgRk(rc01kktQjgcybBwL^HIvX5ALnSTVLN* zq^a!k9?~#NX#>G&tZVX*q}EEmYqEi-4E0+ILc)2K=R3tR4cv0>if3|wTf?D3#r`PF z&Dq>mASM>pPf5RRO%9e_5ar3cL=JvxT%R9QRC=X-DWjA`KVIaVds@}AMP_!00Cd7D zrN7GYkyBX7Q0_744{= z??m>5kJG6&LSC6nA(2-*H!kW%Z^DHO*2Qy?g6i#Yi8)`bSo*+=61g;l@AGaL&3;p% zhYvAQ{d;lDdkK#5``?|E4=uYFqBLqo3T7I$K0F5ZDbxpoKcoy7tMk9Cr_qSg)v<0X zilV#CQ|26qD-@iedPXcqFY+zU^$+zT8Ibd81IV?vM3dT=QmVeO4X2<@0I2{(8^J*c z4aix-)o2ZQpNL~_4S9Od|Nmd-TJD{jeWv#w){ToIH+x_GP+pRc7dB`KtiH5E-82Xs z<`uSyC0Qc{b>$^Rk&n2B-}>vLw=<;g05+32D}ZPGbqZ?i{~hlntR`Yn1eAW7&*TIzAg?ol(KrTPsVI*E&I0emG0cTqA9ZTZ7EgIx>ErQ4y<}h!OWR?44+j+K* zNt$|x0k#eiI0exeWV;7ybuU&F)}pj3<-WH_#JG=j`}c;K-BobWPs-pOmoqk|Gqe$< zq~$hc;z%L~gAd|n1p-G?KS^^I#P@ro3-e{wIfjIsn8C-U3Psl^zT$TLw4p?9+}0a7F45uV=235oiP`*{Z`Z zC?&5&6vsOkoZMc9uwz~!)1Dxut*HewR1weu(2W4<1?Nm6Q#ufsCLG z=3;aAUlt#hI~+u7x%*vI_5#&tNj3__z8SX9?}6N)#ga@r{BPKQu(I9UV^{fd3JS^( zGkd)&oZ7*Z?@YXk`GDNx!-WGl?2O!@M>c?W1c(7h8o=e|+Y{NsUP~*y1|-<|pAW)u zvbBKY?Z(W)@Zb(WD>OR&BNADyI-Jql0p0+dB_kSm zPeIG@9SD(P5fC;XOs~(|Zl=o7F~?fJHujtt?c|6OE#1l|b?zmZ*3M2;!}d~8pH7hC ztxFCyiib5#uLiiB@8{BM$P1GC^zC8N@gTKfejrJLnCDx(f0DNc-6wx@k=R+bKa6dK zH#(|qTjK%e{rjodDabW#75FbU=!PE}_0n>lemx$ahW3|g{2J0D4|*>&8?Ru!5pOP{ z$?hA|<^I;Mp>YtO$Vb|EmC4w6!%)kY!)+#S1Ki0xd8Bj5x<9cJdGs;sAfMz0lsJL* z+SGF$O7*X#5C6>XEXFkVLRgS|}F>OJ=zzVhh-SFmwg_6Fc3$vnvQQyg5g za(dlz*Xoq7!yk!0uwHFf`8BU}&$_$w_ESEVXQAzQ&w&l7o+%SXwVr$Y@b**Qct5UugDzv^~_p#9yP7YRXJ5=CZUaYQo zw~B7-6Q&EiCpRxQ z8LxzyYDDR;-JM_4>wvQJ7T74B+p%_>p@I|3A%I6L0z4v`;kh(5;1T_if(U3*I#zSW z{!j@Syr;P7O--DE?f3>MbAPLCC(v_$LxFfi1rB3>gE@3*dDz+6kA|i^k$!l|W1pNv zYPH+RAqiswhvX&RgU*RRIJL&77dm_rOUsVX;Kl?swLmbJW)xcLz_lcgXjvzs6Z-*7 z*QlS}oP5==9sID4)T1tU^q5;EiPx~JFau^yCcQc%Pp|!n-j^++cFl*%D=|GZ@#hu+4X4l}4DLC;iwZ9f3BtG$n}D!osdK*0)L zpMs8d%1%L8lj^RGOeFhB7bC$e14x=qO}Z=2a^vN_um^X6Vvh9vQ_$hM1|b-D))k5+ zoX{if^6gq@!}KjdnI@$b&~cWem{oUq7&?!yEL9eCh76_R9KU&zn`x-FdG5n0bxw^31PX zsI*QzM3D)NfG$Qh*HoEDu_?Z>A^WPk_2 zmQDJQ+qaO-h4-Ol?yOe8UNi+q$`5Danp}#oHf?mWKjvsTAM{OV?r%KKI)NZU$N|Z!NPtLv0 zeJG9ZCeQG`zGIY!@xHZvfcEj=_@u+n?RR57yjonkd}GDXMhRNIGyeR^;E=}k79p2s zMAm^NEKpgCv&L?<;n%uzW(2LD=FZ)AaYYI*{*FBeb*)rJe326JLQ?zo_)?=ACb{0S z53+^xh=ZYY8NZMmzY~Z z=Iyh0iPc@-W`KG)BbZVInjvb*+OdzwzK5KSOCsx*l-Z$cl)gDAQeN_Wf~4n_2ri#` zbI^k00(-3>B16M^Xs9QzX%gf4>Nd+*TU?4vQoT$aX_~JS5H8%=SS%luX7@?Dbk{sw zH4MQCo?w5Y`!Q$y1U|Km*V_Ho2!Wx1^K?jh@?C9O!|FgYGcniWJLq>2SQ?2PPw zt^uUN0UKe4eFs41YiY_U=&c$N3V*Z%#O8PvcRP{1SHILNE>}0%3ssTr*X8@Y5kmg! zt0G8a0O4fp6i-1UXuPdH3e-mY@rCF&8crmG;d%&xq6D%M2%ZADlV`(C%5`$Z{`j&D z30(R&UAsX5n$b{T1D`uk?-C%lJ`oI9%VgEwGD;AKOHy`LJv+ zEfo0^dhj{3<%vci(#Yha78br4>tk&9K6hX%&w>rN(r%Md6e6l2#E5mkG&A+^dKp{zVr0pS8TZ`1aO(KV z$N+G{zF<~W$!mlM1OLkX=k=rmLP$G0mX`hy8RgB{Ba-F7L}J@Wz=J8ZU^ z%vbnI!FjYE;Q4-B-0zZ?i@)v_h~?O7<#n-xT|D6;VZ2{H(QQ%0c=mI9fVrW;V)M#1 z+43tIJXz;vi!5G#e4P;%!+gE3NW+v_U{~QlQe}jKJuG+3pqgntkg#7_SQ2-28 zXOM?LJPx4Yh9u2D(Xf?p6~M$W9OH@f$SSj4Sx~hG`6#X9qP}(4A%&|4x%UC$Y3-zr zd7S#sWiQXI9{#cQ@XO+z4i&6SvyN)2k49rtm-o;YURS@;XzGv2Tawh<(aKP~Vc?GDeY;1$`}4|WZs|BCOp|l_ zu3mfcNv$@^*z+2@+KKSRFs|7TI~-XVO0xHAN~+vSkMB-|`%5}b*LcYf?u%~~dyVNb zFT!c7sfw(fWX6R+Em`?$rCzN2#}8L(C?qx&uBTA?ryB#vP@zTytDxl8bgpFx!ym$Y{epn%X%Z>Rk*H zNEL)XKpxMdk1t|C_T^J@_?)Q?*j(onv4V@}$G0Smd5`YelNSBp%Zz|^e?oC%K1u(H zPL_Oc0=3gD7ve5*S$l3N&x^bfasJ(KZkxD4TdpM^om+Cj(_Z+j< zL7Vt3?$O-}xv${ZABGO_Q9J?LtemKfxDTE*R{G@LTh__m9vk(`-h6!P^Zr~sPPAF) zqg>jnFb;)@0XX=O8c*v*lvfKz?5{!ga`g);-Qd#4eOmkhm0@o|V2hj;pi;d+e)26> zllv^{V%(z6^G42rAMISI;R(GFxoB||&H8R=`0`=kU@dG1gMaT06oU|Q)WmE zj6i-o*VoaNPa}e|%*(i>sy{YU$rzJ0;ug&7NUX*_q~G7!)$&CV2bv z0myO}!>vM1N9;$^JB*=R)p?A42PW>_?pC;r=|EDWmBGpdNcJi%F7y z#^Z^rU}P+#;B_Wy)oj~VJpT-u&u(FKQSN7o>tT9K-{E0=n!cQ30C zO@(^i4Q7meRkC8ryr3i1-qsSK+xsepw7;V_+1W^0+Vc$eV9JRdaOdYK=^V6sP_%p1 zM*=TC&|m9SC;iabL2xsSPy5Z$fZG$GztxZESiH+Dg3R z@3WN#i#~*q(DmkBiP7XO_ZOL`yPgv9A~$vZL~Il+AvI zDav0ke+2wg>lZ8UL7jCvZ|b^%xv5}6ns5haM%6i0IokK&!qFwoBDfe9W%&op-V$Se zN37ZcEfS~{)-!ZFOMW>3$*<%FAo*4FC;2so^ zVBhWV4d75BxtO9}(0rda?57y%F8HX!I!h(RP$u)CsH!#FI9vEEx18xtGmM#VVY}?Z zy0`Vr1k9k%TrU?hqc>;15%Ci(dqswI;7IMdYzFiaAraoC*0&40up^!L>Lov-U`rqg z9Y5BC79$R#!QRi()((8Bw>#!mXrSLFrVx+D%w8-dkBbZ zEC-_RLJzO?5eq$JSw_Zq5i;-|W5C&s132EvyOa7fA43+5fa(;`wdi^Z+HZsH(I7+< zy+w$~#Yx*HGwX{G;gIj`=j&7 zx||Ixj^hxILNj3324O3DD$edNeGY+RMN2ef6IGzS2b6zyfv{SKmx=_%{q>yh_VG{) z5h&+;>||Bny|6T|~0j@!&Xhz*y4q#1nF|0@Rd-?!pBYQ;Pup*uq-P1K4< z!SY}rcS)m*L#TWr63tQ9nmr^7_P{e7^XuUqw=QW%z5|bqT%M)As^@O`B>wnVgPtZN zQVn5@kk%h_|8bCt3$~m=Q|fj(aelm*mvTPWHh~G!?R?y;tBd<}kco>hok3ISsXACj znce&PfZYISa;I*_nw>#VPCXhxAZTT|Ja)%${KbTkU3+1x;&E|ZXAgmIbzAqgjC0p4 zK772~IgtHRlZhkmK7t4w%gNgV4{Qi=_!}oQcu_`C5`LAY!-8<>H7i;*E~~jcl1fIe zDVo);eA`D-b0Ko%+hbgZir52tz-?uKio4y+RRdN*09e5PK_NEE+ zLgV>u)5NL(dW|O^zoEE6_LWm|2z7U+B4hhgkipOq#gR|#$}#gXVusKXXKYUd@Z%PO zripj&uN0+`82pE(ul=4BGv^W60~bZcar)!41Z4qJMQRs4YjKPmiK9llVKT4fY5q&( zt7VO-deoss&hkRY+?pYeSIDMD4VQCu0Y@{h-UU^8!0@u^SEj7N^RS?!mYu?;>_ogy zD&n<{Vel(xra!8|Dd6-G<$ z_Xit9-%INPt8(7X?({Y29(dc_Y>_(L0WXS9;;Bq2o#lDS$QQq=+%0uJ@5zER-*udv z)+s2T3g6^C?HPakV73g8V$L8q*e~)e(e)3lR0|N-&hn6i96#7N7g3<+k~}?p1d<%^ z%KJX<*DT_#=R2%P_z9w+jP|IE*(?P4x+OXQ0*Qv8WtZh zkrex>9QDFS3F5VLq1FtSvrVUidmWznTzug5J&y|c#*fDy!NbU6F^nUQ=S11vZH}Gg zeCVG2RfT{l)pCcix>XZzs%f`t=RHm1_j7{X^QR*(&FLjaC`-N)%FXb*xXD-7U@`JZ z4lxYJ@=gkrMXfB@NvVCTvm6<^H2aB>9(~8{U5O5HZE#Z6dezra!!WQ3b0Omm-Y47o zp5;2K;rYu1G*9zGyf~tv{Fu-jU}a*hPy&0e1pN)m_+B3G{_|>Mk6TEuZBI_nlw)n+ z5ga>;Y)QltoYV;C;crC8?URYxTLT(a0(+q6hMAd+Q_@+jt7% zxJ|ENG_!y14836gM~p$xx{ncMAltkr_QXp-lL}i#6Xtk7{8&eGe3Av?^FQY z67X2BwNd^L&wLG{TDk;CZiOP}g=ZnhTd?2I0}{f_J|-M*3wRmyRRCo@PC;>BsoRlP zkZlUzPeI@PfI5u!!PjNJS?s^v+CThItzkSP#i;_Eez?0GE-i$A#eC^_7W4Ra1@08Y z(wAsp#F_|o?JGPA+Y$JX>&=s<;)CREqNRMJcE^Xz`y_3}SD29P%P|5tW>?K|riDxN zywtH2mKPMI-mIzi6o)hU4j}37;KgTt@!U0wt3#1>wwiX`UHZ;iaw2*n>f14Skq{)! zl-JbreyPz-MrTdkjP>PiQiS3Z69-7jwu;P8i&2s&(0XiiW2V(SLN`RV27U^PJoY#= zLlmj4_e^&Uf0_AQk;q=NquNXA;t}#oGLWd(Eb+G6QGd59(>(`H93R}h>%lPi2LEZ< zlM?CGe~_Bwqu6v@Hw0ZkNL~B#;Gt7#Ch`kS|H*7I-=OsRpVESa=1?GjI87YFDl^zC z?b5w+w>Ohn=GIeAvXR)Km4`II!)Bsg%X_?(gK6|F#>&X)RK5uyCFli-@%8fUMix^% z{{ah--XW*&DI5 z1e)0-hV7|QiYdd;y2RFugp>I7y1Ke7BD=T5kT0owp(^8Zh1e$%UBg=skIdA5kLIN0 z1~EN0XTOQsyZ1T!+9*w<@qF4PzVzTUqa@A*Tg{j`{&)rycm9t*%66u3Qq;Y*!MNAC zpByYta_~7ze`;@gQ*Y-k8{3C(3haV+4AeIi;`a&EonoUpKQs-;2-FV)u&z8O+1$0$ z8AA*F5Wkv63#JqoczLWH2kj=*pwgg6PUX|J+0Py#dA;$TnzHh?`8oxdnJK0`+m=y2 zPLJOoZSxbmWKmuzUuZXx7~B1pt3FTaoHEP z3|ePDoKNJfiZ9@j(M~G;&_{BK8vJzH?~2WMA|HS@W-sMm%NQmW4@`s{eG(#Mg2-ko zzDyXWRE#C<7Z|%*20?80%vGB>yKJ;>UrcXXfNJWOa4F~9=0=^PY0ZgXjZwHe;Ck0D z!Oy%{Qu{#`Nqk8XjH0d9IZA`f)m+s`?$vF$T)gkcR!+RFki)`LULOW=$~o~h!@GPD ziMxJUlNrf+_qch=Zk7tF7HAewr%5Z_k1!G)l{UnC(pgWxUo2%8*KaHONXz$Bcy~xj zwNrWQllr{Y*By0?jjwHD!kzD_CaF}t$xoxFRpk^^>HOmrSOVBIvC4iD5xEbUzhAh( zTNxFf@LFW}@z4Gki3Dvg@rG?dr98&^CJXDeTiyvn2Bz+;F=9rEV}eB9Qg8Mwz)#Qt zI5!XA9Q$k>dxQSRQ&2kB5$b4sA9{?S7}I2MHzYx%#Pp+4qgldmpX$Yi4vC+DVA-8a%~TS70z)?g@11Lyw_#wZ$RDv zL;14e)Mi^t1g`3-NXaIvXT~lJGRMl^v1?$*6_8=WV>4Q9F{QFs zmhFaBfuKFZzPP1M)Z}dxm&S5Cbaw_^_q~uaeauXt9+Z?y!=c81WLpnbhA84*8N(rY zPMB@cI{SMcaW?HVc;1VMUt+nLJEb>T4)^qZRiU`y#UJip0-|A~4!fGfHC5mH1hq(M zN_U~PMi@i2xLXGM4`*Z7SU97gz;QYJL79)I*JAC?4GGiHqCK@ME56Ld43#=)yNu^c z(uTz{=cI9K2JmKNXeC#D2Z>5>h31-m+~b1Y2&{+j9@(3dOllpNOw?NhQ~cbj@mNk9a(Pq z`iu&?S02NYdSZ8w1#M2wR<`WNSa{{cQF~mU4}T#Bas_D)Z46Ti*U#`6k5!>mwqY4U zxr_&{7s6<&%H=uny+b?y%OvQ}&RS+9tb1E5b|&pN;gS`Qc{81n1x`s<+-9lqs93}n z7csy{+H>f;_kW=1$@LV%#4$05z!->}Feh>yo$1&ibtVOOZjGWw;%0JR@v#2yXBEcR z)tiNy!bzfB;V;Z^bL#K(`7>YseCqIk;w1LpuoE8O{e%#;h*LX}qGrU!#Z{{zCG7mU z7?wTi4>2x4+lt!G3?dkLmg>xZtP^VcljWtkU$aJY!?UlOQ8q-|g2TzP@6o9vD|wsX zeL#ihC-tGcZXWeRfUdt&pNJz$Tp+Qk3*X`M1`BkI&jGb3Ak}Nx2-}}TE?SZ9?sjRY zvNt;#wO&@Vcjb5?@sS0(OoViMTc7B7KPlSY3S3{Pi1fJMLQ7)$R`^%Nx?oaC7hV`A zK5HL_pflZW3D`Rlz`S~O(N$x&A#P##fCTG^w3r$xsz(;U8h(hp6_Av<^Kf#iFkE8x zX-~71@Eag&o;x8{kyVl{emfvVVyE$^Xo7asI-HPzwAeaN`~mdmbWC(VukqCFpR!>! zIkp1$k8cEOl|F4euGsW>&r`-&85rtPvU8!Z@Ok7L zed`e4=kojP)qx>Nj;$9kgMqq#wIjJNH6ug#zg?1qeSHkk{b=G9a5FF4jcW>TMS^X% z4++nZOuDf>zdRZ-ySbJ<#wiX0Ao2*ll(9j&bHLAb3CIF^h3=N>9PB^mkLtg$={es& zRm|AZ-#t^l-Ss|y)b{8ap-jDVk%KTzo$qYqxNSRgzV=pys@rpglbd!sOd&Wip>bek4M&G)!ujvC%q;2hi|Ef|t? zUfVz@w{VmW(HM;V>^5i|ONkNVMgADAQGSeH}G{Woje$kMip4J(`a}-6mQA_*9%RO!Rb$F|f7~2=6=j!)6IMS#20*Lw*p_a_piGhrh7Z_B z-sb7^iT4HQmUkFR&v#zUVWjvVR?{~Ci=!{`|YOc zo66b-`EIqIZ-?PAW7c$CSxVV9hlQ(^xf#ym2I9_WgCwQ=FOAq;L10S`MTzfi?_*W# zUfe5}u3n!s_u%9)=KBD9Xz(pi-nXT4d0{189GxvW79t$Ova%!W@j708i)V=z( zX*({R#usTL5z^suB{4&G$TQ~0`7rM0r)tV4We0kMm_4jttpEp(v=s6p6XE56;NhP4o=RGhRH9ICir=Q~c!jOYX z5#hIF-(g5Xdj8g5AdP7PI(EX3;Q_=R^e!9q@haa0>`yut|NI~6SXcA>J!#9H?bj8B zzfM6O#6X~_3-2LAT+RU_)PPbfH*5lIQuA!{EV}qB2RjLUX&b+~;U?h5OD6M)qf`tM z>f?6?%S&51wC%A7#c&djwhk9y+FcWyL#Xewxq zAZvjXf{Xaqi@rkM#;nXb-NiiYXv1jVouZ~}$ecY=29bm~gTQUPo9~V7{hsmxOO7d< zTZLocMn1?iT|%-nESxHBG2ojK%Y@T<6f!gFQ`=hWmXXZ1|IF={;4QfRpjb4c){ToVWIP%7m(h_Gw{R)&VB%h2H}! zP415zR`-A}Y;l*BqI%E2r`Mg83DCX<(u&zB4|%jhxA>{$_n`fkp^ml65)stMYZd$n zkOMUcd`DlP#GltLdcU`r@m?uz!6@6BJ1g2$th~)oD9X`IF-rv!h_ynK8@QV`ZY#uB zCXY@Vzun-l#Lw0;HgtPKIP8CUOUI0{!FoB=A)O_3ljK)7aL^y8#?|U z;@&%~sjXWVM-fp#5he5{9U>q?q=Sfb0jZ&*AT{*fQ4zt=yM!jahDZrbdN0y@=)Fmk z7V5qW_uk)k&bi<3ob&wdJk}uOf6#wtwf)T(yYvnQm(}%-nEss($1P^ zu|oOZ)b%7H&!Vj4<*l3G?8uu;02&o?(Dz=4s%e(~HyYKc{{p<$7ihI#5&G2N&apUPb1x(QYwdS<*&!2=l--}R5|hv&ii+UO39 zz2K$+OIAZ1gS1C7Iw^gZ&U5VR+FJMZ)xm0B(#0Evu8S5;2<1luPJ?N-v3v(0Lgyl8 z4_I5CgjfYqbQ41D|Da@bm z`_Gg)S1B^|ct!=kdU<+#$O>Uy&jGO7IEPbR^E-hm<;UyXBaVE7c`pEUpRi}?l23Z= z(f;`==smrv6F}}lFq(g@pri1KvdQ9i@NJX3f?^@;@{P=Ent zcaT=3sgh_po=hNP<_0)6#fhFeiqq6qc$ob$rzV7`C(8dtXh5cJn0b>1OCAFH){@n* zunQZKbX17Vx~ZIARNqI2pQRs{)v1#aKDOg3Ck-8Rq4@@4t$)4qP;epNQr8LW4?i?c z``MTNA?N2UUzX1LMobzIGvfm>^V}iifUPBlV{ZB-{mGo)7gS20x{*(_#5NE`0D%4x zL7t1Qtop=19W4IZLm)4BeF?>sTQnmviN6q9W=Z5J6Jrwkoa3pvATBPp7SH|wni|~j z#$l>n=R<6HeZul$NzGl;?n4Y`4%e0o`uO}aTWz8mLh*Y5p;$BJTTO~b^kxOm#9%NO($?mQ<4p(=Xt554b} zOd>~1*wd>m)dE1>N;#%nDc1lC* zPb&K8e7C%8{ZW|_?fL6!x3{uZv^6ev>_w=41qZutr&(mZT5G;R)zN?0z4Phxt238) zB%k-*;iTbRiECSaUWyCneQ~{x+KcI%szA|Ea}Zdz_(pxjt?q63-Hmdmc*38tAr|Vj z^BW5DSA2+yx#XDD-Ke{*xFu|FlVfiPSyLG*Miu-Ak40&|D{fs!mUie(m~*jOx7l&F z^AAV$PwWh|&?o3BV7hxt{BYF}5358Ez+{SG0u@R=4!H)2L5mU_^SC1RV)mY6=>yNM zik5hgCGB{plCOs*@8ur_6R9xKa9(dYz1E5P;O(;aU_oHZWzS7(SD?Aaphjq3iQrWQ zqVTSigy3{!h`)b84~~!0p8q0ky+2o5Y*r^|wAO`^_uX73;m{AiH8I%!*wF_dyZZ;u zt$c$ujP#fI(kI#{Ao%@L2`>SQ_OVfftTH{Z zsFJiY5W2i$3pqFAdQndHTBQv3&3#U4i%FV6keahmL(u6w}i= z=$vi#a=~)H^Khlm0wby`{p|&%Q@7BDk`F8HH80KlTJnv)Nk`GJ6aqw^D(u4Q4;<-! zejh3>0Az4ykiKR$50WMgI%uER1}c}=agS97>po-s-0vjeUc5gK@c!vZpXGx$r)WZ3 z$OgPou;?DkCPNNzx_YraY@c#~)XCwkw^JW7d##XpOD;wPVi?L5x%En+ z^NZFo_~%znNa|AsJWu5q*Ik~(Vf(2F$2l>Z| zu1+tUjXy>4+L$^CEE<5Srs*M}w!tfVn|i7ddAgczPg_KOnrzD9h-!*Gy6&lgIQ%7Z zi&;~Q?u2F+=AQGjx8u2C+lp)}gTy?^Z*)uSejX5cq2NT+O;>e9iNQJ-0PPaqO#c_y zW!#xuuR?WQQJBhueZvQ0*r-8q8m{$^_JnGqZrLk8JYZ@h3?U6oz+nKY zzU=37rKhFN7_At2H9sFg(c+yR-GKv(vS9ll0Xg6O$WF+?7b3hZt^A?%3!O7F*~pI*j&99wE8;>_clEBA5?rCeqi&S;O zQ_Etz!3rLvBm5y}(vEaCX!`q+Gue#`1mi!#7x`Co2isxI$1*$agoZPx$ z)@+eT;*dPE+fn6JB)*{D2?O6V${hoOr)&8etO-cxA*i4c*`ttlTdVLuEz=0wUU25< zqKpXwnbiPyM?HsdDU6B*X_eE*wMn!T{(;j(o40!D4luV?0p=Ev3wiKK^kKf=7%osz z+Vw=7Z3F2fmsDU~^UZ7Y+t!r$tA2!ga4#LGDE>DN+|<2_^A8epnn$z$7NLy#EDCHo z8N#t3A0Y2?BLyhSt1paQc(z}FIc)9jgxCEOsa5xnRKDcbKeN^LvmkMHU2ma*mmef5 ztcF6%`V4S}&e= zv}w+!E;>7B!E(pEJk-N0d0E$tZ9BweQ=Nmopp-NAjkJ@}WKPddpHiOl`=e*j%BcCv zhq5kwG&P^b9N4C|ks>NsR_JGEEE%=kXSK%ryChs4xL0C-_80FiX{WK^Ii-NhEdG5f z-EQhC(RIRk;dUU)Rsx%a411|1nXRbJ*lv`n65w_&Kbjs@3j#Gpt?s-di$DY1tlR@gB+Ii9mb$-rvzyvRp1bytNa$T9aVHWAFR zCduq4+_*RUQ({lAL7b|3tgMfsZ-FrQ;YuPN+Y|Q9_bKi@zVE&HcVonF?A{Ids#g;w z{l+39Ft$SEwF_I-N(DEBT9Be$><4d!vm4H(=Fc-uyPv4a3%ogdq|RXYRCp&X`Ql6z z{~Y3nllF%FGV8k>8CpNxHSzoBv;e+hODErG!&56qAmE(OLP5$=k`Cs1ZR+#_c7Usa zCEN|v9cHVm-5vex;3ks592@?qWeE_O!YWGj*FZ9*v)z4XMu$}1yQ}Ji6 zM9$Au+VM1u#kxP=I`GU|^Je2Ye-PdNfsOZEF(I?PE9=&c3nwFLZ?%DQgWYDM`dz;u zlPJPm(}zX3gc68l@GBu_DL+8+#yB)lUeMc%^tj%ldxyh(*kF}G7rh`!ji~wernK$4 z>#cZ@zNEFyL z670{h!Cjc06%)7+gg#gy*F}n*HrOwLrX!?XRzdx2LP+3VL9m&VLR&4VsxHNqhr;z4 z1#ooGrl4l!iuUvUEADUh75DdGC&1w%8CVOh(014`cGoOLz&|1OO3?)3B^P(2`UNNp zR51Un`z#Qck~LCw_)DOKZgEyIV>Q+B-722x44rBXzKdqH zVRa&Z07?+Hnu4wPVcZA{aY=USM9J+D5q^*>(m{^&@)}78=Ejf(V&)3i2Nl{yOjj;) z&Bb6t2lr>5uMSp;7zldIEqoVy!o$q~7S$h)`$QS4sm8&0=6ueX)zML)G?=eE4qAD! zJ71O39hm1ukOS$Z-^{$*L8=c*3$JHl;Tk>iJWPGv#G&ME;;HO)SYF2=y~E4*)E%scRW+k3cs8FF1bV&&_ur z+8`W#|8{hA0Hg;NHW_xu+2$CWF!H7BOF`Nm)f;HNBQn!^&7%Ng^PQ{Xboi--mbkQ) z<(x;i0f;3-c%!#7IV`aSe2_C$sXm%sX8l~OfKYE3L)L(zd+d}F*rT4gF{p2<~SC-h5-S9hX ztOt@Z#Og*;-pYW}kkx2E-@QWhMGudydGq~+>T~)~KV=0Fj(?Xy{>;)`A-Mjl2ZvPkfwCYeeA zCnXLDxk_LNR0veuT*SI&-Me4C^bV~SkzNByuHn-g9!hKxo=JAkClmp-Ws_m=H|_yU z((^V3fyQ{U(e=TWITB@WP37AifWrG%ou z()Y3W4W6i0KN9&|t0!`!S;tfQog)_kp6#DSIqVitbXcbOw&;6uX4SF?<~0-i6@1#= zJD!Ho8RJ+ZIYm9WxS7!#TjxD?z6~kFDna$s=jw}R-(|cE9{Z%UsR_zgKP4_2IvooR zEO=zblzh%Re!j`suC+ikws~JGOWqLNvzE9&eM0|rhPIzelq*f!;)vu#OY3n~4aXWB zhyE)nN@6Z6MKtjx)-=;yylt-CYk{y;t+3=*=5?LQ)0d z;a`4gmZ_!qflS!iGu`%Fd0fS8cPl>OQrt3yOd?OG=vKB+NXzbOz#;XqAju2Y3%Q01 z*qQ{Eb@p9Ozc`5%9ZTK&^t!z}i!UeJZfh`K$A9fP<{zi-lvE&h-uz*=1Qmq*qA~I_ zHF4w*97FT5yG?@QQ8>7Hi=Y#(MWl%ic71QQohrtVdHA4*kvf_bY-->2u88yU5l9lC6qU5AqTUA>(%4Qk4&1%U@yi5FLZ>An%w-X*Fs+#R?^3sUkz#yG( zHQsm%i2g2+Sg(0%iECIU>HbHg$gF@u`?lMi4XQGCMx0ObxBtLl%HarO6@0s=<`}(G zKj$!8w%QU@2ReVS_q2NHq`>-hfW~}qeb=p1bI8fH97C+X2AUj7$2=0HBX3N$zIVR4 z)raK(6f0t>{65v-S*c*S0SHVRvG(N}eJW%xi8t7t1pgX2XkA+WFng=mZGI+xL4wR1 zy4(I~3vyxTersh?9ELY_u%54eF6j>( zV&=W@wosGSeVU22h%XsfpmaQ#MLJDcW9PV!(BOK^SeY3R2bj<2A`{7t+$43!Y`fx9&#R=fpxAmTJyDR z11Q#Mn>_vN$WOdly}TMWMi5JYe6$j!n+jL*YST)GYY!bv5%i7NDpY~QBcGl_6@!;V zlITmSs$NFyTFy4BcJ_~P%3hacTX@`Nwa z{(zxjPhlmj?X^Z9l-3bjQI*htXko8-MR}$kG|cr( z6@pH`o{OhB@=k!pbM#Y0Dg(;Ov6kOQOlJnppSnFFyQww1Jt8DL#;hWIy~$IvGW>d8 zGp0zoU-jXSZ!%Dje{NIyOT>&Am{>!Gt06sZUh=Hjn6ucI^z3#!1_!_P6__FDFvpU& zs*3WkC>~_y+C>=qJ;mRA|C!h(zAl>R1XBCD@*PxSfzm(^zHe!iD%IRPiK1{u`jBL_hiCWk}xsiUg~pF6=>BJLh^t5kDRPrYyTi2E)|iUL27 zW^Wah6L2XUrz}fP(3a!f=KGG~n z@V-P3O_m$eEA01(>-dh%BHdgcdB0Cpm?XKYN2}eXAIAqNkgjCSTgP}*Si@5_t9ga8 z$7ej!^PJd0bS?_hMD(9if3X8j5kM*{oU8%03!awd)Z13(mtO#NqSXw*CnoV-Zv95O z`vDn*Df7Re?&I`d@&1t$`a3uDuU~2YJG7gPdMwLWYbueuiqW2*Kl(yJjB&H2yh#L{ z=pPgk9P&`?^JQ#Ig}|rwb;Ex|bM8O<%FN<3`&_aOERO{QwC*Qbnw4Pszwmdn?9Gq`sbXB4N(2ss+f}KwzJMzjXlGWK>GUm0uaX+ zbu@8aXA`6QtxyH&+H5zLbUJ@bq3?iS*~@C?Xe-^20;dJV0MpWMT3xyi*W?b@d%P8t zvle??z0OW%JXjom0m4_`G8_bqlaI387Pt(R)U`Z{$aLJ4c$nX*FhB=Vh*HL6hmfcm zk#ar8cS<;-b@)bRD84|2iVxjC(|MOoZjg+YmKj)`&9~*Vgp{4WM4ok2Z=pmUHw`24 zIPEltGQ^EU8&r7Htn4(8JQXjAO=iTIu`4sp^UEWL8K0?^y#sLOV=8FQ;Ainij962) zW|eoI%uv_#F^yr_N!#{4K7nbrOI-N*^6qFVe(O$%;k|z636iq2&x=(xcuikJXsQ_Y zBJg}0w5<^0$tHG|WLf6RjZ`i5^~&(aB4-+=2erx6XtN)c=3F|yB;R#un0nC~yd0~U>)5Ghsh{^oY+^lQ9U~oQB6Y&_*+o!iu?`NIE2b4V;+j? zSd;q?er@Te$T1@>nCQfJJKE1RsEjUe%3eaU3F1rAKqDKj_S=LTLN@G>0{uR~LpO-C z0ZFzL>>g|RF6#Z(&h^^iwv}J^JQ>bH{O-Z#LtzG9TL`+4rw#8OMWOr*0bW0rJ@9=< zoq)KI5vgT0!Z5ZBU0j+Z&nc66*shG;FHbeS8JNNU1+y%`N0+%!5l08fmvNeK-WT)4 zx{u^h_8A()r#g+-zeWXU)$v`V+ptBHV%A8g2d5F5a~wxYW1DFY$@{Mv5%@LoAN1fh z%@RYxA6V%k1Ip714esSRI8X^QzJ2|66<-KdE#niBha-*l zc0Tfm(|T(SJIfyy(7Jjs!-De;j(DiPdyh|td-nOTV>4QXZ@w#)#h)ySeHrylQ#HlW zOY1X+Rmo6x-TeH)*nF@%;hb1phGWJSVl#1Jypg2*Y2NAUvEp;Ly+R}6IudNEK0@`@ zhhAyufh#rikTGZ1w`!jFw!5Ca4{1fG62?e}o#~n|8&r7pGVdKLSx`cjWtRku&`b#7j12Vs9xpJ(R!Pt75!G$2+?Wf%d4s@ zD^S3?EnQ_-83gs z;xU_GW>F36ND(^D*u{5&tVIvY?Nk=`dX|LW?)Yna>4D4YY$VEk&t2%~BS{ zD>1k68HUO^w$hDwdKc@)Wr=FprjLIvP%w;5$m8Hm($YAVA%)gBP`#ga*wn?ClMrW_ zPd)SPcN7^#N8yD)3sleY=q0rjCo)wYHjM}=>BVo4T=B+=$(ROHk%w}Bt$kklvczK4A%wu{Aup9_a@E&M;Q9*NT>II4W zz)4{{h4z`}q5QC+sn{2gM}P(tkXd!VwgKCzG{3+A(tsqVsW-u|^ZyD~4_9aZS*!Wi z{`hadeQ$cA)#o<+?cKoQB3ad4m)4jjA7PoUq<42IeLsCy;NVYCP@15`AI(F>4hZjr0~7?pU%0vB{kxNxu!yy(4OY{uX4yYa67Uj)vce8PT)Zl$H`#2v# zmtOm1sF~^$GP5;zedf`yZMrp?bi^v{*&!%e^tKbBEaN8`3Wibf(85`7!4dCqHY9qbmxlooAU!z8zF z_33V&=5OBLKc?UD<2=#*0v}Ni$;vTe`bA{R^t7!aAX#f}CT~J_n#FWzPxK7H z0&iVkZF$i72AuihtO#D;N$%H&smXXXXtNFRD_&P&?y3HTiHJl^)o`TH3t8^ux9g7~+KPK7b`8+!3${Di;<-40 zWu^x|+~?zy-@T}d=-pe+v?b*2BZX1n)s>i7%0ra{V9M}E<)GrLh@X2Lw>_*npFKB5S-llCx)2nwrcjI`K1R65J_2a z{hhB%3CSw!_V()oNYnk&-YO5yNv|Rlo3{LeTmVEYtjF$1@!m0vyNmH=RY6|?0 zJyN~cL61-yQ;Q829jy~rX{wsGn(9VyFfZrk%5Zx|v=?}PLaw{b*fgAu^1GT!f-*8E zW0D?h8aRchxr$MJ%TE94c_(`1o>lGgd}zLn=;e|ot%?QnN{x0w$B8@hhE9~Mv%dOP z>JvCJC)Srw_px4X1eIf%GpB3lK)vZPp5kK)=3&>bHz?BQcWYt2UMWnYFRnGML_MKA z)qw45^k>tUm3dN^ML}$2$O^2YgVKc#3bfjn3z060Ee%@tpm8}YkRG)kt>q)}TiSh| zn_H~+n~2dKTPev8Yo_~jcbvzMo?SaAN_uIGH2F?_OPX7qu;tkY_k0BBCm}|(%SEEH zgO2BmTzZ_5#+gXu)9E_|^!M9DS@Qm3FJS@p65)bQ-$%5>=>h<|N>x!e`nub922`k8 zPniyViT=QGyedPn0Oj@9zVAp?B?Z4;hbuLY#=Rq8@A>bjs{Zpce=lQ{zn8IR6rN8@ zeRdZ$_TNm4$AW!-@hAiu?7h5Xs;?;?lvK1_wWLyQ?}GWd-(O)3lfDbUn({Gb(RNuf zYB$=H<;9fjyYXc-eF}7w?C=6({R%73W>XXQDKpkdET1;sGwqx4T^c!MFIubs1W?$o ztm|J2!2VgOb$;5GaK&OByJE5KtN+fJ8%Y{qOzZ#Ll(g(gG%Ah&8<2C$b56RFi#x%T z@~^=_(R*3+eA+64)SV^OfG; zgo-Afi+8Oe)snYA>nLSBT{knj44 zmR7K^9t$IhcJ)$N4txzce5=(2##!jGX=o#`lfrV__h`j6mTwP%si?MT-qay0j3}}i zsXe!0*AGLNE&kXs$uILrw4@FF7|^fb)+=M_Tz-dwG44cG2*tCNDu#YuTlxUXXoo1x zsFLfX1et*|r-bsO%u0iO?o@IVoX602<+UkZE3GMQ}zkZ~d2vdq} zW>t8%My~6-rtk_F9*$w&q%97jiwf<6;Yu`a!6-wq1})h@JKB{c#G0t8G4mZnSHHEE zkbBXFV|cNc=aayZLY@}B?~SLCe}Wo!nTE&ey`>H6?hOZCJeK$YeV3A5xA>`kI_HWQ zm}PHw7OQfl$*DA)ll8Q&=InsON`d{WE78CVoSl#m@p3@=+8ZaC4F%wz>d@hsS7hWa z)OqY*A8~I8sHr~FHW;?eOn>+7d+xM6@Ig1#>L~d2rtJ(D7E-)`>HmRdUsnWztm?^4YC2y!T#dlZxlMi9TYs#bHsnN(8?Y>1O%hn_ye{r#iN=YMTKNn`%vucML04 zj2^pFt8B3?^`V9p%wPMmg!P*N2*F& zn4*k*MHXUp4;ds^8H`Fkc-Efs6KzSP+;M=LB6iG z0eub;LR~j%=|8#6x+y~8D9hjkkGg*rAY?}}J{+l>@|x~&c*iDeWx8;nHj50y_j2^r zmtM|M#Ic3_kl06#9-XyKd)iTgv&{mZSy~mBl#FhwW=uo2i@s84B$G=v={IRIKMKR`8XpIIbiN zeKKnY)K-D`^}}zEl78?-^I+0D{KV|a5<(YbEe3t-(@ti|yW>cycX;}J-wk>AyE+&k z9xOX)W8RYFQGiNTt#wenFhzvyVr5=l-wR_aH5(_jb;s@2*VsT!vR{#i_~z=bl?-MT z&Z(tU<7`KAbiNy5B^4kK z8sY zRQcayb>n)~w6%~Tw0A_PZ#U$-y?roRxP37LLyR2a!=J}P zU-}C$oQ>Rqki`l?(z2C42RI8>W`|8Y*H{>s*5Mwsy2jiC8@3)l=Zs6AS_Cai zV%)@iqa6yIqA&aGiEk#DSamz|Z5ohBa}4G^dpAvt^d!izOlc~@SSA;J%6yiAiPl6v z!G#xRvW}Cl%Ve-WgSC7=LeO*lxG1$~2v)IgM=HcAv*1H)!4dKck+${TH$}!2V-hf{ zPo0HzNrTJ>Q+<7<6m!bg0@O#dd0SebNwF*LokE(NlNCGFW0KdVY3<{5{n4YuFURbR z&(dz3YN6*AY=X1rVM#lmxkP`A+_~Grw1TdY2Cgh1{iSqt*KUF~W|^lT=8~CPlr0Z{ z3tfO4fST+xZ+XBpRIW_p3QT`~2su87TyFAQDXpmc`%PUroLipimhFI_sl2#$70NaN z37G5u6GyD4ni@*sM(dw0VeQok!nE$UpLl5W^tW+jiwcep{Y{X3&~mE&TWfsZ5Mra2 zX8Y^nju-g(N2>lR^`+D-DI3;}Vxfx(R4?kX5=5o0 zhP8Yyh%)UvCKFEpqHELQ$<|{$@C8QhaxTj@cELqlFR#-bK3>U8wVWxV!2}tH4cgqS z64GNBLkHT$oQ5!`mP(5WC*YilRHmJS)r>-qJ zAvd}Bfv(MH30j(!tX+3Lr)otN8%D1Y?bC>Jj0^?cl0>vt1%%FuqX*X=tb?E^P0Vek zH5i&oo}4~Qqw*{pS+9`eJg>1*xmdL-<&;$4t*EZcO_pyo!`TflH5H5m4_N+68B&tG z-=oQVHezd)$9AP%E?GvR#btss;=QM?Ti>IrXyRdQQ8Cr(RGl22v{H>P7*@i~hFPLQ zDCMLj-(1)Z8MhWK*41^XV*%-`_9+YuCO#n=9kRtFYnpOvO^l9nk4r=ALWDN8UcY__ ziuZ6;-Ry$f>e7qdSbo}{0_~8NhM7sX`E2ldRL*II`rouyvfd$eQAFIHS})rxzsFfr zDAU}dUnWsaQRrhUvqZ4}6~)(@U6mj6H3DCBWIXO^#C;f%LU*)0?a!3gOTZ3wroDiZ zTQ{TMn$r8*wfyPy9mN)xV`H_hM=vOD z3LDpCs8q&pov%`&lm}_h-}`D!f&Fs#emHipta0Aafam@RF zWgT*BPB(^Ze)%o`xr?&BG8w~TnEk+d9KbI~0pw`D!m%^V;rtvt0;lxJ4j+Zq`wbm0 z?v@XpC|*MhM=9+_Bj(Ezmf{>bHx1xXTvZ3CKF*;f^Cfo#XHsOFd)Tv*6f3(s_kMuE zt=uyn?MVII=;UU|TIJ=+Dw_gyLStNag`saljE$<5Tq){7P{e^F)Lq`vL zTm{~dXnVrVSXV$F#c4JEf}d&M@tmA*EnC?eyJ-bxL1McBRoBWCZFo69^A zW^-JmO7oPBbAonK{U4rO;ca)&YAi)v69yOYx^wh!|zN(L|{tqUsGvs7D?T=}90QF(GFN8*sE` zLvvKz2#C(oh(dOGjtFrYzaT)e;%S$?mdjUnP+#9BybCic6V9S{p1^g~l0J}vd`opK z*-1AZ2^Glels{|HI(i=u@oc(R65=^zOQQh+3nyO*ddLb%M?#-Woh(Ae_z~u5s?x2c)!%#u z2=ek<3UeSXIa?marLB=i9w} zhJ}oXkyL3Jj@Idv*!f+eXYh(VU_M)ggt+93Q*{JL9u$S(j4TXChir$(q1coQEEbV9 zPnasF!wyGuCQo>;!INY%&|v%QbQe=~C#uTNqZPdGivnKB=L>7BC#id@+IQvLEOzFY z&R#k$8h?IJ2Uq#=S$<7TZfPxiF=*m_lE)Yv#81e>ZX{I&+#4L z>7OcBG-tKBWoy#kS|-E_Hi8G)W233Q9{?Zn=D&gQ`L8fQ|MI*-Ee8iQ>$-8p6`=a7 zHN$;N*OR{uyfQr8o8N^}OT^d& z4!!ttLf+tkX$Z)-;nq2XhC1`MKak2>Z}1@j;sw-TBDkoE2u_1pmEeyeWqFig0O_Ku z4;lF#N~r|Io}rAbj2Nu&TZE_-s8I*=T|dkVSP^B^NMs%|$NE!Kw1S^39)c3`Dz(F4 z@|#RLH=4#b;mbMIg6!Z<8kgaYF~J?g8h@_|sC^0?+}Bp!LzBvER;$}JAltuSoS{TT ztZBBRl^Ch9P28;?DLPKdroq*x8}j-tXYG$bKV5BkPCf(gYPzVJ$;0R8?}nAOI4RT>&IGqu0AG9%3}fJ zhwqh&hb25Y;zzBWUg_w3i-D@CI*1Ivp3j>aS6Pup*v5|>F7^8;N^w|k>JK?^h4 zH5-;*QZ4DxNHfz(D?$#2VYMlSq`Sf+dLm9MbXH?WFwyyfK`V}w*+)!lc^ItA`_Hg6 zTD;d5_bA?|>cL@+g%>N{ajd-=#SHvWG!MU0y=`BDM0UjG5HC!IRu!h+HMsf32PV}z z5XYq>PV=sCHq@(Z@Q7_}AjCJ{;#|sJlqomL{TD#?pXVALtMZm9N9;6u7QQ0-G5SNp zGqUdhg^#XQ+_WfS5|Sro>Wkj72V=(d+GahNG$mf)NOaYS1R+@z#DRe3m@JEZARJpSg&Hb) z5aNQgWVz^sv|CgV{kn$Oq#&y}2k&FPEk~ZvF{U#2f?J?xri@6e)mj~A%J(;Q#wtjI z-9uC?d^?_}L`>(Gj{&nQiMR$8vyl4Bpf{Fp1=S5@)mLrux?md=h}9M^Nd~ASs=8H>XsxVWhDcMCL>w zLvs|OytaJDN!AIT5=s*=T@oC!fc{DP$OO=(+Thy1gk)GGs@2}^+LJBTf_`9i(m5Wq zmV!==+I|&~nN|2R0iArAtL9U+qf6z}7<&yM^bRM6oQ)R6WW9nSA)p%r2aty#C4LJz z_xuv7QWni<%e&h17wPnpO@p^XGy|p<% zO_(HE_9@_~e(LzzWW=v|w5}L&Z_jh=;Q|k_bgneBV@rw5B2ie?4KMgsSLyB7 z`9>MjbSYAaid=;=dtMo&I+k$VfRNo^vB!tJt>hRVp9+YAd3gv~s z^gmMHiAe~zNL(BC`=MZWj!%EC>HD5&mXO8ur*A3I{xvmD{i8#b1LlrH`eaJFjQ!mD z`4>DFH&y_!f&<|FQ~@0JL%%gPflJ)*OHR}ol<<5u^@PgL`nAOB>Kq_t6wfs5>-^R; zyf+sRX8YvA{J)8pM3 z2TJoFGcL!8FF6a&RPMm`eNBNa$sE$p68q#*Hurq(s*f}h=RUMlT@EDfz4P1COyFsX z4J|%eC%!1AUsM)~qtjE|=cLRg@VleZm^cA+X9mzcE`0z4rZBwr-2ZYse6PT@9zUZ> zkSgTQD<%H0-*h{Pebjv$`z z-+&3qk}#iG62E%+qHqk4%~XBYEc@@?H^rROD*A_S-Io3RK|}iM5#cAdf$w>@2&jZ- z?u$N|G5V5~_}cjAhA&a#-xvJPr=}66(rD!zn98YJA^7L#=kzD{mw@>k0!)-)quq4! z%MVU}&8Po3!;gx{PwFLp5&z$7cW0M_)UV?&JB8YP$jzb00Ev#-_kby?>ts`2p!&|? zI(2wk>brhRMt_e&{=oTNdHnN_*?{mo!1jS>_v}gpS;9 zGs5-qQfUOzC;u3X;`;elp=Z9+Y!@fMkVVgZeUtik@2da!wz=hNS~GN`BJbZ=fTq!h zTYf7n0vA|ds6@R9rGSCssNbal%s~S4#qM`k_MI647nYE~zkG4>_l&-Wy`OVw{I_lX zhrU$&Yh@ukGx@vWKTLuA->oDj=R_|kF9-iN4B3AU0&wf`ziqtjAJavC*G2Uk&$7f( z3-IfVi9aX`7(7=!xUyUozGg1{dOlgiT-0~q?&e?Ll*jRbNxa&-^9k{>+rDrSPzH75 zJs0tXxcK6xiEgNyTvh@LL$%QzZ<4{EZ1Uz|itD6HJ{jA7vrMNe#d(SIY1BDRaYbJ5 zvdCFPPFOC@RDi|j&WwAhfxmwJ$HtsV8qBlior>eWT)H~+c7^NPXE?NZr>r4yL0`Ea zKgI#2^Yw*#xZ|(u(Sg%9C&o8d!oMwV zxR3~RaFhykSlucjzn;qc4(TykDr%_52j6=c#s^=uUXFM>rnx{KvI>dMZX}(cfmSHU ztB;?;AE;*JGkvSI6TNv@)YYXlK+tHwq4lgmYdZbJVWA2p*liN{fL*zlC0^A0o%YfUK)wl_Drc7iAAtnALO z*L_wvLbxUOVjA{|*H)KKgJG(SYwpVl1eD}ac|#L2?BCuhqEdI$9;~dx+;fo>Wo~2n zt3^EaGxEC`+Qw}9miS0;kv?9JgStx6uUzRf)l;bmuq&nVynafeS4FKgWei^Tjii^wV3Fldko_JJI=7rRISiF5_Q@Tu8}_oq|1VFds$_EJ ziAXz7l4H^RbeVHP{g|4;zJmG~OZRQ8^(~B<;F|5KHp+Ej>xz7_aboJC_>zwHAdzqZru-UMeO-8$T$t(`+wt!wKo( ?kK9`qErZvOUTq~DdL5%1IjPMV?|Rz ztqV)5&aeNs9|`3tk6gX5G8emm*H4rF+aZ%JkMQ~bexJ)FBR{QaOu!`vlt}G0mNAtc z)Z-XGBvV1Lh;->MVD;42e>p*xkabfsHqV8Y!o!>ZY$u1=3(*XH#@Hf%shNo6cA_*k z%TKYcmM5n{d5#CFXi7$^cRJ9gcxu#nMq|F4s;P+yjpi{2r48X$DAdx0WfI4g@vjX^ z-$bi{iYP}dQw;Q9Mi+mqzM4&cjfyiPgw)!|s(n&!`EkI_QZK6kmzTYLQMh0)G z>gRLbcTk2b|E~a71gQIRql%r+Ih#lVepkJ0>Dnq4A1x-QcNA0OirUd;Nuw3pQl$AV zdUdPR_G&~6qc8V=O1TD>sDABg1W`@_MS1S5nd8e5HbWJ-je1u*;!?p5E2u0mYn#`| z+DWUT?>m=;lXX*O9)Mfz13tCf2F1QdrE!`(sps*G=DR4c(1Gn+Vtym59R2j{bJzDw zk{V^T)4L2+jaCH?O*c=4detVmZfKl+o$P7bI}$4MvGTtPs|it7O9GY0EzdG~vx)H{ z$nJ4f^fYvCb6fhVN0XYRY|)|Oy(rK3cCqe4t?2UD)`uq*b$;z-#d^Dd6@4Y#yjK*H zJjunO?$wd2DQHL@m8Q*EdZfW3Ijg3%MbTdJvBBKH{{U<6*1D}BO2ji<<;C)StMRUr zOr2gJMS7L5%C3C|Cz;b%MfWvE@8&~Rq;ZO+cP7;}$pxwBQ(By+qXs955U%{NV4&~sIs;--;?Dzt~1$|&c8F=mf)RCW-7D58q)zKr#5`5Dr} zF%@&#&P;}iE1r+Wa$&wQD`We!SG34~emU<&6}qP)m_XN61nrWK-m=9cJX#S~Y6 z+C6`?bb12qLCth(a44d@n%@!gxS!%N!HqaK6j5B~5nAQGT8i2JY*9sOz7wG@bh@vR zPTfTnm5zG`>NinE77GUIH&I0v3kK>pQAHLD2I@CaMHUMN>W*WTG*L|rZgSeZA*9ZG z)!h{~fkhSFFX5iF+x8}gqPyTdxULTV%zdbw_o9ltD>T5iuVIs+Sbzq!ygCSwb43-^ zKY^ZwU1+now{MVCyQrePHhimEhUzy_MHUr-nH7;^Z)NZ1R zl-@0nz?*V(Rz38I5@ZC>e1+zMB7;TAZ+RKp%#S~UQ z^6=*W0GG!W9GjD$TC~{=D5AYdBi@$i=(JZm1#T;JqKfir{725>J~lsf8>phNvCClH zRc~_9p43rQ9m|KraGJfTYn<-yT^EN?#}MZRkk&p536cs=N%yP*Bk)TZCFEX4>}I@YvYAfk%OW)*b? zJ!>0T`J!qlqL;)JJ~VLCTW0Gy?_EBSyJ8ekUae<%pF@dl(?*LLqkYU~iYtyAo@Fi0 lH&9>Sb?;ZS-USp_t1p213ZKG8i=G8mkn=?q&W<=A|JisMn128O literal 0 HcmV?d00001 diff --git a/database/vim/vim-03.jpg b/database/vim/vim-03.jpg new file mode 100644 index 0000000000000000000000000000000000000000..c17c2e1515a0f2019d465c82eef1950942069867 GIT binary patch literal 5529 zcma)<2{@Er`^RT9_I=HgeQ)ghI*CHYK0>l&-?PLZG9n@o$rwwa1|!*ik}OGD?8I2I z3uPZvvi~3T{@(xZy{`XzUH|);=Q(rE^IXsQocnyweV+Sx^mqouWPIM}JO~U1fxy54 zIvxkbgQ($@OiWCSjEpRd^o;ZjjKE2MQl)2PXXoHxXJ%*T;*${I;uhs$XBU(g6qS^g zlab-%S5#L#qbh-rIRmDlp<$qB;9_FpLh$jQmX<+COUohvla@vxR1wmM-<6Yw6O%b< z{bRr%Y2YF0<5mze6=)VT3k5TSAk1JWGx)e2!~+0ApeLyRHZTMVr=)-ZH_tJFAV7@* zMnOdlp*(p23;{uzVJsFDa6$RAtS&+Kg)FPzkcCAQ6t7}y1}NF|&IN~r7S<}waahG= zWX^5^FX0AW4s`GzJ-{e{K7f0&%z%SnAQ+Si0)hSk0Q!S5vj_^wpVg~Yv~UT+-hVU8 zszAYJSvYX~8AJyKaG9aZAYIV99N^FYpJ`pGe377QK=o3^qwd#U`Si5p{KC8E7L%4o zCYKlZMpYcAyZz0{L$NeFxgo55{3_D<)^qP2E@_li-BRLAqWUj(nqgvG5Uj7={Wkv) zy)pFtK}}83gpVfC&CP(hbbZK&bS5BXwx3>%4~?>Fa3xujG_x!VVa%;}m=#%H>YFya z^&Hjo0x|a$AL;(w7ke+}U~+9}=zYgD3YB;2Nx#5{|A)lRS7__F2nS5ZbEa!QmWbV*QIzq<7($j?s|U#OA$% zf=)X-ivVRll0vXh(onef4_^*d-D}_AnJh#?*+lg+(IZ^SF*uHVCW}fH-fnaUm)~|Z zbnGX50@7i=r%io0y&s+F#401E=HvavZG%AQb@0(@|K!D2w5-)m>Gdj29{gFR7~n}M z1pxoA#xry<7>tf<&`o=uQ9&T0KDPV1+^Ks6sQl1wtA_@T?t>K=x9p7SCBXPoTKmgK znvGLFt9Br)|`Zt5C{Z_O+5nmF# zhs|rS-(qrvu|g?ag1m<`60@8rZ(i>1vR-gV8Xhj|Y+!yahMH7P-U<_})Pg=pqk;=h&PtRSu-6N-RZRMPd?uYK_3GG<9*fzA7Vf&(? zGZ`(NWO$1zfyincYSwJWj6Ve}fG*;y#*si8#GF=$K!#~J(Eu$%s-7w4QK zs>C3$kF*^ZackJ^&(rPGN!_a((we$mKiml(zVZ)Fb#gQbGK;2lfjD4n!Rvr_RNKrs_9 ztE>&``(zJlhUpoeh05?SIDDg2*1I!=A#50L78qOUqcoGObz$& zcA&UxBv&x^Yw;N0bB)dWudeqGee9T7DtTQ*Fg3Y+QtszA!*Oi#bSQ;r?t4Z)CT3#d z_{@=#MAT15peYCJg$jRw`Z|*5zZ&w=0$&zEOAsxXNXO)zgCosgoMq9laf;Pb}}-^LS)YPI@H&x8wpjvTqE;rDqPwv zNtZ5dEPd%LIB&*?(jKY_eyQQT@omVfWHGQi-=yoIN$<43V1RJmLRZivYGHM&|5?n% z*bBN1+H8mSjtY4Hk`KO7rxX-iH{cX_v!Mm5gm?R`YZ!gFmp}fxJSDB!ppRi6`on+? zU2*M(PBx!--W7uHOd92bD}(?P^OWGd?SbXo*4$P{mfSYpag6S;^=6>=1H~Js0Pz$5 z>h68$D&|dPQJ|Esjk;CM!(w1uZ=$A!cvGIwX+UbK;|$t-`HHx<+?<;7fpjU*W;L0O z!kpb2L@auPoCo29xaUbpBNFyo`i>A_^h%T8rs6KTkSmD8?UD;bD~;tzji5P6H@6kS zqgS_0ZC-ip*ZHumA{3wIDC|oW5n;OL{A^0!;2F=>7L z@0tnbJ!H?XyD`ta26au^>kRvU?%Z_74_7!aU&z<+#8wvbv5wF7{?t*~E8kZNstzYP z1%?E_o&Z%rW1(l2>yV2C{9)nz=ev^oAt2MKml=Gy&F!&p8Iew_9cA*VOLK z7RAUiga%H}EtS-&ii@WZ3Z^OB++BQRcbZYJFpmj+4_GBs1KN9%6B?tvGAp?Ze`t5ONaAO`|% zDY7m-T9h_QZRql&_~PuVJ}b8a!n8=b9cJ3$UVal|zKE4|@7=CrkjXJpBX2h=S zF(~asEpJ1bKKX$^+SbLWF3Zu*{MA-)dnS&|^3ds)u7+;8*JRIB$HNv8$H%pn zMVRCZ#X1#_m%enBa~)`-!>^~Myd_-<>%m`kl!XL>@f1>Mv}Ly*F|NBCiH7EgKfbT{ z#H2kuWNl$e4)JEUgtZh#aG@=nn##*cF*M+Z^2UD7_;N zEt0iE!NB<3(jck|iHwtl=5D-L!rN7=p_^q8_8CVTHWte}q2z@}nW>8 z?tR+Vz)0(SWk9orkLzu*uto1XxEyk1Ly2hyH&h9j$kW11f02mR&PlfvYk4TRKjw_6 z>v!u1I7~;VCTynOmo=j!EGOQw5zc(w5E=5dOXtVBj>TBk{rk#W_xcp@ou5h+_Lxi^ zx)eSJS1B;%wy{P)0;y!FQ8Rv*iyIMlU2IAvZ=aj-W!@KVv?3$Ed)_hViRMLhT;@^b;GqfV!6r@wiw$ZV(JaX!xl46JvQ~?3c_`US`bOjNpY(m z_Q7RZvAkau<(V5o&=w{E4&xY=A11EjsTx#)rrDO!;q@x(^STX%k>5wU-elbr3JAW} zcN^ciTq|1$TWGJj!(ao~W5ux0#fxz11wsO;{h|sR>3?mfx*xZQ?6Uy2QgoumwN;ydrp{R zdmtf5kJuh4T$kT8L8TlWC$z2Aq0N55GW7m$Vv@BLPqxZp!{u+I=&~fATb~D@(c}kGglbxO?VB{=tpiTGKAM zNN++S`W44v-w{;}EQXFj-^qEusg+0A&M)-5Xc;a~DJv)`Dv#+*SG9MY`uxawR$`(- zxl8QFQiIm0+B}z>}6k~_@w)T5? z1zyjjKT}Ci{jnl4uU`jIQCBwW{WFVEhbra!vMNzmClg>50`@Uci$Cg`u9sSaq< z;j)D`JY%6zw8e(DJNF9k!Q9ap=9}Ner(9r3&hfMmd@GT@pqd^(#gy(w3#GC>@%Ckz z#ei~G9GXbu-2Y2OF!48XIfq(9pZkP^)BJLIedW?fsl|yx*g+=>;f=*3aH+uwGk@oe z7|p2|16`covW`E8ZO>zig*dVEszA5|hXB=|s|%%7L#OjNI50+1zY?_j!XCGuWowX37% zPlU|H0oUVzBdg?8qB|zVK2%lMDmdS7e0$Y4l;0BwFSgb1dZT3L<~C1)%;>k@?qvp{ z(Hu0C0Ain>U>9}$6y1na??#u8to+(b6 z2mMw^2)4^{Ta>|UPk%xY*`f-|E(#dU(_kbH7tt&8X{p;Z`@UzZITKOlWxa|NPSUzt za%Rl&93Tcq;HXl7C2_)$pH+oJoxJ4!rp3j4+}C)7_3267F6bJ4*>n;(!hG0l@I;|_ zAYxd9*cg!15tYmY!{1rJp9}ZY!K3t&gV|s9tn}h1yiuA^mllyl-=|EN`b+Chy-d^B zzH{K?k?hvCU{Shsfh69{?+Gv8V{Zgd2kK8&tA+BTEA+X2G%&&Ck$rb1+`a@7AI3eS zf(23D&pK5LOB4|lV!97${m5hUWj$&Q&Rz~TVNu2SSuu`r%aqL6)q37oxXHX6e~rHg#ap$Rc=&3{?oR@es*#ZT@>Bi{W^zVzQ$mm-+ZI2`&Ilfb+;|7 zCt;$7i#zL_z#{Pp>txiM7h~r$iV}biSzBVUCm{hl1ikQL zK|PRP6D(7AM61=@`7c!%yP__bF`z5$HWTRb{C`;XvtvQ`1hy246hajj1%&tm zp1WlRNu8=lcG(v;7&`bv;CdAx7#o+cH1;XQTATntN_k^hzMwP6oIq~(uM7zoduthn zU73!Cn*if}Pk{=75E`&nNpccF=P7tNoL&8b;;UcuYn+1e_zM@xso&cPD5pte#uALJ zRm*QXp1M42)_JMX^TzBsVb&C4;=9K2GMi@P=&QgB4DqZchZ-M9vmG&-UsYDOmm@~s z=C9Y=zID};Dw5Ivvz}W)qJ)Q!^wyw-84nHKru7e{fM e3t9D8z}5mQlt&B0syibf&VR?e|5n~S9{V4F?yK1V literal 0 HcmV?d00001 diff --git a/database/vim/vim-04.jpg b/database/vim/vim-04.jpg new file mode 100644 index 0000000000000000000000000000000000000000..ad44e20e95a6b7584e906d1de773da641218bbf4 GIT binary patch literal 6123 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 g>8bf;CMtbgBKa}".format(sys.argv[0])) + print("supported methods:\ncolor, daisy, edge, gabor, HOG, vgg, resnet") + sys.exit(1) + + # call make_samples(db) accordingly + samples = getattr(methods[mthd](), "make_samples")(db) + + # query the first img in data.csv + query = samples[query_idx] + + _, result = infer(query, samples=samples, depth=depth, d_type=d_type) + print(result) diff --git a/src/DB.py b/src/DB.py index 388a762..db82e8e 100644 --- a/src/DB.py +++ b/src/DB.py @@ -1,48 +1,51 @@ -# -*- coding: utf-8 -*- +# pylint: disable=invalid-name,missing-docstring,exec-used,too-many-arguments,too-few-public-methods,no-self-use from __future__ import print_function -import pandas as pd import os +import pandas as pd + DB_dir = 'database' DB_csv = 'data.csv' -class Database(object): +class Database: + + def __init__(self): + self._gen_csv() + self.data = pd.read_csv(DB_csv) + self.classes = set(self.data["cls"]) + + def _gen_csv(self): + if os.path.exists(DB_csv): + return + with open(DB_csv, 'w', encoding='UTF-8') as f: + f.write("img,cls") - def __init__(self): - self._gen_csv() - self.data = pd.read_csv(DB_csv) - self.classes = set(self.data["cls"]) + for root, _, files in os.walk(DB_dir, topdown=False): + cls = root.split('/')[-1] - def _gen_csv(self): - if os.path.exists(DB_csv): - return - with open(DB_csv, 'w', encoding='UTF-8') as f: - f.write("img,cls") - for root, _, files in os.walk(DB_dir, topdown=False): - cls = root.split('/')[-1] - for name in files: - if not name.endswith('.jpg'): - continue - img = os.path.join(root, name) - f.write("\n{},{}".format(img, cls)) + for name in files: + if not name.endswith('.jpg'): + continue + img = os.path.join(root, name) + f.write("\n{},{}".format(img, cls)) - def __len__(self): - return len(self.data) + def __len__(self): + return len(self.data) - def get_class(self): - return self.classes + def get_class(self): + return self.classes - def get_data(self): - return self.data + def get_data(self): + return self.data if __name__ == "__main__": - db = Database() - data = db.get_data() - classes = db.get_class() + db = Database() + data = db.get_data() + classes = db.get_class() - print("DB length:", len(db)) - print(classes) + print("DB length:", len(db)) + print(classes) diff --git a/src/HOG.py b/src/HOG.py index 40768b3..27ec81c 100644 --- a/src/HOG.py +++ b/src/HOG.py @@ -1,27 +1,27 @@ -# -*- coding: utf-8 -*- +# pylint: disable=invalid-name,missing-docstring,exec-used,too-many-arguments,too-few-public-methods,no-self-use,too-many-locals,line-too-long,redefined-builtin,redefined-outer-name,bare-except from __future__ import print_function -from evaluate import evaluate_class -from DB import Database - -from skimage.feature import hog -from skimage import color +import os -from six.moves import cPickle import numpy as np import scipy.misc -import os +from six.moves import cPickle +from skimage import color +from skimage.feature import hog + +from src.DB import Database +from src.evaluate import evaluate_class -n_bin = 10 -n_slice = 6 +n_bin = 10 +n_slice = 6 n_orient = 8 -p_p_c = (2, 2) -c_p_b = (1, 1) -h_type = 'region' -d_type = 'd1' +p_p_c = (2, 2) +c_p_b = (1, 1) +h_type = 'region' +d_type = 'd1' -depth = 5 +depth = 5 ''' MMAP depth @@ -64,102 +64,111 @@ # cache dir cache_dir = 'cache' if not os.path.exists(cache_dir): - os.makedirs(cache_dir) - - -class HOG(object): - - def histogram(self, input, n_bin=n_bin, type=h_type, n_slice=n_slice, normalize=True): - ''' count img histogram - - arguments - input : a path to a image or a numpy.ndarray - n_bin : number of bins of histogram - type : 'global' means count the histogram for whole image - 'region' means count the histogram for regions in images, then concatanate all of them - n_slice : work when type equals to 'region', height & width will equally sliced into N slices - normalize: normalize output histogram - - return - type == 'global' - a numpy array with size n_bin - type == 'region' - a numpy array with size n_bin * n_slice * n_slice - ''' - if isinstance(input, np.ndarray): # examinate input type - img = input.copy() - else: - img = scipy.misc.imread(input, mode='RGB') - height, width, channel = img.shape - - if type == 'global': - hist = self._HOG(img, n_bin) - - elif type == 'region': - hist = np.zeros((n_slice, n_slice, n_bin)) - h_silce = np.around(np.linspace(0, height, n_slice+1, endpoint=True)).astype(int) - w_slice = np.around(np.linspace(0, width, n_slice+1, endpoint=True)).astype(int) - - for hs in range(len(h_silce)-1): - for ws in range(len(w_slice)-1): - img_r = img[h_silce[hs]:h_silce[hs+1], w_slice[ws]:w_slice[ws+1]] # slice img to regions - hist[hs][ws] = self._HOG(img_r, n_bin) - - if normalize: - hist /= np.sum(hist) - - return hist.flatten() - - def _HOG(self, img, n_bin, normalize=True): - image = color.rgb2gray(img) - fd = hog(image, orientations=n_orient, pixels_per_cell=p_p_c, cells_per_block=c_p_b) - bins = np.linspace(0, np.max(fd), n_bin+1, endpoint=True) - hist, _ = np.histogram(fd, bins=bins) - - if normalize: - hist = np.array(hist) / np.sum(hist) - - return hist - - def make_samples(self, db, verbose=True): - if h_type == 'global': - sample_cache = "HOG-{}-n_bin{}-n_orient{}-ppc{}-cpb{}".format(h_type, n_bin, n_orient, p_p_c, c_p_b) - elif h_type == 'region': - sample_cache = "HOG-{}-n_bin{}-n_slice{}-n_orient{}-ppc{}-cpb{}".format(h_type, n_bin, n_slice, n_orient, p_p_c, c_p_b) - - try: - samples = cPickle.load(open(os.path.join(cache_dir, sample_cache), "rb", True)) - for sample in samples: - sample['hist'] /= np.sum(sample['hist']) # normalize - if verbose: - print("Using cache..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - except: - if verbose: - print("Counting histogram..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - - samples = [] - data = db.get_data() - for d in data.itertuples(): - d_img, d_cls = getattr(d, "img"), getattr(d, "cls") - d_hist = self.histogram(d_img, type=h_type, n_slice=n_slice) - samples.append({ - 'img': d_img, - 'cls': d_cls, - 'hist': d_hist - }) - cPickle.dump(samples, open(os.path.join(cache_dir, sample_cache), "wb", True)) - - return samples + os.makedirs(cache_dir) + + +class HOG: + + def histogram(self, input, n_bin=n_bin, type=h_type, n_slice=n_slice, normalize=True): + ''' count img histogram + + arguments + input : a path to a image or a numpy.ndarray + n_bin : number of bins of histogram + type : 'global' means count the histogram for whole image + 'region' means count the histogram for regions in images, then concatanate all of them + n_slice : work when type equals to 'region', height & width will equally sliced into N slices + normalize: normalize output histogram + + return + type == 'global' + a numpy array with size n_bin + type == 'region' + a numpy array with size n_bin * n_slice * n_slice + ''' + if isinstance(input, np.ndarray): # examinate input type + img = input.copy() + else: + img = scipy.misc.imread(input, mode='RGB') + height, width, _ = img.shape + + if type == 'global': + hist = self._HOG(img, n_bin) + + elif type == 'region': + hist = np.zeros((n_slice, n_slice, n_bin)) + h_silce = np.around(np.linspace( + 0, height, n_slice+1, endpoint=True)).astype(int) + w_slice = np.around(np.linspace( + 0, width, n_slice+1, endpoint=True)).astype(int) + + for hs in range(len(h_silce)-1): + for ws in range(len(w_slice)-1): + img_r = img[h_silce[hs]:h_silce[hs+1], w_slice[ws] :w_slice[ws+1]] # slice img to regions + hist[hs][ws] = self._HOG(img_r, n_bin) + + if normalize: + hist /= np.sum(hist) + + return hist.flatten() + + def _HOG(self, img, n_bin, normalize=True): + image = color.rgb2gray(img) + fd = hog(image, orientations=n_orient, + pixels_per_cell=p_p_c, cells_per_block=c_p_b) + bins = np.linspace(0, np.max(fd), n_bin+1, endpoint=True) + hist, _ = np.histogram(fd, bins=bins) + + if normalize: + hist = np.array(hist) / np.sum(hist) + + return hist + + def make_samples(self, db, verbose=True): + if h_type == 'global': + sample_cache = "HOG-{}-n_bin{}-n_orient{}-ppc{}-cpb{}".format( + h_type, n_bin, n_orient, p_p_c, c_p_b) + elif h_type == 'region': + sample_cache = "HOG-{}-n_bin{}-n_slice{}-n_orient{}-ppc{}-cpb{}".format( + h_type, n_bin, n_slice, n_orient, p_p_c, c_p_b) + + try: + samples = cPickle.load( + open(os.path.join(cache_dir, sample_cache), "rb", True)) + for sample in samples: + sample['hist'] /= np.sum(sample['hist']) # normalize + if verbose: + print("Using cache..., config=%s, distance=%s, depth=%s" % + (sample_cache, d_type, depth)) + except: + if verbose: + print("Counting histogram..., config=%s, distance=%s, depth=%s" % + (sample_cache, d_type, depth)) + + samples = [] + data = db.get_data() + for d in data.itertuples(): + d_img, d_cls = getattr(d, "img"), getattr(d, "cls") + d_hist = self.histogram(d_img, type=h_type, n_slice=n_slice) + samples.append({ + 'img': d_img, + 'cls': d_cls, + 'hist': d_hist + }) + cPickle.dump(samples, open(os.path.join( + cache_dir, sample_cache), "wb", True)) + + return samples if __name__ == "__main__": - db = Database() - - # evaluate database - APs = evaluate_class(db, f_class=HOG, d_type=d_type, depth=depth) - cls_MAPs = [] - for cls, cls_APs in APs.items(): - MAP = np.mean(cls_APs) - print("Class {}, MAP {}".format(cls, MAP)) - cls_MAPs.append(MAP) - print("MMAP", np.mean(cls_MAPs)) + db = Database() + + # evaluate database + APs = evaluate_class(db, f_class=HOG, d_type=d_type, depth=depth) + cls_MAPs = [] + for cls, cls_APs in APs.items(): + MAP = np.mean(cls_APs) + print("Class {}, MAP {}".format(cls, MAP)) + cls_MAPs.append(MAP) + print("MMAP", np.mean(cls_MAPs)) diff --git a/src/__init__.py b/src/__init__.py new file mode 100644 index 0000000..deb63d9 --- /dev/null +++ b/src/__init__.py @@ -0,0 +1,4 @@ +#!/usr/bin/python3 +''' +main package +''' diff --git a/src/color.py b/src/color.py index b46c305..cb46e3c 100644 --- a/src/color.py +++ b/src/color.py @@ -1,24 +1,24 @@ -# -*- coding: utf-8 -*- +# pylint: disable=invalid-name,missing-docstring,exec-used,too-many-arguments,too-few-public-methods,no-self-use,too-many-locals,line-too-long,redefined-builtin,redefined-outer-name,bare-except from __future__ import print_function -from evaluate import distance, evaluate_class -from DB import Database +import itertools +import os -from six.moves import cPickle import numpy as np import scipy.misc -import itertools -import os +from six.moves import cPickle +from src.DB import Database +from src.evaluate import distance, evaluate_class # configs for histogram -n_bin = 12 # histogram bins +n_bin = 12 # histogram bins n_slice = 3 # slice image -h_type = 'region' # global or region -d_type = 'd1' # distance type +h_type = 'region' # global or region +d_type = 'd1' # distance type -depth = 3 # retrieved depth, set to None will count the ap for whole database +depth = 3 # retrieved depth, set to None will count the ap for whole database ''' MMAP depth @@ -31,7 +31,6 @@ depth1, region,bin12,slice3, distance=d1, MMAP 0.62 (exps below use depth=None) - d_type global,bin6,d1,MMAP 0.242345913685 global,bin6,cosine,MMAP 0.184176505586 @@ -60,138 +59,157 @@ # cache dir cache_dir = 'cache' + if not os.path.exists(cache_dir): - os.makedirs(cache_dir) - - -class Color(object): - - def histogram(self, input, n_bin=n_bin, type=h_type, n_slice=n_slice, normalize=True): - ''' count img color histogram - - arguments - input : a path to a image or a numpy.ndarray - n_bin : number of bins for each channel - type : 'global' means count the histogram for whole image - 'region' means count the histogram for regions in images, then concatanate all of them - n_slice : work when type equals to 'region', height & width will equally sliced into N slices - normalize: normalize output histogram - - return - type == 'global' - a numpy array with size n_bin ** channel - type == 'region' - a numpy array with size n_slice * n_slice * (n_bin ** channel) - ''' - if isinstance(input, np.ndarray): # examinate input type - img = input.copy() - else: - img = scipy.misc.imread(input, mode='RGB') - height, width, channel = img.shape - bins = np.linspace(0, 256, n_bin+1, endpoint=True) # slice bins equally for each channel - - if type == 'global': - hist = self._count_hist(img, n_bin, bins, channel) - - elif type == 'region': - hist = np.zeros((n_slice, n_slice, n_bin ** channel)) - h_silce = np.around(np.linspace(0, height, n_slice+1, endpoint=True)).astype(int) - w_slice = np.around(np.linspace(0, width, n_slice+1, endpoint=True)).astype(int) - - for hs in range(len(h_silce)-1): - for ws in range(len(w_slice)-1): - img_r = img[h_silce[hs]:h_silce[hs+1], w_slice[ws]:w_slice[ws+1]] # slice img to regions - hist[hs][ws] = self._count_hist(img_r, n_bin, bins, channel) - - if normalize: - hist /= np.sum(hist) - - return hist.flatten() - - - def _count_hist(self, input, n_bin, bins, channel): - img = input.copy() - bins_idx = {key: idx for idx, key in enumerate(itertools.product(np.arange(n_bin), repeat=channel))} # permutation of bins - hist = np.zeros(n_bin ** channel) - - # cluster every pixels - for idx in range(len(bins)-1): - img[(input >= bins[idx]) & (input < bins[idx+1])] = idx - # add pixels into bins - height, width, _ = img.shape - for h in range(height): - for w in range(width): - b_idx = bins_idx[tuple(img[h,w])] - hist[b_idx] += 1 - - return hist - - - def make_samples(self, db, verbose=True): - if h_type == 'global': - sample_cache = "histogram_cache-{}-n_bin{}".format(h_type, n_bin) - elif h_type == 'region': - sample_cache = "histogram_cache-{}-n_bin{}-n_slice{}".format(h_type, n_bin, n_slice) - - try: - samples = cPickle.load(open(os.path.join(cache_dir, sample_cache), "rb", True)) - if verbose: - print("Using cache..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - except: - if verbose: - print("Counting histogram..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - samples = [] - data = db.get_data() - for d in data.itertuples(): - d_img, d_cls = getattr(d, "img"), getattr(d, "cls") - d_hist = self.histogram(d_img, type=h_type, n_bin=n_bin, n_slice=n_slice) - samples.append({ - 'img': d_img, - 'cls': d_cls, - 'hist': d_hist - }) - cPickle.dump(samples, open(os.path.join(cache_dir, sample_cache), "wb", True)) - - return samples + os.makedirs(cache_dir) + + +class Color: + + def histogram(self, input, n_bin=n_bin, type=h_type, n_slice=n_slice, normalize=True): + ''' count img color histogram + + arguments + input : a path to a image or a numpy.ndarray + n_bin : number of bins for each channel + type : 'global' means count the histogram for whole image + 'region' means count the histogram for regions in images, then concatanate all of them + n_slice : work when type equals to 'region', height & width will equally sliced into N slices + normalize: normalize output histogram + + return + type == 'global' + a numpy array with size n_bin ** channel + type == 'region' + a numpy array with size n_slice * n_slice * (n_bin ** channel) + ''' + + if isinstance(input, np.ndarray): # examinate input type + img = input.copy() + else: + img = scipy.misc.imread(input, mode='RGB') + height, width, channel = img.shape + # slice bins equally for each channel + bins = np.linspace(0, 256, n_bin+1, endpoint=True) + + if type == 'global': + hist = self._count_hist(img, n_bin, bins, channel) + + elif type == 'region': + hist = np.zeros((n_slice, n_slice, n_bin ** channel)) + h_silce = np.around(np.linspace( + 0, height, n_slice+1, endpoint=True)).astype(int) + w_slice = np.around(np.linspace( + 0, width, n_slice+1, endpoint=True)).astype(int) + + for hs in range(len(h_silce)-1): + for ws in range(len(w_slice)-1): + img_r = img[h_silce[hs]:h_silce[hs+1], w_slice[ws] :w_slice[ws+1]] # slice img to regions + hist[hs][ws] = self._count_hist( + img_r, n_bin, bins, channel) + + if normalize: + hist /= np.sum(hist) + + return hist.flatten() + + def _count_hist(self, input, n_bin, bins, channel): + img = input.copy() + bins_idx = {key: idx for idx, key in enumerate(itertools.product( + np.arange(n_bin), repeat=channel))} # permutation of bins + hist = np.zeros(n_bin ** channel) + + # cluster every pixels + + for idx in range(len(bins)-1): + img[(input >= bins[idx]) & (input < bins[idx+1])] = idx + # add pixels into bins + height, width, _ = img.shape + + for h in range(height): + for w in range(width): + b_idx = bins_idx[tuple(img[h, w])] + hist[b_idx] += 1 + + return hist + + def make_samples(self, db, verbose=True): + if h_type == 'global': + sample_cache = "histogram_cache-{}-n_bin{}".format(h_type, n_bin) + elif h_type == 'region': + sample_cache = "histogram_cache-{}-n_bin{}-n_slice{}".format( + h_type, n_bin, n_slice) + + try: + samples = cPickle.load( + open(os.path.join(cache_dir, sample_cache), "rb", True)) + + if verbose: + print("Using cache..., config=%s, distance=%s, depth=%s" % + (sample_cache, d_type, depth)) + except: + if verbose: + print("Counting histogram..., config=%s, distance=%s, depth=%s" % + (sample_cache, d_type, depth)) + samples = [] + data = db.get_data() + + for d in data.itertuples(): + d_img, d_cls = getattr(d, "img"), getattr(d, "cls") + d_hist = self.histogram( + d_img, type=h_type, n_bin=n_bin, n_slice=n_slice) + samples.append({ + 'img': d_img, + 'cls': d_cls, + 'hist': d_hist + }) + cPickle.dump(samples, open(os.path.join( + cache_dir, sample_cache), "wb", True)) + + return samples if __name__ == "__main__": - db = Database() - data = db.get_data() - color = Color() - - # test normalize - hist = color.histogram(data.ix[0,0], type='global') - assert hist.sum() - 1 < 1e-9, "normalize false" - - # test histogram bins - def sigmoid(z): - a = 1.0 / (1.0 + np.exp(-1. * z)) - return a - np.random.seed(0) - IMG = sigmoid(np.random.randn(2,2,3)) * 255 - IMG = IMG.astype(int) - hist = color.histogram(IMG, type='global', n_bin=4) - assert np.equal(np.where(hist > 0)[0], np.array([37, 43, 58, 61])).all(), "global histogram implement failed" - hist = color.histogram(IMG, type='region', n_bin=4, n_slice=2) - assert np.equal(np.where(hist > 0)[0], np.array([58, 125, 165, 235])).all(), "region histogram implement failed" - - # examinate distance - np.random.seed(1) - IMG = sigmoid(np.random.randn(4,4,3)) * 255 - IMG = IMG.astype(int) - hist = color.histogram(IMG, type='region', n_bin=4, n_slice=2) - IMG2 = sigmoid(np.random.randn(4,4,3)) * 255 - IMG2 = IMG2.astype(int) - hist2 = color.histogram(IMG2, type='region', n_bin=4, n_slice=2) - assert distance(hist, hist2, d_type='d1') == 2, "d1 implement failed" - assert distance(hist, hist2, d_type='d2-norm') == 2, "d2 implement failed" - - # evaluate database - APs = evaluate_class(db, f_class=Color, d_type=d_type, depth=depth) - cls_MAPs = [] - for cls, cls_APs in APs.items(): - MAP = np.mean(cls_APs) - print("Class {}, MAP {}".format(cls, MAP)) - cls_MAPs.append(MAP) - print("MMAP", np.mean(cls_MAPs)) + db = Database() + data = db.get_data() + color = Color() + + # test normalize + hist = color.histogram(data.ix[0, 0], type='global') + assert hist.sum() - 1 < 1e-9, "normalize false" + + # test histogram bins + def sigmoid(z): + a = 1.0 / (1.0 + np.exp(-1. * z)) + + return a + np.random.seed(0) + IMG = sigmoid(np.random.randn(2, 2, 3)) * 255 + IMG = IMG.astype(int) + hist = color.histogram(IMG, type='global', n_bin=4) + assert np.equal(np.where(hist > 0)[0], np.array( + [37, 43, 58, 61])).all(), "global histogram implement failed" + hist = color.histogram(IMG, type='region', n_bin=4, n_slice=2) + assert np.equal(np.where(hist > 0)[0], np.array( + [58, 125, 165, 235])).all(), "region histogram implement failed" + + # examinate distance + np.random.seed(1) + IMG = sigmoid(np.random.randn(4, 4, 3)) * 255 + IMG = IMG.astype(int) + hist = color.histogram(IMG, type='region', n_bin=4, n_slice=2) + IMG2 = sigmoid(np.random.randn(4, 4, 3)) * 255 + IMG2 = IMG2.astype(int) + hist2 = color.histogram(IMG2, type='region', n_bin=4, n_slice=2) + assert distance(hist, hist2, d_type='d1') == 2, "d1 implement failed" + assert distance(hist, hist2, d_type='d2-norm') == 2, "d2 implement failed" + + # evaluate database + APs = evaluate_class(db, f_class=Color, d_type=d_type, depth=depth) + cls_MAPs = [] + + for cls, cls_APs in APs.items(): + MAP = np.mean(cls_APs) + print("Class {}, MAP {}".format(cls, MAP)) + cls_MAPs.append(MAP) + print("MMAP", np.mean(cls_MAPs)) diff --git a/src/daisy.py b/src/daisy.py index eddc43d..b26e356 100644 --- a/src/daisy.py +++ b/src/daisy.py @@ -1,31 +1,29 @@ -# -*- coding: utf-8 -*- +# pylint: disable=invalid-name,missing-docstring,exec-used,too-many-arguments,too-few-public-methods,no-self-use,too-many-locals,line-too-long,redefined-builtin,redefined-outer-name,bare-except from __future__ import print_function -from evaluate import evaluate_class -from DB import Database - -from skimage.feature import daisy -from skimage import color +import math +import os -from six.moves import cPickle import numpy as np import scipy.misc -import math - -import os +from six.moves import cPickle +from skimage import color +from skimage.feature import daisy +from src.DB import Database +from src.evaluate import evaluate_class -n_slice = 2 -n_orient = 8 -step = 10 -radius = 30 -rings = 2 +n_slice = 2 +n_orient = 8 +step = 10 +radius = 30 +rings = 2 histograms = 6 -h_type = 'region' -d_type = 'd1' +h_type = 'region' +d_type = 'd1' -depth = 3 +depth = 3 R = (rings * histograms + 1) * n_orient @@ -52,110 +50,123 @@ # cache dir cache_dir = 'cache' + if not os.path.exists(cache_dir): - os.makedirs(cache_dir) - - -class Daisy(object): - - def histogram(self, input, type=h_type, n_slice=n_slice, normalize=True): - ''' count img histogram - - arguments - input : a path to a image or a numpy.ndarray - type : 'global' means count the histogram for whole image - 'region' means count the histogram for regions in images, then concatanate all of them - n_slice : work when type equals to 'region', height & width will equally sliced into N slices - normalize: normalize output histogram - - return - type == 'global' - a numpy array with size R - type == 'region' - a numpy array with size n_slice * n_slice * R - - #R = (rings * histograms + 1) * n_orient# - ''' - if isinstance(input, np.ndarray): # examinate input type - img = input.copy() - else: - img = scipy.misc.imread(input, mode='RGB') - height, width, channel = img.shape - - P = math.ceil((height - radius*2) / step) - Q = math.ceil((width - radius*2) / step) - assert P > 0 and Q > 0, "input image size need to pass this check" - - if type == 'global': - hist = self._daisy(img) - - elif type == 'region': - hist = np.zeros((n_slice, n_slice, R)) - h_silce = np.around(np.linspace(0, height, n_slice+1, endpoint=True)).astype(int) - w_slice = np.around(np.linspace(0, width, n_slice+1, endpoint=True)).astype(int) - - for hs in range(len(h_silce)-1): - for ws in range(len(w_slice)-1): - img_r = img[h_silce[hs]:h_silce[hs+1], w_slice[ws]:w_slice[ws+1]] # slice img to regions - hist[hs][ws] = self._daisy(img_r) - - if normalize: - hist /= np.sum(hist) - - return hist.flatten() - - - def _daisy(self, img, normalize=True): - image = color.rgb2gray(img) - descs = daisy(image, step=step, radius=radius, rings=rings, histograms=histograms, orientations=n_orient) - descs = descs.reshape(-1, R) # shape=(N, R) - hist = np.mean(descs, axis=0) # shape=(R,) - - if normalize: - hist = np.array(hist) / np.sum(hist) - - return hist - - - def make_samples(self, db, verbose=True): - if h_type == 'global': - sample_cache = "daisy-{}-n_orient{}-step{}-radius{}-rings{}-histograms{}".format(h_type, n_orient, step, radius, rings, histograms) - elif h_type == 'region': - sample_cache = "daisy-{}-n_slice{}-n_orient{}-step{}-radius{}-rings{}-histograms{}".format(h_type, n_slice, n_orient, step, radius, rings, histograms) - - try: - samples = cPickle.load(open(os.path.join(cache_dir, sample_cache), "rb", True)) - for sample in samples: - sample['hist'] /= np.sum(sample['hist']) # normalize - if verbose: - print("Using cache..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - except: - if verbose: - print("Counting histogram..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - - samples = [] - data = db.get_data() - for d in data.itertuples(): - d_img, d_cls = getattr(d, "img"), getattr(d, "cls") - d_hist = self.histogram(d_img, type=h_type, n_slice=n_slice) - samples.append({ - 'img': d_img, - 'cls': d_cls, - 'hist': d_hist - }) - cPickle.dump(samples, open(os.path.join(cache_dir, sample_cache), "wb", True)) - - return samples + os.makedirs(cache_dir) + + +class Daisy: + + def histogram(self, input, type=h_type, n_slice=n_slice, normalize=True): + ''' count img histogram + + arguments + input : a path to a image or a numpy.ndarray + type : 'global' means count the histogram for whole image + 'region' means count the histogram for regions in images, then concatanate all of them + n_slice : work when type equals to 'region', height & width will equally sliced into N slices + normalize: normalize output histogram + + return + type == 'global' + a numpy array with size R + type == 'region' + a numpy array with size n_slice * n_slice * R + + #R = (rings * histograms + 1) * n_orient# + ''' + + if isinstance(input, np.ndarray): # examinate input type + img = input.copy() + else: + img = scipy.misc.imread(input, mode='RGB') + height, width, _ = img.shape + + P = math.ceil((height - radius*2) / step) + Q = math.ceil((width - radius*2) / step) + assert P > 0 and Q > 0, "input image size need to pass this check" + + if type == 'global': + hist = self._daisy(img) + + elif type == 'region': + hist = np.zeros((n_slice, n_slice, R)) + h_silce = np.around(np.linspace( + 0, height, n_slice+1, endpoint=True)).astype(int) + w_slice = np.around(np.linspace( + 0, width, n_slice+1, endpoint=True)).astype(int) + + for hs in range(len(h_silce)-1): + for ws in range(len(w_slice)-1): + img_r = img[h_silce[hs]:h_silce[hs+1], w_slice[ws] :w_slice[ws+1]] # slice img to regions + hist[hs][ws] = self._daisy(img_r) + + if normalize: + hist /= np.sum(hist) + + return hist.flatten() + + def _daisy(self, img, normalize=True): + image = color.rgb2gray(img) + descs = daisy(image, step=step, radius=radius, rings=rings, + histograms=histograms, orientations=n_orient) + descs = descs.reshape(-1, R) # shape=(N, R) + hist = np.mean(descs, axis=0) # shape=(R,) + + if normalize: + hist = np.array(hist) / np.sum(hist) + + return hist + + def make_samples(self, db, verbose=True): + if h_type == 'global': + sample_cache = "daisy-{}-n_orient{}-step{}-radius{}-rings{}-histograms{}".format( + h_type, n_orient, step, radius, rings, histograms) + elif h_type == 'region': + sample_cache = "daisy-{}-n_slice{}-n_orient{}-step{}-radius{}-rings{}-histograms{}".format( + h_type, n_slice, n_orient, step, radius, rings, histograms) + + try: + samples = cPickle.load( + open(os.path.join(cache_dir, sample_cache), "rb", True)) + + for sample in samples: + sample['hist'] /= np.sum(sample['hist']) # normalize + + if verbose: + print("Using cache..., config=%s, distance=%s, depth=%s" % + (sample_cache, d_type, depth)) + except: + if verbose: + print("Counting histogram..., config=%s, distance=%s, depth=%s" % + (sample_cache, d_type, depth)) + + samples = [] + data = db.get_data() + + for d in data.itertuples(): + d_img, d_cls = getattr(d, "img"), getattr(d, "cls") + d_hist = self.histogram(d_img, type=h_type, n_slice=n_slice) + samples.append({ + 'img': d_img, + 'cls': d_cls, + 'hist': d_hist + }) + cPickle.dump(samples, open(os.path.join( + cache_dir, sample_cache), "wb", True)) + + return samples if __name__ == "__main__": - db = Database() - - # evaluate database - APs = evaluate_class(db, f_class=Daisy, d_type=d_type, depth=depth) - cls_MAPs = [] - for cls, cls_APs in APs.items(): - MAP = np.mean(cls_APs) - print("Class {}, MAP {}".format(cls, MAP)) - cls_MAPs.append(MAP) - print("MMAP", np.mean(cls_MAPs)) + db = Database() + + # evaluate database + APs = evaluate_class(db, f_class=Daisy, d_type=d_type, depth=depth) + cls_MAPs = [] + + for cls, cls_APs in APs.items(): + MAP = np.mean(cls_APs) + print("Class {}, MAP {}".format(cls, MAP)) + cls_MAPs.append(MAP) + print("MMAP", np.mean(cls_MAPs)) diff --git a/src/edge.py b/src/edge.py index ecd618b..69e0448 100644 --- a/src/edge.py +++ b/src/edge.py @@ -1,25 +1,26 @@ -# -*- coding: utf-8 -*- +# pylint: disable=invalid-name,missing-docstring,exec-used,too-many-arguments,too-few-public-methods,no-self-use,too-many-locals,line-too-long,redefined-builtin,redefined-outer-name,bare-except from __future__ import print_function -from evaluate import evaluate_class -from DB import Database +import os +from math import sqrt -from six.moves import cPickle import numpy as np import scipy.misc -from math import sqrt -import os +from six.moves import cPickle +from src.DB import Database +from src.evaluate import evaluate_class stride = (1, 1) -n_slice = 10 -h_type = 'region' -d_type = 'cosine' +n_slice = 10 +h_type = 'region' +d_type = 'cosine' -depth = 5 +depth = 5 + +''' MMAP -''' MMAP depth depthNone, region-stride(1, 1)-n_slice10,co, MMAP 0.101670982288 depth100, region-stride(1, 1)-n_slice10,co, MMAP 0.207817305128 @@ -28,175 +29,190 @@ depth5, region-stride(1, 1)-n_slice10,co, MMAP 0.367119444444 depth3, region-stride(1, 1)-n_slice10,co, MMAP 0.3585 depth1, region-stride(1, 1)-n_slice10,co, MMAP 0.302 - + (exps below use depth=None) - + d_type global-stride(2, 2),d1, MMAP 0.0530993236031 global-stride(2, 2),co, MMAP 0.0528310744618 - + stride region-stride(2, 2)-n_slice4,d1, MMAP 0.0736245142237 region-stride(1, 1)-n_slice4,d1, MMAP 0.0704206226545 - + n_slice region-stride(1, 1)-n_slice10,co, MMAP 0.101670982288 region-stride(1, 1)-n_slice6,co, MMAP 0.0977736743859 - + h_type global-stride(2, 2),d1, MMAP 0.0530993236031 region-stride(2, 2)-n_slice4,d1, MMAP 0.0736245142237 ''' edge_kernels = np.array([ - [ - # vertical - [1,-1], - [1,-1] - ], - [ - # horizontal - [1,1], - [-1,-1] - ], - [ - # 45 diagonal - [sqrt(2),0], - [0,-sqrt(2)] - ], - [ - # 135 diagnol - [0,sqrt(2)], - [-sqrt(2),0] - ], - [ - # non-directional - [2,-2], - [-2,2] - ] + [ + # vertical + [1, -1], + [1, -1] + ], + [ + # horizontal + [1, 1], + [-1, -1] + ], + [ + # 45 diagonal + [sqrt(2), 0], + [0, -sqrt(2)] + ], + [ + # 135 diagnol + [0, sqrt(2)], + [-sqrt(2), 0] + ], + [ + # non-directional + [2, -2], + [-2, 2] + ] ]) # cache dir cache_dir = 'cache' + if not os.path.exists(cache_dir): - os.makedirs(cache_dir) - - -class Edge(object): - - def histogram(self, input, stride=(2, 2), type=h_type, n_slice=n_slice, normalize=True): - ''' count img histogram - - arguments - input : a path to a image or a numpy.ndarray - stride : stride of edge kernel - type : 'global' means count the histogram for whole image - 'region' means count the histogram for regions in images, then concatanate all of them - n_slice : work when type equals to 'region', height & width will equally sliced into N slices - normalize: normalize output histogram - - return - type == 'global' - a numpy array with size len(edge_kernels) - type == 'region' - a numpy array with size len(edge_kernels) * n_slice * n_slice - ''' - if isinstance(input, np.ndarray): # examinate input type - img = input.copy() - else: - img = scipy.misc.imread(input, mode='RGB') - height, width, channel = img.shape - - if type == 'global': - hist = self._conv(img, stride=stride, kernels=edge_kernels) - - elif type == 'region': - hist = np.zeros((n_slice, n_slice, edge_kernels.shape[0])) - h_silce = np.around(np.linspace(0, height, n_slice+1, endpoint=True)).astype(int) - w_slice = np.around(np.linspace(0, width, n_slice+1, endpoint=True)).astype(int) - - for hs in range(len(h_silce)-1): - for ws in range(len(w_slice)-1): - img_r = img[h_silce[hs]:h_silce[hs+1], w_slice[ws]:w_slice[ws+1]] # slice img to regions - hist[hs][ws] = self._conv(img_r, stride=stride, kernels=edge_kernels) - - if normalize: - hist /= np.sum(hist) - - return hist.flatten() - - - def _conv(self, img, stride, kernels, normalize=True): - H, W, C = img.shape - conv_kernels = np.expand_dims(kernels, axis=3) - conv_kernels = np.tile(conv_kernels, (1, 1, 1, C)) - assert list(conv_kernels.shape) == list(kernels.shape) + [C] # check kernels size - - sh, sw = stride - kn, kh, kw, kc = conv_kernels.shape - - hh = int((H - kh) / sh + 1) - ww = int((W - kw) / sw + 1) - - hist = np.zeros(kn) - - for idx, k in enumerate(conv_kernels): - for h in range(hh): - hs = int(h*sh) - he = int(h*sh + kh) - for w in range(ww): - ws = w*sw - we = w*sw + kw - hist[idx] += np.sum(img[hs:he, ws:we] * k) # element-wise product - - if normalize: - hist /= np.sum(hist) - - return hist - - - def make_samples(self, db, verbose=True): - if h_type == 'global': - sample_cache = "edge-{}-stride{}".format(h_type, stride) - elif h_type == 'region': - sample_cache = "edge-{}-stride{}-n_slice{}".format(h_type, stride, n_slice) - - try: - samples = cPickle.load(open(os.path.join(cache_dir, sample_cache), "rb", True)) - for sample in samples: - sample['hist'] /= np.sum(sample['hist']) # normalize - if verbose: - print("Using cache..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - except: - if verbose: - print("Counting histogram..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - - samples = [] - data = db.get_data() - for d in data.itertuples(): - d_img, d_cls = getattr(d, "img"), getattr(d, "cls") - d_hist = self.histogram(d_img, type=h_type, n_slice=n_slice) - samples.append({ - 'img': d_img, - 'cls': d_cls, - 'hist': d_hist - }) - cPickle.dump(samples, open(os.path.join(cache_dir, sample_cache), "wb", True)) - - return samples + os.makedirs(cache_dir) + + +class Edge: + + def histogram(self, input, stride=(2, 2), type=h_type, n_slice=n_slice, normalize=True): + ''' count img histogram + + arguments + input : a path to a image or a numpy.ndarray + stride : stride of edge kernel + type : 'global' means count the histogram for whole image + 'region' means count the histogram for regions in images, then concatanate all of them + n_slice : work when type equals to 'region', height & width will equally sliced into N slices + normalize: normalize output histogram + + return + type == 'global' + a numpy array with size len(edge_kernels) + type == 'region' + a numpy array with size len(edge_kernels) * n_slice * n_slice + ''' + + if isinstance(input, np.ndarray): # examinate input type + img = input.copy() + else: + img = scipy.misc.imread(input, mode='RGB') + height, width, _ = img.shape + + if type == 'global': + hist = self._conv(img, stride=stride, kernels=edge_kernels) + + elif type == 'region': + hist = np.zeros((n_slice, n_slice, edge_kernels.shape[0])) + h_silce = np.around(np.linspace( + 0, height, n_slice+1, endpoint=True)).astype(int) + w_slice = np.around(np.linspace( + 0, width, n_slice+1, endpoint=True)).astype(int) + + for hs in range(len(h_silce)-1): + for ws in range(len(w_slice)-1): + img_r = img[h_silce[hs]:h_silce[hs+1], w_slice[ws] :w_slice[ws+1]] # slice img to regions + hist[hs][ws] = self._conv( + img_r, stride=stride, kernels=edge_kernels) + + if normalize: + hist /= np.sum(hist) + + return hist.flatten() + + def _conv(self, img, stride, kernels, normalize=True): + H, W, C = img.shape + conv_kernels = np.expand_dims(kernels, axis=3) + conv_kernels = np.tile(conv_kernels, (1, 1, 1, C)) + assert list(conv_kernels.shape) == list( + kernels.shape) + [C] # check kernels size + + sh, sw = stride + kn, kh, kw, _ = conv_kernels.shape + + hh = int((H - kh) / sh + 1) + ww = int((W - kw) / sw + 1) + + hist = np.zeros(kn) + + for idx, k in enumerate(conv_kernels): + for h in range(hh): + hs = int(h*sh) + he = int(h*sh + kh) + + for w in range(ww): + ws = w*sw + we = w*sw + kw + # element-wise product + hist[idx] += np.sum(img[hs:he, ws:we] * k) + + if normalize: + hist /= np.sum(hist) + + return hist + + def make_samples(self, db, verbose=True): + if h_type == 'global': + sample_cache = "edge-{}-stride{}".format(h_type, stride) + elif h_type == 'region': + sample_cache = "edge-{}-stride{}-n_slice{}".format( + h_type, stride, n_slice) + + try: + samples = cPickle.load( + open(os.path.join(cache_dir, sample_cache), "rb", True)) + + for sample in samples: + sample['hist'] /= np.sum(sample['hist']) # normalize + + if verbose: + print("Using cache..., config=%s, distance=%s, depth=%s" % + (sample_cache, d_type, depth)) + except: + if verbose: + print("Counting histogram..., config=%s, distance=%s, depth=%s" % + (sample_cache, d_type, depth)) + + samples = [] + data = db.get_data() + + for d in data.itertuples(): + d_img, d_cls = getattr(d, "img"), getattr(d, "cls") + d_hist = self.histogram(d_img, type=h_type, n_slice=n_slice) + samples.append({ + 'img': d_img, + 'cls': d_cls, + 'hist': d_hist + }) + cPickle.dump(samples, open(os.path.join( + cache_dir, sample_cache), "wb", True)) + + return samples if __name__ == "__main__": - db = Database() - - # check shape - assert edge_kernels.shape == (5, 2, 2) - - # evaluate database - APs = evaluate_class(db, f_class=Edge, d_type=d_type, depth=depth) - cls_MAPs = [] - for cls, cls_APs in APs.items(): - MAP = np.mean(cls_APs) - print("Class {}, MAP {}".format(cls, MAP)) - cls_MAPs.append(MAP) - print("MMAP", np.mean(cls_MAPs)) + db = Database() + + # check shape + assert edge_kernels.shape == (5, 2, 2) + + # evaluate database + APs = evaluate_class(db, f_class=Edge, d_type=d_type, depth=depth) + cls_MAPs = [] + + for cls, cls_APs in APs.items(): + MAP = np.mean(cls_APs) + print("Class {}, MAP {}".format(cls, MAP)) + cls_MAPs.append(MAP) + print("MMAP", np.mean(cls_MAPs)) diff --git a/src/evaluate.py b/src/evaluate.py index a5bd656..83af158 100644 --- a/src/evaluate.py +++ b/src/evaluate.py @@ -1,152 +1,166 @@ -# -*- coding: utf-8 -*- +# pylint: disable=invalid-name,missing-docstring,exec-used,too-many-arguments,too-few-public-methods,no-self-use,too-many-return-statements,too-many-locals from __future__ import print_function -from scipy import spatial import numpy as np +from scipy import spatial -class Evaluation(object): +class Evaluation: - def make_samples(self): - raise NotImplementedError("Needs to implemented this method") + def make_samples(self): + raise NotImplementedError("Needs to implemented this method") def distance(v1, v2, d_type='d1'): - assert v1.shape == v2.shape, "shape of two vectors need to be same!" - - if d_type == 'd1': - return np.sum(np.absolute(v1 - v2)) - elif d_type == 'd2': - return np.sum((v1 - v2) ** 2) - elif d_type == 'd2-norm': - return 2 - 2 * np.dot(v1, v2) - elif d_type == 'd3': - pass - elif d_type == 'd4': - pass - elif d_type == 'd5': - pass - elif d_type == 'd6': - pass - elif d_type == 'd7': - return 2 - 2 * np.dot(v1, v2) - elif d_type == 'd8': - return 2 - 2 * np.dot(v1, v2) - elif d_type == 'cosine': - return spatial.distance.cosine(v1, v2) - elif d_type == 'square': - return np.sum((v1 - v2) ** 2) + assert v1.shape == v2.shape, "shape of two vectors need to be same!" + + if d_type == 'd1': + return np.sum(np.absolute(v1 - v2)) + if d_type == 'd2': + return np.sum((v1 - v2) ** 2) + if d_type == 'd2-norm': + return 2 - 2 * np.dot(v1, v2) + if d_type == 'd3': + pass + if d_type == 'd4': + pass + if d_type == 'd5': + pass + if d_type == 'd6': + pass + if d_type == 'd7': + return 2 - 2 * np.dot(v1, v2) + if d_type == 'd8': + return 2 - 2 * np.dot(v1, v2) + if d_type == 'cosine': + return spatial.distance.cosine(v1, v2) + if d_type == 'square': + return np.sum((v1 - v2) ** 2) + + return 0 def AP(label, results, sort=True): - ''' infer a query, return it's ap - - arguments - label : query's class - results: a dict with two keys, see the example below - { - 'dis': , - 'cls': - } - sort : sort the results by distance - ''' - if sort: - results = sorted(results, key=lambda x: x['dis']) - precision = [] - hit = 0 - for i, result in enumerate(results): - if result['cls'] == label: - hit += 1 - precision.append(hit / (i+1.)) - if hit == 0: - return 0. - return np.mean(precision) + ''' infer a query, return it's ap + + arguments + label : query's class + results: a dict with two keys, see the example below + { + 'dis': , + 'cls': + } + sort : sort the results by distance + ''' + + if sort: + results = sorted(results, key=lambda x: x['dis']) + precision = [] + hit = 0 + + for i, result in enumerate(results): + if result['cls'] == label: + hit += 1 + precision.append(hit / (i+1.)) + + if hit == 0: + return 0. + + return np.mean(precision) def infer(query, samples=None, db=None, sample_db_fn=None, depth=None, d_type='d1'): - ''' infer a query, return it's ap - - arguments - query : a dict with three keys, see the template - { - 'img': , - 'cls': , - 'hist' - } - samples : a list of { - 'img': , - 'cls': , - 'hist' - } - db : an instance of class Database - sample_db_fn: a function making samples, should be given if Database != None - depth : retrieved depth during inference, the default depth is equal to database size - d_type : distance type - ''' - assert samples != None or (db != None and sample_db_fn != None), "need to give either samples or db plus sample_db_fn" - if db: - samples = sample_db_fn(db) + ''' infer a query, return it's ap + + arguments + query : a dict with three keys, see the template + { + 'img': , + 'cls': , + 'hist' + } + samples : a list of { + 'img': , + 'cls': , + 'hist' + } + db : an instance of class Database + sample_db_fn: a function making samples, should be given if Database != None + depth : retrieved depth during inference, the default depth is equal to database size + d_type : distance type + ''' + assert samples is not None or (db is not None and sample_db_fn is not + None), "need to give either samples or db plus sample_db_fn" + + if db: + samples = sample_db_fn(db) + + q_img, q_cls, q_hist = query['img'], query['cls'], query['hist'] + results = [] + + for _, sample in enumerate(samples): + s_img, s_cls, s_hist = sample['img'], sample['cls'], sample['hist'] + + if q_img == s_img: + continue + results.append({ + 'img': s_img, + 'dis': distance(q_hist, s_hist, d_type=d_type), + 'cls': s_cls + }) + results = sorted(results, key=lambda x: x['dis']) - q_img, q_cls, q_hist = query['img'], query['cls'], query['hist'] - results = [] - for idx, sample in enumerate(samples): - s_img, s_cls, s_hist = sample['img'], sample['cls'], sample['hist'] - if q_img == s_img: - continue - results.append({ - 'dis': distance(q_hist, s_hist, d_type=d_type), - 'cls': s_cls - }) - results = sorted(results, key=lambda x: x['dis']) - if depth and depth <= len(results): - results = results[:depth] - ap = AP(q_cls, results, sort=False) + if depth and depth <= len(results): + results = results[:depth] + ap = AP(q_cls, results, sort=False) - return ap, results + return ap, results def evaluate(db, sample_db_fn, depth=None, d_type='d1'): - ''' infer the whole database + ''' infer the whole database + + arguments + db : an instance of class Database + sample_db_fn: a function making samples, should be given if Database != None + depth : retrieved depth during inference, the default depth is equal to database size + d_type : distance type + ''' + classes = db.get_class() + ret = {c: [] for c in classes} - arguments - db : an instance of class Database - sample_db_fn: a function making samples, should be given if Database != None - depth : retrieved depth during inference, the default depth is equal to database size - d_type : distance type - ''' - classes = db.get_class() - ret = {c: [] for c in classes} + samples = sample_db_fn(db) - samples = sample_db_fn(db) - for query in samples: - ap, _ = infer(query, samples=samples, depth=depth, d_type=d_type) - ret[query['cls']].append(ap) + for query in samples: + ap, _ = infer(query, samples=samples, depth=depth, d_type=d_type) + ret[query['cls']].append(ap) - return ret + return ret def evaluate_class(db, f_class=None, f_instance=None, depth=None, d_type='d1'): - ''' infer the whole database - - arguments - db : an instance of class Database - f_class: a class that generate features, needs to implement make_samples method - depth : retrieved depth during inference, the default depth is equal to database size - d_type : distance type - ''' - assert f_class or f_instance, "needs to give class_name or an instance of class" - - classes = db.get_class() - ret = {c: [] for c in classes} - - if f_class: - f = f_class() - elif f_instance: - f = f_instance - samples = f.make_samples(db) - for query in samples: - ap, _ = infer(query, samples=samples, depth=depth, d_type=d_type) - ret[query['cls']].append(ap) - - return ret + ''' infer the whole database + + arguments + db : an instance of class Database + f_class: a class that generate features, needs to implement make_samples method + depth : retrieved depth during inference, the default depth is equal to database size + d_type : distance type + ''' + assert f_class or f_instance, "needs to give class_name or an instance of class" + + classes = db.get_class() + ret = {c: [] for c in classes} + + if f_class: + f = f_class() + elif f_instance: + f = f_instance + samples = f.make_samples(db) + + for query in samples: + ap, _ = infer(query, samples=samples, depth=depth, d_type=d_type) + ret[query['cls']].append(ap) + + return ret diff --git a/src/fusion.py b/src/fusion.py index 08b440b..fcee708 100644 --- a/src/fusion.py +++ b/src/fusion.py @@ -1,147 +1,165 @@ -# -*- coding: utf-8 -*- +# pylint: disable=invalid-name,missing-docstring,exec-used,too-many-arguments,too-few-public-methods,no-self-use,too-many-locals,line-too-long,redefined-builtin,redefined-outer-name,bare-except,unused-argument from __future__ import print_function -from evaluate import evaluate_class -from DB import Database - -from color import Color -from daisy import Daisy -from edge import Edge -from gabor import Gabor -from HOG import HOG -from vggnet import VGGNetFeat -from resnet import ResNetFeat - -import numpy as np import itertools import os +import numpy as np + +from src.color import Color +from src.daisy import Daisy +from src.DB import Database +from src.edge import Edge +from src.evaluate import evaluate_class +from src.gabor import Gabor +from src.HOG import HOG +from src.resnet import ResNetFeat +from src.vggnet import VGGNetFeat -d_type = 'd1' -depth = 30 +d_type = 'd1' +depth = 30 feat_pools = ['color', 'daisy', 'edge', 'gabor', 'hog', 'vgg', 'res'] # result dir result_dir = 'result' + if not os.path.exists(result_dir): - os.makedirs(result_dir) - - -class FeatureFusion(object): - - def __init__(self, features): - assert len(features) > 1, "need to fuse more than one feature!" - self.features = features - self.samples = None - - def make_samples(self, db, verbose=False): - if verbose: - print("Use features {}".format(" & ".join(self.features))) - - if self.samples == None: - feats = [] - for f_class in self.features: - feats.append(self._get_feat(db, f_class)) - samples = self._concat_feat(db, feats) - self.samples = samples # cache the result - return self.samples - - def _get_feat(self, db, f_class): - if f_class == 'color': - f_c = Color() - elif f_class == 'daisy': - f_c = Daisy() - elif f_class == 'edge': - f_c = Edge() - elif f_class == 'gabor': - f_c = Gabor() - elif f_class == 'hog': - f_c = HOG() - elif f_class == 'vgg': - f_c = VGGNetFeat() - elif f_class == 'res': - f_c = ResNetFeat() - return f_c.make_samples(db, verbose=False) - - def _concat_feat(self, db, feats): - samples = feats[0] - delete_idx = [] - for idx in range(len(samples)): - for feat in feats[1:]: - feat = self._to_dict(feat) - key = samples[idx]['img'] - if key not in feat: - delete_idx.append(idx) - continue - assert feat[key]['cls'] == samples[idx]['cls'] - samples[idx]['hist'] = np.append(samples[idx]['hist'], feat[key]['hist']) - for d_idx in sorted(set(delete_idx), reverse=True): - del samples[d_idx] - if delete_idx != []: - print("Ignore %d samples" % len(set(delete_idx))) - - return samples - - def _to_dict(self, feat): - ret = {} - for f in feat: - ret[f['img']] = { - 'cls': f['cls'], - 'hist': f['hist'] - } - return ret + os.makedirs(result_dir) + + +class FeatureFusion: + + def __init__(self, features): + assert len(features) > 1, "need to fuse more than one feature!" + self.features = features + self.samples = None + + def make_samples(self, db, verbose=False): + if verbose: + print("Use features {}".format(" & ".join(self.features))) + + if self.samples is None: + feats = [] + + for f_class in self.features: + feats.append(self._get_feat(db, f_class)) + samples = self._concat_feat(db, feats) + self.samples = samples # cache the result + + return self.samples + + def _get_feat(self, db, f_class): + if f_class == 'color': + f_c = Color() + elif f_class == 'daisy': + f_c = Daisy() + elif f_class == 'edge': + f_c = Edge() + elif f_class == 'gabor': + f_c = Gabor() + elif f_class == 'hog': + f_c = HOG() + elif f_class == 'vgg': + f_c = VGGNetFeat() + elif f_class == 'res': + f_c = ResNetFeat() + + return f_c.make_samples(db, verbose=False) + + def _concat_feat(self, db, feats): + samples = feats[0] + delete_idx = [] + + for idx in range(len(samples)): + for feat in feats[1:]: + feat = self._to_dict(feat) + key = samples[idx]['img'] + + if key not in feat: + delete_idx.append(idx) + + continue + assert feat[key]['cls'] == samples[idx]['cls'] + samples[idx]['hist'] = np.append( + samples[idx]['hist'], feat[key]['hist']) + + for d_idx in sorted(set(delete_idx), reverse=True): + del samples[d_idx] + + if delete_idx != []: + print("Ignore %d samples" % len(set(delete_idx))) + + return samples + + def _to_dict(self, feat): + ret = {} + + for f in feat: + ret[f['img']] = { + 'cls': f['cls'], + 'hist': f['hist'] + } + + return ret def evaluate_feats(db, N, feat_pools=feat_pools, d_type='d1', depths=[None, 300, 200, 100, 50, 30, 10, 5, 3, 1]): - result = open(os.path.join(result_dir, 'feature_fusion-{}-{}feats.csv'.format(d_type, N)), 'w') - for i in range(N): - result.write("feat{},".format(i)) - result.write("depth,distance,MMAP") - combinations = itertools.combinations(feat_pools, N) - for combination in combinations: - fusion = FeatureFusion(features=list(combination)) - for d in depths: - APs = evaluate_class(db, f_instance=fusion, d_type=d_type, depth=d) - cls_MAPs = [] - for cls, cls_APs in APs.items(): - MAP = np.mean(cls_APs) - cls_MAPs.append(MAP) - r = "{},{},{},{}".format(",".join(combination), d, d_type, np.mean(cls_MAPs)) - print(r) - result.write('\n'+r) - print() - result.close() + result = open(os.path.join( + result_dir, 'feature_fusion-{}-{}feats.csv'.format(d_type, N)), 'w') + + for i in range(N): + result.write("feat{},".format(i)) + result.write("depth,distance,MMAP") + combinations = itertools.combinations(feat_pools, N) + + for combination in combinations: + fusion = FeatureFusion(features=list(combination)) + + for d in depths: + APs = evaluate_class(db, f_instance=fusion, d_type=d_type, depth=d) + cls_MAPs = [] + + for cls, cls_APs in APs.items(): + MAP = np.mean(cls_APs) + cls_MAPs.append(MAP) + r = "{},{},{},{}".format( + ",".join(combination), d, d_type, np.mean(cls_MAPs)) + print(r) + result.write('\n'+r) + print() + result.close() if __name__ == "__main__": - db = Database() - - # evaluate features double-wise - evaluate_feats(db, N=2, d_type='d1') - - # evaluate features triple-wise - evaluate_feats(db, N=3, d_type='d1') - - # evaluate features quadra-wise - evaluate_feats(db, N=4, d_type='d1') - - # evaluate features penta-wise - evaluate_feats(db, N=5, d_type='d1') - - # evaluate features hexa-wise - evaluate_feats(db, N=6, d_type='d1') - - # evaluate features hepta-wise - evaluate_feats(db, N=7, d_type='d1') - - # evaluate database - fusion = FeatureFusion(features=['color', 'daisy']) - APs = evaluate_class(db, f_instance=fusion, d_type=d_type, depth=depth) - cls_MAPs = [] - for cls, cls_APs in APs.items(): - MAP = np.mean(cls_APs) - print("Class {}, MAP {}".format(cls, MAP)) - cls_MAPs.append(MAP) - print("MMAP", np.mean(cls_MAPs)) + db = Database() + + # evaluate features double-wise + evaluate_feats(db, N=2, d_type='d1') + + # evaluate features triple-wise + evaluate_feats(db, N=3, d_type='d1') + + # evaluate features quadra-wise + evaluate_feats(db, N=4, d_type='d1') + + # evaluate features penta-wise + evaluate_feats(db, N=5, d_type='d1') + + # evaluate features hexa-wise + evaluate_feats(db, N=6, d_type='d1') + + # evaluate features hepta-wise + evaluate_feats(db, N=7, d_type='d1') + + # evaluate database + fusion = FeatureFusion(features=['color', 'daisy']) + APs = evaluate_class(db, f_instance=fusion, d_type=d_type, depth=depth) + cls_MAPs = [] + + for cls, cls_APs in APs.items(): + MAP = np.mean(cls_APs) + print("Class {}, MAP {}".format(cls, MAP)) + cls_MAPs.append(MAP) + print("MMAP", np.mean(cls_MAPs)) diff --git a/src/gabor.py b/src/gabor.py index a38f8dc..97137c2 100644 --- a/src/gabor.py +++ b/src/gabor.py @@ -1,32 +1,30 @@ -# -*- coding: utf-8 -*- +# pylint: disable=invalid-name,missing-docstring,exec-used,too-many-arguments,too-few-public-methods,no-self-use,too-many-locals,line-too-long,redefined-builtin,redefined-outer-name,bare-except,unused-wildcard-import,wildcard-import from __future__ import print_function -from evaluate import * -from DB import Database - -from skimage.filters import gabor_kernel -from skimage import color -from scipy import ndimage as ndi - import multiprocessing +import os -from six.moves import cPickle import numpy as np import scipy.misc -import os +from scipy import ndimage as ndi +from six.moves import cPickle +from skimage import color +from skimage.filters import gabor_kernel +from src.DB import Database +from src.evaluate import * -theta = 4 +theta = 4 frequency = (0.1, 0.5, 0.8) -sigma = (1, 3, 5) +sigma = (1, 3, 5) bandwidth = (0.3, 0.7, 1) -n_slice = 2 -h_type = 'global' -d_type = 'cosine' +n_slice = 2 +h_type = 'global' +d_type = 'cosine' -depth = 1 +depth = 1 ''' MMAP depth @@ -50,180 +48,192 @@ gabor-global-theta4-frequency(0.1, 0.5, 1)-sigma(0.25, 1)-bandwidth(0.5, 1), distance=cosine, MMAP 0.120351804156 ''' + def make_gabor_kernel(theta, frequency, sigma, bandwidth): - kernels = [] - for t in range(theta): - t = t / float(theta) * np.pi - for f in frequency: - if sigma: - for s in sigma: - kernel = gabor_kernel(f, theta=t, sigma_x=s, sigma_y=s) - kernels.append(kernel) - if bandwidth: - for b in bandwidth: - kernel = gabor_kernel(f, theta=t, bandwidth=b) - kernels.append(kernel) - return kernels + kernels = [] + for t in range(theta): + t = t / float(theta) * np.pi + for f in frequency: + if sigma: + for s in sigma: + kernel = gabor_kernel(f, theta=t, sigma_x=s, sigma_y=s) + kernels.append(kernel) + if bandwidth: + for b in bandwidth: + kernel = gabor_kernel(f, theta=t, bandwidth=b) + kernels.append(kernel) + return kernels + gabor_kernels = make_gabor_kernel(theta, frequency, sigma, bandwidth) if sigma and not bandwidth: - assert len(gabor_kernels) == theta * len(frequency) * len(sigma), "kernel nums error in make_gabor_kernel()" + assert len(gabor_kernels) == theta * len(frequency) * \ + len(sigma), "kernel nums error in make_gabor_kernel()" elif not sigma and bandwidth: - assert len(gabor_kernels) == theta * len(frequency) * len(bandwidth), "kernel nums error in make_gabor_kernel()" + assert len(gabor_kernels) == theta * len(frequency) * \ + len(bandwidth), "kernel nums error in make_gabor_kernel()" elif sigma and bandwidth: - assert len(gabor_kernels) == theta * len(frequency) * (len(sigma) + len(bandwidth)), "kernel nums error in make_gabor_kernel()" + assert len(gabor_kernels) == theta * len(frequency) * (len(sigma) + + len(bandwidth)), "kernel nums error in make_gabor_kernel()" elif not sigma and not bandwidth: - assert len(gabor_kernels) == theta * len(frequency), "kernel nums error in make_gabor_kernel()" + assert len(gabor_kernels) == theta * \ + len(frequency), "kernel nums error in make_gabor_kernel()" # cache dir cache_dir = 'cache' if not os.path.exists(cache_dir): - os.makedirs(cache_dir) - - -class Gabor(object): - - def gabor_histogram(self, input, type=h_type, n_slice=n_slice, normalize=True): - ''' count img histogram - - arguments - input : a path to a image or a numpy.ndarray - type : 'global' means count the histogram for whole image - 'region' means count the histogram for regions in images, then concatanate all of them - n_slice : work when type equals to 'region', height & width will equally sliced into N slices - normalize: normalize output histogram - - return - type == 'global' - a numpy array with size len(gabor_kernels) - type == 'region' - a numpy array with size len(gabor_kernels) * n_slice * n_slice - ''' - if isinstance(input, np.ndarray): # examinate input type - img = input.copy() - else: - img = scipy.misc.imread(input, mode='RGB') - height, width, channel = img.shape - - if type == 'global': - hist = self._gabor(img, kernels=gabor_kernels) - - elif type == 'region': - hist = np.zeros((n_slice, n_slice, len(gabor_kernels))) - h_silce = np.around(np.linspace(0, height, n_slice+1, endpoint=True)).astype(int) - w_slice = np.around(np.linspace(0, width, n_slice+1, endpoint=True)).astype(int) - - for hs in range(len(h_silce)-1): - for ws in range(len(w_slice)-1): - img_r = img[h_silce[hs]:h_silce[hs+1], w_slice[ws]:w_slice[ws+1]] # slice img to regions - hist[hs][ws] = self._gabor(img_r, kernels=gabor_kernels) - - if normalize: - hist /= np.sum(hist) - - return hist.flatten() - - - def _feats(self, image, kernel): - ''' - arguments - image : ndarray of the image - kernel: a gabor kernel - return - a ndarray whose shape is (2, ) - ''' - feats = np.zeros(2, dtype=np.double) - filtered = ndi.convolve(image, np.real(kernel), mode='wrap') - feats[0] = filtered.mean() - feats[1] = filtered.var() - return feats - - - def _power(self, image, kernel): - ''' - arguments - image : ndarray of the image - kernel: a gabor kernel - return - a ndarray whose shape is (2, ) - ''' - image = (image - image.mean()) / image.std() # Normalize images for better comparison. - f_img = np.sqrt(ndi.convolve(image, np.real(kernel), mode='wrap')**2 + - ndi.convolve(image, np.imag(kernel), mode='wrap')**2) - feats = np.zeros(2, dtype=np.double) - feats[0] = f_img.mean() - feats[1] = f_img.var() - return feats - - - def _gabor(self, image, kernels=make_gabor_kernel(theta, frequency, sigma, bandwidth), normalize=True): - pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) - - img = color.rgb2gray(image) - - results = [] - feat_fn = self._power - for kernel in kernels: - results.append(pool.apply_async(self._worker, (img, kernel, feat_fn))) - pool.close() - pool.join() - - hist = np.array([res.get() for res in results]) - - if normalize: - hist = hist / np.sum(hist, axis=0) - - return hist.T.flatten() - - - def _worker(self, img, kernel, feat_fn): - try: - ret = feat_fn(img, kernel) - except: - print("return zero") - ret = np.zeros(2) - return ret - - - def make_samples(self, db, verbose=True): - if h_type == 'global': - sample_cache = "gabor-{}-theta{}-frequency{}-sigma{}-bandwidth{}".format(h_type, theta, frequency, sigma, bandwidth) - elif h_type == 'region': - sample_cache = "gabor-{}-n_slice{}-theta{}-frequency{}-sigma{}-bandwidth{}".format(h_type, n_slice, theta, frequency, sigma, bandwidth) - - try: - samples = cPickle.load(open(os.path.join(cache_dir, sample_cache), "rb", True)) - for sample in samples: - sample['hist'] /= np.sum(sample['hist']) # normalize - if verbose: - print("Using cache..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - except: - if verbose: - print("Counting histogram..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - - samples = [] - data = db.get_data() - for d in data.itertuples(): - d_img, d_cls = getattr(d, "img"), getattr(d, "cls") - d_hist = self.gabor_histogram(d_img, type=h_type, n_slice=n_slice) - samples.append({ - 'img': d_img, - 'cls': d_cls, - 'hist': d_hist - }) - cPickle.dump(samples, open(os.path.join(cache_dir, sample_cache), "wb", True)) - - return samples + os.makedirs(cache_dir) + + +class Gabor: + + def gabor_histogram(self, input, type=h_type, n_slice=n_slice, normalize=True): + ''' count img histogram + + arguments + input : a path to a image or a numpy.ndarray + type : 'global' means count the histogram for whole image + 'region' means count the histogram for regions in images, then concatanate all of them + n_slice : work when type equals to 'region', height & width will equally sliced into N slices + normalize: normalize output histogram + + return + type == 'global' + a numpy array with size len(gabor_kernels) + type == 'region' + a numpy array with size len(gabor_kernels) * n_slice * n_slice + ''' + if isinstance(input, np.ndarray): # examinate input type + img = input.copy() + else: + img = scipy.misc.imread(input, mode='RGB') + height, width, _ = img.shape + + if type == 'global': + hist = self._gabor(img, kernels=gabor_kernels) + + elif type == 'region': + hist = np.zeros((n_slice, n_slice, len(gabor_kernels))) + h_silce = np.around(np.linspace( + 0, height, n_slice+1, endpoint=True)).astype(int) + w_slice = np.around(np.linspace( + 0, width, n_slice+1, endpoint=True)).astype(int) + + for hs in range(len(h_silce)-1): + for ws in range(len(w_slice)-1): + img_r = img[h_silce[hs]:h_silce[hs+1], w_slice[ws] :w_slice[ws+1]] # slice img to regions + hist[hs][ws] = self._gabor(img_r, kernels=gabor_kernels) + + if normalize: + hist /= np.sum(hist) + + return hist.flatten() + + def _feats(self, image, kernel): + ''' + arguments + image : ndarray of the image + kernel: a gabor kernel + return + a ndarray whose shape is (2, ) + ''' + feats = np.zeros(2, dtype=np.double) + filtered = ndi.convolve(image, np.real(kernel), mode='wrap') + feats[0] = filtered.mean() + feats[1] = filtered.var() + return feats + + def _power(self, image, kernel): + ''' + arguments + image : ndarray of the image + kernel: a gabor kernel + return + a ndarray whose shape is (2, ) + ''' + image = (image - image.mean()) / \ + image.std() # Normalize images for better comparison. + f_img = np.sqrt(ndi.convolve(image, np.real(kernel), mode='wrap')**2 + + ndi.convolve(image, np.imag(kernel), mode='wrap')**2) + feats = np.zeros(2, dtype=np.double) + feats[0] = f_img.mean() + feats[1] = f_img.var() + return feats + + def _gabor(self, image, kernels=make_gabor_kernel(theta, frequency, sigma, bandwidth), normalize=True): + pool = multiprocessing.Pool(processes=multiprocessing.cpu_count()) + + img = color.rgb2gray(image) + + results = [] + feat_fn = self._power + for kernel in kernels: + results.append(pool.apply_async( + self._worker, (img, kernel, feat_fn))) + pool.close() + pool.join() + + hist = np.array([res.get() for res in results]) + + if normalize: + hist = hist / np.sum(hist, axis=0) + + return hist.T.flatten() + + def _worker(self, img, kernel, feat_fn): + try: + ret = feat_fn(img, kernel) + except: + print("return zero") + ret = np.zeros(2) + return ret + + def make_samples(self, db, verbose=True): + if h_type == 'global': + sample_cache = "gabor-{}-theta{}-frequency{}-sigma{}-bandwidth{}".format( + h_type, theta, frequency, sigma, bandwidth) + elif h_type == 'region': + sample_cache = "gabor-{}-n_slice{}-theta{}-frequency{}-sigma{}-bandwidth{}".format( + h_type, n_slice, theta, frequency, sigma, bandwidth) + + try: + samples = cPickle.load( + open(os.path.join(cache_dir, sample_cache), "rb", True)) + for sample in samples: + sample['hist'] /= np.sum(sample['hist']) # normalize + if verbose: + print("Using cache..., config=%s, distance=%s, depth=%s" % + (sample_cache, d_type, depth)) + except: + if verbose: + print("Counting histogram..., config=%s, distance=%s, depth=%s" % + (sample_cache, d_type, depth)) + + samples = [] + data = db.get_data() + for d in data.itertuples(): + d_img, d_cls = getattr(d, "img"), getattr(d, "cls") + d_hist = self.gabor_histogram( + d_img, type=h_type, n_slice=n_slice) + samples.append({ + 'img': d_img, + 'cls': d_cls, + 'hist': d_hist + }) + cPickle.dump(samples, open(os.path.join( + cache_dir, sample_cache), "wb", True)) + + return samples if __name__ == "__main__": - db = Database() - - # evaluate database - APs = evaluate_class(db, f_class=Gabor, d_type=d_type, depth=depth) - cls_MAPs = [] - for cls, cls_APs in APs.items(): - MAP = np.mean(cls_APs) - print("Class {}, MAP {}".format(cls, MAP)) - cls_MAPs.append(MAP) - print("MMAP", np.mean(cls_MAPs)) + db = Database() + + # evaluate database + APs = evaluate_class(db, f_class=Gabor, d_type=d_type, depth=depth) + cls_MAPs = [] + for cls, cls_APs in APs.items(): + MAP = np.mean(cls_APs) + print("Class {}, MAP {}".format(cls, MAP)) + cls_MAPs.append(MAP) + print("MMAP", np.mean(cls_MAPs)) diff --git a/src/infer.py b/src/infer.py index 36f6754..01a65a9 100644 --- a/src/infer.py +++ b/src/infer.py @@ -1,70 +1,57 @@ -# -*- coding: utf-8 -*- - +# pylint: disable=invalid-name,missing-docstring,exec-used,too-many-arguments,too-few-public-methods,no-self-use from __future__ import print_function -from evaluate import infer -from DB import Database - from color import Color from daisy import Daisy -from edge import Edge +from DB import Database +from edge import Edge +from evaluate import infer from gabor import Gabor -from HOG import HOG -from vggnet import VGGNetFeat +from HOG import HOG from resnet import ResNetFeat +from vggnet import VGGNetFeat depth = 5 d_type = 'd1' query_idx = 0 if __name__ == '__main__': - db = Database() - - # retrieve by color - method = Color() - samples = method.make_samples(db) - query = samples[query_idx] - _, result = infer(query, samples=samples, depth=depth, d_type=d_type) - print(result) - - # retrieve by daisy - method = Daisy() - samples = method.make_samples(db) - query = samples[query_idx] - _, result = infer(query, samples=samples, depth=depth, d_type=d_type) - print(result) - - # retrieve by edge - method = Edge() - samples = method.make_samples(db) - query = samples[query_idx] - _, result = infer(query, samples=samples, depth=depth, d_type=d_type) - print(result) - - # retrieve by gabor - method = Gabor() - samples = method.make_samples(db) - query = samples[query_idx] - _, result = infer(query, samples=samples, depth=depth, d_type=d_type) - print(result) - - # retrieve by HOG - method = HOG() - samples = method.make_samples(db) - query = samples[query_idx] - _, result = infer(query, samples=samples, depth=depth, d_type=d_type) - print(result) - - # retrieve by VGG - method = VGGNetFeat() - samples = method.make_samples(db) - query = samples[query_idx] - _, result = infer(query, samples=samples, depth=depth, d_type=d_type) - print(result) - - # retrieve by resnet - method = ResNetFeat() - samples = method.make_samples(db) - query = samples[query_idx] - _, result = infer(query, samples=samples, depth=depth, d_type=d_type) - print(result) + db = Database() + + query = samples[query_idx] + + # retrieve by color + method = Color() + samples = method.make_samples(db) + _, result = infer(query, samples=samples, depth=depth, d_type=d_type) + print(result) + + # retrieve by daisy + method = Daisy() + _, result = infer(query, samples=samples, depth=depth, d_type=d_type) + print(result) + + # retrieve by edge + method = Edge() + _, result = infer(query, samples=samples, depth=depth, d_type=d_type) + print(result) + + # retrieve by gabor + method = Gabor() + _, result = infer(query, samples=samples, depth=depth, d_type=d_type) + print(result) + + # retrieve by HOG + method = HOG() + _, result = infer(query, samples=samples, depth=depth, d_type=d_type) + print(result) + + # retrieve by VGG + method = VGGNetFeat() + _, result = infer(query, samples=samples, depth=depth, d_type=d_type) + print(result) + + # retrieve by resnet + method = ResNetFeat() + _, result = infer(query, samples=samples, depth=depth, d_type=d_type) + print(result) diff --git a/src/random_projection.py b/src/random_projection.py index f2a2eb0..63e35b1 100644 --- a/src/random_projection.py +++ b/src/random_projection.py @@ -7,9 +7,9 @@ from color import Color from daisy import Daisy -from edge import Edge +from edge import Edge from gabor import Gabor -from HOG import HOG +from HOG import HOG from vggnet import VGGNetFeat from resnet import ResNetFeat @@ -28,176 +28,181 @@ # result dir result_dir = 'result' if not os.path.exists(result_dir): - os.makedirs(result_dir) + os.makedirs(result_dir) class RandomProjection(object): - def __init__(self, features, keep_rate=keep_rate, project_type=project_type): - assert len(features) > 0, "need to give at least one feature!" - self.features = features - self.keep_rate = keep_rate - self.project_type = project_type - - self.samples = None - - def make_samples(self, db, verbose=False): - if verbose: - print("Use features {}, {} RandomProject, keep {}".format(" & ".join(self.features), self.project_type, self.keep_rate)) - - if self.samples == None: - feats = [] - for f_class in self.features: - feats.append(self._get_feat(db, f_class)) - samples = self._concat_feat(db, feats) - samples, _ = self._rp(samples) - self.samples = samples # cache the result - return self.samples - - def check_random_projection(self): - ''' check if current smaple can fit to random project - - return - a boolean - ''' - if self.samples == None: - feats = [] - for f_class in self.features: - feats.append(self._get_feat(db, f_class)) - samples = self._concat_feat(db, feats) - samples, flag = self._rp(samples) - self.samples = samples # cache the result - return True if flag else False - - def _get_feat(self, db, f_class): - if f_class == 'color': - f_c = Color() - elif f_class == 'daisy': - f_c = Daisy() - elif f_class == 'edge': - f_c = Edge() - elif f_class == 'gabor': - f_c = Gabor() - elif f_class == 'hog': - f_c = HOG() - elif f_class == 'vgg': - f_c = VGGNetFeat() - elif f_class == 'res': - f_c = ResNetFeat() - return f_c.make_samples(db, verbose=False) - - def _concat_feat(self, db, feats): - samples = feats[0] - delete_idx = [] - for idx in range(len(samples)): - for feat in feats[1:]: - feat = self._to_dict(feat) - key = samples[idx]['img'] - if key not in feat: - delete_idx.append(idx) - continue - assert feat[key]['cls'] == samples[idx]['cls'] - samples[idx]['hist'] = np.append(samples[idx]['hist'], feat[key]['hist']) - for d_idx in sorted(set(delete_idx), reverse=True): - del samples[d_idx] - if delete_idx != []: - print("Ignore %d samples" % len(set(delete_idx))) - - return samples - - def _to_dict(self, feat): - ret = {} - for f in feat: - ret[f['img']] = { - 'cls': f['cls'], - 'hist': f['hist'] - } - return ret - - def _rp(self, samples): - feats = np.array([s['hist'] for s in samples]) - eps = self._get_eps(n_samples=feats.shape[0], n_dims=feats.shape[1]) - if eps == -1: - import warnings - warnings.warn( - "Can't fit to random projection with keep_rate {}\n".format(self.keep_rate), RuntimeWarning - ) - return samples, False - if self.project_type == 'gaussian': - transformer = random_projection.GaussianRandomProjection(eps=eps) - elif self.project_type == 'sparse': - transformer = random_projection.SparseRandomProjection(eps=eps) - feats = transformer.fit_transform(feats) - assert feats.shape[0] == len(samples) - for idx in range(len(samples)): - samples[idx]['hist'] = feats[idx] - return samples, True - - def _get_eps(self, n_samples, n_dims, n_slice=int(1e4)): - new_dim = n_dims * self.keep_rate - for i in range(1, n_slice): - eps = i / n_slice - jl_dim = johnson_lindenstrauss_min_dim(n_samples=n_samples, eps=eps) - if jl_dim <= new_dim: - print("rate %.3f, n_dims %d, new_dim %d, dims error rate: %.4f" % (self.keep_rate, n_dims, jl_dim, ((new_dim-jl_dim) / new_dim)) ) - return eps - return -1 + def __init__(self, features, keep_rate=keep_rate, project_type=project_type): + assert len(features) > 0, "need to give at least one feature!" + self.features = features + self.keep_rate = keep_rate + self.project_type = project_type + + self.samples = None + + def make_samples(self, db, verbose=False): + if verbose: + print("Use features {}, {} RandomProject, keep {}".format( + " & ".join(self.features), self.project_type, self.keep_rate)) + + if self.samples == None: + feats = [] + for f_class in self.features: + feats.append(self._get_feat(db, f_class)) + samples = self._concat_feat(db, feats) + samples, _ = self._rp(samples) + self.samples = samples # cache the result + return self.samples + + def check_random_projection(self): + ''' check if current smaple can fit to random project + + return + a boolean + ''' + if self.samples == None: + feats = [] + for f_class in self.features: + feats.append(self._get_feat(db, f_class)) + samples = self._concat_feat(db, feats) + samples, flag = self._rp(samples) + self.samples = samples # cache the result + return True if flag else False + + def _get_feat(self, db, f_class): + if f_class == 'color': + f_c = Color() + elif f_class == 'daisy': + f_c = Daisy() + elif f_class == 'edge': + f_c = Edge() + elif f_class == 'gabor': + f_c = Gabor() + elif f_class == 'hog': + f_c = HOG() + elif f_class == 'vgg': + f_c = VGGNetFeat() + elif f_class == 'res': + f_c = ResNetFeat() + return f_c.make_samples(db, verbose=False) + + def _concat_feat(self, db, feats): + samples = feats[0] + delete_idx = [] + for idx in range(len(samples)): + for feat in feats[1:]: + feat = self._to_dict(feat) + key = samples[idx]['img'] + if key not in feat: + delete_idx.append(idx) + continue + assert feat[key]['cls'] == samples[idx]['cls'] + samples[idx]['hist'] = np.append(samples[idx]['hist'], feat[key]['hist']) + for d_idx in sorted(set(delete_idx), reverse=True): + del samples[d_idx] + if delete_idx != []: + print("Ignore %d samples" % len(set(delete_idx))) + + return samples + + def _to_dict(self, feat): + ret = {} + for f in feat: + ret[f['img']] = { + 'cls': f['cls'], + 'hist': f['hist'] + } + return ret + + def _rp(self, samples): + feats = np.array([s['hist'] for s in samples]) + eps = self._get_eps(n_samples=feats.shape[0], n_dims=feats.shape[1]) + if eps == -1: + import warnings + warnings.warn( + "Can't fit to random projection with keep_rate {}\n".format( + self.keep_rate), RuntimeWarning + ) + return samples, False + if self.project_type == 'gaussian': + transformer = random_projection.GaussianRandomProjection(eps=eps) + elif self.project_type == 'sparse': + transformer = random_projection.SparseRandomProjection(eps=eps) + feats = transformer.fit_transform(feats) + assert feats.shape[0] == len(samples) + for idx in range(len(samples)): + samples[idx]['hist'] = feats[idx] + return samples, True + + def _get_eps(self, n_samples, n_dims, n_slice=int(1e4)): + new_dim = n_dims * self.keep_rate + for i in range(1, n_slice): + eps = i / n_slice + jl_dim = johnson_lindenstrauss_min_dim(n_samples=n_samples, eps=eps) + if jl_dim <= new_dim: + print("rate %.3f, n_dims %d, new_dim %d, dims error rate: %.4f" % + (self.keep_rate, n_dims, jl_dim, ((new_dim-jl_dim) / new_dim))) + return eps + return -1 def evaluate_feats(db, N, feat_pools=feat_pools, keep_rate=keep_rate, project_type=project_type, d_type='d1', depths=[None, 300, 200, 100, 50, 30, 10, 5, 3, 1]): - result = open(os.path.join(result_dir, 'feature_reduction-{}-keep{}-{}-{}feats.csv'.format(project_type, keep_rate, d_type, N)), 'w') - for i in range(N): - result.write("feat{},".format(i)) - result.write("depth,distance,MMAP") - combinations = itertools.combinations(feat_pools, N) - for combination in combinations: - fusion = RandomProjection(features=list(combination), keep_rate=keep_rate, project_type=project_type) - if fusion.check_random_projection(): - for d in depths: - APs = evaluate_class(db, f_instance=fusion, d_type=d_type, depth=d) - cls_MAPs = [] - for cls, cls_APs in APs.items(): - MAP = np.mean(cls_APs) - cls_MAPs.append(MAP) - r = "{},{},{},{}".format(",".join(combination), d, d_type, np.mean(cls_MAPs)) - print(r) - result.write('\n'+r) - print() - result.close() + result = open(os.path.join( + result_dir, 'feature_reduction-{}-keep{}-{}-{}feats.csv'.format(project_type, keep_rate, d_type, N)), 'w') + for i in range(N): + result.write("feat{},".format(i)) + result.write("depth,distance,MMAP") + combinations = itertools.combinations(feat_pools, N) + for combination in combinations: + fusion = RandomProjection(features=list(combination), + keep_rate=keep_rate, project_type=project_type) + if fusion.check_random_projection(): + for d in depths: + APs = evaluate_class(db, f_instance=fusion, d_type=d_type, depth=d) + cls_MAPs = [] + for cls, cls_APs in APs.items(): + MAP = np.mean(cls_APs) + cls_MAPs.append(MAP) + r = "{},{},{},{}".format(",".join(combination), d, d_type, np.mean(cls_MAPs)) + print(r) + result.write('\n'+r) + print() + result.close() if __name__ == "__main__": - db = Database() - - # evaluate features single-wise - evaluate_feats(db, N=1, d_type='d1', keep_rate=keep_rate, project_type=project_type) - - # evaluate features double-wise - evaluate_feats(db, N=2, d_type='d1', keep_rate=keep_rate, project_type=project_type) - - # evaluate features triple-wise - evaluate_feats(db, N=3, d_type='d1', keep_rate=keep_rate, project_type=project_type) - - # evaluate features quadra-wise - evaluate_feats(db, N=4, d_type='d1', keep_rate=keep_rate, project_type=project_type) - - # evaluate features penta-wise - evaluate_feats(db, N=5, d_type='d1', keep_rate=keep_rate, project_type=project_type) - - # evaluate features hexa-wise - evaluate_feats(db, N=6, d_type='d1', keep_rate=keep_rate, project_type=project_type) - - # evaluate features hepta-wise - evaluate_feats(db, N=7, d_type='d1', keep_rate=keep_rate, project_type=project_type) - - # evaluate color feature - d_type = 'd1' - depth = 30 - fusion = RandomProjection(features=['color'], keep_rate=keep_rate, project_type=project_type) - APs = evaluate_class(db, f_instance=fusion, d_type=d_type, depth=depth) - cls_MAPs = [] - for cls, cls_APs in APs.items(): - MAP = np.mean(cls_APs) - print("Class {}, MAP {}".format(cls, MAP)) - cls_MAPs.append(MAP) - print("MMAP", np.mean(cls_MAPs)) + db = Database() + + # evaluate features single-wise + evaluate_feats(db, N=1, d_type='d1', keep_rate=keep_rate, project_type=project_type) + + # evaluate features double-wise + evaluate_feats(db, N=2, d_type='d1', keep_rate=keep_rate, project_type=project_type) + + # evaluate features triple-wise + evaluate_feats(db, N=3, d_type='d1', keep_rate=keep_rate, project_type=project_type) + + # evaluate features quadra-wise + evaluate_feats(db, N=4, d_type='d1', keep_rate=keep_rate, project_type=project_type) + + # evaluate features penta-wise + evaluate_feats(db, N=5, d_type='d1', keep_rate=keep_rate, project_type=project_type) + + # evaluate features hexa-wise + evaluate_feats(db, N=6, d_type='d1', keep_rate=keep_rate, project_type=project_type) + + # evaluate features hepta-wise + evaluate_feats(db, N=7, d_type='d1', keep_rate=keep_rate, project_type=project_type) + + # evaluate color feature + d_type = 'd1' + depth = 30 + fusion = RandomProjection(features=['color'], keep_rate=keep_rate, project_type=project_type) + APs = evaluate_class(db, f_instance=fusion, d_type=d_type, depth=depth) + cls_MAPs = [] + for cls, cls_APs in APs.items(): + MAP = np.mean(cls_APs) + print("Class {}, MAP {}".format(cls, MAP)) + cls_MAPs.append(MAP) + print("MMAP", np.mean(cls_MAPs)) diff --git a/src/resnet.py b/src/resnet.py index f71bc08..a5ad406 100644 --- a/src/resnet.py +++ b/src/resnet.py @@ -1,22 +1,18 @@ -# -*- coding: utf-8 -*- +# pylint: disable=invalid-name,missing-docstring,exec-used,too-many-arguments,too-few-public-methods,no-self-use,too-many-locals,line-too-long,redefined-builtin,redefined-outer-name,bare-except from __future__ import print_function -import torch -import torch.nn as nn -from torch.autograd import Variable -from torchvision import models -from torchvision.models.resnet import Bottleneck, BasicBlock, ResNet -import torch.utils.model_zoo as model_zoo +import os -from six.moves import cPickle import numpy as np import scipy.misc -import os - -from evaluate import evaluate_class -from DB import Database +import torch +import torch.utils.model_zoo as model_zoo +from six.moves import cPickle +from torchvision.models.resnet import BasicBlock, Bottleneck, ResNet +from src.DB import Database +from src.evaluate import evaluate_class ''' downloading problem in mac OSX should refer to this answer: @@ -24,9 +20,9 @@ ''' # configs for histogram -RES_model = 'resnet152' # model type +RES_model = 'resnet152' # model type pick_layer = 'avg' # extract feature of this layer -d_type = 'd1' # distance type +d_type = 'd1' # distance type depth = 3 # retrieved depth, set to None will count the ap for whole database @@ -53,12 +49,14 @@ ''' use_gpu = torch.cuda.is_available() -means = np.array([103.939, 116.779, 123.68]) / 255. # mean of three channels in the order of BGR +means = np.array([103.939, 116.779, 123.68]) / \ + 255. # mean of three channels in the order of BGR # cache dir cache_dir = 'cache' + if not os.path.exists(cache_dir): - os.makedirs(cache_dir) + os.makedirs(cache_dir) # from https://github.com/pytorch/vision/blob/master/torchvision/models/resnet.py @@ -70,110 +68,135 @@ 'resnet152': 'https://download.pytorch.org/models/resnet152-b121ed2d.pth', } + class ResidualNet(ResNet): - def __init__(self, model=RES_model, pretrained=True): - if model == "resnet18": - super().__init__(BasicBlock, [2, 2, 2, 2], 1000) - if pretrained: - self.load_state_dict(model_zoo.load_url(model_urls['resnet18'])) - elif model == "resnet34": - super().__init__(BasicBlock, [3, 4, 6, 3], 1000) - if pretrained: - self.load_state_dict(model_zoo.load_url(model_urls['resnet34'])) - elif model == "resnet50": - super().__init__(Bottleneck, [3, 4, 6, 3], 1000) - if pretrained: - self.load_state_dict(model_zoo.load_url(model_urls['resnet50'])) - elif model == "resnet101": - super().__init__(Bottleneck, [3, 4, 23, 3], 1000) - if pretrained: - self.load_state_dict(model_zoo.load_url(model_urls['resnet101'])) - elif model == "resnet152": - super().__init__(Bottleneck, [3, 8, 36, 3], 1000) - if pretrained: - self.load_state_dict(model_zoo.load_url(model_urls['resnet152'])) - - def forward(self, x): - x = self.conv1(x) - x = self.bn1(x) - x = self.relu(x) - x = self.maxpool(x) - x = self.layer1(x) - x = self.layer2(x) - x = self.layer3(x) - x = self.layer4(x) # x after layer4, shape = N * 512 * H/32 * W/32 - max_pool = torch.nn.MaxPool2d((x.size(-2),x.size(-1)), stride=(x.size(-2),x.size(-1)), padding=0, ceil_mode=False) - Max = max_pool(x) # avg.size = N * 512 * 1 * 1 - Max = Max.view(Max.size(0), -1) # avg.size = N * 512 - avg_pool = torch.nn.AvgPool2d((x.size(-2),x.size(-1)), stride=(x.size(-2),x.size(-1)), padding=0, ceil_mode=False, count_include_pad=True) - avg = avg_pool(x) # avg.size = N * 512 * 1 * 1 - avg = avg.view(avg.size(0), -1) # avg.size = N * 512 - fc = self.fc(avg) # fc.size = N * 1000 - output = { - 'max': Max, - 'avg': avg, - 'fc' : fc - } - return output - - -class ResNetFeat(object): - - def make_samples(self, db, verbose=True): - sample_cache = '{}-{}'.format(RES_model, pick_layer) - - try: - samples = cPickle.load(open(os.path.join(cache_dir, sample_cache), "rb", True)) - for sample in samples: - sample['hist'] /= np.sum(sample['hist']) # normalize - if verbose: - print("Using cache..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - except: - if verbose: - print("Counting histogram..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - - res_model = ResidualNet(model=RES_model) - res_model.eval() - if use_gpu: - res_model = res_model.cuda() - samples = [] - data = db.get_data() - for d in data.itertuples(): - d_img, d_cls = getattr(d, "img"), getattr(d, "cls") - img = scipy.misc.imread(d_img, mode="RGB") - img = img[:, :, ::-1] # switch to BGR - img = np.transpose(img, (2, 0, 1)) / 255. - img[0] -= means[0] # reduce B's mean - img[1] -= means[1] # reduce G's mean - img[2] -= means[2] # reduce R's mean - img = np.expand_dims(img, axis=0) + def __init__(self, model=RES_model, pretrained=True): + if model == "resnet18": + super().__init__(BasicBlock, [2, 2, 2, 2], 1000) + + if pretrained: + self.load_state_dict( + model_zoo.load_url(model_urls['resnet18'])) + elif model == "resnet34": + super().__init__(BasicBlock, [3, 4, 6, 3], 1000) + + if pretrained: + self.load_state_dict( + model_zoo.load_url(model_urls['resnet34'])) + elif model == "resnet50": + super().__init__(Bottleneck, [3, 4, 6, 3], 1000) + + if pretrained: + self.load_state_dict( + model_zoo.load_url(model_urls['resnet50'])) + elif model == "resnet101": + super().__init__(Bottleneck, [3, 4, 23, 3], 1000) + + if pretrained: + self.load_state_dict( + model_zoo.load_url(model_urls['resnet101'])) + elif model == "resnet152": + super().__init__(Bottleneck, [3, 8, 36, 3], 1000) + + if pretrained: + self.load_state_dict( + model_zoo.load_url(model_urls['resnet152'])) + + def forward(self, x): + x = self.conv1(x) + x = self.bn1(x) + x = self.relu(x) + x = self.maxpool(x) + x = self.layer1(x) + x = self.layer2(x) + x = self.layer3(x) + x = self.layer4(x) # x after layer4, shape = N * 512 * H/32 * W/32 + max_pool = torch.nn.MaxPool2d((x.size(-2), x.size(-1)), + stride=(x.size(-2), x.size(-1)), padding=0, ceil_mode=False) + Max = max_pool(x) # avg.size = N * 512 * 1 * 1 + Max = Max.view(Max.size(0), -1) # avg.size = N * 512 + avg_pool = torch.nn.AvgPool2d((x.size(-2), x.size(-1)), stride=(x.size(-2), + x.size(-1)), padding=0, ceil_mode=False, count_include_pad=True) + avg = avg_pool(x) # avg.size = N * 512 * 1 * 1 + avg = avg.view(avg.size(0), -1) # avg.size = N * 512 + fc = self.fc(avg) # fc.size = N * 1000 + output = { + 'max': Max, + 'avg': avg, + 'fc': fc + } + + return output + + +class ResNetFeat: + + def make_samples(self, db, verbose=True): + sample_cache = '{}-{}'.format(RES_model, pick_layer) + try: - if use_gpu: - inputs = torch.autograd.Variable(torch.from_numpy(img).cuda().float()) - else: - inputs = torch.autograd.Variable(torch.from_numpy(img).float()) - d_hist = res_model(inputs)[pick_layer] - d_hist = d_hist.data.cpu().numpy().flatten() - d_hist /= np.sum(d_hist) # normalize - samples.append({ - 'img': d_img, - 'cls': d_cls, - 'hist': d_hist - }) + samples = cPickle.load( + open(os.path.join(cache_dir, sample_cache), "rb", True)) + + for sample in samples: + sample['hist'] /= np.sum(sample['hist']) # normalize + + if verbose: + print("Using cache..., config=%s, distance=%s, depth=%s" % + (sample_cache, d_type, depth)) except: - pass - cPickle.dump(samples, open(os.path.join(cache_dir, sample_cache), "wb", True)) - - return samples + if verbose: + print("Counting histogram..., config=%s, distance=%s, depth=%s" % + (sample_cache, d_type, depth)) + + res_model = ResidualNet(model=RES_model) + res_model.eval() + + if use_gpu: + res_model = res_model.cuda() + samples = [] + data = db.get_data() + + for d in data.itertuples(): + d_img, d_cls = getattr(d, "img"), getattr(d, "cls") + img = scipy.misc.imread(d_img, mode="RGB") + img = img[:, :, ::-1] # switch to BGR + img = np.transpose(img, (2, 0, 1)) / 255. + img[0] -= means[0] # reduce B's mean + img[1] -= means[1] # reduce G's mean + img[2] -= means[2] # reduce R's mean + img = np.expand_dims(img, axis=0) + try: + if use_gpu: + inputs = torch.autograd.Variable( + torch.from_numpy(img).cuda().float()) + else: + inputs = torch.autograd.Variable( + torch.from_numpy(img).float()) + d_hist = res_model(inputs)[pick_layer] + d_hist = d_hist.data.cpu().numpy().flatten() + d_hist /= np.sum(d_hist) # normalize + samples.append({ + 'img': d_img, + 'cls': d_cls, + 'hist': d_hist + }) + except: + pass + cPickle.dump(samples, open(os.path.join( + cache_dir, sample_cache), "wb", True)) + + return samples if __name__ == "__main__": - # evaluate database - db = Database() - APs = evaluate_class(db, f_class=ResNetFeat, d_type=d_type, depth=depth) - cls_MAPs = [] - for cls, cls_APs in APs.items(): - MAP = np.mean(cls_APs) - print("Class {}, MAP {}".format(cls, MAP)) - cls_MAPs.append(MAP) - print("MMAP", np.mean(cls_MAPs)) + # evaluate database + db = Database() + APs = evaluate_class(db, f_class=ResNetFeat, d_type=d_type, depth=depth) + cls_MAPs = [] + + for cls, cls_APs in APs.items(): + MAP = np.mean(cls_APs) + print("Class {}, MAP {}".format(cls, MAP)) + cls_MAPs.append(MAP) + print("MMAP", np.mean(cls_MAPs)) diff --git a/src/vggnet.py b/src/vggnet.py index 637d501..c7321a1 100644 --- a/src/vggnet.py +++ b/src/vggnet.py @@ -1,20 +1,18 @@ -# -*- coding: utf-8 -*- +# pylint: disable=invalid-name,missing-docstring,exec-used,too-many-arguments,too-few-public-methods,no-self-use from __future__ import print_function -import torch -import torch.nn as nn -from torchvision import models -from torchvision.models.vgg import VGG +import os -from six.moves import cPickle import numpy as np import scipy.misc -import os - -from evaluate import evaluate_class -from DB import Database +import torch +import torch.nn as nn +from six.moves import cPickle +from torchvision.models.vgg import VGG +from src.DB import Database +from src.evaluate import evaluate_class ''' downloading problem in mac OSX should refer to this answer: @@ -22,11 +20,11 @@ ''' # configs for histogram -VGG_model = 'vgg19' # model type +VGG_model = 'vgg19' # model type pick_layer = 'avg' # extract feature of this layer -d_type = 'd1' # distance type +d_type = 'd1' # distance type -depth = 3 # retrieved depth, set to None will count the ap for whole database +depth = 1 # retrieved depth, set to None will count the ap for whole database ''' MMAP depth @@ -50,155 +48,184 @@ ''' use_gpu = torch.cuda.is_available() -means = np.array([103.939, 116.779, 123.68]) / 255. # mean of three channels in the order of BGR +means = np.array([103.939, 116.779, 123.68]) / 255. +# mean of three channels in the order of BGR # cache dir cache_dir = 'cache' + if not os.path.exists(cache_dir): - os.makedirs(cache_dir) + os.makedirs(cache_dir) class VGGNet(VGG): - def __init__(self, pretrained=True, model='vgg16', requires_grad=False, remove_fc=False, show_params=False): - super().__init__(make_layers(cfg[model])) - self.ranges = ranges[model] - self.fc_ranges = ((0, 2), (2, 5), (5, 7)) - - if pretrained: - exec("self.load_state_dict(models.%s(pretrained=True).state_dict())" % model) - - if not requires_grad: - for param in super().parameters(): - param.requires_grad = False - - if remove_fc: # delete redundant fully-connected layer params, can save memory - del self.classifier - - if show_params: - for name, param in self.named_parameters(): - print(name, param.size()) - - def forward(self, x): - output = {} - - x = self.features(x) - - avg_pool = torch.nn.AvgPool2d((x.size(-2), x.size(-1)), stride=(x.size(-2), x.size(-1)), padding=0, ceil_mode=False, count_include_pad=True) - avg = avg_pool(x) # avg.size = N * 512 * 1 * 1 - avg = avg.view(avg.size(0), -1) # avg.size = N * 512 - output['avg'] = avg - - x = x.view(x.size(0), -1) # flatten() - dims = x.size(1) - if dims >= 25088: - x = x[:, :25088] - for idx in range(len(self.fc_ranges)): - for layer in range(self.fc_ranges[idx][0], self.fc_ranges[idx][1]): - x = self.classifier[layer](x) - output["fc%d"%(idx+1)] = x - else: - w = self.classifier[0].weight[:, :dims] - b = self.classifier[0].bias - x = torch.matmul(x, w.t()) + b - x = self.classifier[1](x) - output["fc1"] = x - for idx in range(1, len(self.fc_ranges)): - for layer in range(self.fc_ranges[idx][0], self.fc_ranges[idx][1]): - x = self.classifier[layer](x) - output["fc%d"%(idx+1)] = x - - return output + def __init__(self, + pretrained=True, + model='vgg16', + requires_grad=False, + remove_fc=False, + show_params=False): + super().__init__(make_layers(cfg[model])) + self.ranges = ranges[model] + self.fc_ranges = ((0, 2), (2, 5), (5, 7)) + + if pretrained: + exec("self.load_state_dict(models.%s(pretrained=True).state_dict())" % model) + + if not requires_grad: + for param in super().parameters(): + param.requires_grad = False + + if remove_fc: # delete redundant fully-connected layer params, can save memory + del self.classifier + + if show_params: + for name, param in self.named_parameters(): + print(name, param.size()) + + def forward(self, x): + output = {} + + x = self.features(x) + + avg_pool = torch.nn.AvgPool2d((x.size(-2), x.size(-1)), stride=( + x.size(-2), x.size(-1)), padding=0, ceil_mode=False, count_include_pad=True) + avg = avg_pool(x) # avg.size = N * 512 * 1 * 1 + avg = avg.view(avg.size(0), -1) # avg.size = N * 512 + output['avg'] = avg + + x = x.view(x.size(0), -1) # flatten() + dims = x.size(1) + + if dims >= 25088: + x = x[:, :25088] + + for idx in range(len(self.fc_ranges)): + for layer in range(self.fc_ranges[idx][0], self.fc_ranges[idx][1]): + x = self.classifier[layer](x) + output["fc%d" % (idx+1)] = x + else: + w = self.classifier[0].weight[:, :dims] + b = self.classifier[0].bias + x = torch.matmul(x, w.t()) + b + x = self.classifier[1](x) + output["fc1"] = x + + for idx in range(1, len(self.fc_ranges)): + for layer in range(self.fc_ranges[idx][0], self.fc_ranges[idx][1]): + x = self.classifier[layer](x) + output["fc%d" % (idx+1)] = x + + return output ranges = { - 'vgg11': ((0, 3), (3, 6), (6, 11), (11, 16), (16, 21)), - 'vgg13': ((0, 5), (5, 10), (10, 15), (15, 20), (20, 25)), - 'vgg16': ((0, 5), (5, 10), (10, 17), (17, 24), (24, 31)), - 'vgg19': ((0, 5), (5, 10), (10, 19), (19, 28), (28, 37)) + 'vgg11': ((0, 3), (3, 6), (6, 11), (11, 16), (16, 21)), + 'vgg13': ((0, 5), (5, 10), (10, 15), (15, 20), (20, 25)), + 'vgg16': ((0, 5), (5, 10), (10, 17), (17, 24), (24, 31)), + 'vgg19': ((0, 5), (5, 10), (10, 19), (19, 28), (28, 37)) } # cropped version from https://github.com/pytorch/vision/blob/master/torchvision/models/vgg.py cfg = { - 'vgg11': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'], - 'vgg13': [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'], - 'vgg16': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 'M', 512, 512, 512, 'M', 512, 512, 512, 'M'], - 'vgg19': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', 512, 512, 512, 512, 'M', 512, 512, 512, 512, 'M'], + 'vgg11': [64, 'M', 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'], + 'vgg13': [64, 64, 'M', 128, 128, 'M', 256, 256, 'M', 512, 512, 'M', 512, 512, 'M'], + 'vgg16': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, + 'M', 512, 512, 512, 'M', 512, 512, 512, 'M'], + 'vgg19': [64, 64, 'M', 128, 128, 'M', 256, 256, 256, 256, 'M', + 512, 512, 512, 512, 'M', 512, 512, 512, 512, 'M'], } -def make_layers(cfg, batch_norm=False): - layers = [] - in_channels = 3 - for v in cfg: - if v == 'M': - layers += [nn.MaxPool2d(kernel_size=2, stride=2)] - else: - conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1) - if batch_norm: - layers += [conv2d, nn.BatchNorm2d(v), nn.ReLU(inplace=True)] - else: - layers += [conv2d, nn.ReLU(inplace=True)] - in_channels = v - return nn.Sequential(*layers) - - -class VGGNetFeat(object): - - def make_samples(self, db, verbose=True): - sample_cache = '{}-{}'.format(VGG_model, pick_layer) - - try: - samples = cPickle.load(open(os.path.join(cache_dir, sample_cache), "rb", True)) - for sample in samples: - sample['hist'] /= np.sum(sample['hist']) # normalize - cPickle.dump(samples, open(os.path.join(cache_dir, sample_cache), "wb", True)) - if verbose: - print("Using cache..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - except: - if verbose: - print("Counting histogram..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - - vgg_model = VGGNet(requires_grad=False, model=VGG_model) - vgg_model.eval() - if use_gpu: - vgg_model = vgg_model.cuda() - samples = [] - data = db.get_data() - for d in data.itertuples(): - d_img, d_cls = getattr(d, "img"), getattr(d, "cls") - img = scipy.misc.imread(d_img, mode="RGB") - img = img[:, :, ::-1] # switch to BGR - img = np.transpose(img, (2, 0, 1)) / 255. - img[0] -= means[0] # reduce B's mean - img[1] -= means[1] # reduce G's mean - img[2] -= means[2] # reduce R's mean - img = np.expand_dims(img, axis=0) + +def make_layers(config, batch_norm=False): + layers = [] + in_channels = 3 + + for v in config: + if v == 'M': + layers += [nn.MaxPool2d(kernel_size=2, stride=2)] + else: + conv2d = nn.Conv2d(in_channels, v, kernel_size=3, padding=1) + + if batch_norm: + layers += [conv2d, nn.BatchNorm2d(v), nn.ReLU(inplace=True)] + else: + layers += [conv2d, nn.ReLU(inplace=True)] + in_channels = v + + return nn.Sequential(*layers) + + +class VGGNetFeat: + + def make_samples(self, db, verbose=True): + sample_cache = '{}-{}'.format(VGG_model, pick_layer) + try: - if use_gpu: - inputs = torch.autograd.Variable(torch.from_numpy(img).cuda().float()) - else: - inputs = torch.autograd.Variable(torch.from_numpy(img).float()) - d_hist = vgg_model(inputs)[pick_layer] - d_hist = np.sum(d_hist.data.cpu().numpy(), axis=0) - d_hist /= np.sum(d_hist) # normalize - samples.append({ - 'img': d_img, - 'cls': d_cls, - 'hist': d_hist - }) - except: - pass - cPickle.dump(samples, open(os.path.join(cache_dir, sample_cache), "wb", True)) - - return samples + samples = cPickle.load( + open(os.path.join(cache_dir, sample_cache), "rb", True)) + + for sample in samples: + sample['hist'] /= np.sum(sample['hist']) # normalize + cPickle.dump(samples, open(os.path.join( + cache_dir, sample_cache), "wb", True)) + + if verbose: + print("Using cache..., config=%s, distance=%s, depth=%s" % + (sample_cache, d_type, depth)) + except BaseException: + if verbose: + print("Counting histogram..., config=%s, distance=%s, depth=%s" % ( + sample_cache, d_type, depth)) + + vgg_model = VGGNet(requires_grad=False, model=VGG_model) + vgg_model.eval() + + if use_gpu: + vgg_model = vgg_model.cuda() + samples = [] + data = db.get_data() + + for d in data.itertuples(): + d_img, d_cls = getattr(d, "img"), getattr(d, "cls") + img = scipy.misc.imread(d_img, mode="RGB") + img = img[:, :, ::-1] # switch to BGR + img = np.transpose(img, (2, 0, 1)) / 255. + img[0] -= means[0] # reduce B's mean + img[1] -= means[1] # reduce G's mean + img[2] -= means[2] # reduce R's mean + img = np.expand_dims(img, axis=0) + try: + if use_gpu: + inputs = torch.autograd.Variable( + torch.from_numpy(img).cuda().float()) + else: + inputs = torch.autograd.Variable( + torch.from_numpy(img).float()) + d_hist = vgg_model(inputs)[pick_layer] + d_hist = np.sum(d_hist.data.cpu().numpy(), axis=0) + d_hist /= np.sum(d_hist) # normalize + samples.append({ + 'img': d_img, + 'cls': d_cls, + 'hist': d_hist + }) + except BaseException: + pass + cPickle.dump(samples, open(os.path.join( + cache_dir, sample_cache), "wb", True)) + + return samples if __name__ == "__main__": - # evaluate database - db = Database() - APs = evaluate_class(db, f_class=VGGNetFeat, d_type=d_type, depth=depth) - cls_MAPs = [] - for cls, cls_APs in APs.items(): - MAP = np.mean(cls_APs) - print("Class {}, MAP {}".format(cls, MAP)) - cls_MAPs.append(MAP) - print("MMAP", np.mean(cls_MAPs)) + # evaluate database + DB = Database() + APs = evaluate_class(DB, f_class=VGGNetFeat, d_type=d_type, depth=depth) + cls_MAPs = [] + + for cls, cls_APs in APs.items(): + MAP = np.mean(cls_APs) + print("Class {}, MAP {}".format(cls, MAP)) + cls_MAPs.append(MAP) + print("MMAP", np.mean(cls_MAPs)) From d8502a3082783b143480d63e93d8efec44be5727 Mon Sep 17 00:00:00 2001 From: jm33-m0 Date: Wed, 15 May 2019 14:39:09 +0800 Subject: [PATCH 2/4] update usage --- USAGE.md | 28 ++++++++++++++++++++++++++++ query.py | 11 ++++++++--- src/resnet.py | 10 +++++----- 3 files changed, 41 insertions(+), 8 deletions(-) diff --git a/USAGE.md b/USAGE.md index e39db60..f903b64 100644 --- a/USAGE.md +++ b/USAGE.md @@ -33,7 +33,35 @@ In my database, there are 25 classes, each class has its own directory, and the images belong to this class should put into this directory. ### Part2: run the code + +#### For image retrieval test + I implement several algorithm, you can run it with python3. +If you need to test with one of the algorithms, please use `query.py `, by default the image being queried is the first one in `data.csv` + +result looks like + +```text +$ .venv/bin/python query.py resnet +Using cache..., config=resnet152-avg, distance=d1, depth=3 +database/store/qingfeng.jpg: 0.41925543546676636, Class store +database/store/qingfeng-2.jpg: 0.559502124786377, Class store +database/vim/vim-01.jpg: 0.7149869799613953, Class vim +database/vim/vim-03.jpg: 0.7975158095359802, Class vim +database/vim/vim-02.jpg: 0.818065881729126, Class vim + +$ cat data.csv +img,cls +database/store/qingfeng-1.jpg,store +database/vim/vim-04.jpg,vim +database/vim/vim-01.jpg,vim +database/vim/vim-03.jpg,vim +database/vim/vim-02.jpg,vim +database/store/qingfeng-2.jpg,store +database/store/qingfeng.jpg,store +database/emacs/emacs-01.jpg,emacs +database/emacs/emacs-02.jpg,emacs +``` #### For RGB histogram ```python diff --git a/query.py b/query.py index 485f745..70b83cb 100644 --- a/query.py +++ b/query.py @@ -19,7 +19,7 @@ if __name__ == '__main__': db = Database() - # methods to call + # methods to use methods = { "color": Color, "daisy": Daisy, @@ -34,7 +34,8 @@ mthd = sys.argv[1].lower() except IndexError: print("usage: {} ".format(sys.argv[0])) - print("supported methods:\ncolor, daisy, edge, gabor, HOG, vgg, resnet") + print("supported methods:\ncolor, daisy, edge, gabor, hog, vgg, resnet") + sys.exit(1) # call make_samples(db) accordingly @@ -44,4 +45,8 @@ query = samples[query_idx] _, result = infer(query, samples=samples, depth=depth, d_type=d_type) - print(result) + + for match in result: + print("{}:\t{},\tClass {}".format(match["img"], + match["dis"], + match["cls"])) diff --git a/src/resnet.py b/src/resnet.py index a5ad406..dfcefee 100644 --- a/src/resnet.py +++ b/src/resnet.py @@ -1,4 +1,4 @@ -# pylint: disable=invalid-name,missing-docstring,exec-used,too-many-arguments,too-few-public-methods,no-self-use,too-many-locals,line-too-long,redefined-builtin,redefined-outer-name,bare-except +# pylint: disable=invalid-name,missing-docstring,exec-used,too-many-arguments,too-few-public-methods,no-self-use,too-many-locals,line-too-long,broad-except from __future__ import print_function @@ -144,7 +144,7 @@ def make_samples(self, db, verbose=True): if verbose: print("Using cache..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) - except: + except BaseException: if verbose: print("Counting histogram..., config=%s, distance=%s, depth=%s" % (sample_cache, d_type, depth)) @@ -181,7 +181,7 @@ def make_samples(self, db, verbose=True): 'cls': d_cls, 'hist': d_hist }) - except: + except BaseException: pass cPickle.dump(samples, open(os.path.join( cache_dir, sample_cache), "wb", True)) @@ -191,8 +191,8 @@ def make_samples(self, db, verbose=True): if __name__ == "__main__": # evaluate database - db = Database() - APs = evaluate_class(db, f_class=ResNetFeat, d_type=d_type, depth=depth) + DB = Database() + APs = evaluate_class(DB, f_class=ResNetFeat, d_type=d_type, depth=depth) cls_MAPs = [] for cls, cls_APs in APs.items(): From 8f4f79bd2367f21dcecf2a74ce7356ecc09c63c5 Mon Sep 17 00:00:00 2001 From: jm33-m0 Date: Wed, 15 May 2019 15:24:12 +0800 Subject: [PATCH 3/4] print query img --- query.py | 1 + 1 file changed, 1 insertion(+) diff --git a/query.py b/query.py index 70b83cb..4190865 100644 --- a/query.py +++ b/query.py @@ -43,6 +43,7 @@ # query the first img in data.csv query = samples[query_idx] + print("\n[+] query: {}\n".format(query["img"])) _, result = infer(query, samples=samples, depth=depth, d_type=d_type) From 1851db76b2eb212da012ae1d0fd070ca78a64664 Mon Sep 17 00:00:00 2001 From: jm33-m0 Date: Wed, 15 May 2019 15:35:09 +0800 Subject: [PATCH 4/4] update usage --- USAGE.md | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/USAGE.md b/USAGE.md index f903b64..77d87fe 100644 --- a/USAGE.md +++ b/USAGE.md @@ -44,19 +44,22 @@ result looks like ```text $ .venv/bin/python query.py resnet Using cache..., config=resnet152-avg, distance=d1, depth=3 -database/store/qingfeng.jpg: 0.41925543546676636, Class store -database/store/qingfeng-2.jpg: 0.559502124786377, Class store -database/vim/vim-01.jpg: 0.7149869799613953, Class vim -database/vim/vim-03.jpg: 0.7975158095359802, Class vim -database/vim/vim-02.jpg: 0.818065881729126, Class vim + +[+] query: database/vim/vim-02.jpg + +database/vim/vim-01.jpg: 0.4892213046550751, Class vim +database/vim/vim-03.jpg: 0.5926028490066528, Class vim +database/emacs/emacs-02.jpg: 0.7468970417976379, Class emacs +database/emacs/emacs-01.jpg: 0.7663252353668213, Class emacs +database/store/qingfeng-1.jpg: 0.818065881729126, Class store $ cat data.csv img,cls +database/vim/vim-02.jpg,vim database/store/qingfeng-1.jpg,store database/vim/vim-04.jpg,vim database/vim/vim-01.jpg,vim database/vim/vim-03.jpg,vim -database/vim/vim-02.jpg,vim database/store/qingfeng-2.jpg,store database/store/qingfeng.jpg,store database/emacs/emacs-01.jpg,emacs