ASLP-lab commited on
Commit
4a73815
Β·
verified Β·
1 Parent(s): ef75e96
.gitattributes CHANGED
@@ -1,35 +1,36 @@
1
- *.7z filter=lfs diff=lfs merge=lfs -text
2
- *.arrow filter=lfs diff=lfs merge=lfs -text
3
- *.bin filter=lfs diff=lfs merge=lfs -text
4
- *.bz2 filter=lfs diff=lfs merge=lfs -text
5
- *.ckpt filter=lfs diff=lfs merge=lfs -text
6
- *.ftz filter=lfs diff=lfs merge=lfs -text
7
- *.gz filter=lfs diff=lfs merge=lfs -text
8
- *.h5 filter=lfs diff=lfs merge=lfs -text
9
- *.joblib filter=lfs diff=lfs merge=lfs -text
10
- *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
- *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
- *.model filter=lfs diff=lfs merge=lfs -text
13
- *.msgpack filter=lfs diff=lfs merge=lfs -text
14
- *.npy filter=lfs diff=lfs merge=lfs -text
15
- *.npz filter=lfs diff=lfs merge=lfs -text
16
- *.onnx filter=lfs diff=lfs merge=lfs -text
17
- *.ot filter=lfs diff=lfs merge=lfs -text
18
- *.parquet filter=lfs diff=lfs merge=lfs -text
19
- *.pb filter=lfs diff=lfs merge=lfs -text
20
- *.pickle filter=lfs diff=lfs merge=lfs -text
21
- *.pkl filter=lfs diff=lfs merge=lfs -text
22
- *.pt filter=lfs diff=lfs merge=lfs -text
23
- *.pth filter=lfs diff=lfs merge=lfs -text
24
- *.rar filter=lfs diff=lfs merge=lfs -text
25
- *.safetensors filter=lfs diff=lfs merge=lfs -text
26
- saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
- *.tar.* filter=lfs diff=lfs merge=lfs -text
28
- *.tar filter=lfs diff=lfs merge=lfs -text
29
- *.tflite filter=lfs diff=lfs merge=lfs -text
30
- *.tgz filter=lfs diff=lfs merge=lfs -text
31
- *.wasm filter=lfs diff=lfs merge=lfs -text
32
- *.xz filter=lfs diff=lfs merge=lfs -text
33
- *.zip filter=lfs diff=lfs merge=lfs -text
34
- *.zst filter=lfs diff=lfs merge=lfs -text
35
- *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ figs/npu@aslp.jpeg filter=lfs diff=lfs merge=lfs -text
README.md CHANGED
@@ -1,3 +1,159 @@
1
  ---
 
 
 
2
  license: apache-2.0
 
3
  ---
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
  ---
2
+ language:
3
+ - en
4
+ - zh
5
  license: apache-2.0
6
+ pipeline_tag: audio-to-audio
7
  ---
