深度学习中的交叉验证|对象检测

时间:2020-07-07 09:37:06

标签: machine-learning deep-learning computer-vision object-detection supervised-learning

我正在通过对象检测为数据集建模。我是深度学习的新手。在深度学习的背景下,我很难扩展交叉验证的概念。通常,具有深层网络的火车时间非常长,k倍CV并不是一种合理的方法。因此,大概1倍交叉验证更有意义(我已经看到人们在实践中使用了此方法)。我试图做出这种选择,并思考交叉验证背后的想法:超参数调整,或量化建模何时开始过度拟合。我的问题如下:

  1. 具有1倍CV的随机采样误差怎么办?我的想法:使用k倍CV时,当k> 1时,该误差被平均。同样,在k = 1的情况下,超参数在我看来也不合理:我们最终找到的值可以与我们称为验证集的(随机)样本耦合。那么,1倍简历的意义何在?

  2. 我正在使用的数据中已经存在一些数据点问题。我大约有4k张图像,分为2类(对象+背景),每张图像的边界框。我认为,深度网络可以通过更多数据更好地学习,这是常识。为什么我要在这种情况下通过保留验证集来减少训练集?我看不出任何明显的优势。相反,使用整个数据集进行训练似乎可以导致更好的对象检测模型。如果这是真的,那么人们将如何知道什么时候停止,即我可以继续训练,而不会收到有关模型是否已开始过度拟合的任何反馈?

  3. 如何部署生产模型?我想我在上课的时候从未考虑过这一点。该方法非常清楚,您总是需要训练,验证和测试集。在实际设置中,如何利用全部数据创建生产模型? (可能与#2有关,即处理诸如培训多少等实际问题)

1 个答案:

答案 0 :(得分:2)

    对象检测领域中的
  1. 公共计算机视觉数据集通常足够大,因此这不是问题。验证和测试集之间的性能差距可以显示您的方案中有多少问题。 n = 1的交叉验证本质上意味着具有固定的验证集。
  2. 您要保留验证集,以便调整模型的参数。增加权重的数量肯定会提高训练集的性能,但是您想检查一下在看不见的数据上的表现方式,例如验证集。就是说,许多人会根据验证集上的性能来调整参数,然后再进行一次训练,他们将训练和验证数据结合起来,最后在测试集上对其进行测试。
  3. 我认为这已经在2中得到了回答。您可以通过对所有3组进行训练来扩展此范围,但是无论您在其上获得的性能如何,都将不具有代表性。因此,在合并数据之前,应确定要训练的纪元/迭代次数。

您必须确定要优化的内容。大多数论文针对测试集的性能进行了优化,这就是为什么永远不要将其用于训练或验证参数选择的原因。实际上,您通常会通过在培训中包含验证和测试数据来偏爱“更好”的模型。在找到另一个测试集之前,您永远不会知道这个模型有多少“更好”。您还冒着在包含测试数据时会发生“奇怪”的风险。您实际上是在闭着眼睛训练。