ZipVoice⚡
플로우 매칭을 통한 빠르고 고품질의 제로샷 텍스트-음성 변환
개요
ZipVoice는 flow matching 기반의 빠르고 고품질의 zero-shot TTS 모델 시리즈입니다.
1. 주요 특징
- 작고 빠름: 123M 파라미터만 사용합니다.
- 고품질 음성 복제: 화자 유사도, 명료성, 자연스러움에서 최첨단 성능.
- 다국어 지원: 중국어와 영어 지원.
- 다중 모드: 단일 화자 및 대화 음성 생성 모두 지원.
2. 모델 변형
소식
2025/07/14: 두 개의 음성 대화 생성 모델인 ZipVoice-Dialog 및 ZipVoice-Dialog-Stereo가 출시되었습니다.
2025/07/14: 6.8k시간 분량의 음성 대화 데이터셋인 OpenDialog가 공개되었습니다. 다운로드: ,
. 자세한 내용은
참고.
2025/06/16: ZipVoice 및 ZipVoice-Distill이 출시되었습니다.
설치
1. ZipVoice 저장소 클론하기
git clone https://github.com/k2-fsa/ZipVoice.git
2. (선택 사항) 파이썬 가상 환경 만들기
python3 -m venv zipvoice
source zipvoice/bin/activate
3. 필요한 패키지 설치하기
pip install -r requirements.txt
4. 학습 또는 효율적인 추론을 위해 k2 설치하기
k2는 학습에 필수적이며 추론 속도를 높일 수 있습니다. 하지만 k2를 설치하지 않아도 ZipVoice의 추론 모드는 사용할 수 있습니다.
참고: 사용하는 PyTorch 및 CUDA 버전에 맞는 k2 버전을 설치해야 합니다. 예를 들어, 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은 대화형 프롬프트 wav의 전사본입니다. 예: "[S1] 안녕하세요. [S2] 어떻게 지내세요?"prompt_wav는 프롬프트 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은 첫 번째 화자의 프롬프트 wav의 전사본입니다. 예: "Hello"spk2_prompt_transcription은 두 번째 화자의 프롬프트 wav의 전사본입니다. 예: "How are you?"spk1_prompt_wav는 첫 번째 화자의 프롬프트 wav 파일 경로입니다.spk2_prompt_wav는 두 번째 화자의 프롬프트 wav 파일 경로입니다.text는 합성할 텍스트입니다. 예: "[S1] I'm fine. [S2] What's your name? [S1] I'm Eric. [S2] Hi Eric."
3 더 나은 사용을 위한 가이드:
#### 3.1 프롬프트 길이
더 빠른 추론 속도를 위해 짧은 프롬프트 wav 파일(예: 단일 화자 음성 생성의 경우 3초 미만, 대화 음성 생성의 경우 10초 미만)을 권장합니다. 너무 긴 프롬프트는 추론 속도를 느리게 하고 음성 품질을 저하시킬 수 있습니다.
#### 3.2 속도 최적화
추론 속도가 만족스럽지 않다면 다음과 같이 속도를 높일 수 있습니다:
- 모델 디스틸 및 스텝 수 감소: 단일 화자 음성 생성 모델의 경우, 기본적으로 더 나은 음성 품질을 위해
zipvoice모델을 사용합니다. 더 빠른 속도가 우선이라면zipvoice_distill로 변경하고--num-steps를 최소4(기본값 8)까지 줄일 수 있습니다. - 멀티스레딩을 통한 CPU 속도 향상: CPU에서 실행할 때,
--num-thread파라미터(예:--num-thread 4)를 지정하여 스레드 수를 늘려 속도를 높일 수 있습니다. 기본적으로 1개의 스레드를 사용합니다. - ONNX를 통한 CPU 속도 향상: CPU에서 실행할 때, ONNX 모델을
zipvoice.bin.infer_zipvoice_onnx와 함께 사용하면 더 빠른 속도를 얻을 수 있습니다(아직 대화 생성 모델에서는 ONNX를 지원하지 않음). 추가로--onnx-int8 True를 설정하면 INT8 양자화된 ONNX 모델을 사용할 수 있습니다. 양자화된 모델은 어느 정도 음성 품질 저하가 발생할 수 있습니다. GPU에서는 ONNX를 사용하지 마세요. GPU에서는 PyTorch보다 느립니다. - NVIDIA TensorRT를 이용한 GPU 가속: NVIDIA GPU에서 성능을 대폭 향상시키려면, 먼저 zipvoice.bin.tensorrt_export로 모델을 TensorRT 엔진으로 내보냅니다. 그런 다음 zipvoice.bin.infer_zipvoice로 데이터셋(예: Hugging Face 데이터셋)에서 추론을 실행합니다. 이 방법은 GPU에서 표준 PyTorch 구현 대비 약 2배의 처리량을 달성할 수 있습니다.
주어진 텍스트는 구두점(단일 화자 음성 생성의 경우) 또는 화자 전환 기호(대화 음성 생성의 경우)를 기준으로 청크로 분할됩니다. 이후 분할된 텍스트는 배치로 처리됩니다. 따라서 모델은 거의 일정한 메모리 사용량으로 임의의 길이의 텍스트를 처리할 수 있습니다. --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 연결에 문제가 있다면, 엔드포인트를 미러 사이트로 변경해보세요: export HF_ENDPOINT=https://hf-mirror.com.
나만의 모델 학습
학습, 파인튜닝 및 평가 예시는 egs 디렉터리를 참고하세요.
프로덕션 배포
NVIDIA Triton GPU 런타임
엔터프라이즈용 고성능 및 확장성 있는 배포를 위해 Triton Inference Server 통합을 확인하세요. 이 통합은 최적화된 TensorRT 엔진, 동시 요청 처리, 그리고 gRPC/HTTP API를 제공합니다.
CPU 배포
CPU에서의 C++ 배포 솔루션은 sherpa-onnx를 참고하세요.
토론 및 소통
Github Issues에서 직접 토론할 수 있습니다.
QR 코드를 스캔하여 위챗 그룹에 참여하거나 공식 위챗 계정을 팔로우할 수도 있습니다.
| 위챗 그룹 | 공식 위챗 계정 |
| ------------ | ----------------------- |
|
|
|
인용
@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 ---