見出し画像

音声合成StyleTTS2をWindows(ノートPC)のCPU環境で動かしてみた

ざっくりまとめ

  • GPUなしのノートPCでも、StyleTTS2が爆速で動作することを確認

  • Windows+CPU環境での構築手順と、エラー回避のパッチを紹介

  • 13秒の音声を3秒で生成(RTF 0.28) CPUでの実用性は十分


1. はじめに:MOSS-TTSの次に試してみたもの

前回、「MOSS-TTS」という軽量なモデルを動かしてみましたが、機動力は抜群だった一方で、声の細かなニュアンスの再現性については「もう一歩、欲を言えば……」と感じる部分もありました。

そこで今回、次の候補として選んだのが「StyleTTS2」です。StyleTTS2 は、2023年6月にコロンビア大学の研究チーム(Li ら)によって公開されたオープンソースの音声合成モデルだそうです。特徴的なのは画像生成でよく耳にする「拡散モデル(Diffusion)」の考え方を話者スタイルの生成に応用した「Style Diffusion」という仕組みを取り入れていることです。

技術的な内容を少しだけ噛み砕くと、このモデルはまず「声の骨格」を素早く組み立て、その後に「声の質感やリズム」を丁寧に整えていくという、二段構えの構造を持っています。まるで、デッサンを一気に描き上げる画家と、そこに繊細な色を重ねていく色彩家が協力して、一枚の絵を仕上げるようなイメージですね。

この工夫により、StyleTTS2 は従来のモデルを大きく上回る自然さを獲得したと報告されています。論文では、特定のデータセットにおいて、なんと「人間の録音(Ground Truth)」をも上回る評価を得たそうです。

モデルのサイズ感も、個人で扱うにはちょうど良いバランスです。
 ・モデルサイズ: チェックポイントはおよそ 400〜500MB 程度
 ・推論環境: GPU 推奨だが CPU でも動作可能(速度は低下)
 ・対応言語:英語がメイン

また、用途に応じて
 ・LJSpeech 版(単一話者の高精度再現)
 ・VCTK 版(多話者の演じ分け)
 ・LibriTTS 版(未知の声を真似るゼロショット)
といったバリエーションが用意されています。今回動かしたのは「LJSpeech 版」 です。

本来は強力な GPU で動かすことが前提のモデルですが、「この表現力が CPU 環境でどこまで発揮されるのか」「実用的な速度で動くのか」を確かめてみようと思います。

2. 動作環境

前回同様です。普段の作業で使っているノートPC(GPU非搭載)。
 ・プロセッサ: AMD Ryzen AI 5 PRO 340 (2.00 GHz)
 ・メモリ: 32.0 GB
 ・GPU: なし
 ・OS: Windows 11

環境構築には「Miniconda」を使っています。ライブラリのバージョンが合わずに環境がぐちゃぐちゃになってしまった時も、サクッとリセットできるので非常に助かっています。GPUがない普通のノートPCでTTSがどこまで動くのかを探ってみます。

3. 環境構築の手順:WindowsとCPU環境で動かすまで

StyleTTS2をWindowsのノートPC(CPU)で動かすには、いくつか事前の準備が必要です。私が実際に行った手順を一つずつ追いながら、ポイントを整理してみます。

① 土台となる環境を作る(Conda)
まずは、他のPython環境と混ざらないように専用の箱(仮想環境)を作ります。

# 作業フォルダを作成して移動
cd (作業用フォルダ)

# 新しい環境を作成(Python 3.11を推奨)
conda create -n styleTTS2 python=3.11 -y
conda activate styleTTS2

次に、公式のソースコードを取得します。

# リポジトリをクローン
git clone https://github.com/yl4579/StyleTTS2.git
cd StyleTTS2

② ライブラリのインストール
GPUを使わずにCPUで動かすために、通常のインストール手順とは少し変えています。

# 1. まず「CPU版」のPyTorchを明示的にインストール
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cpu

# 2. その他の必要なライブラリを入れる
pip install -r requirements.txt
pip install phonemizer

もしエラーが出たら: requirements.txt のインストール中にエラーが出る場合は、Microsoft C++ Build Tools が入っていない可能性があります。その場合は、リンク先からツールを導入してから再度試してみてください。

③ 外部ソフト「eSpeak NG」の準備
StyleTTS2は、文字を音に変換する過程で「eSpeak NG」という外部ソフトを必要とします。これがWindowsだと少しだけ手間がかかります。

  1. GitHubのリリースサイトから Windows用のインストーラー(例: espeak-ng-X64.msi)をダウンロードしてインストールします。

  2. Windowsの「システム環境変数の編集」から、Path の項目に C:\Program Files\eSpeak NG を追加します。

  3. 設定を反映させるため、一度PowerShellの画面を閉じて、再度立ち上げ直しましょう。

④ 学習済みモデルの配置
今回は、一人の話し手を高精度に再現する「LJSpeech版」を使用します。Hugging Faceからデータをダウンロードして、指定の場所に配置します。

# 保存用フォルダの作成
mkdir -Path Models/LJSPEECH -Force

# モデルデータのダウンロード(Git LFSを使用)
git lfs install
git clone https://huggingface.co/yl4579/StyleTTS2-LJSpeech

# 必要なファイルをコピー
mv StyleTTS2-LJSpeech/Models/LJSPEECH/config.yml Models/LJSPEECH/
mv StyleTTS2-LJSpeech/Models/LJSPEECH/epoch_2nd_00100.pth Models/LJSPEECH/

