摘要

战斗画面左右上角各有一个圆形的英雄头像(HUD 头像)。认出对方是哪位英雄,是推断对方构筑的第一步。之前的实验(B132)用两条路径认头像:一是与训练局里见过的头像样例比较,二是与游戏资料里的英雄原画比较。测试局里敌方头像只认出 53/78,拒判集中在训练局里没出现过的英雄——原画路径的分数低于接受门槛。

本实验(内部编号 B137)加了一个“确认条件”:当原画匹配的首选与另一个独立排序方法的首选一致时,也接受。测试 9 局逐帧头像从 125/156 升到 142/156,敌方 53/78 → 70/78,全部 0 错。为了能放进路由器进程,最终接入的是一个无 Torch 的颜色布局排序,组合结果与视觉模型版本完全相同。

要回答的问题

能否在不引入错误的前提下,认出训练局里没见过的英雄头像?

数据与来源

  • 沿用 B132:24 局截图包中所有确认有 HUD 的帧,每帧左右头像各一张,按局角色标英雄。
  • 训练 15 局 276 张,测试 9 局(开发验证来源)156 张。冻结验收集不打开。
  • 注意:B132 已经用同一测试集跑过一次,本实验是同一测试集上的第二个方法,测试集不再是“未用过”的。
  • 另有一局任何方法都没用过的新鲜对局(16 张)。
  • 测试的 16 名英雄中 8 名训练局没见过。助手按局角色标注,不是独立人工真值;同局多帧不是独立样本。

方法

  1. 对齐分析:原画在 HUD 框中的位置因英雄而异(缩放 185–255 像素、偏移不同),没有统一变换,所以“固定取景”方案放弃。
  2. DINOv3 排序:用项目已有的公开自监督视觉模型 DINOv3 ConvNeXt-Base(本地权重,不训练)。每张原画按 12 种取景(3 种缩放 × 2 种横移 × 2 种纵移)合成到中性灰底;HUD 头像只保留圆环内的画面;比较余弦相似度,取 12 种取景里的最大值。
  3. 组合规则(只看训练集选定):先走 B132 样例路径(分数 ≥0.62、领先 ≥0.03);否则走原画路径——B132 原画门槛(≥0.52、领先 ≥0.03)或 DINOv3 首选与 B132 原画匹配首选一致,才接受;其余输出未知。

单独接受 DINOv3 首选在训练集上会出 1 个错,所以冻结时不采用,只把它当“确认票”。

无 Torch 版本

路由器进程里跑的是 Paddle OCR,项目规定 Torch 和 Paddle 分进程。于是用同样 12 种取景、同样圆环掩码的颜色布局特征(4×4 格 HSV 直方图 + 24×28 小图)代替 DINOv3,只在训练局上选定。它单独做首选时只有 228/276(DINOv3 253/276),但作为“与原画首选一致才接受”的确认条件,组合结果与 DINOv3 完全相同。

设置

训练集上样例路径按“留一局”评估。规则冻结后,测试只跑一次。每张头像记正确/错误/未知;未知不算对也不算错。

结果

只用原画的 DINOv3 首选:训练 253/276,测试 153/156。

划分 B132 B137 组合 错误
训练(样例留一局,用于选参) 227/276 261/276 0
测试(一次) 125/156 142/156 0
其中敌方 53/78 70/78 0
其中我方 72/78 72/78 0

测试新增的 17 张全部来自“DINOv3 与原画匹配一致”。剩下 14 张未知,是原画匹配首选本身就错了的帧。

接入后的颜色布局版本,冻结后各跑一次:

数据 正确 未知 错 其中敌方
新鲜对局 16/16 0 0 8/8(我方一位英雄原来 0/8)
测试 9 局(第二次使用) 142/156 14 0 70/78
合计敌方 — — 0 78/86(90.7%)

路由器初始化约 10 秒(预算 108 名英雄 × 12 种取景 × 2 侧特征),每张约 0.3–0.6 秒。按局看,对方英雄(HUD 多帧投票或日志点名)10/10 局正确。

失败与负结果

  • “固定取景”方案因原画位置不统一而放弃。
  • DINOv3 版本不能直接接入路由器进程(Torch/Paddle 分离),改用颜色布局版本。
  • 逐帧敌方头像 90.7% 仍未达 95%:剩下 8 帧是原画匹配首选本身错了。

局限

  • 测试集已被 B132 使用过一次,本实验不是全新测试。
  • 新鲜对局只有 16 张、8 张敌方。
  • 标注由助手完成,不是独立人工真值。

结论与下一步

用一个独立排序方法给原画匹配“投确认票”,在不增加错误的情况下明显提高了新英雄的识别率,并已接入路由器。剩余失败来自原画匹配首选本身错误,需要改进原画与 HUD 之间的匹配本身,而不是继续加确认条件。