8
+
9
+ # MeanVC2: Robust Low-Latency Streaming Zero-Shot Voice Conversion
10
+
11
+ <div align="center">
12
+
13
+ [![Paper](https://img.shields.io/badge/arXiv-Paper-b31b1b.svg)](https://arxiv.org/)
14
+ [![Github](https://img.shields.io/badge/Github-ASLP--lab/MeanVC2-green)](https://github.com/ASLP-lab/MeanVC2)
15
+ [![Demo Page](https://img.shields.io/badge/Demo-Audio%20Samples-green)](https://aslp-lab.github.io/MeanVC2-demo/)
16
+
17
+ </div>
18
+
19
+ **MeanVC2** is a robust, low-latency streaming zero-shot voice conversion (VC) system built upon the diffusion-based conditional flow matching (CFM) framework. By introducing **Future-Receptive Chunking (FRC)** and a **Universal Timbre Token Encoder (UTTE)**, MeanVC2 achieves high-fidelity voice conversion with an end-to-end pipeline latency of only **110 ms** while maintaining superior speaker similarity and audio naturalness even with a **40 ms chunk size**.
20
+
21
+ ![img](https://huggingface.co/ASLP-lab/MeanVC2/resolve/main/figs/model.png)
22
+
23
+ ## ✨ Key Features
24
+
25
+ - **πŸš€ Ultra-Low Latency Streaming**: 110 ms end-to-end first-packet latency with 40 ms chunk size; full pipeline RTF < 0.633 on single CPU core.
26
+ - **⚑ Single-Step Generation**: Mean flows + 1-NFE ODE solving for high-quality mel-spectrogram synthesis.
27
+ - **🎯 Zero-Shot Capability**: Convert to any unseen target speaker without re-training, robust under low-quality reference audio.
28
+ - **πŸ’Ύ Lightweight**: Only 18M parameters β€” far smaller than competing streaming VC systems.
29
+ - **πŸ”Š High Fidelity**: Future-Receptive Chunking (FRC) with Universal Timbre Token Encoder (UTTE) for pronunciation-aware timbre modeling.
30
+
31
+ ## πŸ“ Model Checkpoints
32
+
33
+ This repository hosts all pretrained models for MeanVC2:
34
+
35
+ ### Voice Conversion Models
36
+
37
+ | File | Description |
38
+ |------|-------------|
39
+ | `meanvc2_120ms_40ms.safetensors` | 120ms chunk + 40ms future (recommended for quality) |
40
+ | `meanvc2_40ms_40ms.safetensors` | 40ms chunk + 40ms future (lower latency) |
41
+
42
+ ### Vocoder (JIT)
43
+
44
+ | File | Description |
45
+ |------|-------------|
46
+ | `vocos.pt` | Vocos JIT-traced vocoder |
47
+
48
+ ### ASR Encoder (Fast-U2++ JIT)
49
+
50
+ | File | Description |
51
+ |------|-------------|
52
+ | `fastu2pp_80ms.pt` | 80ms chunk JIT model (11-frame window, stride=8) |
53
+ | `fastu2pp_160ms.pt` | 160ms chunk JIT model (19-frame window, stride=16) |
54
+
55
+ ## πŸ’» Quick Start
56
+
57
+ ### 1. Clone and Install
58
+
59
+ ```bash
60
+ git clone https://github.com/ASLP-lab/MeanVC2.git
61
+ cd MeanVC2
62
+
63
+ conda create -n meanvc2 python=3.11 -y
64
+ conda activate meanvc2
65
+
66
+ pip install torch==2.5.1 torchaudio==2.5.1 --index-url https://download.pytorch.org/whl/cu121
67
+ pip install -r requirements.txt
68
+ ```
69
+
70
+ ### 2. Download Pretrained Models
71
+
72
+ ```bash
73
+ python initialization.py --task all
74
+ ```
75
+
76
+ Or download selectively:
77
+
78
+ ```bash
79
+ python initialization.py --task preprocess # BN + SpkEmb extraction only
80
+ python initialization.py --task train_120ms # preprocess + 120ms VC + vocoder
81
+ python initialization.py --task train_40ms # preprocess + 40ms VC + vocoder
82
+ ```
83
+
84
+ ### 3. End-to-End Voice Conversion
85
+
86
+ No pre-extracted features needed β€” input two wavs, output converted audio:
87
+
88
+ ```bash
89
+ # 120ms+40ms model (recommended for quality)
90
+ python src/infer/infer_e2e.py \
91
+ --source-wav /path/to/source.wav \
92
+ --target-wav /path/to/target.wav \
93
+ --ckpt-path ckpts/pretrained_models/meanvc2_120ms_40ms.safetensors \
94
+ --model-config src/config/config_120ms_40ms.json \
95
+ --vocoder-ckpt-path ckpts/vocos/vocos.pt \
96
+ --chunk-size 12 --steps 3 \
97
+ --output-wav output.wav
98
+
99
+ # 40ms+40ms model (lower latency)
100
+ python src/infer/infer_e2e.py \
101
+ --source-wav /path/to/source.wav \
102
+ --target-wav /path/to/target.wav \
103
+ --ckpt-path ckpts/pretrained_models/meanvc2_40ms_40ms.safetensors \
104
+ --model-config src/config/config_40ms_40ms.json \
105
+ --vocoder-ckpt-path ckpts/vocos/vocos.pt \
106
+ --chunk-size 4 --steps 3 \
107
+ --output-wav output.wav
108
+ ```
109
+
110
+ ### 4. Real-Time Streaming
111
+
112
+ ```bash
113
+ cd runtime
114
+
115
+ # File mode
116
+ python run_rt.py --mode file --input in.wav --output out.wav --model 120ms
117
+
118
+ # Microphone mode
119
+ python run_rt.py --mode realtime --model 40ms
120
+ ```
121
+
122
+ ## πŸ—οΈ Model Architecture
123
+
124
+ | Component | Description |
125
+ |-----------|-------------|
126
+ | **Streaming ASR Encoder** | Fast-U2++ (WeNet) extracts bottleneck features (BNFs) from source waveform |
127
+ | **Speaker Encoder** | ECAPA-TDNN + WavLM upstream extracts global speaker embedding from reference audio |
128
+ | **Universal Timbre Token Encoder (UTTE)** | Transforms speaker embedding into K key-value UTT pairs; BNFs serve as queries in cross-attention for fine-grained, pronunciation-aware timbre cues |
129
+ | **DiT-based CFM Decoder** | 4-layer DiT (hidden dim 512, 2 heads) with Future-Receptive Chunking (FRC); trained with mean flows objective for 1-NFE mel-spectrogram generation |
130
+ | **Vocoder** | Vocos converts mel-spectrograms to 16 kHz high-fidelity speech waveforms |
131
+
132
+ **Total parameters**: ~18M
133
+
134
+ ## πŸ“œ License & Disclaimer
135
+
136
+ MeanVC2 is released under the [Apache License 2.0](http://www.apache.org/licenses/LICENSE-2.0). This open-source license allows you to freely use, modify, and distribute the model, as long as you include the appropriate copyright notice and disclaimer.
137
+
138
+ MeanVC2 is designed for research and legitimate applications in voice conversion technology. Users must obtain proper consent from individuals whose voices are being converted or used as references. We strongly discourage malicious use including impersonation, fraud, or creating misleading audio content. Users are solely responsible for ensuring compliance with ethical standards and legal requirements.
139
+
140
+ ## πŸ“„ Citation
141
+
142
+ If you find our work helpful, please cite:
143
+
144
+ ```bibtex
145
+ @article{ma2026meanvc2,
146
+ title={MeanVC2: Robust Low-Latency Streaming Zero-Shot Voice Conversion},
147
+ author={Ma, Guobin and Xia, Yuxuan and Jiang, Yuepeng and Guo, Dake and Xie, Hanke and Hu, Jingbin and Wang, Yanbo and Xie, Lei and Zhu, Pengcheng},
148
+ journal={arXiv preprint arXiv:2606.09050},
149
+ year={2026}
150
+ }
151
+ ```
152
+
153
+ ## πŸ“§ Contact
154
+
155
+ For questions or collaborations, please contact: guobin.ma@mail.nwpu.edu.cn
156
+
157
+ <p align="center">
158
+ <img src="https://huggingface.co/ASLP-lab/MeanVC2/resolve/main/figs/npu@aslp.jpeg" width="500"/>
159
+ </p>
fastu2pp_160ms.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:9a372c1b7178f564a15da1cd36901d7d0c9081a2fabf53cb6cc0d971deca4928
3
+ size 246275643
fastu2pp_80ms.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4338739bd13e0f7718276373e9547ce1f9aa02ec0867452860df9e837f90e4d2
3
+ size 246292087
figs/model.png ADDED
figs/npu@aslp.jpeg ADDED

Git LFS Details

  • SHA256: 41eae6df7b8458e13ffd2de14876f95cd3f7fad91f8527a751a7dd63347c6a71
  • Pointer size: 132 Bytes
  • Size of remote file: 1.56 MB
meanvc2_120ms_40ms.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:04ea21a4fb55400469e6004ae842c3e7f059f759e92946fb95123418cad5d818
3
+ size 70839448
meanvc2_40ms_40ms.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:01caafec9a3991a5514df9412952d24ae3370406358a01e20e03df41f2f5d515
3
+ size 70839448
vocos.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:df1f2ba9f7ac35c96832579421ee1ed913a68c3a1d2f8a6536739f902f194a93
3
+ size 33223674