machine-learning - 正确分割数据集

标签 machine-learning computer-vision

我已经下载了包含 10 个类对象的数据集用于对象检测。数据集不分为训练、验证和测试。不过,作者在论文中提到将数据集分为 20% 训练、20% 验证和 60% 测试,并且图像是随机选择的。

按照作者所说的标准,我随机选择了 20% 的图像用于训练,20% 的图像用于验证,60% 的图像用于测试。

我想知道一些事情
1)我需要将困难的图像放入训练集或验证集或测试集中吗?例如,目前测试集中有 41 张困难图像,训练集中有 30 张,验证集中有 20 张。
2) 如何确保所有十个对象类均匀分布?
已更新
3)理想情况下,为了平衡分割困难的图像应该均匀分布?如果测试更加困难,或者训练更加困难,或者验证更加困难,对结果有多大影响?

十个类别:飞机、储 jar 、棒球场、网球场、篮球场、田径场、桥梁、船舶、港口和车辆。

我总共有 650 张图像,其中 466 张图像只有一个类别,并且一张图像中有多个对象 飞机=88张图像,储 jar =10张图像,棒球场=46张图像,网球场=29张图像,篮球场=32张图像,田径场=55张图像,桥梁58张图像,船舶=36张图像,港口27张图像,以及车辆=85 张图片。

剩余 184 张图像具有多个类别。

总共757架飞机、302艘轮船、655个储 jar 、390个棒球场、524个网球场、159个篮球场、163个田径场、224个港口、124座桥梁和477辆车辆

最佳答案

最常见的技术是随机选择。例如,如果您有 1000 个图像,您可以创建一个包含每个文件名称的数组,并且可以使用随机排列来随意排列元素。然后你可以使用前200个元素进行训练,接下来的200个元素进行验证,其余元素进行测试(以20%,20%,60%为例)

如果存在极不平衡的类别,您可以强制每组中的类别比例相同。为此,您必须逐类执行我提到的过程。

您不应该手动选择图像。如果您知道数据集中有一些困难的图像,则无法手动选择它们以将它们包含在训练、验证和测试集中。

如果你想对你的算法进行公平的比较,如果一些图像可以极大地改变准确性。您可以多次重复随机分割。在某些情况下,训练集中会有许多困难的图像,而在其他情况下,验证或测试集中会有许多困难的图像。然后您可以提供准确度(或您正在使用的指标)的平均值和标准差。

更新:

我明白了,在您的描述中,一张图像中有多个对象。不是吗? 例如,你可以有两艘船和一座桥吗? 我过去常常使用每个图像中包含单个对象的数据集。然后,为了检测图像中的多个对象,我扫描图像的不同部分以查找单个对象。

您提到的论文作者可能随机划分了数据集。如果您在研究论文中使用更复杂的划分,您应该提及它。

关于你的问题,即每组中包含更多困难图像的效果如何,答案非常复杂。这取决于算法以及训练集的图像与验证集和测试集的图像进行比较时的相似程度。

使用复杂的模型(例如具有大量层和神经元的神经网络),您可以在训练集上获得所需的准确度(例如 100%)。然后,如果图像与验证集和测试集中的图像非常相似,则准确性将相似。但是,如果它们不是很相似,那么您就过度拟合了,并且验证和测试集中的准确性会降低。为了解决这个问题,您需要一个更简单的模型(例如减少神经元的数量或使用良好的正则化技术),在这种情况下,训练集中的准确性会较慢,但验证和测试集的准确性将更接近使用训练集获得的准确率。

关于machine-learning - 正确分割数据集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40816685/

相关文章:

python - Tensorflow 和 OpenCV 实时分类

machine-learning - Gmail如何从文本中提取时间和日期

machine-learning - 为什么在预处理图像数据时需要做零中心数据?

python-3.x - Keras 模型 - Unet 图像分割

matrix - 五点基本矩阵估计的 Sampson 误差

c++ - 无法使 Flandmarks 工作,C++,错误 LNK2019,未解析的外部符号

python - 如何将Tensorflow张量尺寸(形状)作为int值?

machine-learning - 为什么每个 epoch 之后损失都会突然下降?

javascript - 如何从 Javascript 前端将值传递给经过训练的回归函数?

c# - 在 emgu CV 中进行相机校准后如何访问旋转和平移矢量?