From e668b0f3781fc49b1c0769b72732c8f4fccf6f41 Mon Sep 17 00:00:00 2001 From: AntiAegis Date: Tue, 27 Nov 2018 12:04:27 +0700 Subject: [PATCH] backup --- python/MMU2-optimal.png | Bin 0 -> 23286 bytes python/eval_mmu2.py | 136 ++++++++++++++++++ .../fnc/__pycache__/boundary.cpython-35.pyc | Bin 4860 -> 4812 bytes python/fnc/__pycache__/encode.cpython-35.pyc | Bin 2506 -> 2493 bytes .../__pycache__/extractFeature.cpython-35.pyc | Bin 1062 -> 1201 bytes python/fnc/__pycache__/line.cpython-35.pyc | Bin 7556 -> 7543 bytes .../fnc/__pycache__/matching.cpython-35.pyc | Bin 3676 -> 4428 bytes .../fnc/__pycache__/normalize.cpython-35.pyc | Bin 3717 -> 3704 bytes python/fnc/__pycache__/segment.cpython-35.pyc | Bin 3771 -> 4140 bytes 9 files changed, 136 insertions(+) create mode 100644 python/MMU2-optimal.png create mode 100644 python/eval_mmu2.py diff --git a/python/MMU2-optimal.png b/python/MMU2-optimal.png new file mode 100644 index 0000000000000000000000000000000000000000..88af70582417bcd76950940de47d07b9ec6f1529 GIT binary patch literal 23286 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: + continue + arg = (features[i][0], features[i][1], features[j][0], features[j][1]) + args.append(arg) + distances = pools.map(pool_func_calHammingDist, args) + + # Construct a distance matrix + k = 0 + dist_mat = np.zeros([n_image_files, n_image_files]) + for i in range(n_image_files): + for j in range(n_image_files): + if ij: + dist_mat[i, j] = dist_mat[j, i] + + # Metrics + accuracies, precisions, recalls, fscores = [], [], [], [] + for threshold in thresholds: + decision_map = (dist_mat<=threshold).astype(int) + accuracy = (decision_map==ground_truth).sum() / ground_truth.size + precision = (ground_truth*decision_map).sum() / decision_map.sum() + recall = (ground_truth*decision_map).sum() / ground_truth.sum() + fscore = 2*precision*recall / (precision+recall) + accuracies.append(accuracy) + precisions.append(precision) + recalls.append(recall) + fscores.append(fscore) + + # Save the best result + best_fscore = max(fscores) + best_threshold = thresholds[fscores.index(best_fscore)] + best_results.append((eye_threshold, best_threshold, best_fscore)) + +# Show the final best result +eye_thresholds = [item[0] for item in best_results] +thresholds = [item[1] for item in best_results] +fscores = [item[2] for item in best_results] + +print("Maximum fscore:", max(fscores)) +print("Best eye_threshold:", eye_thresholds[fscores.index(max(fscores))]) +print("Best threshold:", thresholds[fscores.index(max(fscores))]) \ No newline at end of file diff --git a/python/fnc/__pycache__/boundary.cpython-35.pyc b/python/fnc/__pycache__/boundary.cpython-35.pyc index 9616e42a3b6723a68c82855bede161c7ef58f065..8f63568492129c5c3063d20fe2eea62077a8c992 100644 GIT binary patch delta 187 zcmeyPdPX%>jF*=yX8xb(r4kGbj~S2v6Oioy#KkT^A_a&T8FCmHq8Pz!CWag)hFoTb zC}sx66lR7L7KRp}91BAVD?-rUQ3frWAUf)8){G*XRoVU67*jTv z@LphHTrk;H$Uu+t7HeKlyjPe@jF*=yX8xaOKAw$SGgu_-^fU5vQ}vSzN(~Lo&CT^)^2_sb@)J`gA7{~L jCg~9`8o387!*a`WgATsrrd|C7Fq->6yj)E=BnTN%+3ak(O(O7_UU|U|8D3(x(Eei1ECM;A#6elgiDY=q4ISk$5A}gDyy1NdXmSHwi{iyr$I7K z-$bYCK&2;URMl)Bm6wfAlISo!?l!CDI2j&~W0gjUs#@x!ilc0#vY{DS!*=`sdCKq3 zi;Y#X{=L65nj~uHXqxwW{eFMv@#K9PPa;`9;SV-9sUlk@K&!>p`8vDKR`@NhZ<6w? z+bS>k-n$jb^^%3ag00pq3vCOwQrjObzzy0~-o0cZ^H|-t<7d|h+D@C%=egWv|AM*h EU&x@A5&!@I delta 573 zcmYjOO=}ZD7=C7EzmrW$A+<#!NKWw*#FHReRP<7+&_iJ;mNmOc*X~D{-KdmVio`z< z_6G_Mu%fanF$Rk6a=;gDD;oo9gCBdzx0^Sot`iMFTV))B-wy z?m&~Uplz(|&1e@*2;GGy1ZKkA=i+<&nH{tr__cPQ587jXv%TOW%6Hd4hL_6R^tXAC zv84V!q5GwMoJ}Esmqt$w5-g>oaNP z%dD1OmCp0%SuvA5&80g{74=GbBo@m>n#uNsxO*$4ef}Ix&dNNQL`9uO$vmwlk5##N zS-zdTDb@L8p~_duv~ItN2jd;GSGxr0Im{6hgnc#;*V%w=iyK1qY3y+9x7*gkJ4P$B c!xb>U`qR6Ym+>-7?sqAxJc2F0#i%=f0SnP}Qvd(} diff --git a/python/fnc/__pycache__/line.cpython-35.pyc b/python/fnc/__pycache__/line.cpython-35.pyc index 80cc42b7413dc3eda3cae30624cb708e6570fa39..cffb590f63947d4518571c4e77222c1278ad04aa 100644 GIT binary patch delta 108 zcmZp%{%*x3#>>kUGyhMtoW@2j0aghc{fzwFRQ=?FQbR*?b8~%{{PMh<{KS;W_N@Ah zJe%`b!F3n MZ;;syBy(gX04l*Ed;kCd delta 121 zcmexv)nd&h#>>lb=fvJtC3qsZnY)-WbUm(4rbZ?G{IPM*YfoUveY6u&7WW5VVM0uLA&=Wi|) Z%3@>Oy7`X8F=j@d$%|!n1Ic(<2>>TfCtUyl diff --git a/python/fnc/__pycache__/matching.cpython-35.pyc b/python/fnc/__pycache__/matching.cpython-35.pyc index 2c538611c69cc4d1b3ef54a3c469261009006128..09612adf4585b7dd85d400fc1273d155b75d3ddf 100644 GIT binary patch literal 4428 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 delta 193 zcmew%(<;j)#>>lfy+$@lRdgd)E+=agQ$>E%R)w|6IRs zES7aWbK~28K7LRj`kjt^;+S8=a6jE!ys~U2$xP8*g_;>M1(|6wRk|yvnUzbBS-I4B zdF`~e_w}Xs9=(h3>l-m3f95c<7;j;?4X_@OPqZuOMvMY{;}j&w6HNLs^5f(uXg4mc zNeWUFq{Hi?b<0zz3v-GiyK(a1B-lLW)6;zVaIY=oP{~hnte+-cW;j_FyJsiiu%^QW zr8?pXRi<+26DJv8owDVoY}0Xh@}(}@L{3jYpg*Px{YugEOM&F3> z%2cQtz=mC5R!EwEl2$CF6((qgO?7ste6H~J2pBIm;TN1BUm@o^#Y<5a8lh~JF_@v_ zOo5qE7d?%Uhm>eUmVCs^Q*&z)G1IzUQLl<|=>syuLx+@g@e#JNO%k-9o37Jlhq z1}=BNMY9nyK%iPMOMW4mm1%H+5A@&D?4pCS510&;lr5SR@HOH+jlIZ z({F8A8CA9JSiP3pw%m2E?O3j17?DFn8j@_=Jrk}&*IMrndtPV9u{SJt?EAiJ8B?rh z8_sYL-i$vCFDJe@GuKQYN2kA^KbC6$#PJQo-x5F8&*HWF`}IcK?puwGo#D#L>gsCa zl6`y7vs-3(Ke>|C`NjMMKr`W=$>pV_DBw{=Qp_t6X2j&t<0r+*SYG5}nwS;3;w*)0 zshTMN@Igw{@mm4$RB{S}mBLa$HdU&%7ygxfGQ5}m<4x7EymimsVddT#x}Je!o5rT? z7%&W-L1(aqnG0cz+ihzAGc!je2|H?2q{3g-j}{hjYUde-Qw&ctJi$mF+PH>%^7?ftJh zu4pM7!V!S0P9waiFJzaQs4%RAUA;a!&(j*i3xLyk=dk9(N)M}l4o*!C=km~TT*i*+ zyvV^97*-ixVtAS16^2(Cj%ic^_az22VwFk_fp#l-Q5C0zA@X8QDdLLgxCG%-xewo1 m;w@NLhXapncA)xxdaZAp!=CjT|G&5zKoey=TC#90f95d?|5Dlj delta 1416 zcmZuxOKTHR6h3#7nItolnKpeS)<;tt#doY)A5g?s5%GbbpoSvE&a@_JO_`2p;f`5U z7cOPCE(Aec2rk^|FHr;qL2&27l`Fq? zz2X;Zi`98QcJy!h_sf{x_^19jU8v~(ieFodUl}iU?E?4Lh4Ss@qF=7w32Rk3@j1to^94C4$V3>z7?#n-HZS2?FZ!EUAo05e$2n*fw62?VCOq9BT*h_9;+Ac<_k z6iV~|p_bl$u|_(vYVBB4)l>0QW-LCM{lwwg2HXcK=3sC9#u>HtF(c1Vjz2h?TN6xf zU^oES=>}`rtmUwl*LEmX>|4z+M0ZyFg_;)}WaC2&lMII$jxZc$IL7c-_JiQzUyifq z{Bz}Q`Xv;=6(jBR