Qwen2.5-Omni-7B: Kecil Tapi Hebat

INEZA FELIN-MICHEL

INEZA FELIN-MICHEL

1 May 2025

Qwen2.5-Omni-7B: Kecil Tapi Hebat

Bidang kecerdasan buatan berkembang pesat, mendorong batas-batas kemampuan mesin untuk memahami, mengenali, dan menghasilkan. Lompatan signifikan dalam evolusi ini ditandai dengan diperkenalkannya model Qwen2.5-Omni-7B, model multimodal end-to-end unggulan yang dikembangkan oleh tim Qwen. Model ini mewakili perubahan paradigma, bergerak melampaui interaksi berbasis teks untuk merangkul pengalaman yang benar-benar omni-modal. Model ini memproses beragam input dengan mulus – teks, gambar, audio, dan video – sambil secara bersamaan menghasilkan respons dalam format teks dan ucapan alami, seringkali dalam mode streaming waktu nyata. Artikel ini membahas seluk-beluk teknis, tolok ukur kinerja, dan aplikasi praktis dari model Qwen2.5-Omni-7B yang inovatif.

💡
Ingin alat Pengujian API hebat yang menghasilkan Dokumentasi API yang indah?

Ingin platform Terintegrasi, All-in-One untuk Tim Pengembang Anda bekerja sama dengan produktivitas maksimum?

Apidog memenuhi semua permintaan Anda, dan menggantikan Postman dengan harga yang jauh lebih terjangkau!
button

Apa itu Qwen2.5-Omni-7B? Dan Mengapa Sangat Bagus?

Intinya, model Qwen2.5-Omni-7B menggunakan arsitektur end-to-end baru yang disebut "Thinker-Talker". Filosofi desain ini bertujuan untuk menciptakan sistem terpadu yang mampu melakukan persepsi komprehensif dan generasi ekspresif di berbagai modalitas.

Komponen "Thinker" bertanggung jawab untuk memproses dan memahami kekayaan input multimodal. Ini mengintegrasikan encoder khusus untuk berbagai jenis data:

Inovasi penting dalam arsitektur ini adalah Time-aligned Multimodal RoPE (TMRoPE). Pengkodean posisi standar seperti Rotary Position Embedding (RoPE) unggul dalam data sekuensial seperti teks tetapi memerlukan adaptasi untuk skenario multimodal, terutama video di mana bingkai visual dan aliran audio harus disinkronkan. TMRoPE mengatasi hal ini dengan menyelaraskan stempel waktu bingkai video dengan segmen audio yang sesuai. Sinkronisasi ini memungkinkan model untuk membangun pemahaman temporal yang koheren tentang peristiwa audio-visual, memungkinkannya menjawab pertanyaan seperti "Suara apa yang terjadi ketika objek dijatuhkan dalam video?"

Komponen "Talker" menangani pembuatan output. Ini terdiri dari:

Sifat end-to-end berarti seluruh proses, dari persepsi hingga generasi, terjadi dalam satu model terpadu, meminimalkan latensi dan memungkinkan interaksi streaming yang mulus di mana respons dapat dimulai sebelum input sepenuhnya diproses.

Jadi Mengapa Qwen2.5-Omni-7B Begitu Istimewa?

Model Qwen2.5-Omni-7B membedakan dirinya melalui beberapa fitur teknis utama:

Berikut adalah tolok ukur untuk Qwen2.5-Omni

Evaluasi kuantitatif menggarisbawahi kemampuan model Qwen2.5-Omni-7B. Di berbagai spektrum tolok ukur, model ini menunjukkan kemahiran:

Multimodalitas ke Teks: Di OmniBench, model 7B mencapai skor rata-rata 56,13% yang luar biasa, secara signifikan mengungguli model seperti Gemini-1.5-Pro (42,91%) dan model multimodal khusus dalam tugas yang melibatkan penalaran gambar, audio, dan teks gabungan.

Audio ke Teks:

Gambar ke Teks: Model Qwen2.5-Omni-7B menunjukkan kinerja yang sebanding dengan model Qwen2.5-VL-7B yang khusus pada tolok ukur visi-bahasa seperti MMMU (59,2 vs 58,6), MMBench-V1.1-EN (81,8 vs 82,6), MMStar (64,0 vs 63,9), dan TextVQA (84,4 vs 84,9). Model ini juga unggul dalam tugas grounding seperti RefCOCO/+/g.

