【问题标题】:Trained model detects almost everything as one class after a long training经过长时间训练后,经过训练的模型将几乎所有内容都检测为一个类
【发布时间】:2018-06-16 11:32:01
【问题描述】:

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

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

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

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

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

【问题讨论】:

    标签: python tensorflow machine-learning object-detection


    【解决方案1】:

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

    这些模型似乎在图片上效果很好,但在视频上效果不佳

    如果您的单张图片检测良好,那么视频也应该可以正常工作。唯一的区别可能是视频图像的分辨率和质量。因此,比较图像分辨率和视频。

    这是过拟合吗?

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

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

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

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

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

    我认为您可以仔细检查用于训练的数据集,并尽可能多地使用数据进行训练。这些是我通常经历和浪费时间的事情。

    【讨论】:

    • 我使用了 1.6k 个不同姿势/视图的人图像作为数据集,但它们的分辨率不同,有些很大,我认为这不是一件好事。我会尝试调整这些图像的大小,看看会发生什么。此外,我在笔记本上用于测试的图像中有一半来自 eval/test,我想这就是很好地检测到人的原因。
    • 还有一个问题,图像是否需要在 jpeg 文件中才能创建 tfrecord 文件?我的数据集由 bmp、jpg 和 png 组成。我已经运行了从 csv 文件创建 tfrecord 的脚本,并且没有错误,所以我认为一切正常。
    • 很高兴它现在可以工作。我认为这些类型是受支持的。不过不确定:-)
    猜你喜欢
    • 1970-01-01
    • 2023-03-19
    • 2017-07-28
    • 2017-05-11
    • 1970-01-01
    • 2021-01-12
    • 1970-01-01
    • 1970-01-01
    • 2019-09-23
    相关资源
    最近更新 更多