跳到主要内容

数据集分割

这个功能解决什么问题

训练一个模型,光有一堆图片不够。你还需要回答两个问题:

  • 训练到第几轮停下来最合适?
  • 训练出来的模型在「没见过的图」上表现怎么样?

为了回答这两个问题,工业界把数据分成三份。

  • 训练集(train):给模型「学习」用的图。
  • 验证集(val):训练过程中反复用这批图测一下,用来挑最佳训练轮数和调超参。
  • 测试集(test):训练完全结束后,用这批图做最终评估,衡量模型的泛化能力。

数据集分割就是干这件事:把工作区里所有图片按比例划分到这三个集合里,让训练脚本能正确读取。

入口

数据集分割入口在项目工作区的数据集详情页「操作」标签页里。

  1. 进入项目工作区的数据集详情页

    打开对应项目,左侧导航点「数据集」。

  2. 点击「操作」标签页

    在详情页顶部的标签栏选「操作」(注意:全局数据集列表是只读模式,没有这个标签页)。

  3. 找到「数据集分割」

    在「操作」标签页里找到「数据集分割」区域,点击展开分割界面。

数据集分割面板
图1:数据集分割面板,左侧模式选择,右侧滑块和预览

两种分割模式

平台支持两种分割模式,根据你的需求选一种。

模式 1:重新分配所有图片

把数据集里的所有图片(不管现在分在哪个集合)打乱重新按新比例分配

什么时候用这种模式
  • 第一次给数据集做分割。
  • 想彻底重新洗牌,不保留任何已有的集合划分。
  • 数据量比较小,想让三个集合的样本分布更随机。

这种模式下,你设置的比例就是最终的训练集 / 验证集 / 测试集占比。比如设 70 / 15 / 15,所有图片打乱后按 70% / 15% / 15% 分到三个集合里。

模式 2:从训练集分割

保留现有的验证集和测试集,只从训练集里抽出一部分图片补足验证集和测试集的新比例。

什么时候用这种模式
  • 已经做过一次分割,现在想稍微调一下比例(比如验证集从 10% 提到 15%)。
  • 不想动现有的验证集和测试集,只想增量调整。
「从训练集分割」的百分比基数

这个模式下的百分比基数是整个数据集(train + val + test)的总图数,不是只看现有训练集。

比如数据集一共 1000 张,当前 700 / 150 / 150。你想让验证集最终占 20%,就填 20,平台算出最终验证集应该是 200 张,需要从训练集抽出 50 张补过去,结果变成 650 / 200 / 150。不是填「从训练集里拿出 20%」。

联动滑块

不管哪种模式,比例都用三个联动滑块控制:训练集、验证集、测试集。三个滑块加起来始终是 100%,你只需要调一个,另外两个会自动跟着变。

滑块联动规则
  • 拖训练集:训练集锁定为新值,剩下的百分比由验证集和测试集按当前比例分摊。
    • 例:当前 70 / 15 / 15,把训练拖到 50%,剩下 50% 按验证 : 测试 = 1 : 1 瓜分,得到 50 / 25 / 25。
  • 拖验证集:训练集不变,测试集自动调整凑齐 100%。
    • 例:当前 70 / 15 / 15,把验证拖到 25%,训练保持 70%,测试自动变成 5%。
  • 拖测试集:训练集不变,验证集自动调整凑齐 100%。
    • 例:当前 70 / 15 / 15,把测试拖到 25%,训练保持 70%,验证自动变成 5%。
  • 底部总计:底部始终显示「总计 100%」,方便确认。
为什么不让三个滑块各自独立

三个独立滑块加起来很容易不等于 100%,导致分割失败。联动滑块直接从机制上杜绝这个问题,怎么拖都是合法比例。

联动滑块演示
图2:三个滑块联动维护总和始终为 100%,底部显示总计

字段说明

字段类型必填默认值说明
分割模式单选必填重新分配所有图片两种模式二选一:「重新分配所有图片」或「从训练集分割」。详见上方说明。
训练集比例滑块(联动)必填70训练集占比(%)。拖动时验证集和测试集按当前比例自动分配剩余份额。
验证集比例滑块(联动)必填15验证集占比(%)。拖动时训练集不变,测试集自动调整。
测试集比例滑块(联动)必填15测试集占比(%)。拖动时训练集不变,验证集自动调整。
随机种子数字可选随机控制分割的随机性。相同种子 + 相同比例会得到**完全相同**的分割结果,便于复现实验。

