摘要
战场上的每一堆生物(同一兵种的一队士兵)需要被程序“找到”(检测:画出框)并“认出”(身份分类:是哪种生物)。上一轮实验(B086)在 12 张难例截图上用了一个很旧的检测器,得到 72.46% 的身体召回,并据此判断检测是瓶颈。本实验(内部编号 B087)首先纠正:项目里早已有更强的检测器(B13 的 YOLO 和 FCOS、B032 的数量牌辅助),旧数字不能代表当前最佳能力。
换上已有检测器后,主要缺口变成了身份分类。原因是:身份分类器只用 601 个战场身体裁图加 1,580 张选择页图标训练,而检测器那边已有 4,588 个带审核身份的战场身体——数据有,只是没进入身份模型。把这些样本加进去训练一个候选后:
- 同 54 张验证图、715 张参考裁图,身份 Top1 从 73.01% 升到 93.57%;
- 用真实检测框做“定位 + 身份同时正确”的联合评估,召回从 70.91% 升到 90.35%。
都还没到 95%,验证集用于选模型、不是独立测试。
要回答的问题
- 在 B086 的 12 张难例上,已有的强检测器表现如何?之前的 72.46% 低估了多少?
- 如果瓶颈在身份,把已有的已审核身体样本用于身份训练,能提高多少?
- 在真实检测框(而不是人工参考框)上,“找到且认对”的联合成绩是多少?
术语:
- Top1 / Top5:模型第一选择正确 / 前五个里有正确答案。
- IoU:预测框和标注框的重叠比例,≥0.5 算定位正确。
- 联合精确率/召回率:只有“位置对且身份对”才算正确;身份错的同时算一个误报和一个漏报。
数据与来源
- 已有 B13 数据划分:训练 401 张完整图 / 4,588 个身体;验证 54 张 / 715 个身体;测试 75 张 / 969 个和历史 89 张 / 1,017 个不解码、不导出。
- B086 的 12 张难例(两个已曝光训练来源组,含 17 个伤害预览、15 个明确目标、2 个重叠未知),完全不加入训练。
- 训练身体 138 个身份中,13 类只来自单一来源、23 类不足 10 个;血色巫妖只有 1 个,地狱九头蛇 0 个。
- 这些是之前用户准许的助手审核数据,不是本轮新标注。
方法
第一步:在 12 张难例上换检测器
不训练、不调阈值、不读标注,分别运行 B13 FCOS、B13 YOLO、B032 数量牌辅助三种已有检测流程,统一接旧身份分类器。人工对应只用于离线检查“预览目标是否被框到”,不进入模型。
第二步:扩充身份训练数据
复用生产训练流程:ConvNeXt-Tiny(一种卷积图像分类网络)从公开缓存权重初始化,只训练最后一个阶段和分类头,学习率、增强、随机种子、底部裁 10% 都与旧模型相同,最多 30 轮、连续 6 轮无提升就停。保留 1,580 张选择页样本,把战场样本从 601 换成 4,588,共 6,168 个训练样本 / 144 个身份。只训练一个候选,不比较多个超参。只用验证集选轮次。
第三步:完整图联合验证
用 B13 YOLO 在验证集 54 张图上已冻结的预测框(阈值 0.40),分别用旧/新身份分类器分类同一批框,按检测得分顺序一对一匹配(IoU ≥0.5)后核对身份。所有 715 个穷尽标注的身体都在分母里;重复检测算误报。
设置
新身份权重只替换分类,504 个检测框、裁图、得分和顺序逐项保持不变。验证集用于选 checkpoint,所以是开发验收。
结果
12 张难例(15 个明确目标)
| 流程 | 身体候选覆盖 | 最近框关系正确 | 关系 + 身份 Top1 正确 |
|---|---|---|---|
| B086 旧 FCOS + 旧身份 | 12 | 12 | 6 |
| B13 FCOS + 旧身份 | 14 | 14 | 10 |
| B13 YOLO + 旧身份 | 15 | 15 | 12 |
| 数量牌辅助 + 旧身份 | 15 | 15 | 12 |
| B13 FCOS + 新身份 | 14 | 14 | 11 |
| B13 YOLO + 新身份 | 15 | 15 | 13 |
| 数量牌辅助 + 新身份 | 15 | 15 | 13 |
覆盖是审核后的语义对应,不是紧框召回;这批没有全图所有身体的真值,不报全图精确率。
参考裁图身份(54 张验证图,715 个身体)
| 指标 | 旧权重 | 新权重 |
|---|---|---|
| Top1 | 522/715 = 73.01% | 669/715 = 93.57% |
| Top5 含正确类 | 86.29% | 96.22% |
| 类别宏平均 Top1 | 74.55% | 94.38% |
149 个旧错例恢复、2 个原正确的退步、44 个两者都错。第 12 轮被选中,第 18 轮停止,训练 363.78 秒。
真实检测框联合验证(同 707 个预测框)
| 指标 | 旧身份 | 新身份 |
|---|---|---|
| 正确定位(两者相同) | 689 | 689 |
| 定位精确率 / 召回率 | 97.45% / 96.36% | 97.45% / 96.36% |
| 定位且身份正确 | 507 | 646 |
| 联合精确率 | 71.71% | 91.37% |
| 联合召回率 | 70.91% | 90.35% |
| 已定位目标的条件身份 Top1 | 73.58% | 93.76% |
新候选仍有 26 个未匹配的标注、43 个定位对但身份错、18 个定位误报。
失败与负结果
- B086 的基线选择错误本身是一个失败,原记录保留并在本轮明确更正,不能把新旧不同分母相减当作提升。
- 46 个参考裁图错误全部复核:升级弩手 14 个全被认成基础弩手(训练里只有 2 个样本),13 个升级树人错误都有邻队严重遮挡(训练已有 67 个 / 5 个来源,说明样本数多不够),4 个升级蜂类即使有 38 个样本 / 8 个来源仍混成基础类。
- 2 个退步(一种升级生物和血色巫妖)保留。
- 12 张难例上仍看到场景装饰误检、重复框、邻队污染裁图;冷酷卧底和地狱九头蛇仍认错。
局限
- 验证集参与选模型,不是独立测试;同一部队的重复裁图不是独立对局。
- 成绩是原始分类候选,不是带拒判的接受准确率,也不是整帧端到端成绩;检测用的是缓存预测,没有整帧时延。
- 队伍颜色、数量、伤害来源没有自动验收;新权重没接入 App。
- 后续实验(B088)在薄弱类别中发现部分训练标签错标,另行修订,不回头悄悄替换本轮数字。
结论与下一步
教训是:先确认自己在用项目里最强的现有能力,再判断瓶颈在哪;以及“数据存在”和“数据进入了该用它的模型”是两回事。把已审核身体样本用于身份训练带来了大幅提升,但完整图联合召回 90.35% 仍低于 95%。下一步冻结本轮权重,从训练来源定向补薄弱变体和遮挡身体(后续 B088 已做:同 715 张裁图 681 个正确,95.24%;同框联合召回 92.59%,仍未达完整图 95%)。
Comments