世界を動かす技術を、日本語で。

Show HN: Kitten TTS – 25MB CPU専用のオープンソースTTSモデル

概要

  • Kitten TTS は超軽量なオープンソース音声合成モデル
  • 15Mパラメータ で高品質なTTSを実現
  • GPU不要 でRaspberry Piやスマートフォン等に対応
  • 8種類の英語音声 をサポート
  • pipによる簡単インストール とPythonでの利用が可能

Kitten TTS:超軽量・高品質なテキスト読み上げモデル

  • Kitten TTS は、 オープンソース で提供される リアルな音声合成モデル
  • パラメータ数はわずか15M で、 軽量デバイス 向けに設計
  • 高品質な音声合成 が可能で、 GPU不要 の動作環境
  • Raspberry Pi、低スペックスマートフォン、ウェアラブル、ブラウザ など幅広いデバイスで利用可能
  • 英語テキスト の読み上げに対応し、 8種類(男性4/女性4)の音声 を選択可能
  • モデルサイズは25MB未満 で、 ONNXランタイム を使用
  • 量子化(int8 + fp16) により、さらに省メモリ化を実現

Kitten TTSのインストールと利用方法

  • pip で簡単にインストール可能
    • コマンド例:
      pip install https://github.com/KittenML/KittenTTS/releases/download/0.1/kittentts-0.1.0-py3-none-any.whl
      
  • Pythonコード例
    • モデルのインポートと初期化
      from kittentts import KittenTTS
      m = KittenTTS("KittenML/kitten-tts-nano-0.1")
      
    • 音声生成(例文の読み上げ)
      audio = m.generate("This high quality TTS model works without a GPU", voice='expr-voice-2-f')
      
    • 利用可能な音声一覧
      • 'expr-voice-2-m', 'expr-voice-2-f'
      • 'expr-voice-3-m', 'expr-voice-3-f'
      • 'expr-voice-4-m', 'expr-voice-4-f'
      • 'expr-voice-5-m', 'expr-voice-5-f'
    • 音声ファイルの保存
      import soundfile as sf
      sf.write('output.wav', audio, 24000)
      

Kitten TTS開発の背景と特徴

  • 既存のオープンソースTTS大規模GPU が必要なものが多い現状
  • クラウド型TTS高頻度利用時にコストが高い 課題
  • Kitten TTSエッジデバイスでの動作 を重視した設計
  • 現行モデルは初期チェックポイント で、 全データの10%未満で訓練
  • 今後さらなる高品質化と多言語展開 を予定
  • ユーザーからのフィードバック を積極的に募集

Kitten TTSの今後とコミュニティ

  • 次回リリース では、さらなる 音声品質向上低遅延化 を目指す方針
  • オープンソースコミュニティ との連携による発展を期待
  • 軽量TTSモデル の普及による新たなアプリケーション創出を促進

Hackerたちの意見

これが未来だといいな。オフラインで、小さなMLモデルがどこにでもある安価なハードウェアで推論を行う。ほかのものやデバイス、アプリに簡単に統合できるモデル、さらには他のモデルからもドライブできるかもしれないね。

ほんとそれ。これらの小さいモデルの品質はどんどん良くなっていくよ。

それが私たちのビジョンでもあるよ!

わあ、すごい!いい仕事だね。もっと素晴らしいモデルがCPUで動いてるのを見たいな!

ありがとう、これからもっとたくさんのモデルをリリースする予定だから、CPUだけでも動くよ。

ウェブ版はこちら: https://clowerweb.github.io/kitten-tts-web-demo/ 音はまあまあだけど、サイズにしてはすごいね。

SF映画で「ロボットの声」をリアルに聞かせるために、わざわざ歪ませるのが面白いと思わない?ロボットらしい、明らかに自然じゃない声は、実際には多くの場面で全然問題ないし、むしろ望ましいことだと思う。スマートトースターがBBCの司会者みたいに喋るとは思わないけど、認識しやすい音声ならそれで十分だよね。

ここでは動かないな。バックエンドモジュールが404を返してるよ: https://clowerweb.github.io/node_modules/onnxruntime-web/dis...

https://github.com/Picovoice/orca を試してみて。全部含めて約7MBだよ。

デモのテキストを真似してみたけど、なんかうまくいかないな。他に試したい人がいたらどうぞ。 > Kitten TTSは、デバイス上で使える小さくて表現力豊かなオープンソースのテキスト読み上げモデルのシリーズです。最小のモデルは25メガバイト未満です。

スピーチ生成エラー:OrtRun()の呼び出しに失敗しました。ERROR_CODE: 2, ERROR_MESSAGE: Expandノードを実行中に非ゼロのステータスコードが返されました。名前:'/bert/Expand' ステータスメッセージ: 無効な展開形状 タイ語ではうまくいかないみたい。

ありがとう、探してたんだ。redditのデモはまあまあだけど、数年前に達したレベルだし、試したTTSサンプルはほとんど理解できなかったよ。

6文でデモを試したらエラーが出たけど、テキストを3文に減らしたらうまくいった。長さ制限はモデルのせいなのか、それともデモの制限なのかな?

これ、Safariでは動かないみたい。Chromeではすごくうまくいくけどね。

