一个拥有大量数据的模型是否有可能在单个 epoch 内表现得非常好并达到极低的成本?

数据挖掘 深度学习 张量流 美国有线电视新闻网
2022-02-15 18:58:05

我正在开展一个使用此数据集检测人类意识水平的项目。

我对视频数据进行了如下预处理:

  1. 将视频转换为帧(每 5 秒拍摄一帧。
  2. 将框架旋转为垂直。
  3. 应用 OpenCV DNN 从图像中提取人脸。
  4. 将数据分成 90% 的训练、5% 的验证和 5% 的测试。

数据集中的所有图像的大小约为 570,000 张。

我在移动设备上使用该模型,因此我使用 MobileNetV2 进行迁移学习。模型分类非常好,但看到它做得这么好并且这么快达到非常低的损失感觉很奇怪。

在这么大的数据集上这甚至可能吗?当我尝试在移动设备上使用带有 Tensorflow.js 的模型时,我觉得我做错了,它根本表现不佳。在做了一些研究之后,我意识到我应该使用一个结合了 CNN 和 LSTM 的模型,因为这是视频数据。但是我有点时间紧迫,无法重新对数据进行整个预处理,将图像转换为一系列帧,然后再次进行训练。

我打算做的是对移动设备上的预测进行平均,以提高那里的准确性,但我想知道我是否在任何地方搞砸了这个过程。

损失 曲线下面积

3个回答

这里想到了几件事:

  • 如果您在类似于预训练的任务上使用预训练的 MobileNetV2,那么您可能不需要太多的微调来获得好的结果。这可以解释为什么您会看到良好的训练结果。
  • 对于糟糕的测试结果,您是否以与训练相同的方式转换框架?您能想到的训练管道或电话测试管道之间有什么区别吗?是否可以使用电话测试管道测试您的一些良好培训结果作为健全性检查?

就像您正确指出的那样,您的数据实际上是连续的。在这里简单地随机拆分您的数据以进行训练和测试是行不通的。如果你这样做,很可能每个测试帧距离训练帧只有 5 帧,这使得它看起来非常相似。您的网络实际上已经在训练中看到了您的测试数据。

你可能不得不再次训练。不过,我建议您在预处理数据后保存数据,这样您就可以立即从这一点重新开始。

所以该模型表现不佳,因为我是在对整个输入图像进行预测而不是进行人脸检测然后对裁剪后的人脸进行预测。