opencv - Adaboost 级联 TPR 和 FPR

标签 opencv machine-learning object-detection adaboost

当我们使用 AdaBoost 进行目标检测时,我们需要为每个阶段(AdaBoost 的迭代)设置 TPR 和 FPR。

我们需要高 TPR 和低 FPR。

据我了解,我们有:

总 TPR = (stage1 TPR)(stage2 TPR)...(stageN TPR)

例如0.9*0.9*0.9~=0.729

总 FPR = (stage1 FPR)(stage2 FPR)...(stageN FPR)

FPR 0.5*0.5*0.5= 0.125 相同

因此,您使用的阶段越多,FPR 就越低,但 TPR 也会降低。

那么为什么不在每个阶段使用阶段 TPR = 0.9999(9) 和 FPR = 0.00001 并且阶段数量较少呢?

各个阶段的TPR和FPR该如何选择?它如何取决于级数?

最佳答案

您对如何计算总 fpr 和 tpr 的看法是正确的,并且观察到随着阶段的增加,总 fpr 和 tpr 会减少。我们不使用 0.999999 的 tpr 和 0.000001 的 fpr 的原因是,它会导致 boosting 过程生成具有许多弱分类器的阶段来实现这些速率。您的目标是整个级联的 tpr 较高且较低,但如果您使用如此极端的值训练阶段,则只需要一个阶段,因为它已经是具有这些速率的良好分类器。

因此,我们通常使用 tpr = 0.99 和 fpr = 0.5 等值的原因是为了保持阶段小而简单,并使用级联结构从错误的分类中恢复。本质上,tpr 为 0.99 和 fpr 为 0.5 意味着任何阶段都必须检测到 99% 的阳性样本,同时允许将 50% 的阴性样本分类为阳性。第一阶段分类为阳性的任何内容都会被传递到第二阶段,然后处理误报。再次接受的最多 50% 会进入第三阶段,依此类推。多个阶段的优点是,如果第一个阶段拒绝了某个样本,您无需评估任何其他阶段,这可以节省大量时间。

假设我们有 fpr = 0.5、tpr = 0.99 和 20 个阶段,那么最终的 fpr 为 0.5^20 = 9.5*10e-7,最终的 tpr 为 0.99^20 = 0.82。

根据算法允许您选择的内容,您可以计算相应的 fpr 和 tpr。例如,如果给定阶段数 N 和最终 fpr,您可以取最终 fpr 的 N 次根来获得阶段 fpr。如果给定阶段和最终 fpr,您可以使用 log10 并且可以计算至少实现最终 fpr 所需的阶段数 (N = log10(最终 fpr)/log10(阶段 fpr)。

关于opencv - Adaboost 级联 TPR 和 FPR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30487692/

相关文章:

machine-learning - 时间序列的 LSTM

r - 我可以在 R 中的 PCA 列上使用特征选择方法吗?

python - 使用 SSD Mobilenet (Tensorflow API) 进行 1080p 物体检测

python - 如何为自定义类训练 DeepSORT 跟踪器?

c++ - 如何在 OpenCV 中将图像与另一个图像相关联

c++ - OpenCV 和网络摄像机 - 或者 - 如何监视邻居?

python - 考虑到每个项目可以有超过 1 个主题,如何将数据集中每个项目的主题转换为特征向量

opencv - 二值图像中的目标检测

c++ - 如何在opencv cpp中获取霍夫变换矩阵,霍夫变换的theta和rho值

c++ - 如何获取 3d 维数组并将其转换为模型?