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

Mar*_*ari 8 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.pyevaluate ()(在两个不同的评估集上)时,我得到以下mAP图(0.7平滑): mAP在训练期间

这将表明mAP的巨大变化,以及在训练结束时约0.3的水平,这比我根据在output_inference_graph.pb评估集上使用导出时绘制边界框的程度所假设的情况更糟糕.

以下是培训的总损失图: 培训期间的总损失

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

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

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

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

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

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

gde*_*lab 8

问题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步实际上非常小,也许它已经足够了,因为你的任务相对容易,可能还不够,你需要等十倍才能有显着的改进......

  • 我现在理解4件事:准确性,召回,AP和mAP.你写了这篇小文,给了我一个坚定的帮助.请记住,我已经在生产中部署了网络,但我找不到这些概念的正确解释.干得好先生! (2认同)