跳到主要内容

主动学习

这个功能解决什么问题

手头积攒了几万张未标注图片,全标一遍要花掉标注团队好几周。但真要把人力全部撒出去,又会发现其中很大一部分图片模型其实已经认得很准了,标了也是浪费。

主动学习(Active Learning)就是把人力用在刀刃上。它让模型反过来「告诉」你哪些图片最值得人工标注:模型自己拿不准的那一批。把这批图人工标完,重新训练,模型就能在最薄弱的地方获得最大进步。如此循环,每一轮都把精度往上推一截,标注成本却控制得住。

简单说,主动学习是一条「训练 → 自动选图 → 人工审核 → 导入数据集 → 重新训练」的闭环流水线。

适用场景

什么时候用主动学习
  • 数据多、标注预算少:积压了大量原始图片,不可能全部人工标注,希望优先标最有价值的那一小撮。
  • 模型已经有一个基线:至少跑过一轮训练,有了可以拿来「挑刺」的模型,主动学习才能基于它选图。
  • 追求持续迭代:希望每隔一段时间就给模型补一批数据再训一次,让精度稳步爬升,而不是一次性标完就结束。

如果你只是想做一次性的数据准备和训练,不一定需要主动学习。直接在标注工作台标完数据,发布版本后训练就够了。

核心流程

一轮主动学习迭代会经历下面几个阶段,绝大多数阶段由系统自动推进,只有少数关键节点需要人工确认。

一轮迭代的全过程
  1. 选基线模型:选一个已训练完成的模型制品(Artifact)作为本轮迭代的起点,系统会用它来挑图。
  2. 自动选图:模型对未标注图片池做推理,挑出它「最不确定」的一批图。选图数量受预算控制,跨轮之间不会重复挑同一张图。
  3. 自动训练:系统创建一个训练任务,基于现有版本和新增数据启动训练。
  4. 自动标注:训练完成后,系统自动用新模型对选出来的那批图跑 AI 标注,生成待审核结果。
  5. 人工审核:标注员在标注批次模块里逐张审核 AI 标注,对的通过、错的退回。这是唯一的人工环节。
  6. 确认导入:审核完成后,管理员把审核过的标签写回数据集(覆盖模式,原地精化)。
  7. 确认发布:导入完成后,管理员手动发布一个新的数据集版本,作为下一轮迭代的输入。
  8. 重新训练:新版本就绪后即可开启下一轮迭代,循环往复。

整条链路上,只有人工审核、确认导入、确认发布这三步需要人,其他都是自动的。

前置条件

开启主动学习之前,项目里需要先准备好以下几样东西。缺少任何一项,「开启主动学习」按钮会保持禁用,并提示差什么。

  1. 上传数据

    项目数据集里至少要有一批图片。还没上传过任何数据的项目无法启动主动学习。怎么上传见创建数据集

  2. 发布数据集版本

    主动学习每轮迭代都基于一个已发布的数据集版本展开。至少要发布一个版本,作为第一轮迭代的输入。怎么发布见发布数据集版本

  3. 完成至少一次训练

    系统需要一个「基线模型制品」(Artifact)来挑图,而 Artifact 来自训练。所以你得先创建训练任务并跑出至少一个完成的模型版本,才有东西可以拿来选图。

三个条件齐了之后,「开启主动学习」按钮才会变成可点击状态。

创建第一轮迭代

  1. 进入主动学习页面

    在项目工作区左侧导航点击「主动学习」Tab,进入迭代总览页。如果项目里还没有任何迭代,会看到空态提示和「开启主动学习」按钮。

  2. 点击开启主动学习

    点击右上角的「开启主动学习」按钮,弹出创建对话框。

  3. 选择基线 Artifact

    从下拉里选一个已训练完成的模型制品(Artifact)作为本轮迭代的基线。建议选最近一次训练里 mAP 最高的那个版本。

  4. 填写训练配置

    设置本轮的训练参数(架构、训练轮数、批次大小等),跟普通训练任务一致。具体字段含义见训练参数

  5. 启动迭代

    确认无误后点「启动」。系统会创建一个新的迭代记录,状态从 draft 进入 training,然后自动往下推进。

主动学习创建对话框
图1:创建主动学习迭代的对话框,需要选基线 Artifact 和填写训练配置

迭代状态机

每个迭代都会按固定的状态机往下走,绝大部分转移由系统自动触发。

字段类型必填默认值说明
draft状态可选迭代已创建,等待启动。点「启动迭代」后进入 training。
training状态可选正在执行训练任务。训练完成后系统自动进入 annotating。
annotating状态可选训练完成,正在用新模型对选出的图片做 AI 标注。标注完成后自动进入 reviewing。
reviewing状态可选等待人工审核。审核入口在标注批次模块,详见下方「审核入口」。
import_pending状态可选所有图片审核完毕,等待管理员点「确认导入」,把标签写回数据集。
imported状态可选已导入数据集,等待管理员「确认发布」一个新的数据集版本。
completed状态可选新版本已发布,本轮迭代彻底结束。可以开启下一轮。
failed状态可选任意一步出错都会落入 failed,并保留错误信息供排查。修复后重新开启下一轮即可。
状态怎么往前推
  • training → annotating:训练完成自动触发,无需人工。
  • annotating → reviewing:批量标注任务跑完自动触发。
  • reviewing → import_pending:所有图片审核完毕自动触发。
  • import_pending / reviewing → imported:管理员手动点「确认导入」。
  • imported → completed:管理员手动点「确认发布」。
  • 后两个手动步骤是设计如此,避免把没核完的数据直接拿去训练。

