承接执行全记录。 两件事:① 实测 OWLv2;② 按操作者定的「每层记两个数」纪律, 第一次把级联过滤量化,并用它纠正我自己一处误判。全程离线,没碰硬件。
| 配置 | 框数 | 目标杯 | 另一只杯 | 非杯子 | 是杯子的比例 |
|---|---|---|---|---|---|
| OWL-ViT @0.05(原来的) | 16 | 5 | 5 | 6 | 62.5% |
| OWLv2 @0.05 | 24 | 18 | 3 | 3 | 87.5% |
| OWLv2 @0.30 | 19 | 16 | 3 | 0 | 100% |
| OWLv2 @0.30 + 背景差 @50% | 15 | 15 | 0 | 0 | 100% 全对 |
同一批 36 帧(3 个数据集各 12 帧)、同一套 query、同一个选框规则,只换模型。
OWL-ViT 时我量过:假阳性分数压过目标杯,调阈值会先删掉目标杯。OWLv2 完全反过来:
| 模型 | 目标杯分数 | 非杯子分数 | 能不能靠阈值分开 |
|---|---|---|---|
| OWL-ViT | 0.051 – 0.125 | 0.058 – 0.213 | 不能 —— 假阳性最高分更高 |
| OWLv2 | 0.18 – 0.71 | 0.09 – 0.25 | 能 —— 0.30 一刀切干净 |
OWLv2 阈值扫描(两个数一起报)
阈值 留下框数 非杯子 目标杯 是杯子比例
0.05 24 3 18 88%
0.20 21 1 17 95%
0.30 19 0 16 100% <- 假阳性清零,只赔 2 个目标杯
0.50 16 0 13 100%
「每加一层都要记两个数:去掉了多少假阳性、赔进去多少真阳性。 只报前者就是重演这次的错误。」
按这个口径把之前几次「改 query」重算,我原来的判断错了一处:
| 干预 | 假阳性 | 真阳性(目标杯) | 净值 | 我原来怎么说的 |
|---|---|---|---|---|
OWL-ViT 摘掉 a drinking glass | 6 → 7(不降反升) | 5 → 1(赔 4) | 纯亏 | 说对了 |
GDINO 摘掉 a drinking glass | 26 → 1(杀 25) | 1 → 1(赔 0) | 净赚 | 我写「2/36,过滤过头」—— 错了 |
| OWL-ViT → OWLv2 | 6 → 3 | 5 → 18(+13) | 双赢 | — |
| OWLv2 阈值 0.05 → 0.30 | 3 → 0 | 18 → 16(赔 2) | 划算 | — |
操作者提的级联:
语义(开放词表 + 修正的干扰词) 杀掉 手臂 / 鼠标 / 线
↓
深度平面残差 杀掉 平的东西(穿线孔)
↓
空桌背景差 杀掉 场景固有物
↓
剩下什么 —— 逐框裁开人工看
思路成立,但换 OWLv2 之后每层的负载变了 —— 因为第 1 层比预期强得多,把第 2 层的活也干了:
| 层 | 原本要杀什么 | OWLv2 之后还剩多少给它杀 | 现在的价值 |
|---|---|---|---|
| ① 语义 | 手臂 / 鼠标 / 线 | — | 36 帧里非杯子假阳性归零,超额完成 |
| ② 深度平面残差 | 平的东西(穿线孔) | 0 个 —— 穿线孔在 OWLv2 下根本不出框 | 杀假阳性的价值≈0;但它仍是消歧和抓取需要的高度/距离来源 |
| ③ 空桌背景差 | 场景固有物 | 3 个(那只一直在的塑料杯) | 现在是唯一还能杀掉剩余错误的一层 |
离线怎么拿到「空桌」:同一数据集跨集抽 60 帧取逐像素中位数。 目标杯每集摆放位置不同,会被中位数平均掉;不动的东西(那只塑料杯、桌面圆孔、桌子)会留下。
按【框内变化像素占比】过滤 OWLv2@0.30 的 19 个框,两个数一起报
阈值 留下 目标杯留/共 另一只杯留/共 杀假阳性 赔真阳性
0% 19 16/16 3/3 0 0
40% 17 16/16 1/3 2 0 <- 白赚两个
50% 15 15/16 0/3 3 1 <- 全清,赔一个
60% 14 14/16 0/3 3 2
head_lock),所以一场之内没问题;
但换头部预置位就要重拍参考图。这条要写进操作流程,否则会静默失效。最好配置在 36 帧里只出 15 个框,逐帧召回 41.7%。这个数看着低,但要注意两件事:
OWLv2 比 OWL-ViT 慢 7 倍,比 SmolVLA 一次推理(1329 ms)还慢。 在线每帧跑是不可能的。但如果用途是「伸手之前看一眼」,一次试跑只跑一两次,1.6 秒完全可以。
GOAL 原文:「≥30 帧人工看图、命中 ≥90%」。现在发现「命中」至少有三种读法: 逐帧出框率 41.7% / cup 精度 100% / 「有杯子时找得到」——第三个我没量。
| 做什么 | 能回答 | 成本 | |
|---|---|---|---|
| A | 按「集」重算命中率,而不是按帧 | 问题 2 的 (b),也就是真正的验收数 | 低,纯离线 |
| B | 扩到更多数据集 / 更多帧(现在只有 36 帧 3 个批次) | OWLv2 这个结果是不是运气 | 中,36→150 帧约 4 分钟 |
| C | 把级联做成一个脚本,两个数自动出 | 以后每加一层都有一致口径 | 中 |
05-training/detect/owlv2/records.json、
逐框人工分类 05-training/detect/manual_review.json、
裁图 05-training/detect/runlog/crops_owlv2_24boxes.jpg、
背景差脚本 03-software/scripts/layer3_background_diff.py。
上一份:执行全记录。