Video (tanpa audio) ke Teks: Di tolok ukur seperti Video-MME (tanpa sub) dan MVBench, model ini mencapai skor masing-masing 64,3 dan 70,3, menunjukkan pemahaman video yang kuat bahkan tanpa isyarat audio yang menyertai dalam tes khusus ini.

Zero-shot TTS: Dievaluasi di SEED-TTS-eval, versi yang disetel RL menunjukkan WER rendah (1,42/2,32/6,54 untuk zh/en/hard) dan kemiripan pembicara tinggi (0,754/0,641/0,752), menunjukkan generasi suara berkualitas tinggi dan konsisten.

Teks ke Teks: Meskipun terutama multimodal, kemampuan teks-saja tetap kuat. Di MMLU-redux model ini mencetak 71,0, di GSM8K 88,7, dan di HumanEval 78,7, umumnya tertinggal dari model teks Qwen2.5-7B yang khusus tetapi membandingkan dengan baik terhadap model 7-8B lainnya seperti Llama3.1-8B.


Menjalankan Model Qwen2.5-Omni-7B: Implementasi Praktis

Beralih dari kemampuan teoretis ke aplikasi praktis membutuhkan pemahaman tentang cara berinteraksi dengan model Qwen2.5-Omni-7B secara terprogram. Alat utama untuk ini adalah pustaka transformers Hugging Face, yang ditingkatkan dengan integrasi Qwen khusus, dan paket qwen-omni-utils yang berguna untuk penanganan input multimodal yang efisien.

Perjalanan dimulai dengan menyiapkan lingkungan. Pastikan Anda memiliki pustaka inti, termasuk transformers, accelerate (untuk penanganan multi-GPU dan presisi campuran yang efisien), torch, soundfile (untuk I/O audio), dan qwen-omni-utils yang penting. Sangat disarankan untuk menginstal versi pratinjau spesifik dari transformers yang mencakup dukungan arsitektur Qwen2.5-Omni dan menggunakan tambahan [decord] untuk qwen-omni-utils untuk pemrosesan video yang lebih cepat:

# Recommended installation
pip install transformers accelerate torch soundfile qwen-omni-utils[decord] -U
# Install the specific transformers version with Qwen2.5-Omni support
pip install git+https://github.com/huggingface/transformers@v4.51.3-Qwen2.5-Omni-preview

Setelah lingkungan siap, memuat model dan prosesor yang sesuai adalah langkah selanjutnya. Untuk mengelola sumber daya komputasi yang signifikan yang diperlukan, terutama VRAM, menggunakan presisi bfloat16 (torch_dtype=torch.bfloat16 atau "auto") dan mengaktifkan Flash Attention 2 (attn_implementation="flash_attention_2") sangat disarankan. Flash Attention 2 mengoptimalkan mekanisme perhatian, mengurangi jejak memori dan meningkatkan kecepatan pada perangkat keras yang kompatibel (arsitektur NVIDIA Ampere atau yang lebih baru). Argumen device_map="auto" secara cerdas mendistribusikan lapisan model di seluruh GPU yang tersedia.

import torch
import soundfile as sf
from transformers import Qwen2_5OmniForConditionalGeneration, Qwen2_5OmniProcessor
from qwen_omni_utils import process_mm_info

# Define model identifier and load components
model_path = "Qwen/Qwen2.5-Omni-7B"

print("Loading model and processor...")
model = Qwen2_5OmniForConditionalGeneration.from_pretrained(
    model_path,
    torch_dtype=torch.bfloat16, # Use BF16 for memory efficiency
    device_map="auto",         # Distribute model across available GPUs
    attn_implementation="flash_attention_2" # Enable Flash Attention 2
)
processor = Qwen2_5OmniProcessor.from_pretrained(model_path)
print("Model and processor loaded successfully.")

Dengan model dimuat, kita dapat menjelajahi kemampuannya melalui contoh yang mencerminkan buku masak yang disediakan.

Pemahaman Audio Universal dengan Model Qwen2.5-Omni-7B

cookbooks/universal_audio_understanding.ipynb menunjukkan kehebatan model dalam menangani berbagai tugas audio. Mari kita mulai dengan Automatic Speech Recognition (ASR).

Input perlu disusun sebagai daftar percakapan. Kita memberikan prompt sistem (penting untuk mengaktifkan potensi output audio, meskipun tidak digunakan untuk ASR) dan pesan pengguna yang berisi input audio (ditentukan melalui URL atau jalur lokal) dan prompt teks yang menginstruksikan model.

# Prepare conversation for ASR using a sample audio URL
audio_url_asr = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-Omni/hello.wav"

