测试/验证集中的数据增强?

42

在训练和测试集上都进行数据增强是常见的做法,比如对图像数据集进行随机裁剪等程序化样本增加操作。还是只在训练数据集上进行增强呢?


3
只是训练。黄金法则——永远不要触碰测试集合。原因——测试集合代表着当你把模型投入生产环境时所面对的未知数据。 - saurabheights
11个回答

43

仅适用于训练。数据增强被用来增加训练集的大小,获取更多不同的图像。从技术上讲,您可以在测试集上使用数据增强来查看模型在这样的图像上的表现,但通常情况下,人们不这么做。


4
测试集或验证集为什么不进行增强处理? - Anuj Gupta
11
事实上情况有些变化了......出现了一种新的方法:测试时间增强。它意味着可以利用测试数据的增强来提高预测,特别是对于图像中物体过小的情况。以下是一篇解释文章:https://towardsdatascience.com/augmentation-for-image-classification-24ffcbc38833 - Andrey Lukyanenko
测试时间增强的方法有多有效?@AndreyLukyanenko - Anshuman Kumar
它是有效的并且常用的。 - Andrey Lukyanenko

7

我认为,在某些情况下,对于验证集使用数据增强可能会有所帮助。

例如,我经常为医学图像分割训练许多卷积神经网络。我使用的许多增强变换旨在降低图像质量,以便网络在这样的数据上训练时具有鲁棒性。如果训练集看起来很糟糕,而验证集看起来很好,那么在训练过程中比较损失将会很困难,因此评估过拟合将会变得复杂。

除非我正在使用测试时间增强来提高结果或估计不确定性,否则我永远不会对测试集使用增强。


1
在理论上考虑问题时,我们经常假设我们的训练/验证/测试集是从目标分布中抽取的,但实际上很少是这样。通常情况下,用于进行预测的数据与训练/验证/测试数据不同。(你永远无法两次踏入同一条河流……)增加验证/测试数据可以通过精心设计的增强技术更真实地估计使用时间性能。在实践中,我发现对于验证/测试来说,使用较温和的增强技术可以最好地估计使用时间性能。 - mboss

7

数据增强仅在训练集上进行,因为它有助于模型变得更加普遍和稳健。因此,对测试集进行增强是毫无意义的。


6

这篇关于统计的答案认为,在验证/测试集上应用裁剪有助于使输入与网络训练时使用的训练集中的输入相似。


5
只在训练集上进行数据增强。当然,一定要确保增强不会导致标签错误(例如旋转6和9约180度时)。
首先我们使用训练集和测试集的原因是想要估计系统在现实中可能出现的误差。因此,测试集的数据应该尽可能接近真实数据。
如果您在测试集上进行数据增强,可能会引入错误。例如,假设您想识别数字并进行旋转增强,则6可能看起来像9。但并非所有示例都那么简单。安全第一,谨慎行事。

1
这不是一个正确的例子。如果在数字上执行~ = 180度旋转变换,您还会在训练集中引入标签错误:您旋转6,现在它看起来像9,但您的标签仍然是“6”,并将样本馈送到错误的类别中。这与对测试集执行增强无关。 - Avio

4

在计算机视觉中,您可以在测试期间使用数据增强来 获得测试图像的不同视角。然后,您必须汇总从每个图像获得的结果,例如通过对其进行平均。

例如,给定下面的符号,改变视角可能会导致不同的解释:

different view


那也可以应用于训练集,你知道吗? - Anshuman Kumar
是的,仅在训练集上进行这样的操作更为频繁。 - Coding Cow

2

一些图像预处理软件工具,例如 Roboflow (https://roboflow.com/) ,同样将数据增强应用于测试数据。如果处理的是小而罕见的对象,比如脑微出血(这些在磁共振图像上很难发现),增强测试集可能会有帮助。这样你就可以验证你的模型是否已经学会了在不同方向和亮度条件下检测这些对象(前提是你的训练数据以相同的方式进行了增强)。


1
数据增强的目标是使模型更具普适性,并使其学习更多图像方向,从而在测试期间能够很好地理解测试数据。因此,仅在训练集上使用增强技术是一个很好的实践方法。

1
添加验证数据的目的是构建通用模型,以便预测真实世界的数据。为了预测真实世界的数据,验证集应该包含真实数据。增加验证数据没有问题,但不会提高模型的准确性。

1
以下是我的建议:
你需要在训练模型时使用训练数据和验证数据:前者用于优化参数,后者用于确定合适的停止条件。测试数据则可为你提供一个真实世界中模型表现的估计。
为了增加抗干扰能力,你可以对训练数据进行扩充,以应对包括但不限于采样误差、数据源偏差、全局数据分布偏移、位置变化以及其他任何需要考虑的变化因素。
验证数据应该指示训练方法何时最具普适性。基于这个逻辑,如果你预计在真实世界数据中会有某些变化,而这些变化可以通过数据扩充来模拟,那么验证数据集就应该进行扩充。
另一方面,测试数据不应进行扩充,除非在数据非常有限且测试数据的真实世界表现估计存在过多变化的特殊情况下。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接