摘要

游戏界面里到处是小图标:英雄头像、主技能、宝物(装备)、生物。如果程序能看一张小裁图就说出“这是哪一个”,后面的状态推断才有材料。本实验(内部编号 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 张——这只是探索性回放,不是新的盲测。下一步是修正已记录的宝物标签问题、补充易混淆生物和淡出/遮挡样本。