Closed4

CPUでも動作する超小型 TTS「Kitten TTS」を試す

kun432kun432

ここで知った。とりあえず英語だけ。

https://www.reddit.com/r/LocalLLaMA/comments/1mhyzp7/kitten_tts_sota_supertiny_tts_model_less_than_25/

Kitten TTS : SOTA 超小型 TTS モデル(25 MB未満)

モデル紹介

Kitten MLは、新しいTTSモデルのプレビュー版として、オープンソースのコードとウェイトを公開しました。

Github: https://github.com/KittenML/KittenTTS
Huggingface: https://huggingface.co/KittenML/kitten-tts-nano-0.1

このモデルは25MB未満で、パラメーター数は約15Mです。来週のフルリリースでは、同じ8つのボイスを備えた約80Mパラメーターのオープンソースモデルも含まれ、CPU上で実行可能です。

主要な機能とメリット

  • 8種類の表現豊かなボイス: 女性4種類と男性4種類。小さなモデルながら、表現力は非常に印象的です。今回のリリースでは英語のTTSに対応し、今後のリリースで多言語対応が予定されています。
  • 超小型サイズ: テキストから音声変換モデルはそれぞれ約15MBと約80MBのパラメーターです。
  • 文字通りどこでも実行可能(笑): GPU不要は当たり前。ラズベリーパイやスマートフォンでも動作します。GPU不足のユーザーにとって朗報です。
  • オープンソース(やった!): モデルは無料で利用可能です。

コメントのまとめ(Diaによる)

ウチがみんなのコメントをまとめるね!マジで色んな意見あって面白いし、熱量も高いからテンション上がる~!

ポジティブな声

  • 「25MBでこのクオリティ、マジで魔法使いじゃん!」
    →小さいモデルなのに、音質や表現力がすごいって感動してる人が多い!
  • 「どこでも動くの最高!スマホやラズパイでもOKとか神」
    →軽いから色んなデバイスで使えるのがウケてるし、みんな試したくてウズウズしてる感じ。
  • 「多言語対応も期待してる!イタリア語とかも欲しい!」
    →今は英語だけだけど、将来的に他の言語もサポートしてほしいって声も多いよ。
  • 「オープンソースで無料とか、最高すぎ!」
    →お金かからないし、誰でも使えるのがめっちゃ好評。

改善や要望

  • 「デフォルトの声がイマイチだから、最初から一番いい声にしてほしい」
    →デモで使われてる声と、実際に使った時のデフォルトの声が違ってて、最初に試す人が戸惑うって意見。
  • 「自分好みにファインチューニングできたら嬉しい。スター・トレックのコンピューターボイス作りたい!」
    →自分だけの声を作りたいって人もいるし、カスタマイズ性を求めてる人もいる。
  • 「音質がデモと違う、ちょっと歪んで聞こえる」
    →一部の人は、実際に出力した音声がデモ動画と違って、がっかりしたって感想も。

技術的な話・考察

  • 「G2P(文字→発音変換)モデルっぽい?」
    →技術的にどうやってるのか気になる人も多くて、VITSとかStyleTTS2に似てるんじゃない?って推測してる人も。
  • 「論文とか詳細な解説も見たい!」
    →仕組みやトレーニング方法の公開を待ってる人もいる。

交流・コミュニティ

  • 「Discordで開発者と直接話せるの嬉しい!」
    →開発者がDiscordのリンク貼ってて、みんなでワイワイ盛り上がってる感じ。

まとめ

全体的に「小さいのにすごい!」「無料で使えるの最高!」ってポジティブな声が多いけど、「デフォルトの声を変えてほしい」「音質が思ったより…」みたいなリアルなフィードバックもちゃんと出てる。
技術的な話も盛り上がってて、みんなで進化させていこうってノリがめっちゃイイ感じだよ!

kun432kun432

GitHubレポジトリ

https://github.com/KittenML/KittenTTS

Kitten TTS 😻