随机种子

随机种子控制打乱算法的随机源。这个字段经常被忽略,但对实验复现很关键。

随机种子的作用
  • 相同种子 + 相同比例 = 相同结果:填同样的种子,跑两次分割会得到完全一致的训练集 / 验证集 / 测试集划分。
  • 不同种子 = 不同划分:换一个种子,相同比例下图片的分配结果不同。
  • 留空 = 随机:每次分割都用不同的随机种子,结果不可复现。
什么时候需要固定种子
  • 跑对比实验时:想比较两个模型架构或两套超参在同一份数据划分上的效果,固定种子保证公平比较。
  • 复现别人结果时:知道对方的种子和比例,能精确还原对方的分割。
  • 平时探索性训练:留空就行,让随机性帮你打散样本。

操作步骤

  1. 选择分割模式

    在分割面板顶部选择「重新分配所有图片」或「从训练集分割」。

  2. 调整比例

    拖动三个联动滑块,让训练集 / 验证集 / 测试集的比例符合预期。底部会实时显示「总计 100%」和预估的图片数。

  3. (可选)填随机种子

    想要结果可复现就填一个固定的种子(比如 42),想完全随机就留空。

  4. 查看预览

    面板下方会显示分割预览:每个集合最终会分到多少张图片。确认数字合理。

  5. 确认执行

    点底部的「确认分割」按钮。系统会弹出不可逆警告对话框,再次确认后开始执行。

  6. 等待分割完成

    分割在后台异步执行,可能需要几秒到几十秒(取决于图片数量)。完成后页面会自动刷新数据。

不可逆警告

数据集分割会改变图片在 train / val / test 三个目录之间的物理位置,操作不可撤销。

分割不可撤销
  • 分割完成后,没有「撤销分割」按钮
  • 想恢复分割前的状态,唯一办法是重新跑一次分割(用原来的模式 + 原来的随机种子,理论上能还原,但不保证 100% 一致)。
  • 如果数据集已经发布过版本,可以从旧版本恢复,但工作区里当前的所有改动会丢失。

分割之前请再三确认比例和模式。如果不确定,先发布一个版本做快照留底,再做分割。

分割完成后

分割执行完毕后:

  • 数据集详情页图片标签页的训练 / 验证 / 测试 Tab 数字会更新成新的比例。
  • 详情页头部统计区显示的总图片数不变,只是三个集合的占比变了。
  • 已经发布的旧版本不受影响(版本是不可变快照)。
  • 后续基于这个数据集工作区发布的新版本会包含新的分割结果。
分割后需要重新发布版本

训练任务只读取已发布的数据集版本,不会直接读取可变工作区。如果你想让训练用上新的分割结果,必须重新发布一个版本。详见发布数据集版本

接下来

常见问题

分割面板里没有「从训练集分割」选项

当前数据集可能还没有任何图片分到训练集里(比如刚上传还没分割过)。这种情况下「从训练集分割」没有意义,只能用「重新分配所有图片」。先做一次完整分割,后续才能用增量模式微调。

「从训练集分割」填的比例对不上

记住百分比基数是整个数据集(train + val + test)的总图数,不是只看现有训练集。比如总共 1000 张,想让验证集最终占 20% 就填 20,平台会算出最终验证集应该是 200 张,再从训练集抽差额补过去。

分割后训练没看到效果

训练任务用的是已发布版本,不是工作区。分割完工作区后必须重新发布一个版本,新版本才会包含新的分割结果。然后基于新版本创建训练任务,才能看到新分割带来的效果。

怎么选比例

常见推荐:

  • 数据少(<1000 张):80 / 10 / 10 或 70 / 20 / 10。让训练集尽量大。
  • 数据中等(1000-10000 张):70 / 15 / 15 或 70 / 20 / 10。平衡训练和评估。
  • 数据多(>10000 张):80 / 10 / 10 或 90 / 5 / 5。数据多了验证集和测试集不需要太大比例。

这是经验值,具体比例根据你的任务和数据特性调整。