摘要
前一个实验(B074)把录像按真实的 1 倍速回放,让程序一边“看到”新帧、一边做检测、挑稳定帧、读文字,模拟实时使用。它发现有 215 次“帧到得太晚(超过 100 毫秒)而被跳过”。一个显眼的原因是:主采样线程每保存一张 PNG 原图和 JSON 结果,都要等写完才继续采样。
本实验 B075 只替换“保存”这一步:改为 1 个后台写入线程、最多 2 个未完成写入,模型、检测、稳定判断、去重门槛和读取队列都不变。结果晚到跳过从 215 次降到 47 次,但多数被省下的帧随后因为正常采样节奏本来也会跳过,真正多处理的帧只有 3 张;读取延迟没有改善。内容检查还发现书页上一批数字在当前组合中根本没有被输出。没有接入 App。
要回答的问题
把原图/结果保存移到受限的后台线程,能否减少采样被磁盘写入阻塞?会不会丢失结果、写坏文件或占用过多内存?有效内容的保留是否因此改变?
数据与来源
- 与 B074 相同的 8 个录像窗口、2,133 个原生到达帧:训练用 3 个来源组,冻结后评估另 1 个已曝光来源组(不是新盲测,从未曝光的冻结来源没有打开)。
- 内容核对复用已有精审:7 页上 89 个数字/名称、两个提示的 9 段声明、5 个书页的占用格数,以及若干日志页逐行核对。
方法
- 后台归档器:1 个写入线程,最多 2 个未完成写入(包括正在写的那个),复制一份原生 RGB 像素和 JSON 结果,避免调用方后续修改影响已排队内容。没有无限队列。
- 队列满时显式等待并记录“背压”次数,不丢弃已接受的结果。
- 文件独占创建;出错时保留部分文件并上报;关闭时先写完所有已接受的内容再报告错误。
- 先在训练来源上决定,再冻结,最后跑评估来源;训练和评估不并行。
- 只在确认没有其他昂贵模型或测试批次竞争 CPU 时才运行。
另外用 B074 已有的 48 份结果和原图经过新写入器做回环检查:解码后的像素和观察结果都保持不变。这只验证保存正确性,没有做新识别。
设置
“暖到达→结果交付”指从解码好的原生帧到达开始,含真实检测、排队、读取,到结果可用;不含冷启动、视频解码和 App。PNG 保存完成时间不等于 JSON 完成或磁盘 fsync。
结果
| 指标 | 训练:B074→B075 | 评估:B074→B075 |
|---|---|---|
| 晚到超过 100 ms 而跳过 | 180→24 | 35→23 |
| 实际处理帧 | 404→407 | 312→312 |
| 实际读取/保存 | 35→38 | 13→13 |
| 读取队列溢出/过期 | 1/0→0/0 | 0/0→0/0 |
| 已知清楚展示被覆盖 | 5/5→5/5 | 9/10→9/10 |
| 暖到达→结果交付 p95 | 1161.4→1166.8 ms | 1209.4→1257.2 ms |
| 暖到达→PNG 写完 p95 | 1245.0→1288.3 ms | 1293.2→1370.8 ms |
两次运行不是随机配对的基准,不能把差值都归因于算法,也不能说识别变快了。
保存可靠性:51 份结果全部保存,0 次写入失败、0 次回执错误、0 次背压等待。写入器实际峰值约 11.06 MB(上限允许两张原图约 22.1 MB);挑帧器自己的原图队列峰值训练约 33.2 MB、评估约 22.1 MB,需要分开报告,它们都不是整个进程的内存峰值。
内容:旧的 89 个数字/名称、两个提示的 9 段声明仍正确,五个书页占用格数仍是 11/11/6/11/11。训练中新的开场日志页 29 条事件逐行核对正确;评估原有的 28 条事件保持正确。B074 当时丢掉的一张日志帧现在被实际读取保存了,但与前后页核对,它的 28 条事件在相邻保留图里本来就可见,所以只是恢复了一次直接读取机会,没有证明新增了独特事件。
失败与负结果
- 评估中某个窗口的晚到跳过反而从 5 增加到 8,作为回归保留。
- 总体晚到减少 168 次,但实际只多检测了 3 帧,不是新增 168 张有效观察。
- 读取延迟没有改善(p95 略有上升)。
- 回合标题仍被读成多一个字符的错误形式,0/1。
- 书页新字段没有输出:本次稳定书页上新标注的 24 个字段中,6 个法术身份候选与印刷名称一致,另外 18 个数字(上方数字、左下罗马数字、右下数字)在当前读取组合里没有任何输出。这是当前入口没接上已有的书页角标读取实现,不是“读错”。
- 仍有提示框遮挡英雄引起的额外读取、姿态提示的重复读取,以及 47 张晚到帧没有逐帧精审。
- 运行工具曾因测试报告类名前缀和评分归档重复键出错,修正后重新执行成功,模型运行本身没有因此重启。
局限
- 极慢的磁盘仍可能通过背压阻塞采样。
- 280 项相关软件测试通过(新增归档测试 14 项),覆盖磁盘失败、回执失败、文件冲突、像素被修改、慢写入和关闭排空;软件测试不证明识别准确率。完整套件没有重跑。
- 项目目标(十场独立对战、全界面逐字段 95%、App 整链路 3 秒)均未达成。
结论与下一步
后台有界归档消除了一个明显的 I/O 阻塞,保存可靠,值得保留;但它没有带来更多有效观察或更快的读取。真正的缺口在稳定截图里没读出来的内容。下一步不再优先微调淡入帧,而是复用已有的书页角标读取和可读性检查,把书页数字字段接进当前入口:先在训练来源补标和对照,再冻结后做来源隔离评估;数字必须从图片读出,不用规则或图标类别推算。
Comments