数据集版本机制
这个概念解决什么问题
数据集是个可变工作区,你可以随时增删图片、修改标注、调整类别。但训练需要稳定的输入,如果训练到一半数据被改了,结果就没法对照,也没法复现。
VortLab 用「版本」解决这个问题。版本是数据集在某个时刻的不可变快照,发布之后内容固定,谁都改不动。新训练任务必须绑定一个就绪版本,这就是为什么你在创建训练任务时必须先发布版本。这一页解释版本机制的核心规则。
两个概念:Dataset vs DatasetVersion
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
Dataset(数据集) | 概念 | 可选 | 可变 | 工作区,你可以随时增删图片、改标注、调类别。和项目 1:1 绑定。日常说的「数据集」通常指它。 |
DatasetVersion(数据集版本) | 概念 | 可选 | 不可变 | 数据集在某个时刻的不可变快照。发布之后内容固定,只能归档或删除,不能修改。是训练任务的输入。 |
- 工作区给你改数据用,标注、增强、增删都在这里。
- 版本给训练提供固定输入,发布后冻结,谁也改不动。
两者职责分开,互不干扰。工作区变动不影响已发布版本,已发布版本也不会被工作区操作污染。
为什么版本必须不可变
想象一个场景:你用 v3 版本训练,跑了 100 轮拿到 mAP 0.85。第二天你往工作区加了 200 张图,又改了几张标注,然后用「同一个 v3」再训一次,结果 mAP 变成 0.72。这两次训练没法对比,因为你不知道差异是来自超参还是数据。
不可变版本就是要把数据这个变量固定下来。同一个版本训练两次,输入完全一致,指标才能直接比较。这就是训练必须绑定版本的根本原因。
版本发布
版本发布是手动操作,系统不会自动把工作区的变动版本化。具体操作见版本发布。
发布时系统会做一次完整快照:当前所有图片 + 标注 + 类别定义 + 关键点元数据(如果是 pose 项目)。
发布过程会对当前数据集做快照。这段时间请避免上传、删除图片或修改标注,以免快照内容不一致。同一个数据集同时只允许一个发布或恢复操作,等当前操作结束后才能开始下一个。
版本内容
一个版本快照里包含哪些东西?
- 图片文件快照:发布时工作区里所有图片的引用。
- 标注快照:每张图片对应的标签文件内容。
- 类别快照:当时的类别定义(class 列表 + 颜色 + 稳定 ID)。
- class_metadata 快照:如果是 pose 项目,包含关键点模板、骨架定义、flip_idx 等元数据。
平台用内容寻址(content-addressed)方式存储版本文件。如果 v1 和 v2 共享同一张图片(文件内容相同),这张图片在存储里只存一份,不会重复占用空间。
这对频繁迭代的数据集特别友好:每发一个新版本,只有真正变动的图片才会新增存储。详见存储层级。
版本状态
一个版本在生命周期内会经历以下状态:
| 字段 | 类型 | 必填 | 默认值 | 说明 |
|---|---|---|---|---|
creating(发布中) | 状态 | 可选 | — | 正在生成快照,尚未完成。不能用于训练。 |
ready(就绪) | 状态 | 可选 | 可用 | 快照已生成,可以用于训练。新建训练任务的下拉里只显示这种状态。 |
archived(已归档) | 状态 | 可选 | — | 不再作为训练候选,但文件仍保留在存储中。可以恢复,可以下载归档包。 |
训练绑定版本
这是硬约束。新训练任务必须绑定一个处于 ready 状态、未归档的版本。没有例外。
如果训练创建对话框的版本下拉为空,说明数据集还没发布过版本,或者所有版本都被归档了。先去数据集详情页的「版本」Tab 发布一个,再回来创建训练。
历史上创建的训练任务可能没绑定版本(当时这个功能还没上线)。这些老任务在监控页里会带一个「旧版可变数据集」徽章,表示它当时直接用了工作区数据。新创建的任务一律强制绑定版本,不会再出现这种情况。
如果一个版本已经被某个训练任务或模型引用,它只能被归档,不能硬删除。这是为了保留训练的可追溯性:删了版本,引用它的训练任务就找不到原始数据了。
想删掉这种版本,得先删掉引用它的训练任务和模型,再回来删版本。
归档 vs 删除
- 归档(archive):状态置为 archived,文件全部保留。版本退出训练候选列表,但数据还在。可以恢复,可以下载。
- 硬删除(hard_delete):物理清除数据库记录和文件,不可恢复。被训练 / 模型引用的版本不能硬删除,必须先解引用。
日常使用优先归档,归档够了就别动删除。删除是「永远不要再见」级别的操作。
这两个概念容易混:
- 已存档(cold tier):存储层级概念。数据集文件从本地热存储迁移到对象存储,访问时自动恢复。数据集仍可用。
- 已归档(archived):业务层面归档。版本退出训练候选,不可用于新训练。
两者含义不同:cold tier 的数据集仍可访问(只是慢一点),archived 的版本不可用(直到恢复)。详见存储层级。
版本恢复
归档的版本可以随时恢复成 ready 状态,重新进入训练候选列表。操作入口在数据集详情页的「版本」Tab,点对应版本行的恢复按钮。
注意「恢复版本」和「恢复工作区」是两个操作:
- 恢复版本状态:把 archived 的版本改回 ready,让它能再次被训练选到。
- 恢复工作区:把工作区内容替换成某个历史版本的数据,用于回退误操作或基于历史版本继续调整。详见版本恢复。
ZIP 下载
版本的 ZIP 归档包是懒生成的:第一次有人请求下载时,系统才开始打包。打包期间下载按钮会禁用,提示「归档包生成中」,前端每 15 秒自动重试一次,最多 10 次。打包完成后下载自动开始。
版本 ZIP 下载走后端流式响应,不会 302 跳转到对象存储的预签名 URL。原因是 HTTPS 页面里跳转到对象存储会触发 Mixed Content 错误。
实际体验上的差异:下载链接始终是平台自己的 URL,浏览器不会跳出当前域名。下载速度不受影响。