Sopro TTS: CPUで動作するゼロショット音声クローン機能を持つ169Mモデル
98日前原文(github.com)
概要
- Soproは軽量な英語テキスト読み上げ(TTS)モデル
- WaveNet風の畳み込みと軽量クロスアテンションを採用
- ゼロショット音声クローンやストリーミング生成に対応
- 低予算・単一GPUで訓練されたプロジェクト
- パラメータ調整や実行例も詳細に記載
Sopro TTS 概要
- Soproはポルトガル語で「息・吹き」を意味する単語から命名された英語TTSモデル
- WaveNet風のdilated convsと軽量クロスアテンション層を採用、一般的なTransformerは不使用
- パラメータ数169Mの軽量設計
- ストリーミング生成とゼロショット音声クローン機能
- CPU(M3ベースモデル)で0.25 RTF(30秒音声を7.5秒で生成)
- 3〜12秒のリファレンス音声でクローン可能
- 単一L40S GPUで訓練、今後データ改善で性能向上の余地あり
主な機能
- ストリーミング生成によるリアルタイム応答
- ゼロショット音声クローンによる多様な声質対応
- 音声生成速度:CPUで0.25RTF
- パラメータ調整:style_strength, stop_head, stop_threshold, stop_patience
- 最大生成長:約32秒(400フレーム)、拡張可能だが幻覚発生リスクあり
インストール手順
- PyPIからインストール
pip install sopro
- リポジトリからインストール
git clone https://github.com/samuel-vitorino/soprocd sopropip install -e .
- (オプション)conda環境作成
conda create -n soprotts python=3.10conda activate soprotts
- 推奨PyTorchバージョン:例
torch==2.6.0(CPU性能向上)
コマンドライン実行例
- 基本コマンド
soprotts --text "テキスト" --ref_audio ref.wav --out out.wav
- 主要オプション
--style_strength:声の類似度調整--no_stop_head:早期停止無効化--stop_threshold,--stop_patience:停止判定パラメータ
- 短文や未完全文時:パラメータ値の調整推奨
Python API使用例
-
非ストリーミング
from sopro import SoproTTS tts = SoproTTS.from_pretrained("samuel-vitorino/sopro", device="cpu") wav = tts.synthesize("Hello! This is a non-streaming Sopro TTS example.", ref_audio_path="ref.wav") tts.save_wav("out.wav", wav) -
ストリーミング
import torch from sopro import SoproTTS tts = SoproTTS.from_pretrained("samuel-vitorino/sopro", device="cpu") chunks = [] for chunk in tts.stream("Hello! This is a streaming Sopro TTS example.", ref_audio_path="ref.mp3"): chunks.append(chunk.cpu()) wav = torch.cat(chunks, dim=-1) tts.save_wav("out_stream.wav", wav)
インタラクティブデモ
- 依存パッケージインストール
pip install -r demo/requirements.txt
- ローカルサーバ起動
uvicorn demo.server:app --host 0.0.0.0 --port 8000
- Docker利用
docker build -t sopro-demo .docker run --rm -p 8000:8000 sopro-demo
- ブラウザアクセス:
http://localhost:8000
注意事項・推奨事項
- 音声生成の一貫性:パラメータ調整で最適化推奨
- 音声クローン精度:マイク品質や環境ノイズに依存
- 略語や記号は発音表記推奨:「1 + 2」→「1 plus 2」
- ストリーミング版と非ストリーミング版はビット単位で一致しない
- 最高品質重視時:非ストリーミング版推奨
- torchaudio利用時:ffmpegが必要な場合あり、soundfile推奨
- 訓練コードは後日公開予定
- 訓練データ:事前トークナイズ済み音声のみ使用(生音声は容量削減のため破棄)
改善余地・今後の展望
- 畳み込み状態のキャッシュなど最適化余地あり
- AI活用:Webデモ作成やコード整理、アブレーション解析に利用
- 多言語対応やモデル改善を目指し継続開発予定
- 支援募集中:開発支援は https://buymeacoffee.com/samuelvitorino
学習データセット
- Emilia
- YODAS
- LibriTTS-R
- Mozilla Common Voice 22
- MLS
謝辞・参考技術
- Mimi Codec (Kyutai)
- WaveNet
- Attentive Stats Pooling
- AudioLM
- CSM