add ckpt
Browse files- .gitattributes +36 -35
- README.md +156 -0
- fastu2pp_160ms.pt +3 -0
- fastu2pp_80ms.pt +3 -0
- figs/model.png +0 -0
- figs/npu@aslp.jpeg +3 -0
- meanvc2_120ms_40ms.safetensors +3 -0
- meanvc2_40ms_40ms.safetensors +3 -0
- vocos.pt +3 -0
.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 |
+
[](https://arxiv.org/)
|
| 14 |
+
[](https://github.com/ASLP-lab/MeanVC2)
|
| 15 |
+
[](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 |
+

|
| 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
|
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
|