自动化与人工节点

哪些步骤是自动的
  • 训练完成 → 立刻自动创建批量标注任务,挑图、推理、写标注都由系统完成。
  • 批量标注完成 → 自动推进到 reviewing,并在标注批次模块生成一条待审核的批次记录。
  • 图片审核完毕 → 自动推进到 import_pending
  • 你需要做的只有三件事:人工审核、确认导入、确认发布。
审核完成不会自动导入和发布

哪怕所有图片都审核通过了,系统也不会自动把标签导入数据集,更不会自动发布新版本。这两步必须由管理员手动确认。

原因很简单:导入会覆盖现有标签,发布会产生一个不可变的训练版本,都是不可逆操作。把决定权留给人,避免错误标签污染数据集。

选图逻辑:去重 + 预算控制

主动学习最关键的一步是「挑哪些图」。系统在这一步做了两件事。

跨轮去重

每轮选图之前,系统会查询之前所有已归档的 AL 审核批次选过的图片文件名,跳过这些图,确保每张图最多被审核一次。

第一轮迭代没有任何历史记录,行为不变;从第二轮开始,去重逻辑开始生效。

每轮预算(images_per_round)

每轮选图的数量由 images_per_round 字段控制。如果设了值(比如 50),系统会:

  • 从未标注池里按 job.id 种子随机预采样出最多 top_n * 5 = 250 张候选(限制推理成本,不会对整个池子跑推理)。
  • 对这批候选跑模型推理,按不确定性(置信度 + margin)排序。
  • 取前 top_n = 50 张进入本轮审核批次。

如果字段留空,则回退到默认行为:池里有多少未标注图就处理多少(上限为安全阈值)。建议始终显式设一个值,让每轮成本可预测。

审核入口

主动学习的人工审核环节统一走标注批次模块。系统会自动创建一个特殊用途的批次(purpose='active_learning_review'),把本轮选出来的图都放进去。

怎么找到 AL 审核批次
  • 进入项目工作区的「数据标注」Tab,在批次列表里找到标记为「主动学习」的那一条(命名形如「主动学习第 N 轮审核批次」)。
  • 点进去之后的操作跟审核任何普通 AI 标注批次完全一致:图片级审核、批量通过、批量退回、反例标记等。详见图片级审核
  • 这个批次的图片是指向数据集的符号链接,不是副本,所以审核导入时不会复制图片本体,只写标签。

导入:覆盖模式

审核完成后,管理员在迭代详情页点「确认导入」时,系统会用覆盖模式duplicate_handling=overwrite)把审核后的标签写回数据集。

覆盖模式意味着什么
  • 同名图片如果数据集里已经有标签,会被审核后的新标签覆盖。
  • 不会产生 _1 后缀的副本,原有标签文件被原地精化。
  • 因为 AL 审核批次图片本身是符号链接到数据集,导入操作只写标签文件,不动图片本体。
  • 如果你担心覆盖会丢数据,可以在导入前先发布一个版本做快照留底。

不自动发布:必须手动确认

最后一个常被忽略的点:主动学习迭代不会自动发布新的数据集版本

导入完成 ≠ 新版本
  • import_pending → imported:审核结果写回数据集工作区(可变),但训练用的是不可变版本,不发布就用不上。
  • imported → completed:管理员在迭代详情页点「确认发布」,系统才会基于当前工作区生成一个新的数据集版本。
  • 发布完之后,下一轮迭代才能基于这个新版本继续。
  • 如果你只导入不发布,迭代状态会停在 imported,不会自动结束。

接下来

常见问题

「开启主动学习」按钮是灰的

三种可能:① 数据集还没上传任何图片;② 还没发布过数据集版本;③ 还没完成任何一次训练。把鼠标悬浮到按钮上会显示具体缺哪一步。

迭代卡在 training 不动了

训练任务可能还在排队或正在执行。进入项目「训练」Tab 看对应训练任务的状态。如果训练因为 OOM 或显存不足失败,迭代会落到 failed,参考训练日志里的错误修一下再开新一轮。

审核批次找不到

确认在项目工作区的「数据标注」Tab 里找,不是全局数据集页面。AL 审核批次的名字以「主动学习第 N 轮」开头,看板上的「进行中」或「待复核」列里应该能看到。

一轮跑下来没看到精度提升

检查两件事:① 审核的图片数量是不是太少(预算设得太低,覆盖不了模型的薄弱点);② 审核质量是不是过关(退回的图多不多,退回的图有没有正确修正)。下一轮可以适度调大 images_per_round,或换一个更强的基线模型。