conversation_asr = [
    {
        "role": "system",
        "content": [{"type": "text", "text": "You are Qwen, a virtual human..."}] # Standard system prompt
    },
    {
        "role": "user",
        "content": [
            {"type": "audio", "audio": audio_url_asr},
            {"type": "text", "text": "Please provide the transcript for this audio."}
        ]
    }
]

# Process multimodal info. Note: use_audio_in_video is False here.
USE_AUDIO_IN_VIDEO_FLAG = False
print("Processing ASR input...")
text_prompt_asr = processor.apply_chat_template(conversation_asr, add_generation_prompt=True, tokenize=False)
audios_asr, images_asr, videos_asr = process_mm_info(conversation_asr, use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG)

# Prepare final model inputs using the processor
inputs_asr = processor(
    text=text_prompt_asr,
    audio=audios_asr, images=images_asr, videos=videos_asr, # Pass processed modalities
    return_tensors="pt", padding=True,
    use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG # Consistent flag setting
)
# Move inputs to the correct device and data type
inputs_asr = inputs_asr.to(model.device).to(model.dtype)
print("ASR input ready for generation.")

Utilitas process_mm_info menangani pemuatan dan pra-pemrosesan URL audio. Prosesor kemudian menggabungkan prompt teks yang di-tokenisasi dengan fitur audio yang diproses, membuat tensor input. Perhatikan flag use_audio_in_video secara konsisten diatur ke False karena tidak ada video yang terlibat.

Untuk menghasilkan transkripsi, kita memanggil metode model.generate. Untuk ASR yang lebih cepat, kita mengatur return_audio=False.

print("Generating ASR transcription...")
with torch.no_grad(): # Disable gradient calculations for inference
    text_ids_asr = model.generate(
        **inputs_asr,
        use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG,
        return_audio=False, # Only need text output
        max_new_tokens=512  # Limit output length
    )

# Decode the generated token IDs back to text
transcription = processor.batch_decode(text_ids_asr, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]

print("\n--- Qwen2.5-Omni-7B Model: ASR Result ---")
print(f"Audio Source: {audio_url_asr}")
print(f"Generated Transcription: {transcription}")

Selain ucapan, model ini dapat menganalisis suara lain. Mari kita coba mengidentifikasi peristiwa suara, seperti batuk. Prosesnya serupa, mengganti sumber audio dan menyesuaikan prompt teks.

# Prepare conversation for sound analysis
sound_url = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-Omni/cough.wav"

conversation_sound = [
    {"role": "system", "content": [{"type": "text", "text": "You are Qwen, a virtual human..."}]},
    {
        "role": "user",
        "content": [
            {"type": "audio", "audio": sound_url},
            {"type": "text", "text": "What specific sound event occurs in this audio clip?"}
        ]
    }
]

# Process input (similar steps as ASR)
print("\nProcessing sound analysis input...")
text_prompt_sound = processor.apply_chat_template(conversation_sound, add_generation_prompt=True, tokenize=False)
audios_sound, _, _ = process_mm_info(conversation_sound, use_audio_in_video=False) # No images/videos
inputs_sound = processor(text=text_prompt_sound, audio=audios_sound, return_tensors="pt", padding=True, use_audio_in_video=False)
inputs_sound = inputs_sound.to(model.device).to(model.dtype)
print("Sound analysis input ready.")

# Generate sound analysis (text only)
print("Generating sound analysis...")
with torch.no_grad():
    text_ids_sound = model.generate(**inputs_sound, return_audio=False, max_new_tokens=128)

