Commit 11f3927c authored by marina.kolpakova's avatar marina.kolpakova

allow multiple detectors

parent 469eeea3
...@@ -7,6 +7,8 @@ import sys, os, os.path, glob, math, cv2 ...@@ -7,6 +7,8 @@ import sys, os, os.path, glob, math, cv2
from datetime import datetime from datetime import datetime
import numpy import numpy
plot_colors = ['b', 'r', 'g', 'c', 'm']
# "key" : ( b, g, r) # "key" : ( b, g, r)
bgr = { "red" : ( 0, 0, 255), bgr = { "red" : ( 0, 0, 255),
"green" : ( 0, 255, 0), "green" : ( 0, 255, 0),
...@@ -19,7 +21,7 @@ if __name__ == "__main__": ...@@ -19,7 +21,7 @@ if __name__ == "__main__":
parser = argparse.ArgumentParser(description = 'Plot ROC curve using Caltech mathod of per image detection performance estimation.') parser = argparse.ArgumentParser(description = 'Plot ROC curve using Caltech mathod of per image detection performance estimation.')
# positional # positional
parser.add_argument("cascade", help = "Path to the tested detector.") parser.add_argument("cascade", help = "Path to the tested detector.", nargs='+')
parser.add_argument("input", help = "Image sequence pattern.") parser.add_argument("input", help = "Image sequence pattern.")
parser.add_argument("annotations", help = "Path to the annotations.") parser.add_argument("annotations", help = "Path to the annotations.")
...@@ -34,47 +36,53 @@ if __name__ == "__main__": ...@@ -34,47 +36,53 @@ if __name__ == "__main__":
args = parser.parse_args() args = parser.parse_args()
# parse annotations print args.cascade
# # parse annotations
sft.initPlot()
samples = call_parser(args.anttn_format, args.annotations) samples = call_parser(args.anttn_format, args.annotations)
cascade = sft.cascade(args.min_scale, args.max_scale, args.nscales, args.cascade) for idx, each in enumerate(args.cascade):
pattern = args.input print each
camera = cv2.VideoCapture(pattern) cascade = sft.cascade(args.min_scale, args.max_scale, args.nscales, each)
pattern = args.input
camera = cv2.VideoCapture(pattern)
# for plotting over dataset
nannotated = 0
nframes = 0
# for plotting over dataset confidenses = []
nannotated = 0 tp = []
nframes = 0
confidenses = [] while True:
tp = [] ret, img = camera.read()
if not ret:
break;
while True: name = pattern % (nframes,)
ret, img = camera.read() _, tail = os.path.split(name)
if not ret:
break;
name = pattern % (nframes,) boxes = samples[tail]
_, tail = os.path.split(name) boxes = sft.norm_acpect_ratio(boxes, 0.5)
boxes = samples[tail] nannotated = nannotated + len(boxes)
boxes = sft.norm_acpect_ratio(boxes, 0.5) nframes = nframes + 1
rects, confs = cascade.detect(img, rois = None)
nannotated = nannotated + len(boxes) if confs is None:
nframes = nframes + 1 continue
rects, confs = cascade.detect(img, rois = None)
if confs is None: dts = sft.convert2detections(rects, confs)
continue
dts = sft.convert2detections(rects, confs) confs = confs.tolist()[0]
confs.sort(lambda x, y : -1 if (x - y) > 0 else 1)
confidenses = confidenses + confs
confs = confs.tolist()[0] matched = sft.match(boxes, dts)
confs.sort(lambda x, y : -1 if (x - y) > 0 else 1) tp = tp + matched
confidenses = confidenses + confs
matched = sft.match(boxes, dts) print nframes, nannotated
tp = tp + matched
print nframes, nannotated fppi, miss_rate = sft.computeROC(confidenses, tp, nannotated, nframes)
sft.plotLogLog(fppi, miss_rate, plot_colors[idx])
fppi, miss_rate = sft.computeROC(confidenses, tp, nannotated, nframes) sft.showPlot("roc_curve.png")
sft.plotLogLog(fppi, miss_rate) \ No newline at end of file
\ No newline at end of file
...@@ -55,7 +55,7 @@ def crop_rect(rect, factor): ...@@ -55,7 +55,7 @@ def crop_rect(rect, factor):
# #
def plotLogLog(fppi, miss_rate): def initPlot():
fig, ax = plt.subplots() fig, ax = plt.subplots()
fig.canvas.draw() fig.canvas.draw()
...@@ -63,22 +63,19 @@ def plotLogLog(fppi, miss_rate): ...@@ -63,22 +63,19 @@ def plotLogLog(fppi, miss_rate):
plt.xlabel("fppi") plt.xlabel("fppi")
plt.ylabel("miss rate") plt.ylabel("miss rate")
plt.title("ROC curve Bahnhof") plt.title("ROC curve Bahnhof")
# plt.yticks( [0.05, 0.10, 0.20, 0.30, 0.40, 0.50, 0.64, 0.80])
# ylabels = [item.get_text() for item in ax.get_yticklabels()]
# ax.set_yticklabels( ylabels )
plt.grid(True) plt.grid(True)
# plt.xticks( [pow(10, -4), pow(10, -3), pow(10, -2), pow(10, -1), pow(10, 0), pow(10, 1)])
# xlabels = [item.get_text() for item in ax.get_xticklabels()]
# ax.set_xticklabels( xlabels )
plt.xscale('log') plt.xscale('log')
plt.yscale('log') plt.yscale('log')
plt.semilogy(fppi, miss_rate, color='m', linewidth=2) def showPlot(name):
plt.savefig(name)
plt.show() plt.show()
def plotLogLog(fppi, miss_rate, c):
plt.semilogy(fppi, miss_rate, color = c, linewidth = 2)
def draw_rects(img, rects, color, l = lambda x, y : x + y): def draw_rects(img, rects, color, l = lambda x, y : x + y):
if rects is not None: if rects is not None:
for x1, y1, x2, y2 in rects: for x1, y1, x2, y2 in rects:
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment