Precision-Recall 曲线

  • 绘制 Precision-Recall 曲线过程中的一些思考

也不能说是思考吧… 菜爆了好吗…

现象是我在画一个 object detection 的算法的 pr 曲线,画出来之后发现他好像 recall ~ 0 的时候, precision 不到 1…然而一般在网上看到的那种 pr 曲线是过 (recall=0, precision=1) 这个点的…

这里面怎么回事呢?

思考 pr 曲线是怎么测的?

我们枚举一个 confidence 的 thresh, 就得到很多 (precision, recall) 的数对.

这个 confidence 什么时候接近 y 轴呢?换言之,什么时候 recall 很小呢?

一个例子是我预测的就很少,自然 recall 也小.

为什么 precision 一般是 1 呢? 因为预测少的时候 confidence 是枚举到了很大的位置,这时的预测基本上都是准的..

那我测的这个为什么不是 1 呢? 它 confidence 最高的那个 box 就是错的, 而因为我枚举的 thresh 是每次增 0.001,所以 0.999 这一档并不都是准的…

upd

读这个的时候意识到好像哪里不太对 https://github.com/Cartucho/mAP/blob/master/main.py#L489

简而言之实际上不需要 confidence 是 0/1 之间的,我们只需要对 confidence 排个序就好了。

思考这个枚举 confidence 的过程,是一个我们逐渐考虑更多的 bounding box 样本的过程.. 所以和我们排个序之后从上到下逐渐处理更多的样本是本质一样的过程.. 所以搞个前缀和就好了= =

还是挺 make sense 的,可惜我想了这么长时间。