ZipVoice⚡
Flow Matchingによる高速・高品質ゼロショット音声合成
概要
ZipVoiceは、フローマッチングに基づく高速かつ高品質なゼロショットTTSモデルシリーズです。
1. 主な特徴
- 小型かつ高速:パラメータ数は123Mのみ。
- 高品質な音声クローン:話者類似性、可聴性、自然さで最先端の性能。
- 多言語対応:中国語と英語をサポート。
- マルチモード対応:単一話者および対話音声生成をサポート。
2. モデルバリエーション
ニュース
2025/07/14: ZipVoice-DialogおよびZipVoice-Dialog-Stereo、2つの音声対話生成モデルをリリースしました。
2025/07/14: OpenDialogデータセット(6.8k時間の音声対話データセット)を公開しました。ダウンロードは,
。詳細は
をご覧ください。
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は学習に必要であり、推論も高速化できます。ただし、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) マージされたプロンプト形式 では、2人の話者の音声と文字起こしが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は最初の話者のプロンプト wav の書き起こし例です。例:「Hello」spk2_prompt_transcriptionは2番目の話者のプロンプト wav の書き起こし例です。例:「How are you?」spk1_prompt_wavは最初の話者のプロンプト wav ファイルのパスです。spk2_prompt_wavは2番目の話者のプロンプト 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スレッドです。 - CPUでONNXによる高速化: CPU上で動作させる場合、ONNXモデルを
zipvoice.bin.infer_zipvoice_onnxで利用することで高速化できます(対話生成モデルはまだONNX未対応)。さらに高速化したい場合は、--onnx-int8 Trueを指定して INT8 量子化 ONNX モデルを利用できます。ただし、量子化モデルは音声品質が若干低下します。GPU上ではONNXを使用しないでください。GPU上ではPyTorchより遅くなります。
指定されたテキストは、句読点(単一話者音声生成の場合)や話者交代記号(対話音声生成の場合)で分割されます。その後、分割されたテキストがバッチ処理されます。これにより、モデルはほぼ一定のメモリ使用量で任意の長さのテキストを処理できます。--max-duration パラメータを調整することでメモリ使用量を制御できます。
#### 3.4 「Raw」評価
デフォルトでは、効率的な推論と性能向上のために(プロンプトwav、プロンプト書き起こし、テキスト)を前処理しています。モデルの「生」の性能を厳密に評価したい場合(例: 論文の結果を再現する場合)は、--raw-evaluation True を指定できます。
#### 3.5 短いテキスト
非常に短いテキスト(例: 1~2単語)の音声を生成する際、生成音声が一部の発音を省略してしまうことがあります。この問題を解決するには、--speed 0.3(0.3は調整可能な値)を指定して、生成音声の持続時間を延長できます。
#### 3.6 中国語の多音字の発音修正
中国語文字をピンインに変換するために pypinyin を使用しています。ただし、多音字(複数の読み方がある漢字)の発音を誤ることがあります。
これらの誤発音を手動で修正するには、修正したピンインを山括弧 < > で囲み、声調記号を含めてください。
例:
- 元のテキスト:
这把剑长三十公分 长のピンインを修正:这把剑三十公分
<> で囲んでください。例: 这把十公分 #### 3.7 生成音声から長い無音部分を除去
モデルは生成された音声の無音部分の位置と長さを自動的に判定します。時折、音声の途中に長い無音が発生します。これを避けたい場合は、--remove-long-sil を指定することで、生成音声の途中の長い無音を除去できます(端の無音はデフォルトで除去されます)。
#### 3.8 モデルのダウンロード
事前学習済みモデルのダウンロード時に HuggingFace への接続がうまくいかない場合は、ミラーサイトへのエンドポイント切り替えをお試しください: export HF_ENDPOINT=https://hf-mirror.com
独自モデルの学習
トレーニング、ファインチューニング、評価の例については egs ディレクトリをご覧ください。
C++ デプロイ
CPU 上での C++ デプロイソリューションについては sherpa-onnx をご確認ください。
ディスカッション & コミュニケーション
Github Issues で直接ディスカッションできます。
QRコードをスキャンして WeChat グループに参加したり、公式アカウントをフォローすることもできます。
| WeChat グループ | WeChat 公式アカウント |
| ------------ | ----------------------- |
|
|
|
引用
@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 ---