Kitten TTSは、1500万パラメーターのみで構成されたオープンソースの現実的なテキスト読み上げモデルで、軽量な展開と高品質な音声合成を目的として設計されています。

現在、開発者プレビュー段階です

Discordに参加してください

✨ 機能

  • 超軽量: モデルサイズ25MB未満
  • CPU最適化: GPU不要であらゆるデバイスで動作
  • 高品質な音声: 複数のプレミアム音声オプションが利用可能
  • 高速推論: リアルタイム音声合成向けに最適化

モデルはこちら

https://huggingface.co/KittenML/kitten-tts-nano-0.1

kun432kun432

Quick Start

GitHubのREADMEに従って進める。Colaboratory CPUランタイムで。

パッケージをインストール

!pip install https://github.com/KittenML/KittenTTS/releases/download/0.1/kittentts-0.1.0-py3-none-any.whl
from kittentts import KittenTTS

# モデルロード
m = KittenTTS("KittenML/kitten-tts-nano-0.1")

# オーディオを生成
audio = m.generate(
    "This high quality TTS model works without a GPU.",
    # 利用可能な音声
    # - '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'
    voice='expr-voice-2-f'
)

# オーディオを保存
import soundfile as sf
sf.write('output.wav', audio, 24000)

再生

from IPython.display import Audio
Audio('output.wav')

生成されたもの

https://audio.com/kun432/audio/kitten-tts-sample-1

全部の音声をまとめて、Redditのデモにあるような感じでやってみた。

import numpy as np

voices = [
    'expr-voice-2-f',
    'expr-voice-2-m',
    'expr-voice-3-f',
    'expr-voice-3-m',
    'expr-voice-4-f',
    'expr-voice-4-m',
    'expr-voice-5-f',
    'expr-voice-5-m',
]

texts = [
    "Kitten TTS is an open-source series of tiny and expressive Text-to-Speech models for on-device applications.",
    "Our smallest model is less than 25 megabytes.", 
    "The world needs frontier open source models, that are tiny enough to run on edge devices. That's what Kitten ML is here for.",
    "This project was started just two weeks ago and we're excited to launch a preview of our smallest model.",
    "This model has 15 million parameters, and we are releasing the preview just to give early users a sense of the latency and voices that will be available in next week's release.",
    "We are looking for early testers that can provide feedback to shape the future of these models.",
    "Just FYI, this model, is an early checkpoint trained on less than 10% of our total data.",
    "Our full model release will be next week, and we can't wait for you to try it out.",
]

audio_data = []
for v, t in zip(voices, texts):
    audio = m.generate(t, voice=v)
    audio_data.append(audio)
    
    print(v)
    audio_file_name = f"{v}.wav"
    sf.write(audio_file_name, audio, 24000)
    display(Audio(audio_file_name))

combined = np.concatenate(audio_data)
combined_file = 'combined.wav'
sf.write(combined_file, combined, 24000)

print("全て結合")
display(Audio(combined_file))

こんな感じで確認できる。なるほど、g2pっぽいね。

全部結合したものは以下。

https://audio.com/kun432/audio/kitten-tts-sample-full

全般的にちょっとノイズがあるかな、あと最後がちょっと切れている感じ。

kun432kun432

まとめ

似たような位置づけ・アプローチのTTSとしてはPiper TTSがあると思うが、どういう違いがあるのかな?パッケージインストールでespeakng_loaderやmisakiが依存関係でインストールされていたので、g2pモデルってところも同じだと思うし。今のところは多言語で学習方法も公開されているPiper TTSのほうが利用シーンは多いのではないかと思うが。

https://zenn.dev/kun432/scraps/d635d1b88598f3

とりあえず来週あたりにフルモデルがでてくるらしいので、音質など多少なりとも改善されるのかもしれない。

ちなみにPiperTTSは微妙に名前とかが変わってた。(レポジトリの組織が移管された感じっぽい)

https://www.reddit.com/r/LocalLLaMA/comments/1mi6brm/fast_and_local_open_source_tts_engine_20/

このスクラップは29日前にクローズされました