ZipVoice⚡
Быстрый и высококачественный текст-в-голос без обучения на примерах с Flow Matching
Обзор
ZipVoice — это серия быстрых и высококачественных моделей TTS с нулевым обучением, основанных на flow matching.
1. Ключевые особенности
- Маленькая и быстрая: всего 123M параметров.
- Высококачественное клонирование голоса: передовые показатели по похожести голоса, разборчивости и естественности.
- Многоязычность: поддержка китайского и английского языков.
- Мультирежимность: поддержка генерации речи как для одного говорящего, так и для диалога.
2. Варианты моделей
Новости
2025/07/14: Вышли две модели генерации устных диалогов: ZipVoice-Dialog и ZipVoice-Dialog-Stereo.
2025/07/14: Выпущен датасет OpenDialog — 6,8 тысяч часов устных диалогов. Скачать можно на ,
. Подробнее на
.
2025/06/16: Выпущены ZipVoice и ZipVoice-Distill.
Установка
1. Клонируйте репозиторий ZipVoice
git clone https://github.com/k2-fsa/ZipVoice.git
2. (Необязательно) Создайте виртуальное окружение Python
python3 -m venv zipvoice
source zipvoice/bin/activate
3. Установите необходимые пакеты
pip install -r requirements.txt
4. Установите k2 для обучения или эффективного вывода
k2 необходим для обучения и может ускорить вывод. Тем не менее, вы всё равно можете использовать режим вывода ZipVoice без установки k2.
Примечание: Убедитесь, что устанавливаете версию k2, соответствующую вашей версии PyTorch и CUDA. Например, если вы используете pytorch 2.5.1 и CUDA 12.1, вы можете установить k2 следующим образом:
pip install k2==1.24.4.dev20250208+cuda12.1.torch2.5.1 -f https://k2-fsa.github.io/k2/cuda.html
Пожалуйста, ознакомьтесь с https://k2-fsa.org/get-started/k2/ для подробностей.
Пользователи из материкового Китая могут обратиться к https://k2-fsa.org/zh-CN/get-started/k2/.- Чтобы проверить установку k2:
python3 -c "import k2; print(k2.__file__)"
Использование
1. Генерация речи одним говорящим
Чтобы сгенерировать речь от одного говорящего с помощью наших предобученных моделей ZipVoice или ZipVoice-Distill, используйте следующие команды (необходимые модели будут загружены с HuggingFace):
#### 1.1 Инференс одного предложения
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-nameможет бытьzipvoiceилиzipvoice_distill, что соответствует моделям до и после дистилляции соответственно.- Если в тексте встречаются
<>или[], строки, заключённые в них, будут рассматриваться как специальные токены.<>обозначает китайскую пиньинь, а[]— другие специальные теги.
python3 -m zipvoice.bin.infer_zipvoice \
--model-name zipvoice \
--test-list test.tsv \
--res-dir results
- Каждая строка файла
test.tsvимеет формат{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}.
2. Диалоговая генерация речи
#### 2.1 Команда для инференса
Чтобы сгенерировать двухсторонние устные диалоги с помощью наших предобученных моделей ZipVoice-Dialogue или ZipVoice-Dialogue-Stereo, используйте следующие команды (необходимые модели будут загружены с HuggingFace):
python3 -m zipvoice.bin.infer_zipvoice_dialog \
--model-name "zipvoice_dialog" \
--test-list test.tsv \
--res-dir results
--model-nameможет бытьzipvoice_dialogилиzipvoice_dialog_stereo,
#### 2.2 Форматы входных данных
Каждая строка файла test.tsv соответствует одному из следующих форматов:
(1) Формат объединённого запроса, где аудиозаписи и транскрипции двух реплик объединены в один wav-файл запроса:
{wav_name}\t{prompt_transcription}\t{prompt_wav}\t{text}wav_name— это имя выходного wav-файла.prompt_transcription— это транскрипция звукового файла с разговорным запросом, например, "[S1] Привет. [S2] Как дела?"prompt_wav— это путь к звуковому файлу запроса.text— это текст для синтеза, например: "[S1] У меня всё хорошо. [S2] Как тебя зовут? [S1] Я Эрик. [S2] Привет, Эрик."
{wav_name}\t{spk1_prompt_transcription}\t{spk2_prompt_transcription}\t{spk1_prompt_wav}\t{spk2_prompt_wav}\t{text}wav_name— имя выходного wav-файла.spk1_prompt_transcription— транскрипция примера речи первого говорящего, например, "Привет".spk2_prompt_transcription— транскрипция примера речи второго говорящего, например, "Как дела?"spk1_prompt_wav— путь к wav-файлу примера речи первого говорящего.spk2_prompt_wav— путь к wav-файлу примера речи второго говорящего.text— текст для синтеза, например: "[S1] У меня всё хорошо. [S2] Как тебя зовут? [S1] Я Эрик. [S2] Привет, Эрик."
3 Рекомендации по использованию:
#### 3.1 Длина примера
Рекомендуется использовать короткий wav-файл примера (например, менее 3 секунд для генерации речи одного говорящего, менее 10 секунд для генерации диалога) для ускорения вывода. Слишком длинный пример замедлит вывод и ухудшит качество речи.
#### 3.2 Оптимизация скорости
Если скорость вывода неудовлетворительная, ускорить её можно следующим образом:
- Distill-модель и меньше шагов: Для модели генерации речи одного говорящего мы по умолчанию используем модель
zipvoiceдля лучшего качества речи. Если приоритет — скорость, переключитесь наzipvoice_distillи уменьшите параметр--num-stepsдо значения не менее4(по умолчанию 8). - Ускорение на CPU с помощью многопоточности: При запуске на CPU можно добавить параметр
--num-thread(например,--num-thread 4), чтобы увеличить количество потоков для ускорения. По умолчанию используется 1 поток. - Ускорение на CPU с помощью ONNX: При запуске на CPU используйте ONNX-модели с
zipvoice.bin.infer_zipvoice_onnxдля ускорения (ONNX для моделей генерации диалогов пока не поддерживается). Для ещё большего ускорения укажите--onnx-int8 Trueдля использования INT8-квантованной ONNX-модели. Обратите внимание, что качество речи при квантовании может немного снизиться. Не используйте ONNX на GPU, так как это медленнее, чем PyTorch на GPU. - Ускорение на GPU с NVIDIA TensorRT: Для значительного прироста производительности на NVIDIA GPU сначала экспортируйте модель в движок TensorRT с помощью zipvoice.bin.tensorrt_export. Затем запускайте вывод на вашем датасете (например, Hugging Face) с помощью zipvoice.bin.infer_zipvoice. Это даст примерно 2-кратный прирост производительности по сравнению со стандартной реализацией PyTorch на GPU.
Введённый текст будет разбит на части по знакам препинания (для генерации речи одного говорящего) или символам смены говорящего (для генерации диалога). Затем части текста будут обработаны пакетно. Таким образом, модель может обрабатывать текст любой длины при почти постоянном потреблении памяти. Управлять расходом памяти можно с помощью параметра --max-duration.
#### 3.4 "Raw"-оценка
По умолчанию мы предварительно обрабатываем входные данные (пример wav, транскрипция примера и текст) для ускорения вывода и повышения качества. Если вы хотите оценить "сырое" качество модели по точным входным данным (например, для воспроизведения результатов из нашей статьи), укажите --raw-evaluation True.
#### 3.5 Короткий текст
При генерации речи для очень коротких текстов (например, одно-два слова) сгенерированная речь иногда может пропускать отдельные звуки. Для решения этой проблемы укажите --speed 0.3 (где 0.3 — настраиваемое значение), чтобы увеличить длительность сгенерированной речи.
#### 3.6 Коррекция ошибочного произношения китайских полифонических иероглифов
Мы используем pypinyin для преобразования китайских иероглифов в пиньинь. Однако иногда он может неправильно произносить многозначные иероглифы (多音字).
Чтобы вручную исправить такие ошибки, заключайте исправленный пиньинь в угловые скобки < > и указывайте тон.
Пример:
- Оригинальный текст:
这把剑长三十公分 - Исправьте пиньинь у
长:这把剑三十公分
<>, например, 这把十公分 #### 3.7 Удаление длинных пауз из сгенерированной речи
Модель автоматически определяет позиции и длительность пауз в сгенерированной речи. Иногда в середине речи встречаются длительные паузы. Если вы не хотите этого, вы можете передать --remove-long-sil, чтобы удалить длинные паузы в середине сгенерированной речи (краевые паузы удаляются по умолчанию).
#### 3.8 Загрузка модели
Если у вас возникли трудности с подключением к HuggingFace при загрузке предобученных моделей, попробуйте переключить endpoint на зеркальный сайт: export HF_ENDPOINT=https://hf-mirror.com.
Обучение собственной модели
Смотрите каталог egs для примеров обучения, дообучения и оценки.
Промышленное развертывание
NVIDIA Triton GPU Runtime
Для промышленного развертывания с высокой производительностью и масштабируемостью ознакомьтесь с интеграцией Triton Inference Server, которая предоставляет оптимизированные движки TensorRT, обработку параллельных запросов и API gRPC/HTTP для корпоративного использования.
Развертывание на CPU
Посмотрите sherpa-onnx для решения по развертыванию на CPU на C++.
Обсуждение и коммуникация
Вы можете напрямую обсуждать на Github Issues.
Также вы можете отсканировать QR-код, чтобы присоединиться к нашей группе в WeChat или подписаться на наш официальный аккаунт WeChat.
| Wechat Group | Wechat Official Account |
| ------------ | ----------------------- |
|
|
|
Цитирование
@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 ---