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 promptu pierwszego mówcy, np. "Hello"spk2_prompt_transcriptionto transkrypcja promptu drugiego mówcy, np. "How are you?"spk1_prompt_wavto ścieżka do pliku wav promptu pierwszego mówcy.spk2_prompt_wavto ścieżka do pliku wav promptu 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ść promptu
Zalecamy krótki plik promptu wav (np. krótszy niż 3 sekundy dla syntezy pojedynczego mówcy, krótszy niż 10 sekund dla syntezy dialogowej) dla szybszego działania. Bardzo długi prompt spowolni inferencję i pogorszy jakość mowy.
#### 3.2 Optymalizacja szybkości
Jeśli prędkość inferencji jest niezadowalająca, możesz ją zwiększyć w następujący sposób:
- Model destylowany i mniej kroków: Dla modelu syntezy mowy pojedynczego mówcy domyślnie używamy modelu
zipvoicedla lepszej jakości mowy. Jeśli priorytetem jest szybkość, można przełączyć się nazipvoice_distilli zmniejszyć--num-stepsnawet do4(domyślnie 8). - Przyspieszenie CPU przez wielowątkowość: Podczas pracy na CPU można użyć parametru
--num-thread(np.--num-thread 4), aby zwiększyć liczbę wątków dla szybszego działania. Domyślnie używamy 1 wątku. - Przyspieszenie CPU przez ONNX: Na CPU można użyć modeli ONNX z
zipvoice.bin.infer_zipvoice_onnxdla szybszego działania (modele ONNX dla generowania dialogów nie są jeszcze obsługiwane). Dla jeszcze większej szybkości można ustawić--onnx-int8 True, aby użyć modelu ONNX skwantowanego do INT8. Należy pamiętać, że model skwantowany obniży jakość mowy. Nie używaj ONNX na GPU, ponieważ jest wolniejszy niż PyTorch na GPU. - Przyspieszenie GPU przez NVIDIA TensorRT: W celu znacznego zwiększenia wydajności na kartach NVIDIA GPU najpierw wyeksportuj model do silnika TensorRT za pomocą zipvoice.bin.tensorrt_export. Następnie wykonaj inferencję na swoim zbiorze danych (np. Hugging Face) z użyciem zipvoice.bin.infer_zipvoice. To pozwala uzyskać około 2x większą przepustowość niż standardowa implementacja PyTorch na GPU.
Podany tekst zostanie podzielony na fragmenty na podstawie interpunkcji (dla syntezy pojedynczego mówcy) lub symbolu zmiany mówcy (dla syntezy dialogowej). Następnie fragmenty tekstu będą przetwarzane w partiach. Dzięki temu model może przetwarzać dowolnie długie teksty przy niemal stałym zużyciu pamięci. Możesz kontrolować użycie pamięci przez regulację parametru --max-duration.
#### 3.4 Ocena "Raw"
Domyślnie przetwarzamy wejścia (prompt wav, transkrypcję promptu i tekst) dla wydajnej inferencji i lepszych wyników. Jeśli chcesz ocenić "surowe" działanie modelu na dokładnie podanych danych (np. by odtworzyć wyniki z naszej publikacji), 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 dostrojenia), by wydłużyć czas trwania wygenerowanej mowy.
#### 3.6 Korekta błędnej wymowy chińskich znaków polifonicznych
Używamy pypinyin do konwersji znaków chińskich na pinyin. Jednak czasami może błędnie wymawiać znaki wielogłosowe (多音字).
Aby ręcznie poprawić te błędne wymowy, umieść poprawiony pinyin w nawiasach ostrych < > i dodaj znak tonu.
Przykład:
- Oryginalny tekst:
这把剑长三十公分 - Popraw pinyin dla
长:这把剑三十公分
<>, 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 tego nie chcesz, możesz użyć --remove-long-sil, aby usunąć długie pauzy w środku wygenerowanej mowy (pauzy na początku i końcu są usuwane domyślnie).
#### 3.8 Pobieranie modelu
Jeśli masz problemy z połączeniem z HuggingFace podczas pobierania wstępnie wytrenowanych modeli, spróbuj zmienić endpoint na mirror: export HF_ENDPOINT=https://hf-mirror.com.
Trenuj własny model
Zobacz katalog egs po przykłady treningu, fine-tuningu i ewaluacji.
Wdrożenie produkcyjne
NVIDIA Triton GPU Runtime
Aby wdrożyć produkcyjnie z wysoką wydajnością i skalowalnością, zobacz integrację z Triton Inference Server, która zapewnia zoptymalizowane silniki TensorRT, obsługę współbieżnych żądań oraz oba API gRPC/HTTP dla zastosowań firmowych.
Wdrożenie na CPU
Sprawdź sherpa-onnx jako rozwiązanie do wdrożenia w C++ na CPU.
Dyskusja i komunikacja
Możesz dyskutować bezpośrednio na Github Issues.
Możesz także zeskanować kod QR, aby dołączyć do naszej grupy na Wechat lub obserwować nasze oficjalne konto Wechat.
| Grupa Wechat | Oficjalne konto 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-12-30 ---