训练模型在长时间训练后几乎将所有内容检测为同一类

我使用TensorFlow和Inception的预训练模型训练了一个自定义的人员检测器,经过几千步训练和平均2-1的损失后,我停止了训练,并用实时视频进行了测试。结果相当不错,只有少数误报。它可以检测到一些人,但不是所有人,所以我决定继续训练模型,直到平均损失低于1,然后再次测试。现在它几乎将所有东西都检测为人,甚至在没有物体存在时,整个视频画面都被检测为人。模型在图片上表现很好,但在视频上却不行。这是过拟合吗?

抱歉,我忘了有多少步。我不小心删除了包含ckpt和tfevents的训练文件夹。

编辑:我忘了我在云端也用相同的数据集和更高的批量大小训练了相同的模型作为备份,现在已经进行了更多的步骤。我稍后会编辑帖子,并在从云端下载并测试模型后提供TensorBoard的信息。

编辑2:我从云端下载了20万步的训练模型,它可以工作,检测到人员,但有时在移动摄像头时会将整个画面识别为“人”,持续时间不到一秒。我猜这可以通过继续训练模型来改进。TensorBoard上的总损失

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


回答:

正如你所说,当训练迭代较少时,模型表现不错,我猜预训练模型已经能够检测到人,而你的训练集使得检测效果变差了。

模型在图片上表现很好,但在视频上却不行

如果单张图片检测效果很好,那么视频也应该可以。唯一的区别可能是视频的图像分辨率和质量。所以,比较一下图像分辨率和视频的分辨率。

这是过拟合吗?

你提到的图片和视频,如果训练中使用了这些图片,你不应该用它们来评估模型。如果模型过拟合,它会检测到训练图片,但不会检测到其他图片。

正如你所说,模型检测到太多目标,我认为这不是因为过拟合,可能是数据集的问题。我认为

  1. 你的训练数据量太少。

  2. 网络模型对于数据量来说太大太复杂了。尝试使用较小的网络,如VGG、Inception_v1(SSD MobileNet)等。

  3. 训练集中使用的图像分辨率与评估图像的分辨率差异很大。
  4. 学习率很重要,但我认为在你的情况下是合适的。

我认为你可以仔细检查用于训练的数据集,并尽可能多地使用数据进行训练。这些是我通常遇到并浪费时间的问题。

Related Posts

L1-L2正则化的不同系数

我想对网络的权重同时应用L1和L2正则化。然而,我找不…

使用scikit-learn的无监督方法将列表分类成不同组别,有没有办法?

我有一系列实例,每个实例都有一份列表,代表它所遵循的不…

f1_score metric in lightgbm

我想使用自定义指标f1_score来训练一个lgb模型…

通过相关系数矩阵进行特征选择

我在测试不同的算法时,如逻辑回归、高斯朴素贝叶斯、随机…

可以将机器学习库用于流式输入和输出吗?

已关闭。此问题需要更加聚焦。目前不接受回答。 想要改进…

在TensorFlow中,queue.dequeue_up_to()方法的用途是什么?

我对这个方法感到非常困惑,特别是当我发现这个令人费解的…

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注