摘要

打开法术书时,书本挡住了战场中间,只剩两侧露出生物的局部。项目有两个生物身体检测器:一个看整张图(下称“整图检测器”),一个是上一轮专门在书页两侧窗口上训练的“局部检测器”。上一轮把两者合并时用的是“整图结果优先,局部只做补充”,结果一些局部检测器找到的好窄框被整图检测器的旧宽框挡住,误报也没达标(45 个正确框、5 个误报)。

本轮不再训练、不降阈值,只改合并方式:两路候选按原始检测分数排序,统一做一次 NMS(非极大值抑制:重叠很大的框只留分数最高的那个)。先在训练图上选择规则,再一次性在开发集上验证:46 正确 / 4 误报 / 13 漏检,通过预先冻结的门槛。随后接成真实整帧读取的显式选项,26 张图两轮实测含保存 p95 1.866 秒。默认流程和战斗记录 App 没有启用。

要回答的问题

  • 不训练新模型,只改两路检测框的合并规则,能否减少误报、保住已有正确框?
  • 接入真实整帧读取后,其他界面结果是否不变,耗时如何?

数据与来源

本轮没有新训练,复用三个已训练模型(整图检测器、局部检测器、身份模型)。为了避免“10 张图”被误解为全部数据,下面是规模核对:

用途 规模 注意
局部检测器的训练输入 417 张不同原图、4680 个身体框 局部裁窗和重复曝光不另算独立截图
其中书页困难训练材料 16 张、92 个身体,5 个来源组 本轮只用它选择合并规则
身份模型训练 4606 个身体裁图 + 1580 个选择页裁图 = 6186 条、144 类 裁图条目,不是独立截图
本轮书页开发集 10 张、59 个身体、4 个来源组 小而反复曝光,仅工程诊断

身份训练的类别并不均衡:144 类里 4 类没有战场身体样本、7 类只有 1–4 条、43 类 5–19 条、90 类至少 20 条。开发集 59 个身体也没有完整身份真值,所以本文的定位成绩不是“认出名字”的成绩。

方法

预先只指定两个候选,不扫阈值:

  1. 合并分数 NMS:所有候选按原始检测分数排序,IoU 阈值 0.5 统一去重;分数相同时整图结果优先。两个模型的分数没有校准到同一尺度,只作排序,所以必须逐目标检查是否替换掉了原来的好框。
  2. 复合覆盖抑制:在 1 之后,如果一个低分大框被至少两个更高分、仍独立保留的框共同覆盖(每个组成框 ≥90% 面积落在大框内、精确并集覆盖大框 ≥90%、各自有 ≥10% 独占贡献),就删除大框。可能误删真实重叠身体,只是假设。

选择规则(只看训练):相对上一轮组合,任何原正确目标都不能丢,误报必须减少;候选 2 只有在比候选 1 额外减少误报且不丢目标时才优先。

开发门槛(冻结后一次性评分):至少 46 个正确框,保留上一轮全部 45 个匹配,误报 ≤4,每个来源不退步。失败则不改参数、标注或换候选。

推理只用候选框、分数和来自哪一路,不用图名、来源、真值或目标数量。

设置

保持面板/书签过滤、检测分数 ≥0.4、匹配 IoU ≥0.5。

结果

训练 16 图 92 身体:上一轮组合 81 TP / 20 FP / 11 FN(TP 正确框、FP 误报、FN 漏检);合并分数 NMS 后 82 / 15 / 10,恢复 1、丢失 0。复合覆盖抑制在 16 张图上没有任何额外删除,指标完全相同,因此不采用。16 张变化图全部逐张查看:多数改变是去掉了重复框,书脊、书扣附近的宽误框仍然存在,没有虚报修好。

开发 10 图 59 身体(一次性评分):

固定候选 正确 TP 误报 FP 漏检 FN 精确率 召回率
只用整图检测器 35 4 24 89.74% 59.32%
局部检测 + 整图优先(上一轮) 45 5 14 90.00% 76.27%
合并分数 NMS(本轮) 46 4 13 92.00% 77.97%

上一轮 45 个正确目标全部保留;唯一恢复的一个是:旧宽框混入了相邻身体,新的局部框更窄,IoU 0.502 刚好达标。按可见程度:主体 28/28、局部 18/30、微小 0/1。各来源组 TP 都没有下降。门槛通过,但这是工程门槛,不是 95% 验收;精确率 92% 也不等于“识别了 92% 的可见身体”。

真实整帧读取:新增私有组合读取器,只有当前截图中检测到唯一一本魔法书时才运行局部检测;两路先过相同的面板/书签过滤再合并,被抑制的框和原因保留。固定 10 张开发书页 + 16 张非书页训练控制图(覆盖九类场景),开启全部现有显式识别分支,开/关局部检测逐图对比:

  • 26/26 张其他界面结果一致(只忽略计时字段);16/16 张非书页的身体结果一致。
  • 10/10 书页复现了冻结评分的 46 / 4 / 13。
  • 预热后 26 图两轮共 52 次,没有读取失败。完整读取 p50 1.267 秒、p95 1.860 秒;加 JSON 保存 p50 1.271 秒、p95 1.866 秒、最大 1.940 秒;书页 20 次 p95 1.934 秒。冷启动一次命令行调用 14.51 秒,不计入热延迟。

失败与负结果

  • 复合覆盖抑制没有任何作用,未采用;更早一轮的“单框包含就删除”规则仍维持否决。
  • 剩余 13 个漏检:9 个原始候选分数低于 0.4,4 个根本没有合格的局部框,本轮没改变。拥挤多体大框、两个书脊误框、身体 + 书扣宽框仍存在。

局限

  • 开发集只有 10 张,已多次曝光,部分界面曾参与训练,不是盲测。
  • 计时含图像解码、全部显式识别、OCR 和保存,不含 App 截图、热键和显示;外部系统负载未控制;与旧集合不同,不能宣称提速。
  • 相关 90 项测试通过,只证明规则和回退行为,不代表识别率;没有跑全套测试或 App 验收。

结论与下一步

问题出在“谁优先”而不是模型本身:让两路框按分数公平竞争即可保住局部检测器的好框,且没有丢掉任何原正确目标。能力以显式选项保留。下一步回到剩余定位质量和身份联合验收:用训练中剩余的漏检与误报建立困难样本清单,优先补真实遮挡片段、书脊纯界面、场外英雄和混合框的区别(混合框不能一律当负例),并为新的局部框另做身份验证。(之后用户明确“前景面板不读背景”,下一步改由 P086 承接。)