摘要

游戏《英雄无敌:上古纪元》的界面里到处是小图标:英雄头像、技能、生物、宝物。我们想让程序看一张全屏截图,就说出“这里有哪个英雄、哪个技能、在什么位置”。本实验只用游戏自带的图标目录(每个身份一张或几张标准图)训练模型,不使用任何真实对局截图来更新模型权重,然后在一小组真实截图上测试滑窗搜索的效果。

主要结论:

  • 在增广后的图标上,模型对 354 个已知身份的类型 + 身份联合判断达到 1.000(这是“已知身份、换个增广视角”的结果,不是对未知身份的泛化)。
  • 在真实全屏截图上,只用图标训练的流水线 F1 从通用基线 0.5161 提升到 0.7647。
  • 后续定位改进中,按验证集选出的 F4 达到验证 F1 0.833;F5 在已经反复看过的开发测试集上达到 0.895,但它只能作为候选,需要新的未看过录像再验证。
  • 换成约三倍参数的 DINOv3 大模型没有改善真实测试结果,说明模型容量不是已证实的瓶颈。

真实测试只有 18 个正目标,这些是工程结果,不是产品准确率。

要回答的问题

  1. 能否学到一个通用的图标表示(embedding,嵌入:把一张图变成一个向量,同一身份的图向量靠近、不同身份的远离),先分清大类(英雄/技能/生物/宝物),再分清每个具体身份?
  2. 这种只用目录图训练的表示,用在真实截图的滑窗搜索里是否比通用 ImageNet 表示更好?
  3. 真实截图上的漏检,到底是候选框没覆盖、身份认错,还是打分门槛把好框拒掉了?

数据与来源

图标目录来自游戏安装资源:

类型 身份数 标准图数
英雄 77 77
竞技场技能 20 56(移除了 4 张卷轴形状的基础魔法参考图)
生物 141 141(用与目录对应的小头像,不用大立绘)
宝物 116 116
合计 354 390

每个身份都同时出现在训练、验证、测试中,划分单位是“增广后的视角”,三者用互不重叠的随机种子空间生成:训练每轮每身份 4 对视角、共 12 轮;验证每身份 4 张;测试每身份 6 张(共 2,124 张)。因此它证明的是对已知身份的增广鲁棒性,不是对未见身份的识别。

真实全屏测试只标注了英雄选择页和技能选择页上的英雄与技能,没有生物和宝物;验证与测试来自不同录像组。

方法

共享表示。 骨干网络是 ImageNet 预训练的 ConvNeXt-Tiny,输出 768 维向量,后面接三个头:4 类类型分类、354 类身份分类、一个用于监督对比学习(SupCon:把同类样本拉近、异类推远)的投影头。损失为 1.0×身份交叉熵 + 0.35×类型交叉熵 + 0.20×SupCon。投影头训练后丢弃,检索用 768 维向量。只有类型和身份两个头都对,才算分类正确。

滑窗搜索。 在截图上按固定尺寸和步长切出很多候选框,每个框算向量,与每个身份的参考向量(每张标准图贴在三种背景上分别算向量后取平均)比余弦相似度,再做 NMS(非极大值抑制:重叠的框只留分数最高的),最多保留 3 个。一个预测算对,需要身份正确且与人工框的 IoU(交并比,重叠面积/合并面积)≥0.5;落在没有目标的“负样本页面”上的任何接受都算误检。

方法阶梯(A–F):

名称 做了什么
A 通用基线 ImageNet ConvNeXt-Tiny,不用游戏图标微调
B 只用身份交叉熵 同样数据和预算,只训身份分类
C 分层训练 类型 + 身份 + SupCon 三个目标
D 合成裁剪质量头 冻结 C,在程序生成的画布上贴图标,生成紧、松、偏移、部分、过大、几乎不重叠、纯背景 8 类裁剪,训练一个小网络预测“这个框和真框的 IoU、是不是完整图标、有没有前景、框该怎么移”。只用它给真实候选重新排序,不移动框
E 加框回归 在 D 的排序上再按验证集选定比例移动框
F 定位后续 回到 D 的原始网格框,先审计漏检原因,再做 5 个对照(下文)

D 的训练用 6,240 个合成裁剪,合成验证和合成测试各 3,120 个;更新权重的真实截图像素和真实框都是 0。

设置

