精度高い音声クローンができる「Index-TTS」を試す(英・中のみ)
GitHubレポジトリ
IndexTTS:産業レベルの制御可能かつ高効率なゼロショット音声合成システム
IndexTTS は、主に XTTS および Tortoise に基づいた GPT スタイルの音声合成(TTS)モデルです。漢字の発音修正にはピンインを用い、句読点を通じて任意の位置でのポーズ制御が可能です。話者条件特徴表現の改善や音質最適化のための BigVGAN2 の統合など、システムの複数のモジュールを強化しました。数万時間分のデータでトレーニングされた本システムは、XTTS、CosyVoice2、Fish-Speech、F5-TTS などの現在主流のTTSシステムを凌駕する最先端の性能を実現しています。
🖥️ 手法
IndexTTS の概要は以下の図に示します。
referred from https://github.com/index-tts/index-tts主な改良点と貢献は以下の通りです:
- 中国語シナリオにおいて、文字とピンインのハイブリッドモデリング方式を導入し、誤読文字の迅速な修正を可能にしました。
- IndexTTS は、Conformer ベースの条件エンコーダおよび BigVGAN2 ベースの speechcode デコーダを統合し、トレーニングの安定性、話者音色の類似度、音質を向上させました。
- 多音節語、主観・客観的テストセットを含むすべてのテストセットを公開しています。
モデルダウンロード
HuggingFace ModelScope IndexTTS IndexTTS 😁IndexTTS-1.5 IndexTTS-1.5 📑 評価
IndexTTSおよびベースラインモデルにおける seed-test に基づく WER(単語誤り率)の比較
WER test_zh test_en test_hard 人間 1.26 2.14 - SeedTTS 1.002 1.945 6.243 CosyVoice 2 1.45 2.57 6.83 F5TTS 1.56 1.83 8.67 FireRedTTS 1.51 3.82 17.45 MaskGCT 2.27 2.62 10.27 Spark-TTS 1.2 1.98 - MegaTTS 3 1.36 1.82 - IndexTTS 0.937 1.936 6.831 IndexTTS-1.5 0.821 1.606 6.565 その他のオープンソーステストセットにおける WER(単語誤り率)
モデル aishell1_test commonvoice_20_test_zh commonvoice_20_test_en librispeech_test_clean 平均 人間 2.0 9.5 10.0 2.4 5.1 CosyVoice 2 1.8 9.1 7.3 4.9 5.9 F5TTS 3.9 11.7 5.4 7.8 8.2 Fishspeech 2.4 11.4 8.8 8.0 8.3 FireRedTTS 2.2 11.0 16.3 5.7 7.7 XTTS 3.0 11.4 7.1 3.5 6.0 IndexTTS 1.3 7.0 5.3 2.1 3.7 IndexTTS-1.5 1.2 6.8 3.9 1.7 3.1 IndexTTSおよびベースラインモデルにおける話者類似度(Speaker Similarity, SS)
モデル aishell1_test commonvoice_20_test_zh commonvoice_20_test_en librispeech_test_clean 平均 人間 0.846 0.809 0.820 0.858 0.836 CosyVoice 2 0.796 0.743 0.742 0.837 0.788 F5TTS 0.743 0.747 0.746 0.828 0.779 Fishspeech 0.488 0.552 0.622 0.701 0.612 FireRedTTS 0.579 0.593 0.587 0.698 0.631 XTTS 0.573 0.586 0.648 0.761 0.663 IndexTTS 0.744 0.742 0.758 0.823 0.776 IndexTTS-1.5 0.741 0.722 0.753 0.819 0.771 ゼロショットでの音声クローンに対する MOS スコア
モデル プロソディ 音色 音質 平均 CosyVoice 2 3.67 4.05 3.73 3.81 F5TTS 3.56 3.88 3.56 3.66 Fishspeech 3.40 3.63 3.69 3.57 FireRedTTS 3.79 3.72 3.60 3.70 XTTS 3.23 2.99 3.10 3.11 IndexTTS 3.79 4.20 4.05 4.01
日本語には未対応の様子
参考
READMEに従って試してみる。Colaboratory T4で。
レポジトリクローン
!git clone https://github.com/index-tts/index-tts.git
%cd index-tts
パッケージインストール。ランタイムを一度再起動する必要がある。
!pip install -r requirements.txt
再起動後にカレントディレクトリが元に戻ってしまうので再度クローンしたディレクトリに移動
%cd index-tts
モデルのダウンロード。Colaboratoryは huggingface-cli もデフォルトでインストール済なのね。
!huggingface-cli download IndexTeam/IndexTTS-1.5 \
config.yaml \
bigvgan_discriminator.pth \
bigvgan_generator.pth \
bpe.model \
dvae.pth \
gpt.pth \
unigram_12000.vocab \
--local-dir checkpoints
音声クローンのリファレンス用の音声ファイルを用意する。まずtest_data
ディレクトリを作成。
!mkdir test_data
上記に input.wav
という名前で音声ファイルをアップロードする。今回は、自分の声を録音した7秒程度のWAVファイルを使用した。
テスト用スクリプトが用意されているのでこれを実行する(テスト用といいつつ、このファイルは推論用のクラスが定義されたファイルとなっている。)
!!PYTHONPATH=. python indextts/infer.py
(snip)
>> Reference audio length: 7.23 seconds
>> gpt_gen_time: 4.88 seconds
>> gpt_forward_time: 0.07 seconds
>> bigvgan_time: 0.58 seconds
>> Total inference time: 5.97 seconds
>> Generated audio length: 4.01 seconds
>> RTF: 1.4875
>> wav file saved to: gen.wav
上記のように表示されればOK。カレントディレクトリに gen.wav
が生成されている。Colaboratoryで再生する場合は以下。
from IPython.display import Audio
Audio("gen.wav")
英語で音声が聞こえてくると思う。リファレンスの音声ファイルとかなり近しい精度でクローンされているのがわかる。
Pythonで書く場合は以下。
from indextts.infer import IndexTTS
tts = IndexTTS(model_dir="checkpoints",cfg_path="checkpoints/config.yaml")
# リファレンス音声
voice="test_data/input.wav"
# 出力ファイル
output_file = "output.wav"
# 発話させるテキスト。中国語 or 英語で。
#text="大家好,我现在正在bilibili 体验 ai 科技,说实话,来之前我绝对想不到!AI技术已经发展到这样匪夷所思的地步了!"
text="Hello everyone, I am currently experiencing AI technology. To be honest, I never would have imagined this before coming here! AI technology has developed to such an incredible level!"
tts.infer(voice, text, output_file)
上のコードだとIndexTTS
の初期化部分も含まれているけど、生成単体は10数秒程度。
(snip)
>> start inference...
wav shape: torch.Size([1, 348160]) min: tensor(-11024., device='cuda:0', dtype=torch.float16) max: tensor(6940., device='cuda:0', dtype=torch.float16)
>> Reference audio length: 7.23 seconds
>> gpt_gen_time: 11.75 seconds
>> gpt_forward_time: 0.07 seconds
>> bigvgan_time: 0.67 seconds
>> Total inference time: 12.78 seconds
>> Generated audio length: 14.51 seconds
>> RTF: 0.8806
>> wav file saved to: output.wav
output.wav
Audio("output.wav")
テキストを入れ替えて、英語・中国語をそれぞれ試してみると良い。かなり高い精度でクローンされているのがわかる。
VRAM消費は5GBってところかな
Fri May 16 20:17:28 2025
+-----------------------------------------------------------------------------------------+
| NVIDIA-SMI 550.54.15 Driver Version: 550.54.15 CUDA Version: 12.4 |
|-----------------------------------------+------------------------+----------------------+
| GPU Name Persistence-M | Bus-Id Disp.A | Volatile Uncorr. ECC |
| Fan Temp Perf Pwr:Usage/Cap | Memory-Usage | GPU-Util Compute M. |
| | | MIG M. |
|=========================================+========================+======================|
| 0 Tesla T4 Off | 00000000:00:04.0 Off | 0 |
| N/A 73C P0 34W / 70W | 5010MiB / 15360MiB | 0% Default |
| | | N/A |
+-----------------------------------------+------------------------+----------------------+
ところで IndexTTS
初期化時に以下の Warning が出ている。
>> GPT weights restored from: checkpoints/gpt.pth
>> DeepSpeed加载失败,回退到标准推理: No module named 'deepspeed'
>> Failed to load custom CUDA kernel for BigVGAN. Falling back to torch.
No modifications detected for re-loaded extension module anti_alias_activation_cuda, skipping build step...
deepspeedをインストールするだけじゃ解決しなくて、多分以下あたり。
ちょっとここは自分の知識ではわからなかった。ここが解決すると推論時間が結構短くなりそうなんだけど。
あと自分は試していないがIssueにvLLMで高速化した例が上がっている。そのうちPRしてくれるらしいので、それを待ってみてもいいかもね。
一応こちらがそれ
まとめ
参考にさせてもらった記事にもあったけど、音声クローンとしての精度は確かに非常に高いな。
過去に音声クローンをいくつか試した感じからすると、クローン精度を上げるにはリファレンスに使用する音声ファイルの品質が重要(品質が高ければクローンされた音声として生成されるが、適当にマイクで録ったような音声だと全然違う声になりクローン感がない)だと感じていたのが、Index TTSはリファレンス音声の質が低くても、非常に精度高いと感じた。
推論速度が高速になれば音声チャットでも十分使えそう。日本語サポートはいろんな面で簡単ではなさそうだが、今後に期待。