Safetensors
qwen3_vl

video-SALMONN 2 Pro: another updated version of video-SALMONN 2

video-SALMONN 2 Pro upgrades video-SALMONN 2 to the Qwen3-VL backbone while retaining its audio-visual alignment and instruction-tuning pipeline. The project supports joint video and audio understanding, detailed video captioning, and audio-visual question answering.

Three model sizes are provided: 4B, 8B, and 32B.

Performance

We evaluate the models on audio-visual QA benchmarks including Video-MME, WorldSense, AVUT, Video-Holmes, and DailyOmni. Our 4B and 8B models achieve SOTA results at comparable scales, while the 32B model surpasses all other open-source systems.

Model Video-MME WorldSense AVUT Video-Holmes DailyOmni FutureOmni
VideoLLaMA3 (2B) 59.6 - - - - -
Qwen2.5-Omni (3B)* 62.0 - - - 40.5 38.9
Qwen2.5-VL (3B) 61.5 - - - 37.4 -
video-SALMONN 2+ (3B)* 68.3 48.3 66.2 42.2 67.7 50.5
video-SALMONN 2 Pro (4B)* 75.4 54.3 77.2 50.1 78.9 55.6
video-SALMONN (13B)* 43.3 - 38.3 - - -
LLaVA-Video (7B) 63.3 40.2 56.5 - - -
VideoLLaMA2 (7B)* 54.9 25.4 44.9 - 35.2 40.8
VideoLLaMA3 (7B) 66.2 - - - - 46.8
Qwen2.5-Omni (7B)* 64.3 45.4 - 16.4 47.5 47.5
Qwen2.5-VL (7B) 65.1 - - 27.8 40.7 43.7
video-SALMONN 2 (7B)* 67.4 48.6 65.6 40.7 66.3 48.7
video-SALMONN 2+ (7B)* 73.4 50.9 69.5 46.9 71.8 51.0
video-SALMONN 2 Pro (8B)* 77.5 55.0 78.3 55.1 80.0 58.0
GPT-4o 71.9 42.6 56.6 42.0 56.5 49.7
Gemini-1.5 Pro* 75.0 48.0 78.3 41.2 - -
Qwen3-Omni-Flash* 71.4 54.1 - 57.3 76.2 -
LLaVA-Video (72B) 70.5 - - - - -
VideoLLaMA2 (72B)* 61.4 - - - - -
Qwen2.5-VL (72B) 73.3 - - 50.2 61.8 -
video-SALMONN 2+ (72B)* 79.7 56.5 72.2 57.8 79.4 60.8
video-SALMONN 2 Pro (32B)* 82.7 59.4 81.1 61.7 81.7 61.4

* Models that use audio input.

Installation

Install the project dependencies:

pip install -r requirements.txt

The inference and training paths require PyTorch, Transformers, and a working video decoding backend. GPU inference requires a CUDA-compatible PyTorch installation.

Inference

Use scripts/inference.py for single-video inference:

python scripts/inference.py \
  --model tsinghua-ee/video-SALMONN-2-Pro-8B \
  --video dataset/videos/example.mp4

Use a custom instruction with --prompt:

python scripts/inference.py \
  --model tsinghua-ee/video-SALMONN-2-Pro-4B \
  --video dataset/videos/example.mp4 \
  --prompt "Describe the video and summarize its spoken content."

The same command works for the 4B, 8B, and 32B checkpoints. Use --no-audio when embedded audio should not be processed. Frame sampling and generation can be adjusted with --video-min-frames, --video-max-frames, --video-max-frame-pixels, and --max-new-tokens.

Data Format

Training data is stored as JSON or JSONL. A video sample follows this format:

[
  {
    "video": "dataset/videos/example.mp4",
    "use_audio": true,
    "conversations": [
      {
        "from": "human",
        "value": "<video>\nDescribe the video in detail."
      },
      {
        "from": "gpt",
        "value": "The expected response."
      }
    ]
  }
]

Set use_audio to false when the video audio track should be ignored.

Training

scripts/train.sh launches supervised fine-tuning. It loads the checkpoint directly from --model_base and writes checkpoints to output/<run_name>.

Set the distributed launch environment before running the script:

export ARNOLD_WORKER_GPU=8
export ARNOLD_WORKER_NUM=1
export ARNOLD_ID=0
export METIS_WORKER_0_HOST=127.0.0.1

Audio alignment:

bash scripts/train.sh \
  --model_base tsinghua-ee/video-SALMONN-2-Pro-8B \
  --dataset dataset/audio_alignment.json \
  --run_name audio_alignment \
  --interval 0.1 \
  --max_frames 768 \
  --max_pixels 61250 \
  --train_qformer \
  --lr 2e-5 \
  --epoch 5

Audio-visual supervised fine-tuning with LoRA:

bash scripts/train.sh \
  --model_base tsinghua-ee/video-SALMONN-2-Pro-8B \
  --dataset dataset/av_sft.json \
  --run_name av_sft \
  --interval 0.1 \
  --max_frames 768 \
  --max_pixels 61250 \
  --train_qformer \
  --train_proj \
  --use_lora \
  --lora_r 128 \
  --lora_alpha 256 \
  --lr 2e-5 \
  --epoch 5

Adjust per-device batch size and gradient accumulation with --bs and --accum_steps. The 32B model normally requires more GPUs or a more aggressive DeepSpeed configuration.

Merge a LoRA Checkpoint

LoRA merging is intentionally separate from training. Merge a trained adapter into its base model with:

python scripts/merge_base_model.py \
  --model_name_or_path tsinghua-ee/video-SALMONN-2-Pro-8B \
  --lora_ckpt output/av_sft/checkpoint-1000 \
  --output_dir output/av_sft-merged

The merged directory can be passed directly to scripts/inference.py.

vLLM Serving

An OpenAI-compatible vLLM server is also available:

python scripts/serve.py \
  --model tsinghua-ee/video-SALMONN-2-Pro-8B \
  --host 0.0.0.0 \
  --port 8000 \
  --served-model-name qwen3-vl

Send a request with:

python scripts/call_vllm.py \
  --video dataset/videos/example.mp4 \
  --prompt "Describe the video in detail."
Downloads last month
79
Safetensors
Model size
5B params
Tensor type
I64
·
BF16
·
Inference Providers NEW
This model isn't deployed by any Inference Provider. 🙋 Ask for provider support

Collection including tsinghua-ee/video-SALMONN-2-Pro-4B

Paper for tsinghua-ee/video-SALMONN-2-Pro-4B