wukeming11's picture
Link the arXiv preprint
6fa2496 verified
|
Raw
History Blame Contribute Delete
5.18 kB
---
license: apache-2.0
base_model: Qwen/Qwen3.5-4B
library_name: transformers
pipeline_tag: video-text-to-text
tags:
- streaming-video
- video-understanding
- on-policy-distillation
- knowledge-distillation
- qwen3_5
- arxiv:2608.16320
language:
- en
---
# StreamOPD-4B-ST-CueGate
A 4B streaming video-understanding model, post-trained from **Qwen3.5-4B** with on-policy
distillation from a **Qwen3.5-9B** teacher under **ST-CueGate**, the spatio-temporal cue
gating method from *StreamOPD: A Post-Training Recipe with Spatio-Temporal Cue Gating for
Streaming Video Understanding*.
- **Paper:** https://arxiv.org/abs/2608.16320
- **Code:** https://github.com/UniX-AI-Lab/StreamOPD
- **Project page:** https://unix-ai-lab.github.io/StreamOPD/
## What is different about this model
The model is trained for a deliberately austere streaming setting: at answer time it sees
only the **4 most recent frames at 1 fps** — no memory bank, no retrieval, no KV-cache
compression, and no generated reasoning trace. All of the capability lives in the weights
rather than in test-time machinery.
Training uses on-policy distillation in *thinking* mode, while deployment is in *instruct*
mode. During training the frozen teacher scores the student's own response twice — once
conditioned on a grounded spatio-temporal cue and once without it — and the resulting
per-token likelihood ratio is aggregated into a response-level weight that gates the
distillation advantage. The cue is a training-time signal only: it is never present at
inference, so the deployment path is identical to a plain Qwen3.5-4B.
## Results
Evaluated in instruct mode with greedy decoding under the recent-4-frame protocol.
StreamingBench and OVO-Bench use recent-4 frames at 1 fps; Video-MME and LongVideoBench use
their standard protocols with at most 32 frames.
| Model | StreamingBench | OVO-Bench (excl. HLD) | Video-MME | LongVideoBench |
|-------|:---:|:---:|:---:|:---:|
| Qwen3.5-4B (untrained) | 77.87 | 59.94 | 64.22 | 57.74 |
| Qwen3.5-9B (teacher) | 84.15 | — | — | — |
| **This checkpoint** | **84.19** | **70.48** | **64.85** | **60.36** |
The full comparison, including per-subtask OVO-Bench breakdowns, the teacher-conditioning
ablations, and the self-distillation variant, is in the paper.
## Usage
```python
from transformers import AutoProcessor, Qwen3_5ForConditionalGeneration
model_id = "UniX-Lab/StreamOPD-4B-ST-CueGate"
model = Qwen3_5ForConditionalGeneration.from_pretrained(
model_id, torch_dtype="bfloat16", device_map="auto"
).eval()
processor = AutoProcessor.from_pretrained(model_id)
messages = [{
"role": "user",
"content": [
{"type": "video", "video": "clip.mp4"},
{"type": "text", "text": "What did the person pick up?\nA. book B. cup C. apple\n"
"Only give the best option's letter directly."},
],
}]
inputs = processor.apply_chat_template(
messages, add_generation_prompt=True, tokenize=True,
return_dict=True, return_tensors="pt",
).to(model.device)
out = model.generate(**inputs, max_new_tokens=32, do_sample=False)
print(processor.decode(out[0][inputs["input_ids"].shape[1]:], skip_special_tokens=True))
```
Run with **thinking disabled** — the model is trained to answer directly, and the reported
scores use instruct-mode greedy decoding. Set `FORCE_QWENVL_VIDEO_READER=decord` for video
decoding.
To reproduce the streaming evaluation exactly, use the evaluators in the code repository,
which implement the recent-window protocol and the OVO-Bench B+R macro:
```bash
bash scripts/eval/run_all.sh <path-to-this-model> my_run 0,1,2,3
bash scripts/eval/score_all.sh my_run
```
## Training
| | |
|---|---|
| Student | Qwen3.5-4B |
| Teacher | Qwen3.5-9B (frozen) |
| Objective | on-policy distillation, sampled-token k1 reverse KL via policy gradient |
| Gating | ST-CueGate, α=0.5, gate range [0, 2], UID sibling normalization, response-level |
| Rollouts | n=4 |
| Data | 25,118 verifiable video QA items (multiple choice / binary / counting) |
| Mode | trained in thinking mode, deployed in instruct mode |
Training data is derived from public sources (LLaVA-Video-178K and Kinetics-700 clips); the
data pipeline, the parquets, and the cue-generation tooling are in the code repository.
## Limitations
- Answers come from a 4-frame window, so questions needing evidence outside that window are
out of scope by construction.
- Distillation from a larger teacher reduces the willingness to abstain on unanswerable
queries (OVO-Bench's HLD subtask) relative to the untrained base model. The paper reports
a self-distillation variant that recovers this.
- Trained and evaluated on English data.
## Citation
```bibtex
@article{wu2026streamopd,
title = {StreamOPD: A Post-Training Recipe with Spatio-Temporal Cue Gating
for Streaming Video Understanding},
author = {Wu, Keming and Wang, Baoyi and Zhang, Kaichen and An, Xiang and
Yang, Zuhao and Wang, Sudong and Zhu, Haowei and Huang, Tingxuan and
Gao, Hongcheng and Wang, Bin},
journal = {arXiv preprint arXiv:2608.16320},
year = {2026}
}
```