Dude, the prec/recall function is very slow. Use numpy if possible for batch calculations: ``` def calc_precision_recall(contours_a, contours_b, threshold): x = contours_a y = contours_b t1 = np.tile(x, (len(y),1)) t2 = np.repeat(y, len(x), axis=0) t = np.concatenate( (t1,t2), axis=1) dx = (t[...,0] - t[...,2]) * (t[...,0] - t[...,2]) dy = (t[...,1] - t[...,3]) * (t[...,1] - t[...,3]) thr = (dx + dy) < (threshold * threshold) blocks = np.split(thr, len(y)) block_has_hit = [np.any(x == True) for x in blocks] top_count = np.sum(block_has_hit) precision_recall = top_count/len(y) return precision_recall, top_count, len(y) ``` It should be the same, you can validate it with your own data. Thanks, Balint
Activity
bpfliegel commentedon Oct 21, 2019
Even faster to keep the outer loop:
Thanks, all the best!
minar09 commentedon Oct 22, 2019
Thank you very much, @bpfliegel for your suggestions. Appreciate it.
bpfliegel commentedon Oct 22, 2019
Thanks to you for your work! :)
minar09 commentedon Apr 18, 2020
Hey, @bpfliegel , just wondering could you please create a pull request with your improvements? That would be really great. Thank you very much.
bpfliegel commentedon Apr 19, 2020
@minar09 too busy, sorry, but I posted you the source code above ^^^ thanks
minar09 commentedon Apr 20, 2020
@bpfliegel , same here. No problem. Thank you very much for the codes. I will try to update the repository.
theodumont commentedon Nov 17, 2020
Hi! Thanks for the repo.
I implemented @bpfliegel's 2nd version and did a PR, all the details are there: #2
minar09 commentedon Nov 17, 2020
Thank you @theodumont for your contributions.