我正在使用 Tensorflow 对象检测 API 为我自己的数据训练对象检测器。我正在关注 Dat Tran https://towardsdatascience.com/how-to-train-your-own-object-detector-with-tensorflows-object-detector-api-bec72ecfe1d9的(很棒的)教程。我使用提供的 ssd_mobilenet_v1_coco-model 预训练模型检查点作为训练的起点。我只有一个对象类。
我导出了经过训练的模型,在评估数据上运行它并查看生成的边界框。训练好的模型运行良好;我想说,如果有 20 个对象,通常有 13 个对象在预测的边界框上有斑点(“真阳性”);7 未检测到对象的情况(“假阴性”);出现问题的 2 种情况是两个或更多对象彼此靠近:在其中一些情况下,在对象之间绘制了边界框(“误报”<-当然,称这些“误报”等是不准确的,但这只是为了让我在这里理解精度的概念)。几乎没有其他“误报”。这似乎比我希望得到的结果要好得多,
但是,当我运行评估 ( eval.py
) (在两个不同的评估集上)时,我得到以下 mAP 图(平滑 0.7):
训练期间的 mAP
这将表明 mAP 的巨大变化,以及在训练结束时大约 0.3 的水平,这比我根据我output_inference_graph.pb
在评估集上使用导出的边界框的绘制程度所假设的要差得多。
这是训练的总损失图:训练 期间的总损失
我的训练数据包含 200 张图像,每张图像大约有 20 个标记对象(我使用 labelImg 应用程序标记它们);图像是从视频中提取的,物体很小而且有点模糊。原始图像大小为 1200x900,因此我将其缩小为 600x450 用于训练数据。评估数据(我将其用作评估数据集eval.py
并直观地检查预测结果)是相似的,由 50 张图像组成,每张图像有 20 个对象,但仍然是原始大小(训练数据是从前 30 分钟的视频和最近 30 分钟的评估数据)。
问题 1:为什么当模型看起来运行良好时,mAP 的评估却如此之低?mAP图波动这么大正常吗?我没有触及 tensorboard 用于绘制图形的图像的默认值(我读了这个问题:Tensorflow object detection api validation data size并且有一些模糊的想法,即有一些可以更改的默认值?)
问题2:这可能与训练数据和评估数据的大小不同(1200x700 vs 600x450)有关吗?如果是这样,我是否也应该调整评估数据的大小?(我不想这样做,因为我的应用程序使用原始图像大小,并且我想评估模型在该数据上的表现如何)。
问题 3:从每张图像有多个标记对象的图像中形成训练和评估数据是否有问题(即,评估例程肯定会将一张图像中的所有预测边界框与一张图像中的所有标记边界框进行比较,以及不是一张图像中的所有预测框都指向一个标记框,这会导致许多“误报”?)
(问题 4:在我看来,如果 mAP 趋于平稳,模型训练可能在大约 10000 个时间步后停止,现在是否过度训练?很难说它什么时候波动这么大。)
我是对象检测的新手,所以我非常感谢任何人可以提供的任何见解!:)