验证录像只用于选门槛、融合指数、NMS 规则;测试录像在全部配方冻结后才评估。D 选定的质量指数为 2.0、框回归比例 0.50。还另做了一个越界对照 X2:用 3,970 个真实对局候选框训练质量头,它违反“只用图标目录”的边界,只作参考。

F 的五个子实验:F1 英雄和技能用不同的接受门槛;F2 两类任务各自选融合指数与门槛;F3 比较类别无关 NMS 与同身份 NMS;F4 质量头按类型分输出分支;F5 不再把 7×7 空间特征池化成 3×3,而用小卷积头保留完整空间布局。F1–F3 不重训,F4–F5 只重训小质量头,仍只用合成裁剪。

结果

增广图标检索(2,124 张测试视角):

指标 A 通用 B 只身份 C 分层
MAP@R(检索平均精度) 0.8995 0.9954 0.9945
同身份与异身份余弦差 0.4794 — 0.8524

C 的类型 + 身份联合准确率 1.000。B 和 C 的 MAP@R 差很小,且两者按不同验证指标选模型,不能当作因果证据。

真实全屏测试(验证集选门槛):

方法 测试 F1
A 通用 0.5161
B 只身份 0.6111
C 分层 0.6486
D 合成质量排序 0.7647
E 加框回归 0.7647
X2 真实候选训练(越界参考) 0.8571

D 的 TP/FP/FN 为 13/3/5,精确率 0.8125、召回 0.7222,6 个负样本页面里有 3 个被接受了检测。框回归改善了验证集上的几何,但没有改变测试结果。

在 3,120 个合成测试裁剪上,D 的质量头预测 IoU 的 Spearman 相关为 0.9547、IoU 平均绝对误差 0.0485、完整裁剪 AUROC 0.9622、前景 AUROC 0.9963。

漏检审计。 固定网格对全部 18 个目标都有 IoU≥0.5 的候选框(全部英雄的最佳网格框 IoU 在 0.886–0.908)。D 的 5 个漏检中,4 个是身份正确、框也够好,但分数低于统一门槛;1 个是右侧重复英雄认错身份。没有一个是网格、NMS 或前三名截断造成的。

F 系列:

方法 验证 TP/FP/FN 验证 F1 开发测试 TP/FP/FN 开发测试 F1 负页面接受率
D 基线 14/4/4 0.778 13/3/5 0.765 0.500
F1 分任务门槛 15/5/3 0.789 16/4/2 0.842 0.667
F2 分任务融合 14/2/4 0.824 14/2/4 0.824 0.333
F3 NMS 扫描 14/2/4 0.824 14/2/4 0.824 0.333
F4 按类型分输出 15/3/3 0.833 14/3/4 0.800 0.500
F5 保留 7×7 空间 14/2/4 0.824 17/3/1 0.895 0.500

按严格验证规则胜出的是 F4;F5 在开发测试上最好(英雄 8/9、技能 9/9,只剩那个身份错误)。

更大骨干(DINOv3 ConvNeXt-Base,约 8,760 万参数,部分微调): 真实测试同样是 13/3/5、F1 0.7647,验证集的提升没有迁移到测试录像组。

失败与负结果

  • C 相比 A 召回更高(0.6667 对 0.4444),但负页面误接受更差(0.5000 对 0.1667);按验证锚定召回的门槛点重选后,C 在测试上为 10/3/8、F1 0.6452、负页面 0/6。
  • 分任务门槛(F1)能便宜地找回召回,但接受了更多负页面。
  • 同身份 NMS 没有帮助,验证仍选类别无关 NMS。
  • 按类型分输出(F4)在验证上有效,但迁移不强。
  • 大模型没有改善测试结果。

局限

  • 真实测试只有 18 个正目标,且这组测试已被反复查看,不再是干净的最终留出集。
  • 真实全屏只覆盖英雄和技能,生物和宝物没有真实截图评估。
  • 354 身份的结果是闭集增广结果,不代表对未见身份的识别。
  • 外部审阅给出的意见是:可作为诚实的内部报告,但不支持“真实截图更优”或“类型/SupCon 损失有因果作用”的发表级结论。

结论与下一步

只用图标目录训练、再用合成裁剪学“框好不好”,能把真实截图上的 F1 从 0.52 提到 0.76,而且主要漏检来自打分门槛而不是候选框覆盖或模型容量。保留完整 7×7 空间信息(F5)是最有希望的方向,但必须冻结后在新的、未看过的录像组上重测,才能称为胜者。