Web Analytics

ZipVoice

⭐ 661 stars Polish by k2-fsa

🌐 Język

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

2. Warianty modeli

Nazwa modelu Opis Publikacja Demo
ZipVoice Podstawowy model obsługujący zero-shot TTS dla pojedynczego mówcy w języku chińskim i angielskim.
ZipVoice-Distill Wersja destylowana ZipVoice, charakteryzująca się zwiększoną szybkością przy minimalnej utracie wydajności.
ZipVoice-Dialog Model generowania dialogów oparty na ZipVoice, zdolny do generowania jednopasmowych, dwustronnych dialogów mówionych.
ZipVoice-Dialog-Stereo Wariant stereo ZipVoice-Dialog, umożliwiający generowanie dwukanałowych dialogów z przypisaniem każdego rozmówcy do oddzielnego kanału.

Aktualności

2025/07/14: Modele generowania mowy dialogowej ZipVoice-Dialog oraz ZipVoice-Dialog-Stereo zostały wydane. arXiv demo page

2025/07/14: Zbiór danych OpenDialog, obejmujący 6,8 tysiąca godzin dialogów mówionych, został wydany. Pobierz z hf, ms. Szczegóły na arXiv.

2025/06/16: ZipVoice oraz ZipVoice-Distill zostały wydane. arXiv demo page

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

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
#### 1.2 Wnioskowanie listy zdań

python3 -m zipvoice.bin.infer_zipvoice \
    --model-name zipvoice \
    --test-list test.tsv \
    --res-dir results

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
które generują odpowiednio dialogi mono i 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}

(2) Format podzielonego promptu, gdzie nagrania i transkrypcje dwóch rozmówców znajdują się w osobnych plikach:

{wav_name}\t{spk1_prompt_transcription}\t{spk2_prompt_transcription}\t{spk1_prompt_wav}\t{spk2_prompt_wav}\t{text}

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:

#### 3.3 Kontrola pamięci

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:

> Uwaga: Jeśli chcesz ręcznie przypisać wiele pinyinów, umieść każdy pinyin w <>, 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 | | ------------ | ----------------------- | |wechat |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 ---