forensics-grpo / code /time_r1 /README_forensics.md
sdzt's picture
Add source code
33569f9 verified
|
Raw
History Blame Contribute Delete
1.89 kB
# Time-R1 baseline on ActivityForensics
This directory only adds data adapters; **all upstream Time-R1 code is unchanged**
(`finetune.py`, `src/time_r1/*`, etc.). Reward (single-span IoU + optional format)
is taken as-is from the original repo.
## What gets adapted
ActivityForensics annotations are multi-segment (a video has K ≥ 1 forged
intervals). Time-R1 only models single-span temporal grounding, so each
`(video, segment)` pair is emitted as one training example with a fixed query:
> "an AI-manipulated segment"
Multi-segment GT is split per segment; all splits of the same video share the
same Qwen2.5-VL preprocessed cache via symlinks.
## Setup
```bash
cd /mnt/local-fast/zhangt/baselines/time_r1
# 1) Build Time-R1-format annotation JSON.
python data_forensics/build_forensics_json.py \
--annot_dir /ces/zt/activityforensics/annot \
--video_root /ces/zt \
--output_dir ./dataset/forensics/annotation
# -> writes train.json / val.json
# 2) Symlink the pre-encoded video tensors that forensics_grpo already produced.
python data_forensics/link_cache.py \
--forensics_cache /mnt/local-fast/zhangt/forensics_grpo/<your_cache_dir> \
--annotation_json_dir ./dataset/forensics/annotation \
--output_dir ./dataset/forensics/preprocessed
# -> creates ./dataset/forensics/preprocessed/{train,eval}/<vid>_<sid>/...
# 3) Launch training (edit MODEL_PATH at the top of the script first).
bash scripts/finetune/run_forensics.sh
```
`build_forensics_json.py` uses forensics_grpo's `data_loader` parser, so any
change to its annotation schema flows through automatically. Override
`FORENSICS_GRPO_ROOT=<path>` if forensics_grpo lives elsewhere.
## Files added
- `data_forensics/build_forensics_json.py` - .txt → Time-R1 .json
- `data_forensics/link_cache.py` - cache layout symlinker
- `scripts/finetune/run_forensics.sh` - launch script