# Decode and display the result
analysis_text = processor.batch_decode(text_ids_sound, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
print("\n--- Qwen2.5-Omni-7B Model: Sound Analysis Result ---")
print(f"Audio Source: {sound_url}")
print(f"Sound Analysis: {analysis_text}")

Ekstraksi Informasi Video dengan Model Qwen2.5-Omni-7B

Buku masak cookbooks/video_information_extracting.ipynb berfokus pada ekstraksi wawasan dari aliran video, tugas di mana pemrosesan audio-visual terintegrasi dari model Qwen2.5-Omni-7B bersinar.

Di sini, perbedaan krusial seringkali adalah kebutuhan untuk memproses baik bingkai visual maupun trek audio video. Ini dikontrol oleh parameter use_audio_in_video, yang harus diatur ke True selama process_mm_info dan panggilan processor.

# Prepare conversation for video analysis using a sample video URL
video_url = "https://qianwen-res.oss-cn-beijing.aliyuncs.com/Qwen2.5-Omni/draw.mp4"

conversation_video = [
    {"role": "system", "content": [{"type": "text", "text": "You are Qwen, a virtual human..."}]},
    {
        "role": "user",
        "content": [
            {"type": "video", "video": video_url},
            # Prompt requiring integrated audio-visual understanding
            {"type": "text", "text": "Describe the actions in this video and mention any distinct sounds present."}
        ]
    }
]

# Process multimodal info, crucially enabling audio from video
USE_AUDIO_IN_VIDEO_FLAG = True # Enable audio track processing
print("\nProcessing video analysis input (with audio)...")
text_prompt_video = processor.apply_chat_template(conversation_video, add_generation_prompt=True, tokenize=False)

# process_mm_info handles video loading (using decord if installed)
audios_video, images_video, videos_video = process_mm_info(conversation_video, use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG)

# Prepare final model inputs
inputs_video = processor(
    text=text_prompt_video,
    audio=audios_video, images=images_video, videos=videos_video,
    return_tensors="pt", padding=True,
    use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG # MUST be True here as well
)
inputs_video = inputs_video.to(model.device).to(model.dtype)
print("Video input ready for generation.")

Saat menghasilkan respons untuk analisis video, kita dapat meminta deskripsi tekstual dan output ucapan yang disintesis menggunakan return_audio=True dan menentukan speaker.

# Generate video analysis (requesting both text and audio output)
print("Generating video analysis (text and audio)...")
with torch.no_grad():
    text_ids_video, audio_output_video = model.generate(
        **inputs_video,
        use_audio_in_video=USE_AUDIO_IN_VIDEO_FLAG, # MUST be True here too
        return_audio=True,         # Request speech synthesis
        speaker="Ethan",           # Choose a voice (e.g., Ethan)
        max_new_tokens=512
    )

# Decode the text part of the response
video_analysis_text = processor.batch_decode(text_ids_video, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]

print("\n--- Qwen2.5-Omni-7B Model: Video Analysis Result ---")
print(f"Video Source: {video_url}")
print(f"Generated Text Analysis: {video_analysis_text}")

# Save the generated audio response if it exists
if audio_output_video is not None:
    output_audio_path = "video_analysis_response.wav"
    sf.write(
        output_audio_path,
        audio_output_video.reshape(-1).detach().cpu().numpy(), # Reshape and move to CPU
        samplerate=24000, # Qwen Omni uses 24kHz
    )
    print(f"Generated audio response saved to: {output_audio_path}")
else:
    print("Audio response was not generated (check system prompt or flags).")

Contoh-contoh rinci ini mengilustrasikan alur kerja inti untuk berinteraksi dengan model Qwen2.5-Omni-7B untuk berbagai tugas multimodal. Dengan menyusun percakapan input dengan cermat, memanfaatkan utilitas yang disediakan, dan mengatur parameter seperti use_audio_in_video dan return_audio dengan benar, pengembang dapat memanfaatkan kemampuan persepsi dan generasi komprehensif dari model canggih ini. Ingatlah bahwa mengelola sumber daya GPU melalui teknik seperti presisi BF16 dan Flash Attention 2 seringkali diperlukan untuk menangani input kompleks seperti video yang lebih panjang.

Kesimpulan

Model Qwen2.5-Omni-7B mewakili kemajuan signifikan dalam AI multimodal. Arsitektur end-to-end-nya, fitur inovatif seperti TMRoPE, kinerja tolok ukur yang kuat di berbagai tugas, dan kemampuan interaksi waktu nyata menetapkan standar baru. Dengan mengintegrasikan persepsi dan generasi untuk teks, gambar, audio, dan video secara mulus, model ini membuka kemungkinan untuk aplikasi AI yang lebih kaya, lebih alami, dan lebih mampu, mulai dari asisten virtual yang canggih dan alat analisis konten hingga pengalaman pendidikan yang imersif dan solusi aksesibilitas. Saat ekosistem di sekitarnya matang, model Qwen2.5-Omni-7B siap menjadi teknologi dasar yang mendorong gelombang sistem cerdas berikutnya.

💡
Ingin alat Pengujian API hebat yang menghasilkan Dokumentasi API yang indah?

Ingin platform Terintegrasi, All-in-One untuk Tim Pengembang Anda bekerja sama dengan produktivitas maksimum?

Apidog memenuhi semua permintaan Anda, dan menggantikan Postman dengan harga yang jauh lebih terjangkau!
button

Mengembangkan API dengan Apidog

Apidog adalah alat pengembangan API yang membantu Anda mengembangkan API dengan lebih mudah dan efisien.