YOLO
YOLO是目标检测算法其中的一种,目前更新到第三代,即:YOLOv3;其官网为YOLO: Real-Time Object Detection。具体代码之后在解析,先把光光的问题给解决了=-=
问题
1 | for (i = 0; i < classes; ++i) { |
问:为什么point要小于11,已经写死的,如果可换是一个变量= =
解析
从代码上下文可知point取0~10(0,1,2,3,4,5,6,7,8,9,10)这11个数,之后在分别乘以0.1作为cur_recall变量的取值,即:cur_recall的取值为0~1(0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1)。。之后在与pr[i][rank].recall
进行比较,若pr[i][rank].recall
大,则进行更新cur_precision的值,否则不更新。
所以我们从pr[i][rank].recall
入手,由前文可知pr[i][rank].recall
是其的召回率,根据召回率的定义可知:召回率为所有正例中被分对的比例,衡量了分类器对正例的识别能力。而准确率则是:表示被分为正例的示例中实际为正例的比例。
因此可以这么认为:任意一个召回率都有其准确率。
而在YOLO算法中,我们需要的是平均准确率,即:avg_precision,因此在循环中将不同召回率的准确率累加起来,在除以11作为平均准确率。
总结
- 代码中的11就是0~1
(0.0,0.1,0.2,0.3,0.4,0.5,0.6,0.7,0.8,0.9,1.0)
,这11种不同的召回率。 if (pr[i][rank].recall >= cur_recall)
这段代码表示不同种类预测的召回率与11个阀值进行比较,在根据if (pr[i][rank].precision > cur_precision)
进行准确率的大小判断累加。- 我觉得要画图解释,但我太懒了=-=