Piper Plus Base Model (Multilingual 6-Language) with Prosody Features
6言語対応TTS事前学習済みベースモデルです。ファインチューニング用のチェックポイントとして提供しています。prosody_features (A1/A2/A3) に対応しています。
Model Details
| 項目 | 値 |
|---|---|
| アーキテクチャ | VITS |
| 言語 | 日本語 (ja), 英語 (en), 中国語 (zh), スペイン語 (es), フランス語 (fr), ポルトガル語 (pt) |
| サンプルレート | 22050 Hz |
| 品質 | medium |
| 音素タイプ | multilingual |
| 話者数 | 0 (ファインチューニング用: 元モデルは571話者から学習) |
| 言語数 | 6 |
| prosody_dim | 16 |
| 音素数 | 173 |
Features
6言語対応
MultilingualPhonemizer により、文内コードスイッチング(言語混合テキスト)に対応:
| 言語 | コード | language_id | Phonemizer |
|---|---|---|---|
| 日本語 | ja | 0 | JapanesePhonemizer (pyopenjtalk) |
| 英語 | en | 1 | EnglishPhonemizer (g2p-en) |
| 中国語 | zh | 2 | ChinesePhonemizer (pypinyin) |
| スペイン語 | es | 3 | SpanishPhonemizer (規則ベース) |
| フランス語 | fr | 4 | FrenchPhonemizer (規則ベース) |
| ポルトガル語 | pt | 5 | PortuguesePhonemizer (規則ベース) |
Prosody Features (A1/A2/A3)
OpenJTalkから抽出されるプロソディ特徴量をサポート:
| フィールド | 意味 | 値の例 |
|---|---|---|
| A1 | アクセント核からの相対位置 | -4, -3, ..., 0, 1, ... |
| A2 | アクセント句内のモーラ位置 | 1, 2, 3, ... |
| A3 | アクセント句内の総モーラ数 | 1-10+ |
拡張音素
- 疑問詞マーカー:
?!,?.,?~ - 文脈依存「ん」バリアント:
N_m,N_n,N_ng,N_uvular
Usage
シングル話者ファインチューニング(推奨)
# Step 1: データセット前処理
uv run python -m piper_train.preprocess \
--input-dir /path/to/your-ljspeech-data \
--output-dir /path/to/dataset \
--language ja \
--dataset-format ljspeech \
--sample-rate 22050 \
--single-speaker \
--phoneme-type multilingual
# Step 2: Prosody Features追加(日本語の場合、推奨)
uv run python add_prosody_features.py \
--input-dataset /path/to/dataset/dataset.jsonl \
--output-dir /path/to/dataset-prosody \
--workers 4
# Step 3: ファインチューニング
uv run python -m piper_train \
--dataset-dir /path/to/dataset-prosody \
--prosody-dim 16 \
--accelerator gpu \
--devices 1 \
--precision 32-true \
--max_epochs 500 \
--batch-size 4 \
--samples-per-speaker 4 \
--checkpoint-epochs 50 \
--base_lr 2e-5 \
--disable_auto_lr_scaling \
--ema-decay 0.9995 \
--max-phoneme-ids 400 \
--no-wavlm \
--resume-from-multispeaker-checkpoint /path/to/model.ckpt \
--default_root_dir /path/to/output
--resume-from-multispeaker-checkpoint は以下を自動的に行います:
emb_g(話者埋め込み) の処理emb_langへの conditioning 分布補正--freeze-dpの自動有効化 (Duration Predictor の catastrophic forgetting 防止)
マルチ話者ファインチューニング
uv run python -m piper_train \
--dataset-dir /path/to/multi-speaker-dataset \
--prosody-dim 16 \
--accelerator gpu \
--devices 4 \
--precision 32-true \
--max_epochs 150 \
--batch-size 20 \
--samples-per-speaker 2 \
--base_lr 2e-4 \
--disable_auto_lr_scaling \
--ema-decay 0.9995 \
--max-phoneme-ids 400 \
--no-wavlm \
--resume_from_checkpoint /path/to/model.ckpt \
--default_root_dir /path/to/output
ONNX Export
CUDA_VISIBLE_DEVICES="" uv run python -m piper_train.export_onnx \
/path/to/checkpoint.ckpt \
/path/to/output.onnx
推論
CUDA_VISIBLE_DEVICES="" uv run python -m piper_train.infer_onnx \
--model /path/to/output.onnx \
--config /path/to/config.json \
--output-dir /path/to/output \
--text "こんにちは、今日は良い天気ですね。" \
--language ja-en-zh-es-fr-pt \
--speaker-id 0 --noise-scale 0.667
Recommended Parameters
シングル話者ファインチューニング
| パラメータ | 値 | 説明 |
|---|---|---|
--base_lr |
2e-5 | 事前学習の1/10(過学習防止) |
--max_epochs |
500 | 小規模データ (100発話) の場合 |
--batch-size |
4 | 小規模データセット向け |
--freeze-dp |
自動 | --resume-from-multispeaker-checkpoint 使用時 |
--precision |
32-true | V100 GPU推奨(FP16はbackward遅延あり) |
--no-wavlm |
- | ファインチューニング時は不要 |
emb_lang 後処理(シングル話者FT後)
シングル話者ファインチューニング後、ONNX エクスポート前に emb_lang[0] を他の全言語スロットにコピーすることを推奨します:
import torch
ckpt = torch.load("checkpoint.ckpt", map_location="cpu")
state = ckpt["state_dict"]
emb_lang = state["model_g.emb_lang.weight"]
# 学習された言語 (例: ja=0) を全言語にコピー
for i in range(1, emb_lang.shape[0]):
emb_lang[i] = emb_lang[0].clone()
torch.save(ckpt, "checkpoint-emb_lang_fixed.ckpt")
Origin
このベースモデルは以下のデータから学習されました:
| 言語 | 話者数 | 発話数 | ソース |
|---|---|---|---|
| ja | 20 | 60,148 | MOE-Speech |
| en | 310 | 74,912 | LibriTTS-R |
| zh | 142 | 63,223 | AISHELL-3 (Apache-2.0) |
| es | 63 | 168,374 | CML-TTS Spanish (CC-BY-4.0) |
| fr | 28 | 107,464 | CML-TTS French (CC-BY-4.0) |
| pt | 8 | 34,066 | CML-TTS Portuguese (CC-BY-4.0) |
| 合計 | 571 | 508,187 |
- 学習設定: 75 epoch, batch-size 20, 4 GPU (V100 16GB), prosody_dim=16
- gradient steps: ~282K
- 学習時間: ~92時間
emb_g(話者埋め込み) は除去済み、optimizer states は除去済み
Files
model.ckpt- PyTorch Lightningチェックポイント (EMA state含む、emb_g除去済み)config.json- モデル設定 (173音素マップ、6言語、prosody設定)
Citation
@software{piper_plus,
title = {Piper Plus: Multilingual TTS with VITS, Prosody Features},
author = {ayousanz},
year = {2024},
url = {https://github.com/ayutaz/piper-plus}
}
- Downloads last month
- 125