ZipVoice⚡
Szybka i wysokiej jakości synteza mowy z tekstu bez uczenia głosu z dopasowaniem przepływu
Przegląd
ZipVoice to seria szybkich i wysokiej jakości modeli TTS typu zero-shot opartych na flow matching.
1. Kluczowe cechy
- Mały i szybki: tylko 123M parametrów.
- Wysokiej jakości klonowanie głosu: najnowocześniejsza wydajność w zakresie podobieństwa mówcy, zrozumiałości i naturalności.
- Wielojęzyczny: obsługuje język chiński i angielski.
- Wielomodowy: obsługuje generowanie mowy pojedynczego mówcy oraz dialogów.
2. Warianty modeli
Aktualności
2025/07/14: Modele generowania mowy dialogowej ZipVoice-Dialog oraz ZipVoice-Dialog-Stereo zostały wydane.
2025/07/14: Zbiór danych OpenDialog, obejmujący 6,8 tysiąca godzin dialogów mówionych, został wydany. Pobierz z ,
. Szczegóły na
.
2025/06/16: ZipVoice oraz ZipVoice-Distill zostały wydane.
Instalacja
1. Sklonuj repozytorium ZipVoice
git clone https://github.com/k2-fsa/ZipVoice.git
2. (Opcjonalnie) Utwórz wirtualne środowisko Pythona
python3 -m venv zipvoice
source zipvoice/bin/activate
3. Zainstaluj wymagane pakiety
pip install -r requirements.txt
4. Zainstaluj k2 do treningu lub wydajnego wnioskowania
k2 jest niezbędne do treningu i może przyspieszyć wnioskowanie. Niemniej jednak, możesz korzystać z trybu wnioskowania ZipVoice bez instalowania k2.
Uwaga: Upewnij się, że instalujesz wersję k2 pasującą do Twojej wersji PyTorch i CUDA. Na przykład, jeśli używasz pytorch 2.5.1 i CUDA 12.1, możesz zainstalować k2 w następujący sposób:
pip install k2==1.24.4.dev20250208+cuda12.1.torch2.5.1 -f https://k2-fsa.github.io/k2/cuda.html
Proszę zapoznać się ze stroną https://k2-fsa.org/get-started/k2/ po szczegóły.
Użytkownicy z Chin kontynentalnych mogą zapoznać się ze stroną https://k2-fsa.org/zh-CN/get-started/k2/.- Aby sprawdzić instalację k2:
python3 -c "import k2; print(k2.__file__)"
Użytkowanie
1. Generowanie mowy jednego mówcy
Aby wygenerować mowę jednego mówcy przy użyciu naszych wytrenowanych modeli ZipVoice lub ZipVoice-Distill, użyj następujących poleceń (wymagane modele zostaną pobrane z HuggingFace):
#### 1.1 Wnioskowanie dla pojedynczego zdania
python3 -m zipvoice.bin.infer_zipvoice \
--model-name zipvoice \
--prompt-wav prompt.wav \
--prompt-text "I am the transcription of the prompt wav." \
--text "I am the text to be synthesized." \
--res-wav-path result.wav
--model-namemoże byćzipvoicelubzipvoice_distill, które oznaczają modele przed i po destylacji, odpowiednio.- Jeśli w tekście pojawią się
<>lub[], ciągi znaków otoczone nimi będą traktowane jako specjalne tokeny.<>oznacza chińską transkrypcję pinyin, a[]oznacza inne specjalne tagi.
python3 -m zipvoice.bin.infer_zipvoice \
--model-name zipvoice \
--test-list test.tsv \
--res-dir results
- Każda linia pliku
test.tsvma format{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}.
2. Generowanie mowy dialogowej
#### 2.1 Polecenie inferencji
Aby wygenerować dwuosobowe dialogi mówione za pomocą naszych wytrenowanych modeli ZipVoice-Dialogue lub ZipVoice-Dialogue-Stereo, użyj następujących poleceń (Wymagane modele zostaną pobrane z HuggingFace):
python3 -m zipvoice.bin.infer_zipvoice_dialog \
--model-name "zipvoice_dialog" \
--test-list test.tsv \
--res-dir results
--model-namemoże przyjmować wartościzipvoice_dialoglubzipvoice_dialog_stereo,
#### 2.2 Format wejściowy
Każda linia w pliku test.tsv ma jeden z poniższych formatów:
(1) Format scalonej podpowiedzi, gdzie nagrania audio i transkrypcje dwóch mówców są scalone w jeden plik wav z podpowiedzią:
{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}wav_nameto nazwa wyjściowego pliku wav.prompt_transcriptionto transkrypcja konwersacyjnego pliku wav, np. "[S1] Cześć. [S2] Jak się masz?"prompt_wavto ścieżka do pliku wav z promptem.textto tekst do syntezy, np. "[S1] Wszystko w porządku. [S2] Jak masz na imię? [S1] Jestem Eric. [S2] Cześć Eric."
{wav_name}\t{spk1_prompt_transcription}\t{spk2_prompt_transcription}\t{spk1_prompt_wav}\t{spk2_prompt_wav}\t{text}
wav_nameto nazwa wyjściowego pliku wav.spk1_prompt_transcriptionto transkrypcja pliku wav z podpowiedzią pierwszego mówcy, np. "Hello"spk2_prompt_transcriptionto transkrypcja pliku wav z podpowiedzią drugiego mówcy, np. "How are you?"spk1_prompt_wavto ścieżka do pliku wav z podpowiedzią pierwszego mówcy.spk2_prompt_wavto ścieżka do pliku wav z podpowiedzią drugiego mówcy.textto tekst do syntezy, np. "[S1] I'm fine. [S2] What's your name? [S1] I'm Eric. [S2] Hi Eric."
3 Wskazówki dla lepszego użytkowania:
#### 3.1 Długość podpowiedzi
Zalecamy krótkie pliki wav z podpowiedzią (np. krótsze niż 3 sekundy dla generowania mowy jednego mówcy, krótsze niż 10 sekund dla generowania mowy w dialogu) dla szybszego działania. Bardzo długi plik z podpowiedzią spowolni działanie i pogorszy jakość mowy.
#### 3.2 Optymalizacja szybkości
Jeśli szybkość działania jest niezadowalająca, można ją zwiększyć następująco:
- Model destylowany i mniej kroków: Dla modelu generowania mowy jednego mówcy domyślnie używamy modelu
zipvoicedla lepszej jakości mowy. Jeśli priorytetem jest szybkość, można przełączyć nazipvoice_distilli zmniejszyć--num-stepsnawet do4(domyślnie 8). - Przyspieszenie CPU wielowątkowością: Przy uruchamianiu na CPU można podać parametr
--num-thread(np.--num-thread 4) aby zwiększyć liczbę wątków dla szybszej pracy. Domyślnie używamy 1 wątku. - Przyspieszenie CPU z ONNX: Przy uruchamianiu na CPU można użyć modeli ONNX z
zipvoice.bin.infer_zipvoice_onnxdla szybszego działania (nieobsługiwane jeszcze dla modeli generowania dialogów). Aby uzyskać jeszcze większą szybkość, można ustawić--onnx-int8 Trueaby użyć modelu ONNX z kwantyzacją INT8. Należy pamiętać, że model kwantyzowany będzie miał pewien spadek jakości mowy. Nie używaj ONNX na GPU, ponieważ jest wolniejszy niż PyTorch na GPU.
Podany tekst zostanie podzielony na fragmenty na podstawie znaków interpunkcyjnych (dla generowania mowy jednego mówcy) lub symbolu zmiany mówcy (dla generowania mowy w dialogu). Następnie podzielone teksty będą przetwarzane w partiach. Dzięki temu model może przetwarzać dowolnie długi tekst przy niemal stałym zużyciu pamięci. Możesz kontrolować zużycie pamięci, regulując parametr --max-duration.
#### 3.4 Ocena "Raw"
Domyślnie wstępnie przetwarzamy wejścia (plik wav z podpowiedzią, transkrypcję podpowiedzi oraz tekst) dla efektywnego działania i lepszych wyników. Jeśli chcesz ocenić "surowe" działanie modelu na dokładnie podanych wejściach (np. aby odtworzyć wyniki z naszego artykułu), możesz podać --raw-evaluation True.
#### 3.5 Krótki tekst
Podczas generowania mowy dla bardzo krótkich tekstów (np. jedno lub dwa słowa), wygenerowana mowa może czasem pomijać pewne wymowy. Aby rozwiązać ten problem, można podać --speed 0.3 (gdzie 0.3 to wartość do regulacji), aby wydłużyć czas trwania wygenerowanej mowy.
#### 3.6 Poprawianie błędnie wymawianych chińskich znaków wieloznacznych
Używamy pypinyin do konwersji chińskich znaków na pinyin. Jednak czasami może błędnie wymawiać znaki wieloznaczne (多音字).
Aby ręcznie poprawić te błędne wymowy, umieść poprawiony pinyin w nawiasach kątowych < > i dodaj oznaczenie tonu.
Przykład:
- Oryginalny tekst:
这把剑长三十公分 - Popraw pinyin
长:这把剑三十公分
<>, np. 这把十公分 #### 3.7 Usuwanie długich pauz z wygenerowanej mowy
Model automatycznie określa pozycje i długości pauz w wygenerowanej mowie. Czasami pojawia się długa pauza w środku wypowiedzi. Jeśli nie chcesz tego, możesz przekazać --remove-long-sil, aby usunąć długie pauzy ze środka wygenerowanej mowy (pauzy na początku i końcu są usuwane domyślnie).
#### 3.8 Pobieranie modelu
Jeśli masz problem z połączeniem z HuggingFace podczas pobierania wstępnie wytrenowanych modeli, spróbuj przełączyć punkt końcowy na mirror: export HF_ENDPOINT=https://hf-mirror.com.
Trenuj własny model
Zobacz katalog egs dla przykładów trenowania, dostrajania i ewaluacji.
Wdrażanie C++
Sprawdź sherpa-onnx jako rozwiązanie wdrożeniowe w C++ na CPU.
Dyskusja i komunikacja
Możesz bezpośrednio dyskutować na Github Issues.
Możesz także zeskanować kod QR, aby dołączyć do naszej grupy na WeChat lub śledzić nasz oficjalny profil WeChat.
| Grupa WeChat | Oficjalny profil WeChat |
| ------------ | ----------------------- |
|
|
|
Cytowanie
@article{zhu2025zipvoice,
title={ZipVoice: Fast and High-Quality Zero-Shot Text-to-Speech with Flow Matching},
author={Zhu, Han and Kang, Wei and Yao, Zengwei and Guo, Liyong and Kuang, Fangjun and Li, Zhaoqing and Zhuang, Weiji and Lin, Long and Povey, Daniel},
journal={arXiv preprint arXiv:2506.13053},
year={2025}
}@article{zhu2025zipvoicedialog,
title={ZipVoice-Dialog: Non-Autoregressive Spoken Dialogue Generation with Flow Matching},
author={Zhu, Han and Kang, Wei and Guo, Liyong and Yao, Zengwei and Kuang, Fangjun and Zhuang, Weiji and Li, Zhaoqing and Han, Zhifeng and Zhang, Dong and Zhang, Xin and Song, Xingchen and Lin, Long and Povey, Daniel},
journal={arXiv preprint arXiv:2507.09318},
year={2025}
}
--- Tranlated By Open Ai Tx | Last indexed: 2025-10-06 ---