深度学习背景下的交叉验证 |物体检测[关闭]

Posted

技术标签:

【中文标题】深度学习背景下的交叉验证 |物体检测[关闭]【英文标题】:Cross validation in the context of deep learning | Object Detection [closed] 【发布时间】:2020-10-27 12:52:48 【问题描述】:

我正在通过对象检测对数据集进行建模。我对深度学习比较陌生。我很难在深度学习的背景下扩展交叉验证的想法。通常,深度网络的训练时间很长,k-fold CV 不是一个合理的方法。所以,可能 1 折交叉验证更有意义(我已经看到人们在实践中使用它)。我试图推理这种选择并思考交叉验证背后的想法:超参数调整,或量化建模何时开始过度拟合。我的问题如下:

    1 倍 CV 的随机抽样误差如何?我的想法:对于 k 倍 CV,当 k>1 时,这个误差会被平均化。此外,在 k=1 的情况下,超参数对我来说似乎也不合理:我们最终找到的值可以与我们称为验证集的(随机)样本相结合。那么,1-fold CV 的意义何在?

    我正在处理的数据中已经存在大量数据点。我有大约 4k 图像,2 个类别(对象+背景),每个图像的边界框。我认为深度网络通过更多数据更好地学习是普遍的智慧。在这种情况下,我为什么要通过保留验证集来减少我的训练集?我没有看到任何明显的优势。相反,似乎使用整个数据集进行训练可以产生更好的目标检测模型。如果这是真的,那么如何知道何时停止,即我可以继续训练,而没有任何关于模型是否开始过度拟合的反馈?

    如何部署生产模型?我想我在上课的时候从来没有想过这个问题。这种方法很清楚,你总是有一个训练、验证、测试集。在实际设置中,如何利用整个数据来创建生产模型? (可能与#2有关,即处理实际方面,例如要训练多少等)

【问题讨论】:

请注意machine-learningtag info中的介绍和注意 【参考方案1】:
    对象检测领域的公共计算机视觉数据集通常足够大,这不是问题。验证集和测试集之间的性能差距可以显示您的场景中有多少问题。 n = 1 的交叉验证本质上意味着具有固定的验证集。 您希望保留验证集以调整模型的参数。增加权重的数量肯定会提高训练集的性能,但您想检查它在看不见的数据上的表现,例如验证集。也就是说,许多人会根据验证集上的性能调整参数,然后再进行一次训练,将训练和验证数据结合起来,最后在测试集上进行测试。 我认为这已在 2 中得到解答。您可以通过对所有 3 组进行训练来扩展这一点,但无论您在这方面取得的成绩如何,都不会具有代表性。因此,您应该在合并数据之前确定要训练的 epoch/迭代次数。

您必须决定要优化什么。大多数论文都针对测试集的性能进行了优化,这就是为什么它永远不应该用于训练或验证参数选择的原因。实际上,您可能经常通过在训练中包含验证和测试数据来支持“更好”的模型。在你找到另一个测试集之前,你永远不会知道这个模型有多“好”。在包含测试数据时,您还冒着发生“奇怪”事情的风险。你基本上是在闭着眼睛训练。

【讨论】:

以上是关于深度学习背景下的交叉验证 |物体检测[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

物体检测算法:R-CNN,SSD,YOLO 动手学深度学习v2 pytorch

动手学深度学习 3-5 Others

动手学深度学习 3-5 Others

深度学习之目标检测常用算法原理+实践精讲

深度学习背景下的图像三维重建技术进展综述

动手学深度学习 v2