Views
No views yet
transformers.Qwen2_5OmniForConditionalGeneration class directly.1README.md
2omnisift/
3 modeling_qwen2_5_omni.py
4 compression_units.py
5OmniSIFT-7B/
6 config.json
7 model-*.safetensors
8 tokenizer and processor files1import sys
2import torch
3from huggingface_hub import snapshot_download
4from qwen_omni_utils import process_mm_info
5from transformers import Qwen2_5OmniProcessor
6
7repo_dir = snapshot_download("dingyue1011/OmniSIFT-7B")
8model_dir = f"{repo_dir}/OmniSIFT-7B"
9sys.path.append(repo_dir)
10
11from omnisift.modeling_qwen2_5_omni import (
12 Qwen2_5OmniForConditionalGeneration,
13)
14
15model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
16 model_dir,
17 torch_dtype=torch.bfloat16,
18 device_map="cuda:0",
19 attn_implementation="flash_attention_2",
20)
21model.disable_talker()
22model.thinker.omnizip_config = None
23model.thinker.compression_config = {
24 "rho_audio": 0.5,
25 "rho_video": 0.77,
26}
27processor = Qwen2_5OmniProcessor.from_pretrained(model_dir)
28
29conversation = [
30 {
31 "role": "system",
32 "content": [
33 {
34 "type": "text",
35 "text": "You are Qwen, a virtual human developed by the Qwen Team, Alibaba Group, capable of perceiving auditory and visual inputs, as well as generating text and speech.",
36 }
37 ],
38 },
39 {
40 "role": "user",
41 "content": [
42 {"type": "video", "video": "/path/to/video.mp4"},
43 {"type": "text", "text": "Please describe the video."},
44 ],
45 },
46]
47
48use_audio_in_video = True
49text = processor.apply_chat_template(
50 conversation, add_generation_prompt=True, tokenize=False
51)
52audios, images, videos = process_mm_info(
53 conversation, use_audio_in_video=use_audio_in_video
54)
55inputs = processor(
56 text=text,
57 audio=audios,
58 images=images,
59 videos=videos,
60 return_tensors="pt",
61 padding=True,
62 use_audio_in_video=use_audio_in_video,
63)
64inputs = inputs.to(model.device).to(model.dtype)
65
66with torch.no_grad():
67 output_ids = model.generate(
68 **inputs,
69 use_audio_in_video=use_audio_in_video,
70 do_sample=False,
71 return_audio=False,
72 max_new_tokens=512,
73 use_cache=True,
74 )
75
76output = processor.batch_decode(
77 output_ids[:, inputs["input_ids"].shape[1] :],
78 skip_special_tokens=True,
79 clean_up_tokenization_spaces=False,
80)[0]
81print(output)omnisift code when loading this checkpoint.rho_audio and rho_video control the audio/video compression ratios at inference time.