# 使い終わったフォルダは削除
rm -Recurse -Force StyleTTS2-LJSpeech

⑤ ノートブックの微調整(CPU対応)
準備が整ったら、Jupyter Notebookを起動してサンプルコード(Demo/Inference_LJSpeech.ipynb)を開きます。ただし、そのままではGPUを探しに行って動かないため、いくつか書き換えが必要です。

# Jupyter Notebook のライブラリをインストール & 起動
> pip install jupyter scipy
> jupyter notebook

・実行デバイスの固定
3つ目あたりのセルにある device の指定を書き換えます。

# 修正前:device = 'cuda' if torch.cuda.is_available() else 'cpu'
device = 'cpu' # 修正後

・eSpeakへの橋渡し
TextCleaner() を呼び出している部分に、WindowsがeSpeakを見つけられるよう「おまじない」を追加します。

import os
from phonemizer.backend.espeak.wrapper import EspeakWrapper

# eSpeak NGのインストール先(デフォルト)を指定
EspeakWrapper.set_library(r'C:\Program Files\eSpeak NG\libespeak-ng.dll')

textcleaner = TextCleaner()

・PyTorchの仕様変更へのパッチ
最新のPyTorch(2.6以降)をお使いの場合、モデル読み込みでエラーが出ることがあります。その際は、モデルを読み込む(Load models)セルの直前に以下のコードを差し込んでみてください。

# PyTorch 2.6以降の読み込み制限を一時的に緩和するパッチ
_original_load = torch.load
def patched_load(*args, **kwargs):
    if 'weights_only' not in kwargs:
        kwargs['weights_only'] = False
    return _original_load(*args, **kwargs)
torch.load = patched_load

これで準備は完了です。修正の多かったファイル:Demo/Inference_LJSpeech.ipynb を付けさせていただきます。参考になるかもしれません。

4. 動作の確認:実際に声を聴いてみる

環境が整ったところで、いよいよノートブックのセルを順番に実行していきます。

モデルを読み込む際、画面にいくつか赤い背景のメッセージ(FutureWarningなど)が表示されますが、これらは「将来的に書き方が変わるよ」といったシステム側からのお知らせのようなもの。動作自体に影響はないので、そのまま進めて大丈夫です。

準備が終わり、いよいよ「Basic synthesis」のセルで音声を生成してみます。

驚いたのは、そのスピード感でした。約13秒ほどの英語の文章を読み上げさせたのですが、生成にかかった時間はわずか3秒ほど。

画面に表示された「RTF(リアルタイム係数)」は 0.28 前後。これは、1秒の音声を生成するのに0.28秒しかかかっていないということで、実際の時間の3〜4倍の速さで処理できている計算になります。

「CPUだと、生成中にコーヒーを淹れに行けるくらい待つかな?」なんて予想していましたが、良い意味で裏切られました。手元のノートPCでも、これだけキビキビと「声」を作ってくれるのは、純粋に嬉しい手応えです。

実際の合成音声も、非常に滑らか。機械的な硬さが抑えられていて、StyleTTS2の地力の高さを感じました。

サンプルとして用意されているノートブックには、単に文字を読み上げるだけでなく、StyleTTS2の真骨頂とも言える「応用機能」がいくつか用意されていました。少し中身を覗いてみると、これがなかなか面白いんです。

長い文章を「息切れ」させない工夫(Long-form Synthesis)
AIにとって、一度に長すぎる文章を読み上げるのは実は重労働。途中でメモリがいっぱいになったり、話し方が不自然に崩れてしまったりすることがあります。 そこでこの機能では、長い文章を句読点で「1文ずつ」に小分けにして処理し、最後に魔法のように繋ぎ合わせる、という丁寧な作業を行っています。

声の「雰囲気」を借りてくる(Voice Cloning / Style Transfer)
これがStyleTTS2の一番の目玉かもしれません。 「リファレンス音声」と呼ばれる、お手本になる数秒の声を読み込ませることで、その人の声質や話し方のスピード、さらには感情の揺れまで真似て、別のテキストを読み上げさせることができます。まさに、声の「スタイル」を転写するような機能ですね。

理想の声に近づける「調合」(alpha, beta の調整)
コードの中には alpha や beta といった数値のパラメータがあります。 これは、いわば「声のブレンド具合」を決めるスライダーのようなもの。「お手本の声にどれくらい寄せるか」「AIがもともと持っている標準的な声をどれくらい混ぜるか」を調整することで、より自分好みの自然なニュアンスを探っていくことができます。

5. まとめ

今回は、StyleTTS2をノートPCのCPU環境で動かしてみました。

結果として、13秒ほどの音声を3秒程度で生成でき、十分に実用的な速度で動作することが確認できました。 GPUがない環境でも、設定を整えれば最新のモデルを動かせるという、一つの目安が掴めたように思います。

現時点では英語での検証となりましたが、やはり次は、この表現力を「日本語」でも試してみたいところです。

試しました。

手元の環境でどこまでできるのか、その境界線を確かめる作業は、地味ではありますが発見がありますね。今回の構築手順やパッチの当て方が、手元のノートPCで『音声合成、ちょっと試してみようかな』と思っている方の参考になれば嬉しいです。次回は、いよいよ日本語の波に乗せてみたいと思います!

いいなと思ったら応援しよう!

あさぎ あい よろしければ応援してくれると嬉しいです!いただいたチップは、記事づくりや学びの時間に大切に使わせていただきます。

この記事が参加している募集