摘要
游戏界面里到处是小图标:英雄头像、主技能、宝物(装备)、生物。如果程序能看一张小裁图就说出“这是哪一个”,后面的状态推断才有材料。本实验(内部编号 B11,最初叫 B04)在完全隔离的环境里回答一个具体问题:只用游戏图鉴里的官方图片训练,与再加上人工确认过的真实游戏截图裁图训练,差多少? 另外再试一个“有效性头”,专门判断一张裁图是否干净可用(没被遮挡、没在淡出动画中)。
结论:加入真实游戏裁图明显有效。最早的五个随机种子基准中,测试集身份识别从 99.57% 到 100%,且没有任何样本被“改坏”;后来数据扩充到 7,891 张裁图,在同一批新测试图上,旧模型 79.49%,重训后的模型 99.22%。有效性头则是取舍:少误拒好图、多放过坏图,并不是全面更好。
要回答的问题
三个受控阶段:
- M0:只用图鉴图片训练分类器。
- M1:从与 M0 完全相同的初始权重出发,在相同的训练步数和相同的“身份抽样日程”下,额外加入人工确认的游戏裁图。问题是:真实游戏数据本身有没有帮助?
- M2:冻结 M1 的主干和分类头,只训练一个“有效性头”(validity head,输出这张裁图可不可用的一个分数),用人工确认的负样本(遮挡、错位、非目标画面)训练。问题是:它是否比“分类置信度低就拒绝”更好?
模型只看裁图像素,不接收文字识别(OCR)结果、场景判断、整张截图、视频上下文或规则模拟器的信息。
数据与来源
- 图鉴图:390 张,对应 354 个身份。
- 游戏裁图:从项目录像截图中人工确认过的裁图。“人工确认”在本项目里指标注状态为
GOLDEN_CONFIRMED的帧;模型建议不当作真值。 - 划分:按整段录像划分训练/验证/测试,同一段录像不会同时出现在两个分区;同一录像里相邻时刻的重复裁图最多保留三张代表。
数据随时间扩大了三次:
| 版本 | 选用游戏裁图 | 有效 / 负样本 | 训练/验证/测试录像 |
|---|---|---|---|
| 8 月 31 日原始快照 | 1,746 | 1,552 / 194 | 14 / 1 / 1 |
| 9 月 3 日重跑 | 3,648 | 3,341 / 307 | 13 / 1 / 2 |
| 9 月 7 日扩充 | 7,891 | 7,406 / 485 | 16 / 2 / 3 |
9 月 7 日的数据里有 628 帧原先由助手审核的记录,经所有者批量接受后进入人工确认流程;这是批量认可,不是第二次独立人工标注。
方法
- 主干网络:ImageNet 预训练的 ConvNeXt-Tiny,输入 224×224。
- 一个共享主干接四个输出:1 个有效性分数、4 类类型分数(英雄 / 主技能 / 宝物 / 生物)、每类各自的身份分类头。负样本只训练有效性,不参与类型和身份的训练(所以不会把“空槽位”教成某个宝物)。
- 阈值只在验证集上按“两类平均召回率最大”选定,测试集不调参。
- M0 / M1 各 12 轮 × 356 次更新、batch 32;M2 8 轮 × 160 次更新。
几个用来防止比较不公平的检查都通过了:M0 与 M1 的初始状态逐一相同;身份抽样日程和更新次数相同;M2 期间只有有效性头的两个张量被优化,M1→M2 的其余参数完全不变。
设置
- 8 月 31 日:五个随机种子(20260831–20260835)的完整基准,保存 160 个检查点。
- 9 月 3 日、9 月 7 日:单种子的开发重跑,用于在更大的数据上复查结论。
- 硬件:本地 RTX 5080;9 月 7 日三阶段合计约 22.75 分钟(不含导出和报告)。
结果
五种子基准(8 月 31 日),测试集只有一段录像、101 张裁图(93 张有效:31 英雄、62 主技能;8 张负样本),没有宝物和生物:
| 阶段 / 拒绝方式 | 测试身份正确率 | 负样本拒绝率 | 端到端 |
|---|---|---|---|
| M0 / 置信度 | 0.9957 ± 0.0053 | 0.8750 ± 0.0791 | 0.9861 ± 0.0049 |
| M1 / 置信度 | 1.0000 ± 0.0000 | 0.9500 ± 0.0612 | 0.9960 ± 0.0049 |
| M2 / 有效性头 | 1.0000 ± 0.0000 | 1.0000 ± 0.0000 | 1.0000 ± 0.0000 |
“端到端”指:负样本被拒绝,或有效样本被接受且身份正确,才算对。五个种子中 M1 都消除了 M0 的测试错误,没有一例退化。
9 月 7 日扩充数据,同一批新测试图(1,287 张有效裁图):
| 类型 | 图鉴 M0 | 冻结的旧 M1 | 新 M1 |
|---|---|---|---|
| 英雄 | 121/122 | 122/122 | 122/122 |
| 主技能 | 343/343 | 343/343 | 343/343 |
| 宝物 | 272/465 | 455/465 | 457/465 |
| 生物 | 11/357 | 103/357 | 355/357 |
| 总计 | 747/1287 (58.04%) | 1023/1287 (79.49%) | 1277/1287 (99.22%) |
旧 M1 只是重新推理,没有重训;它的训练录像与新测试录像没有交集。提升主要来自生物——旧数据里几乎没有生物裁图。
有效性判断(9 月 7 日测试集):
| 指标 | 分类置信度 | 独立有效性头 |
|---|---|---|
| 好图误拒 | 128 | 49 |
| 坏图漏拒 | 7 | 16 |
| 两类平均召回率 | 91.00% | 88.90% |
| 端到端正确率 | 89.96% | 94.54% |
| 淡出画面正确拒绝 | 13/15 | 7/15 |
速度:已切好的裁图,单张中位 9.27 ms,32 张一批 54.72 ms(约每秒 585 张),不含视频解码、场景识别和 OCR。
失败与负结果
- 有效性头不是全面更好。9 月 3 日和 9 月 7 日两次重跑都显示:它多接受好图,同时多放过坏图;16 次漏拒中 8 次是淡出动画。验证集只有 2 张明确的淡出样本,阈值迁移到测试集效果差。端到端分数更高,部分只是因为有效样本数量远多于负样本。
- 剩余错误多是标签问题,但仍按原标签计分。五种子基准中两个顽固的验证集分歧,经查看原图发现:一张被文字浮层完全盖住、却标成有效;一张画的是“巫师帽”(秘术),标签却写成另一技能。9 月 3 日 6 个剩余错误、9 月 7 日 10 个剩余错误里,大多是存储标签与截图不对应,另有 2 张相邻帧把一种生物认成另一种。这些都只记录为审核发现,冻结测试仍按原标签计分,没有事后改成 100%。
- 第一次导出遇到 Windows 路径过长而失败,不完整的导出保留,修复后独立重跑。
局限
- 五种子基准的测试只有一段录像、没有宝物和生物,100% 只是这份冻结测试的结果,不是生产保证。
- 后续重跑都是单种子;相邻帧相关,测试录像不是全项目历史上的全新盲测。
- 感知哈希(一种把图片压成短指纹、找近似重复的方法)发现 38 组近似重复跨了分区;固定布局的游戏图标本来就很像,因此这只作为审计证据,没有删样本。
- 导出更多图不代表选中的模型用到了每一张:例如 9 月 7 日选中的 M1 实际只见过 5,165/5,718 张训练正样本。
结论与下一步
真实游戏裁图对图标身份识别有明确帮助,且五个种子都没有退化。有效性判断仍不可靠,尤其是淡出和遮挡画面。之后项目采用保守的生产接入策略:上游画面就绪、身份、分数有限、两个阈值都满足才接受,否则返回“暂缓”(DEFER)而不强行更新状态;在冻结开发数据上回放为 87 张无效图中接受 5 张、1,287 张有效图中暂缓 168 张、接受后身份不符 3 张——这只是探索性回放,不是新的盲测。下一步是修正已记录的宝物标签问题、补充易混淆生物和淡出/遮挡样本。
Comments