Downloads · 30 days
52
51% of all-time downloads
Tung111/OPOD-Qwen2.5-Omni-3B
OPOD-Qwen2.5-Omni-3B is a any-to-any model from Tung111. Use it for the any-to-any task on the model card, and read the license before you ship it in a product. It is set up for transformers. The card lists the license as other.
OPOD (On-Policy Omni Distillation) consolidates separate text, image, and audio teachers into a single omni-modal student. This model is the 3B student from the paper OPOD: On-Policy Omni Distillation, post-trained fr…
Downloads · 30 days
52
51% of all-time downloads
All-time downloads
101
Public
Parameters
5.5B
12 GB on disk
Likes
0
Public
Click a slice to open those files.
.safetensors12 GB · 100%
How the weights are stored.
BF165.1B · 92%
From the Hugging Face model README
OPOD (On-Policy Omni Distillation) consolidates separate text, image, and audio teachers into a single omni-modal student. This model is the 3B student from the paper OPOD: On-Policy Omni Distillation, post-trained from Qwen/Qwen2.5-Omni-3B.
It reaches an overall average of 46.2 across twelve text / vision / audio / omni-modal benchmarks — +5.5 over the base model (the largest base-relative gain of the three scales) and +1.7 over the strongest comparator. The teachers are discarded after training, so inference uses one model with no teacher-ensemble latency or memory.
Post-training on pooled multimodal data often fails to preserve the strengths of modality specialists, and standard on-policy distillation does not extend cleanly to several teachers: their guidance conflicts on a shared backbone, and symmetric distribution matching imposes a teacher ceiling. OPOD addresses this with three components:
| Component | Description |
|---|---|
| One-Sided Teacher Guidance | The token constraint applies only where the routed teacher assigns a higher likelihood than the student, so the student is never pulled back on tokens it already handles better. |
| Adaptive Modality Control | Each modality gets its own constraint budget $\epsilon_m$ and dual weight $\beta_m$, calibrated from a short warm-up instead of sharing one weight. |
| Verification Reward | The routed teacher also verifies the trajectory: correctness-gated answer confidence plus ungated reasoning gain. |
Each student rollout is routed by its input modality to the matching teacher. Teachers are Qwen3-Omni modality specialists, so this model also demonstrates that OPOD transfers across model families and tokenizers (MoE teachers → dense Qwen2.5-Omni student).
Accuracy (%) on the paper's twelve benchmarks. Bold = best in the block.
| Model | AIME25 | AIME26 | HQA | MMLU-Pro | GPQA | MMMU | MathV. | ChartQA | A-OKVQA | MMAU | AVQA | OmniBench | Avg. |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Base (Qwen2.5-Omni-3B) | 1.7 | 1.7 | 18.1 | 22.8 | 24.5 | 42.8 | 53.8 | 57.3 | 81.9 | 69.9 | 72.4 | 41.2 | 40.7 |
| GRPO (pooled data) | 3.3 | 1.7 | 17.4 | 24.5 | 29.0 | 44.6 | 56.4 | 59.7 | 83.8 | 71.6 | 74.9 | 41.7 | 42.4 |
| Native OPD | 1.7 | 3.3 | 23.5 | 36.4 | 26.5 | 44.9 | 59.4 | 61.2 | 84.3 | 69.3 | 75.4 | 42.6 | 44.0 |
| ExOPD | 1.7 | 3.3 | 24.5 | 37.9 | 30.3 | 43.9 | 59.9 | 62.3 | 83.6 | 69.9 | 76.3 | 40.2 | 44.5 |
| OPOD (this model) | 5.0 | 6.7 | 25.6 | 41.5 | 28.5 | 45.8 | 60.5 | 67.5 | 83.7 | 70.8 | 76.9 | 41.5 | 46.2 |
Highlights:
Evaluation protocol. Accuracy, temperature 0.7, top-p 0.7, max prompt / response length 8,192 tokens, identical for all methods. Training prompts are disjoint from every benchmark (exact and normalized-string overlaps removed).
This model keeps the Qwen2.5-Omni architecture and processor, so it is a drop-in replacement for the base model.
The model was RL-trained to reason inside <think></think> and put the final answer inside
<answer></answer>. Use a system prompt of the same form, otherwise accuracy will drop and
answers become harder to parse. The prompts used in the paper are in
eval/prompts/system_prompts.py.
For image / audio / omni multiple-choice questions:
Please think about this question as if you were a human pondering deeply, carefully
considering BOTH the visual and the audio information before answering, engaging in an
internal dialogue using expressions such as let me think, wait, hmm, oh I see, or let's
break it down, including self-reflection or verification in the reasoning process,
providing the detailed reasoning between the <think> </think> tags, and finally giving
only the single option letter (e.g., A, B, C, D, etc.) as the final answer within the
<answer> </answer> tags.
For text problems:
You are a careful problem solver. Think step by step inside <think> </think> tags, then
output the final answer in the exact format requested at the end of the user prompt (do
not add any extra wrappers around the final answer).
from transformers import Qwen2_5OmniForConditionalGeneration, Qwen2_5OmniProcessor
model_id = "Tung111/OPOD-Qwen2.5-Omni-3B"
model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
model_id,
dtype="auto",
device_map="auto",
enable_audio_output=False, # only the thinker was post-trained; see Limitations
)
processor = Qwen2_5OmniProcessor.from_pretrained(model_id)
SYSTEM = (
"You are a careful problem solver. Think step by step inside <think> </think> tags, "
"then output the final answer in the exact format requested at the end of the user "
"prompt (do not add any extra wrappers around the final answer)."
)
conversation = [
{"role": "system", "content": [{"type": "text", "text": SYSTEM}]},
{"role": "user", "content": [
{"type": "image", "image": "https://example.com/chart.png"},
{"type": "text", "text": "What is the highest value in the chart? "
"Put the final answer in <answer></answer>."},
]},
]
text = processor.apply_chat_template(conversation, add_generation_prompt=True, tokenize=False)
inputs = processor(text=text, return_tensors="pt").to(model.device)
ids = model.generate(**inputs, max_new_tokens=8192, temperature=0.7, top_p=0.7,
do_sample=True, return_audio=False)
print(processor.batch_decode(ids[:, inputs.input_ids.shape[1]:], skip_special_tokens=True)[0])
On older transformers releases the class is named Qwen2_5OmniModel. Use the processor's
process_mm_info helper for audio and video inputs, exactly as with the base model.
vllm serve Tung111/OPOD-Qwen2.5-Omni-3B \
--max-model-len 16384 --allowed-local-media-path / --trust-remote-code
Then query the OpenAI-compatible endpoint with the system prompts above.
| Base model | Qwen2.5-Omni-3B (dense) |
| Teachers | 3 × Qwen3-Omni modality specialists (text / image / audio), each GRPO-trained |
| Training data | 6,028 modality-balanced verifiable prompts (2,029 text / 2,000 image / 1,999 audio) from public sources |
| Hardware | NVIDIA H20 cluster (16 GPUs for the student, additional GPUs hosting teacher servers) |
| Rollouts | 8 samples per prompt, rollout batch 16, global batch 64 |
| Lengths | 8,192 max prompt, 8,192 max response |
| Verification reward | $w_A = w_B = 0.2$, clipping $C = 2.0$ |
| Modality control | $\epsilon_{\min}=0.02$, 10-step warm-up, $\beta \in [0.1, 1.5]$ |
| Regularization | reference KL kept throughout |
| Precision | bfloat16 |
enable_audio_output=False for reasoning use cases.<think> / <answer> format; free-form chat,
long-form generation, and speech output are outside the evaluated scope.@article{zhao2026opod,
title = {OPOD: On-Policy Omni Distillation},
author = {Zhao, Tong and Hu, Yuyang and Zhu, Yutao and Li, Reed and
Liang, Haijin and Shi, Haibo and Lu, Yu and Dou, Zhicheng},
journal = {arXiv preprint arXiv:2607.20918},
year = {2026},
url = {https://arxiv.org/abs/2607.20918}
}
Derived from Qwen2.5-Omni-3B, which is released under the Qwen Research License. This model inherits those terms — see the base model license.