Handle verified Ego4D terminal bounding-box records

This commit is contained in:
Xin Wang
2026-08-28 01:11:51 +08:00
parent 5fd285e369
commit 668996bfa8
4 changed files with 246 additions and 6 deletions

View File

@@ -173,6 +173,24 @@ worker 及其进程组,不杀无关训练。已完成的 `.pt` 保留,重跑
8 workers 也会增加 CPU、主机 RAM、磁盘 I/O 和标注 JSON 的解析开销;不要预设能达到 8 倍速度。
主机内存不足时改为 `--gpus 0 1 2 3` 并重跑,完成的文件仍可复用;不同次分片也不会改写已完成特征。
#### 已核实的末尾 bbox 记录
2026-08-28 在 `31488ff6-05ef-4362-9786-35981b06f307` 上核对到:
原视频 8999 帧、30 FPS,有效索引为 `0..8998`;标注从 0 开始,
`clip_end_frame=8999`、`clip_end_sec=299.9666666666666`,唯一越界索引是 `8999`。
这是无对应解码帧的末尾记录,不应把该框移到 `8998`,也不应将所有框减 1。
提取器只在以下条件同时满足时忽略末尾记录:唯一越界索引为 `N`,
`N=视频帧数=clip_end_frame`,标注帧起点为 0、时间起点在 1 微秒内为 0,
且标注时长与 `N / source_fps` 相差不超过 0.1 毫秒。
缺少确认边界、较大越界或时长不匹配仍会报错,并打印具体范围;不自动跳过 clip。
日志显示忽略的末尾索引和框数;新 `.pt` 的 `box_frame_audit` 与预览目录的
`box_frame_audit.json` 保存原始范围、视频帧数、标注边界和忽略记录。
不修改原视频、JSON、target 或已完成的特征。本例仍输出 1499 行,对应截止时间
`0.2..299.8s`,2 FPS 的最后一个输入采样时刻仍为 `299.5s`。
该处理不改编码器/池化配置,之前完成且通过校验的特征可以继续复用;同步修复后重跑原 8 卡命令即可。
提取完成后,原训练入口也直接用同一个原始全局特征根,无需 flat 索引:
```bash
@@ -247,10 +265,11 @@ python summarize_local_baselines.py \
## 回归测试
```bash
python -m unittest -q test_easycom_head_objectives test_local_turn_features test_ego4d_local_workflow test_ego4d_local_multigpu
python -m unittest -q test_easycom_head_objectives test_local_turn_features test_ego4d_local_workflow test_ego4d_local_multigpu test_ego4d_box_frames
```
CPU 回归包括 manifest 顺序/防交叉重复、完整批量提取的模型复用、断点文件校验、
单层/多层全局特征、测试集输入预检,以及合成 Ego4D 上四组各 4 epochs 的训练/推理与增量汇总。
另测试原 train/test 目录、433 clips 的 8 卡完整互斥分片、GPU mask、独立日志、失败/中断时清理自有进程。
末尾框回归覆盖严格边界验证、其它越界拒绝、1499 行完整提取、审计保存和旧特征续跑。
真实 Ego4D 像素、提供框和 3B/L20 提取仍需按上面的 preview/smoke 步骤验证。