うん、これは初期チェックポイントからのプレビューモデルなんだ。フルモデルのリリースは来週で、15Mモデルと80Mモデルが含まれてて、どちらもこのプレビューよりずっと高品質だよ。

PCだとPythonの依存関係がめちゃくちゃだけど、誰かがモデルを読み込んだらオフラインで動く自己完結型のJSコードにパッケージ化したって?それってどうやってるの?

生成された音声サンプルのReddit投稿: https://www.reddit.com/r/LocalLLaMA/comments/1mhyzp7/kitten_...

なんか遅そうだし、アニメから出てきたみたい。

サイズがMBでどれくらいかはあまり気にしないけど、純粋にCPUで質が良いことは大事だね。ただ、レイテンシーが気になる。速いといいな。余談だけど、トレーニングなしで完全オフラインで音声をテキストに理解するモデルってある?AIと自然なペースで会話できるようになったら、すごく感動するだろうな。「探る、間を置く、返答」みたいな感じじゃなくて。

TTSモデルのレイテンシに影響する要因って何だろう?

「茶色の狐が怠け者の犬を飛び越える..」生成ごとの平均時間: 1.28秒 1秒あたりの処理文字数: 30.35 -- 「うーん」生成ごとの平均時間: 0.22秒 1秒あたりの処理文字数: 9.23 -- 「茶色の狐が怠け者の犬を飛び越える.. 茶色の狐が怠け者の犬を飛び越える..」生成ごとの平均時間: 2.25秒 1秒あたりの処理文字数: 35.04 -- プロセッサ: 0 ベンダーID: AuthenticAMD CPUファミリー: 25 モデル: 80 モデル名: AMD Ryzen 7 5800H with Radeon Graphics ステッピング: 0 マイクロコード: 0xa50000c CPU MHz: 1397.397 キャッシュサイズ: 512 KB

余談ですが、トレーニングなしで完全オフラインで音声をテキストに変換するモデルってありますか?OpenAIのWhisperは数年前のもので、かなりしっかりしてますよ。 https://github.com/openai/whisper

Whisperを使えば、完全オフラインで音声をテキストに変換できます。いくつかのアプリが、ディクテーションやトランスクリプション用にそれを提供しています。

NvidiaのParakeet https://huggingface.co/nvidia/parakeet-tdt-0.6b-v2は、英語に関しては最先端のようで、Whisperの10倍速いです。私の中程度のAMD CPUは、Parakeetを使うとリアルタイムの数倍速くなります。

ヘッドラインの特徴は、25MBのサイズだけじゃないんだよね。KittenTTSはApache-2.0ライセンスだから、その組み合わせでPi Zeroクラスのハードウェアやバッテリー駆動のおもちゃに完全オフラインの音声を埋め込めるんだ。GPUやクラウド呼び出し、制限のあるライセンスを気にせずに済む。これで音声はハードウェアやライセンスの問題から、パッケージングの問題に変わるんだ。品質の調整は後からでもできるし、そのデプロイメント層を解放するのが本当のゲームチェンジャーだね。

A Festivalの英語モデル、festvox-kallpc16kは約6MBで、大きなモデルです。festvox-kallpc8kは約3.5MBです。eSpeak NGのデータファイルは約12MB(多言語対応)です。これだと、もっと自然な音声を生成するかもしれませんが、古いパソコンや低スペックのものでも、以前はそれなりの音声合成ができていましたよ。

そうそう、超高品質な小さなAIモデルを作るのにすごくワクワクしてるんだ。ローカルの音声インターフェースは避けられないし、将来的にはそれを支えたいと思ってる。ちなみに、このモデルはただのプレビューで、来週のフルリリースはもっと高品質になる予定だし、もう一つ約80Mのモデルもあるよ ;)

すごい! https://desktop.with.audio に統合するのが待ちきれないよ。もうGPUなしでKokorosTTSを使ってるけど、Apple Siliconでも結構うまく動いてる。こういう基盤的なツールがあれば、一度の支払いで済むツールや、無料のツールの可能性も広がるね。

それがどうなるか見てみたいね。来週のフルモデルリリースはもっと表現力豊かで高品質だから、ぜひ試してみてほしいな。

試してみたけど、サイズ(モデルの)と速度を考えると悪くないですね。必要な膨大なライブラリをインストールすると、25MBには程遠いですが、それでもクールなプロジェクトです。

ONNXについて言及されているので、ONNXモデルが利用可能か、今後利用可能になると思います。ONNXランタイムは単一のライブラリで、C#のパッケージは圧縮時で約115MBです。小さくはないですが、実行するのは通常数行だけで、依存関係も一つだけです。

普通はたくさんのライブラリを使うと、開発や試行錯誤が早く進むよね。全体が形になったら、後で削除すればいいし。

システム要件はどこでも動くよ。ハハ、俺のマシンの一つはPythonのバージョンが古すぎて、パッケージや依存関係がインストールできないんだ。別のマシンではPythonのバージョンが新しすぎて、やっぱりインストールできない。

それを修正するために頑張ってるよ。ありがとう!

オッケー。

Pythonマン

名前は「もし天皇がTTSデバイスを持ってたら」っていうジョークなの?面白いね。