摘要

在这款回合制战棋游戏里,玩家把鼠标移到敌方生物上准备攻击或施法时,目标上方会弹出两行“伤害预览”小字(上一行骷髅图标加一个数字,下一行预计伤害)。视觉理解模块此前已经能在整张截图里找到并读出这些预览,也能检测出生物身体的方框,但不知道“这个预览指的是哪一个生物”。

本实验(内部批次号 B112)在已有的整图读取里加了一个显式开启的分支:根据预览和身体框的相对位置(预览应在目标身体上方),给出“目标候选”。在 30 张整图、27 个明确目标上,候选对应正确 24 个、错误 0 个、未解析 3 个。另一个想法——再要求被指向的身体必须有明确的数量牌(单位脚下显示兵数的小牌)配对——只是多拒绝了 2 个正确关系,没有改正任何错误,因此不采用为硬性条件。

这些只是“候选”,不是确认的目标、身份或施法来源,目前没有接入默认输出或公共接口。

要回答的问题

  • 只用同一帧里的空间布局,能否可靠地把预览连到被指向的身体?
  • 再加“数量牌支持”这一条件,是否能减少错误?
  • 实际的整图读取入口组合后,原有输出是否保持不变?

数据与来源

  • 沿用上一轮(B111)冻结的 30 张整图、31 个可见预览,来自两个已曝光的训练来源(10 月 4 日、10 月 3 日的训练录像)。它们不是新的独立对局或测试来源,不能当盲测。
  • 目标参考:继承旧标注(B087)的 15 个人工目标实例对应,逐一核对原候选 ID 与完整框和当前模型输出一致,不只按旧编号套用;再逐图看原生局部补 6 个有上下文的实例对应和 6 个原先只标了数字的目标对应。合计 27 个明确目标,另有 2 个重叠导致未知、2 个淡入阶段的目标未标。
  • 这份参考是“预览 → 身体实例”的对应,不是完整的身体框 IoU 金标。

方法

预先只定两个方案(两“臂”),不扫参数:

  • 方案 A:上方布局候选。 复用已有空间关联模块的有限几何窗口:把“预览在身体上方”的关系用上下镜像套进现有的身体—锚点几何;要求双向领先——预览把某个身体列为明确首选,那个身体也把同一预览列为明确首选,且首选与次选的分差至少 0.25。存在竞争时保留未知。数量文字、身份、伤害值、历史和规则都不参与配对,不用“最近就绑定”。
  • 方案 B:A 再加数量牌支持。 在 A 的候选上,额外要求现有数量牌模型给出“数量牌 ↔ 身体”的双向匹配支持。

流程上先只在 10 月 4 日来源上看结果并做决定,写下冻结决定后才读 10 月 3 日来源,之后不再反调参数。

实现方式: 新增一个私有候选函数,只在单图读取工具显式开启 --preview-target-candidates(同时提供身体检测、身体身份、预览模板等已有权重)时运行。结果放在独立字段里,用索引引用同一输出中的预览和身体,保存竞争候选和几何依据。原来预览的 target 字段仍为空,原有数值全部不变,避免候选悄悄变成确认目标。未开启时格式和默认行为不变;打开前置面板或局部请求时不读背景。

设置

  • 冻结决定(读 10 月 3 日前):10 月 4 日已有 13 个明确关系,A 13/13 与旧人工实例一致;B 只有 11/13,拒绝了一个骷髅射手的重复框和一处被光标遮挡的数量牌,没有改正 A 的任何错误。因此冻结 A 为待验证方案、B 为同输入消融。
  • 高亮格子读取依赖可靠的网格注册,本批没有自动注册证据,不手工灌入网格,所以没有用这条证据。
  • 数量牌模型在 30 张原图上实际运行。

结果

同一输入与参考 A:上方布局候选 B:再强制数量牌支持
原 21 个明确目标:对应正确 18 16
原 21 个明确目标:错误 / 未解析 0 / 3 0 / 5
新补 6 个明确目标:对应正确 6 6
全部 27 个明确目标:对应正确 24/27(88.89%) 22/27(81.48%)
全部 31 个预览:位置、两行文字和已核对目标候选都正确 22 20
原 21 个目标:再要求身体身份首选正确 16/21 14/21

按来源,A 在 10 月 4 日 16 个对应正确、2 个淡入目标无参考;10 月 3 日 8 个正确、3 个未解析、2 个重叠关系未知。

两个人工未知的关系里,两种方案都是 1 个未解析、1 个给出了未经证实的候选,均不计为正确。这说明双向几何和数量牌一致都不能保证真实的语义关系。

实际入口验证: 30 张完整图重新经过真实 UI、预览 OCR 和身体模型,再组合新候选;与之前保存的完整输出对比,去掉新增分支后其它内容全部相同,候选结果也与冻结输入回放逐一一致。另 3 张前置面板图正确地没有运行背景候选;单图命令行工具实际运行一次输出 3 个目标候选,缺依赖时的预检正确失败。共 34 次实际读取,0 次新增失败。111 项聚焦软件测试通过(含 23 项新测试)。

失败与负结果

  • 数量牌门槛无收益。 B 只增加拒绝、不减少错误,损失来自重复身体框和数量牌遮挡;冻结后的回归来源也没有额外收益。
  • “点被覆盖”不等于找到目标。 10 月 3 日一张图里,被指向的“冷酷卧底”根本没有独立身体框,旁边大九头蛇的框盖住了人工标的身体点,这不算找到卧底;A 因竞争保留未知,这是正确行为。
  • 竞争导致未解析。 另一张图两个预览分别指向卧底和九头蛇,候选竞争使两条都未解析;没有强行用次优分配补齐。
  • 身份仍会错。 有两张图身体实例对应正确,但身体分类首选分别是“树人”和“幻影”,实际都是冷酷卧底。几何关联不能掩盖身份误判。
  • 数字层面的已知问题照旧:2 个淡入阶段的预览没找到,2 个范围值丢了中间横线,关联功能没有修好它们。一处淡入多体重叠的候选未经证实,不升级为真值,也没用相邻帧改单帧标签。
  • 两处测试夹具问题(导入、计时字段)已修复,不算识别失败。

局限

  • 31 个预览已经充分曝光,结果不是独立测试;“位置 + 两行 + 目标”全对的 22/31 远低于项目每字段 95% 的目标。
  • 新补 6 个实例的身份没有标注,不用模型输出自动填。
  • 候选分数不是概率;未测延迟,未跑全 Perception 套件或独立十场验收。

结论与下一步

基于空间布局的目标候选有净价值:在这批数据上没有给出错误对应,竞争时会老实地保留未知;数量牌门槛没有帮助。功能只以显式候选形式交付,未接入默认确认目标或公共观察接口。

下一步停止在这个小集上调分差,转而扩大来源、补独立出现事件的当前帧目标参考(包括同值多目标、拥挤、缺身体框、数量牌遮挡和负例),并检查两处卧底的分类裁图和训练覆盖。