经过长时间训练后,经过训练的模型几乎将所有东西都检测为一个 class

Trained model detects almost everything as one class after a long training

我使用 Tensorflow 和 Inception 的预训练模型训练了一个自定义人物检测器,然后在几千步和平均 2-1 损失后,我停止了训练并用实时视频对其进行了测试。结果非常好,只有很少的误报。它可以检测到一些人,但不能检测到所有人,所以我决定继续训练模型,直到我得到低于 1 的平均损失,然后再次测试它。现在,即使没有物体存在,它也能检测到几乎所有的人,甚至是视频的整个画面。这些模型似乎在图片上效果很好,但在视频上效果不佳。这是过度拟合吗?

对不起,我忘了是多少步了。我不小心删除了包含 ckpt 和 tfevents 的培训文件夹。

编辑:我忘记了我也在云上训练具有相同数据集但批量大小更高的相同模型作为备份,现在处于更高的步骤。我稍后会编辑 post,并在我完成从云端下载和测试模型后提供来自 tensorboard 的信息。

edit2:我从云端下载了 200k 步的训练模型并且它正在工作,它检测到人但有时在我移动相机时将整个帧识别为 "person" 不到一秒钟。我想这可以通过继续训练模型来改善。 Total Loss on tensorboard

现在,我将继续在云上进行培训,并尝试记录我测试的每一个结果。我还将尝试在我的数据集中调整一些图像的大小,并使用 mobilenet 在我的本地机器上对其进行训练,并比较两个模型的结果。

正如您所说,模型在训练迭代次数较少时表现良好,我猜预训练模型已经可以检测到人物对象,而您的训练集使检测变得更糟。

The models seems to work great on pictures but not on videos

如果检测到您的单张图片没有问题,那么视频应该也可以。唯一的区别可能是视频图像分辨率和质量。因此,比较图像分辨率和视频。

Is that an overfitting?

你说的图像和视频,如果图像用于训练,你不应该用它们来评估模型。如果模型过度拟合,它将检测训练图像,但不会检测任何其他图像。

正如你所说,模型检测到太多检测,我认为这不是因为过度拟合,它可能与你的数据集有关。我觉得

  1. 您的数据量太少,无法训练。

  2. 网络模型对于数据量来说太大太复杂。尝试较小的网络,如 VGG、inception_v1(ssd 移动网络) 等

  3. 训练集中使用的图像分辨率与评估图像有很大不同。
  4. 学习率很重要,但我认为你的情况没问题。

我认为你可以仔细检查你用于训练的数据集,并尽可能多地使用数据进行训练。这些是我一般经历过的,浪费时间的。