Safetensors
English
omni_speech2s_llama
VocalNet-1B / README.md
nielsr's picture
nielsr HF Staff
Add pipeline tag and library name
7b9dd1f verified
|
raw
history blame
15.7 kB
---
base_model:
- meta-llama/Llama-3.2-1B-Instruct
datasets:
- VocalNet/VoiceAssitant-430K-vocalnet
- VocalNet/UltraChat-vocalnet
language:
- en
license: apache-2.0
pipeline_tag: audio-text-to-text
library_name: transformers
---
## 🎧 VocalNet-1B Model Card
**VocalNet-1B** is a high-performance, low-latency speech large language model (LLM) optimized for real-time voice interaction. Built upon [LLaMA-3.2-1B-Instruct](https://huggingface.co/meta-llama/Llama-3.2-1B-Instruct), it employs **multi-token prediction (MTP)** to significantly enhance generation speed and quality, surpassing most mainstream speech and omni-modal LLMs. 🚀
### 📂 Paper, Code and Model Access
- **Arxiv**: [VocalNet Report](https://arxiv.org/abs/2504.04060) 📖
- **GitHub**: [VocalNet Repository](https://github.com/SJTU-OmniAgent/VocalNet) 🌐
- **HuggingFace**: [VocalNet/VocalNet-1B](https://huggingface.co/VocalNet/VocalNet-1B) 🤗
- **ModelScope**: [VocalNet/VocalNet-1B](https://www.modelscope.cn/models/VocalNet/VocalNet-1B) 🔮
### 🔧 Repository Download and Environment Setup
To get started with **VocalNet-1B**, clone the repository and set up the environment as follows. 🛠️
1. **Clone the Repository**:
```bash
git clone https://github.com/SJTU-OmniAgent/VocalNet.git
cd VocalNet
```
2. **Create and Activate Environment**:
```bash
conda create -n vocalnet python==3.10
conda activate vocalnet
```
3. **Install Dependencies**:
```bash
pip install --upgrade pip
conda install pytorch==2.1.2 torchvision==0.16.2 torchaudio==2.1.2 pytorch-cuda=12.1 -c pytorch -c nvidia
pip install -e .
```
4. **Optional: Install Training Packages**:
If you plan to train the model, install additional packages:
```bash
pip install -e ".[train]"
pip install flash-attn --no-build-isolation
```
### 📥 Download Instructions
**Via Huggingface Cli**:
```bash
pip install -U huggingface_hub
huggingface-cli download VocalNet/VocalNet-1B --local-dir ./checkpoints/
```
**Via Snapshot Download**:
```bash
pip install -U huggingface_hub
```
```python
from huggingface_hub import snapshot_download
snapshot_download(
repo_id="VocalNet/VocalNet-1B",
local_dir="./checkpoints/",
resume_download=True
)
```
**Via Git**:
```bash
git lfs install
git clone https://huggingface.co/VocalNet/VocalNet-1B
```
### 🛠️ Dependencies
- **Speech Encoder**: [Whisper-large-v3](https://huggingface.co/openai/whisper-large-v3) 🎤
- **Vocoder**: [CosyVoice2-0.5B](https://huggingface.co/FunAudioLLM/CosyVoice2-0.5B) for converting speech tokens to audio waveforms. 🔊
### 🔄 Local Inference
To perform inference with **VocalNet-1B**, follow these steps to set up and run the model locally. 📡
1. **Model Preparation**:
- Download **VocalNet-1B** from [HuggingFace](https://huggingface.co/VocalNet/VocalNet-1B) or [ModelScope](https://www.modelscope.cn/models/VocalNet/VocalNet-1B). 📦
- Download the **Whisper-large-v3** speech encoder from [HuggingFace](https://huggingface.co/openai/whisper-large-v3) and place it in the `./models/speech_encoder/` directory. 🎤
2. **CosyVoice Preparation**:
- VocalNet-1B uses **CosyVoice2-0.5B** to convert generated speech tokens into audio waveforms. Download it from [HuggingFace](https://huggingface.co/FunAudioLLM/CosyVoice2-0.5B). 🔊
3. **Path Modification**:
- Update the paths in `omni_speech/infer/vocalnet.py` to point to the downloaded models:
```python
COSYVOICE_MODEL="" # Path to CosyVoice2-0.5B, e.g., /workspace/CosyVoice/pretrained_models/CosyVoice2-0.5B-VocalNet
VOCALNET_MODEL="" # Path to VocalNet-1B, e.g., ./checkpoints/VocalNet-1B
```
4. **Run Inference**:
- For **speech-to-text (S2T)** inference:
```bash
python3 omni_speech/infer/vocalnet.py --query_audio ./omni_speech/infer/llama_questions_42.wav
```
- For **speech-to-speech (S2S)** inference:
```bash
python3 omni_speech/infer/vocalnet.py --query_audio ./omni_speech/infer/llama_questions_42.wav --s2s --save_dir ./
```
### 📊 Performance Evaluation
VocalNet-1B was evaluated on [OpenAudioBench](https://huggingface.co/datasets/baichuan-inc/OpenAudioBench), covering AlpacaEval, LLaMA Questions, TriviaQA, and Web Questions. **Bold** indicates the optimal result in each subgroup.
#### Overall Performance
<div align="center">
<table style="margin: 0 auto; text-align: center; border-collapse: collapse; font-size: 14px;">
<thead>
<tr style="background-color: #f2f2f2;">
<th style="padding: 10px; border: 1px solid #ddd;">Model</th>
<th style="padding: 10px; border: 1px solid #ddd;">LLM Size</th>
<th style="padding: 10px; border: 1px solid #ddd;">Modality</th>
<th style="padding: 10px; border: 1px solid #ddd;">AlpacaEval</th>
<th style="padding: 10px; border: 1px solid #ddd;">LLaMA Questions</th>
<th style="padding: 10px; border: 1px solid #ddd;">TriviaQA</th>
<th style="padding: 10px; border: 1px solid #ddd;">Web Questions</th>
</tr>
</thead>
<tbody>
<tr>
<td colspan="7" style="padding: 10px; border: 1px solid #ddd; font-weight: bold; background-color: #e6f3ff;">Tiny Models</td>
</tr>
<tr>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">Mini-Omni</td>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">0.5B</td>
<td style="padding: 10px; border: 1px solid #ddd;">s→t</td>
<td style="padding: 10px; border: 1px solid #ddd;">1.84</td>
<td style="padding: 10px; border: 1px solid #ddd;">2.7</td>
<td style="padding: 10px; border: 1px solid #ddd;">0.12</td>
<td style="padding: 10px; border: 1px solid #ddd;">0.22</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">s→s</td>
<td style="padding: 10px; border: 1px solid #ddd;">1.80</td>
<td style="padding: 10px; border: 1px solid #ddd;">2.7</td>
<td style="padding: 10px; border: 1px solid #ddd;">0.08</td>
<td style="padding: 10px; border: 1px solid #ddd;">0.20</td>
</tr>
<tr>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">SLAM-Omni</td>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">0.5B</td>
<td style="padding: 10px; border: 1px solid #ddd;">s→t</td>
<td style="padding: 10px; border: 1px solid #ddd;">3.50</td>
<td style="padding: 10px; border: 1px solid #ddd;">29.4</td>
<td style="padding: 10px; border: 1px solid #ddd;">0.39</td>
<td style="padding: 10px; border: 1px solid #ddd;">0.84</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">s→s</td>
<td style="padding: 10px; border: 1px solid #ddd;">3.01</td>
<td style="padding: 10px; border: 1px solid #ddd;">26.7</td>
<td style="padding: 10px; border: 1px solid #ddd;">0.34</td>
<td style="padding: 10px; border: 1px solid #ddd;">0.69</td>
</tr>
<tr>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">VocalNet-1B (VA)</td>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">1B</td>
<td style="padding: 10px; border: 1px solid #ddd;">s→t</td>
<td style="padding: 10px; border: 1px solid #ddd;">5.38</td>
<td style="padding: 10px; border: 1px solid #ddd;">70.3</td>
<td style="padding: 10px; border: 1px solid #ddd;">3.38</td>
<td style="padding: 10px; border: 1px solid #ddd;">4.93</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">s→s</td>
<td style="padding: 10px; border: 1px solid #ddd;">4.83</td>
<td style="padding: 10px; border: 1px solid #ddd;">61.0</td>
<td style="padding: 10px; border: 1px solid #ddd;">2.78</td>
<td style="padding: 10px; border: 1px solid #ddd;">4.47</td>
</tr>
<tr>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">VocalNet-1B</td>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">1B</td>
<td style="padding: 10px; border: 1px solid #ddd;">s→t</td>
<td style="padding: 10px; border: 1px solid #ddd;"><b>5.79</b></td>
<td style="padding: 10px; border: 1px solid #ddd;"><b>71.7</b></td>
<td style="padding: 10px; border: 1px solid #ddd;"><b>3.60</b></td>
<td style="padding: 10px; border: 1px solid #ddd;"><b>5.16</b></td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">s→s</td>
<td style="padding: 10px; border: 1px solid #ddd;"><b>5.03</b></td>
<td style="padding: 10px; border: 1px solid #ddd;"><b>63.7</b></td>
<td style="padding: 10px; border: 1px solid #ddd;"><b>3.06</b></td>
<td style="padding: 10px; border: 1px solid #ddd;"><b>4.68</b></td>
</tr>
</tbody>
<tbody>
<tr>
<td colspan="7" style="padding: 10px; border: 1px solid #ddd; font-weight: bold; background-color: #e6f3ff;">Base Models</td>
</tr>
<tr>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">LLaMA-Omni</td>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">8B</td>
<td style="padding: 10px; border: 1px solid #ddd;">s→t</td>
<td style="padding: 10px; border: 1px solid #ddd;">5.31</td>
<td style="padding: 10px; border: 1px solid #ddd;">69.7</td>
<td style="padding: 10px; border: 1px solid #ddd;">4.44</td>
<td style="padding: 10px; border: 1px solid #ddd;">5.44</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">s→s</td>
<td style="padding: 10px; border: 1px solid #ddd;">3.89</td>
<td style="padding: 10px; border: 1px solid #ddd;">55.1</td>
<td style="padding: 10px; border: 1px solid #ddd;">2.44</td>
<td style="padding: 10px; border: 1px solid #ddd;">4.00</td>
</tr>
<tr>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">Freeze-Omni</td>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">7B</td>
<td style="padding: 10px; border: 1px solid #ddd;">s→t</td>
<td style="padding: 10px; border: 1px solid #ddd;">4.51</td>
<td style="padding: 10px; border: 1px solid #ddd;">77.7</td>
<td style="padding: 10px; border: 1px solid #ddd;">5.32</td>
<td style="padding: 10px; border: 1px solid #ddd;">6.41</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">s→s</td>
<td style="padding: 10px; border: 1px solid #ddd;">2.99</td>
<td style="padding: 10px; border: 1px solid #ddd;">60.2</td>
<td style="padding: 10px; border: 1px solid #ddd;">3.53</td>
<td style="padding: 10px; border: 1px solid #ddd;">4.78</td>
</tr>
<tr>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">GLM-4-Voice</td>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">9B</td>
<td style="padding: 10px; border: 1px solid #ddd;">s→t</td>
<td style="padding: 10px; border: 1px solid #ddd;">5.86</td>
<td style="padding: 10px; border: 1px solid #ddd;">77.4</td>
<td style="padding: 10px; border: 1px solid #ddd;">4.95</td>
<td style="padding: 10px; border: 1px solid #ddd;">5.56</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">s→s</td>
<td style="padding: 10px; border: 1px solid #ddd;">5.27</td>
<td style="padding: 10px; border: 1px solid #ddd;">64.3</td>
<td style="padding: 10px; border: 1px solid #ddd;">4.63</td>
<td style="padding: 10px; border: 1px solid #ddd;">5.40</td>
</tr>
<tr>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">Baichuan-Omni-1.5</td>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">7B</td>
<td style="padding: 10px; border: 1px solid #ddd;">s→t</td>
<td style="padding: 10px; border: 1px solid #ddd;">5.20</td>
<td style="padding: 10px; border: 1px solid #ddd;">77.6</td>
<td style="padding: 10px; border: 1px solid #ddd;">5.72</td>
<td style="padding: 10px; border: 1px solid #ddd;">6.12</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">s→s</td>
<td style="padding: 10px; border: 1px solid #ddd;">4.10</td>
<td style="padding: 10px; border: 1px solid #ddd;">61.2</td>
<td style="padding: 10px; border: 1px solid #ddd;">4.13</td>
<td style="padding: 10px; border: 1px solid #ddd;">5.18</td>
</tr>
<tr>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">MiniCPM-o</td>
<td rowspan="2" style="padding: 10px; border: 1px solid #ddd;">8B</td>
<td style="padding: 10px; border: 1px solid #ddd;">s→t</td>
<td style="padding: 10px; border: 1px solid #ddd;">6.13</td>
<td style="padding: 10px; border: 1px solid #ddd;">77.2</td>
<td style="padding: 10px; border: 1px solid #ddd;"><b>6.43</b></td>
<td style="padding: 10px; border: 1px solid #ddd;"><b>7.16</b></td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">s→s</td>
<td style="padding: 10px; border: 1px solid #ddd;">4.95</td>
<td style="padding: 10px; border: 1px solid #ddd;">65.8</td>
<td style="padding: 10px; border: 1px solid #ddd;">4.99</td>
<td style="padding: 10px; border: 1px solid #ddd;"><u>6.22</u></td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">Minmo*</td>
<td style="padding: 10px; border: 1px solid #ddd;">8B</td>
<td>s→t</td>
<td>-</td>
<td>78.9</td>
<td>4.83</td>
<td>5.50</td>
</tr>
<tr>
<td>s→s</td>
<td><b>6.48<br></td>
<td>64.1</td>
<td>3.75</td>
<td>3.99</td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">Qwen2.5-Omni</td>
<td>s→t</td>
<td>6.01</td>
<td><u>79.0</u></td>
<td>5.89</td>
<td><u>6.88</u></td>
</tr>
<tr>
<td>s→s</td>
<td>5.73</td>
<td><b>76.3<br></td>
<td><u>5.59</u></td>
<td><b>6.70<br></td>
</tr>
<tr>
<td style="padding: 10px; border: 1px solid #ddd;">VocalNet-8B (VA)</td>
<td><u>7.05</u></td>
<td><b>4.490<br></td>
<td>77.1</td>
<td>4.503</td>
<td>6.15</td>
<td><b>4.499<br></td>
<td><u>4.21</u></td>
<td><u>4.485</u></td>
<td>4.26</td>
<td><b>4.493<br></td>
</tr>
<tr>
<td>VocalNet-8B</td>
<td><b>7.12<br></td>
<td><u>4.489</u></td>
<td><b>79.5<br></td>
<td>4.500</td>
<td><u>6.24</u></td>
<td>4.482</td>
<td>3.11</td>
<td>4.492</td>
<td><u>3.56</u></td>
<td><u>4.489</u></td>
</tr>
<thead>
<tr>
<th class="tg-c3ow" colspan="11"></th>
</tr>
</thead>
</tbody>
</table>
</div>
</details>
### ✍️ Citation
If you find our work useful, please cite:
```bib
@article{wang2025vocalnet,
title={VocalNet: Speech LLM with Multi-Token Prediction for Faster and High-Quality Generation},
author={Wang, Yuhao and Liu, Heyang and Cheng, Ziyang and Wu, Ronghua and Gu, Qunshan and Wang, Yanfeng and Wang, Yu},
journal={arXiv preprint arXiv:2504.04060},
year={2025}
}
```