TensorFlow对象检测API:评估mAP表现得很奇怪?

时间:2017-12-07 10:20:41

标签: tensorflow object-detection-api

我正在使用Tensorflow Object Detection API为我自己的数据训练一个物体探测器。我正在关注Dat Tran https://towardsdatascience.com/how-to-train-your-own-object-detector-with-tensorflows-object-detector-api-bec72ecfe1d9的(精彩)教程。我使用提供的ssd_mobilenet_v1_coco模型预训练模型检查点作为培训的起点。我只有一个对象类。

我导出训练好的模型,在评估数据上运行它并查看生成的边界框。训练有素的模型运作良好;我会说如果有20个物体,通常会有13个物体在预测的边界框上有斑点(“真正的正面”); 7未检测到物体的地方(“假阴性”);发生问题的2个案例是两个或多个对象彼此接近:在某些情况下,在对象之间绘制了边界框(“误报”< - 当然,称这些“误报”等是不准确的,但这只是让我理解这里的精度概念)。几乎没有其他“误报”。这似乎比我希望获得的结果好得多,虽然这种视觉检查没有给出实际的mAP(根据预测和标记的边界框的重叠计算?),我粗略估计mAP为像13 /(13 + 2)> 80%的东西。

但是,当我运行评估(eval.py)(在两个不同的评估集上)时,我得到以下mAP图(0.7平滑): mAP during training

这表明mAP有很大的变化,并且在训练结束时水平约为0.3,这比我根据我使用导出的{{1时绘制边界框的程度有多好在评估集上。

以下是培训的总损失图: total loss during training

我的训练数据包含200张图像,每张图像大约有20个标记对象(我使用labelImg app标记它们);从视频中提取图像,对象很小,模糊不清。原始图像尺寸为1200x900,因此我将训练数据减少到600x450。评估数据(我用作output_inference_graph.pb的评估数据集并在视觉上检查预测的样子)是相似的,由50个图像组成,每个图像有20个对象,但仍然是原始大小(训练数据从视频的前30分钟和最后30分钟的评估数据中提取)。

问题1:当模型看起来效果如此之好时,为什么评估中的mAP如此之低? mAP图波动这么多是正常的吗?我没有触及张量板用于绘制图形的图像的默认值(我读过这个问题:Tensorflow object detection api validation data size并且有一些模糊的想法,即有一些默认值可以更改?)

问题2:这可能与不同大小的训练数据和评估数据(1200x700 vs 600x450)有关吗?如果是这样,我是否应该调整评估数据的大小? (我不想这样做,因为我的应用程序使用原始图像大小,我想评估模型对该数据的效果。)

问题3:从每个图像有多个标记对象的图像形成训练和评估数据是否有问题(即,评估例程肯定会将一个图像中的所有预测边界框与一个图像中的所有标记边界框进行比较图像和一个图像中的所有预测框到一个标记框,这会产生许多“假误报”?)

(问题4:在我看来模型训练可能已经在大约10000次步骤后被停止了mAP类型的平整,现在是否已经过度训练?当它波动太多时很难分辨。)

我是对象检测的新手,所以我非常感谢任何人都可以提供的见解! :)

1 个答案:

答案 0 :(得分:7)

问题1:这是最难的......首先,我认为您无法正确理解mAP是什么,因为您的粗略计算是错误的。简而言之,这是如何计算的:

  • 对于每类对象,使用真实对象和检测到的对象之间的重叠,将检测标记为“真阳性”或“假阳性”;没有与其相关的“真阳性”的所有真实物体都被标记为“假阴性”。

  • 然后,以递减的置信度迭代所有检测(在数据集的所有图像上)。计算准确度(TP/(TP+FP))和召回(TP/(TP+FN)),仅计算您已经看到的TP和FP 的检测数(置信度大于当前值) 。这给你一个点(acc,recc),你可以把它放在精确回忆图上。

  • 将所有可能的点添加到图表后,计算曲线下的面积:这是此类别的平均精度

  • 如果您有多个类别,则mAP是所有AP的标准均值。

将其应用于您的案例:在最好的情况下,您的真正积极因素是最有信心的检测。在这种情况下,你的acc / rec曲线将看起来像一个矩形:你有100%的准确度,直到(13/20)召回,然后指向13/20召回和<100%准确度;这会给你mAP=AP(category 1)=13/20=0.65。这是最好的情况,你可以期待更少的实践,因为误报更高的信心。

你的其他原因可能会降低:

  • 可能在看似好的边界框中,有些仍然在计算中被拒绝,因为检测与真实对象之间的重叠不够大。标准是两个边界框(实数和检测)的交叉联合(IoU)应该超过0.5。虽然它似乎是一个温和的门槛,但它并不是真的;您应该尝试编写一个脚本来显示检测到的具有不同颜色的边界框,具体取决于它们是否被接受(如果没有,您将同时获得FP和FN)。

  • 也许您只是可视化评估的前10个图像。如果是这样,请更改它,原因有两个:1。也许你对这些图像非常幸运,并且它们不能代表下面的内容,只是靠运气。 2.实际上,幸运的是,如果这些图像是评估集中的第一个,它们会在视频训练集结束后立即出现,因此它们可能与训练集中的某些图像非常相似,因此它们是更容易预测,因此它们不能代表您的评估集。

问题2:如果您尚未在配置文件mobilenet_v1_coco-model中更改该部分,则所有图片(用于培训和测试)都会在开始时重新调整为300x300像素网络,所以你的预处理并不重要。

问题3:不,这根本不是问题,所有这些算法都是为了检测图像中的多个对象而设计的。

问题4:鉴于波动,我实际上会继续训练,直到你看到改善或明显的过度训练。 10k的步骤实际上非常小,也许它已经足够了,因为你的任务相对容易,可能还不够,你需要等十倍才能有显着的改进......