TempSamp-R1 (no-CoT) baseline on ActivityForensics
TempSamp-R1's official code is not released. The paper's algorithm, however,
is a strict subset of what forensics_grpo already implements:
| TempSamp-R1 component | Where it lives in forensics_grpo |
|---|---|
| Mix-policy sampling (G−1 on-policy + 1 GT) | src/open_r1/trainer/grpo_trainer_video_GT_soft.py lines ~509, 786-787 |
| Non-linear reward shaping (paper Eq. 4) | transform_rewards at grpo_trainer_video_GT_soft.py:692-704 |
| Group-relative advantage (paper Eq. 2) | grpo_trainer_video_GT_soft.py lines 1102-1106 (default branch) |
| IoU reward | src/open_r1/reward.py::hungarian_iou_reward (multi-segment) / forensics_iou |
So this baseline = forensics_grpo trainer + no-CoT prompt + IoU-only reward
- all forensics-specific extras disabled. The whole baseline is therefore a ~60-line wrapper plus one launch script — no algorithm is re-implemented.
What this enforces
src/tempsamp_main.py sets FORENSICS_COT=false at import time, then
asserts that none of these forensics-specific switches is enabled
(they would diverge from the paper algorithm):
FORENSICS_DECOMP_ADV– set-level GT-segment advantage decompositionFORENSICS_HUNGARIAN_DECOMP– per-PRED-segment token-level advantageFORENSICS_CTA_GRPO– counterfactual token-level advantageFORENSICS_FORGERY_AWARE– external forgery-head reward shapingFORENSICS_USE_EXTERNAL_VERIFIER,FORENSICS_VERIFIER_CONTEXT
If any of these is true at startup, the script raises.
On the "use their IoU" requirement
TempSamp-R1's paper IoU is single-span (Charades-style). ActivityForensics is
inherently multi-segment, so this baseline uses the natural multi-segment
extension hungarian_iou_reward. The reward FORMULA is the same — set-IoU
via Hungarian matching reduces to plain IoU when |GT|=|pred|=1. Algorithm
(mix-policy + non-linear shaping) is unchanged.
If you want strict single-span IoU instead, switch --reward_funcs to iou
and add a per-segment splitting step to the dataset (mirroring the
data_forensics/ adapter in ../time_r1/).
Files
src/tempsamp_main.pyentry point (locks no-CoT, asserts no extras)scripts/run_tempsamp_no_cot.shlaunch script- this README
Running
cd /mnt/local-fast/zhangt/baselines/tempsamp_r1
# edit MODEL_PATH / ANNOT_DIR / VIDEO_ROOT / PREPROC_DIR inside the script first
bash scripts/run_tempsamp_no_cot.sh
FORENSICS_GRPO_ROOT (default /mnt/local-fast/zhangt/forensics_grpo) is on
sys.path so the wrapper imports src.open_r1.grpo_forensics:main directly.