fish-speechをCLIで動かす

はじめに

Bert-VITS2やDALL-E XなどTTSライブラリが増えてきている中で、新しいTTSライブラリの fish-speech が出たので、触ってみます

github.com

環境

  • L4 GPU
  • fish speech (hash : 79eeafcf2dd231713f6a892c429c726508256eeb

ライブラリのインストール

まずはライブラリ等を入れていきます。基本的に以下のドキュメント通りで動きました

speech.fish.audio

# 创建一个 python 3.10 虚拟环境, 你也可以用 virtualenv
conda create -n fish-speech python=3.10
conda activate fish-speech

# 安装 pytorch
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu121

# 安装 flash-attn (适用于linux)
pip3 install ninja && MAX_JOBS=4 pip3 install flash-attn --no-build-isolation

# 安装 fish-speech
pip3 install -e .

上記で以下のエラーが出たときは、それぞれ対応していきます

 × python setup.py egg_info did not run successfully.
  │ exit code: 1
  ╰─> [6 lines of output]
      Traceback (most recent call last):
        File "<string>", line 2, in <module>
        File "<pip-setuptools-caller>", line 34, in <module>
        File "/tmp/pip-install-56l9o8h3/flash-attn_943c3669191d4d3e8636e8f9e51fd176/setup.py", line 9, in <module>
          from packaging.version import parse, Version
      ModuleNotFoundError: No module named 'packaging'
      [end of output]
  
  note: This error originates from a subprocess, and is likely not a problem with pip.
error: metadata-generation-failed

× Encountered error while generating package metadata.
╰─> See above for output.

note: This is an issue with the package mentioned above, not pip.
hint: See above for details.

必要なライブラリを入れて、再度実行します

pip3 install packaging
MAX_JOBS=4 pip3 install flash-attn --no-build-isolation

以下もないと言われたので、インストールしておきます

pip install loguru

モデルのダウンロード

Hugging Faceからモデルをダウンロードします

まずはtokenをセットします

export HUGGING_FACE_HUB_TOKEN=YOUR_TOKEN

ライブラリを入れます

pip install huggingface-hub

モデルをダウンロードします

huggingface-cli download fishaudio/speech-lm-v1 vqgan-v1.pth --local-dir checkpoints
huggingface-cli download fishaudio/speech-lm-v1 text2semantic-400m-v0.2-4k.pth --local-dir checkpoints

サンプル音声の作成

TTSをする際にサンプルの音声を wav形式で作る必要があります.
wav以外の場合は(今回はmp3)、ffmpegで以下のように wavに変換します。

ffmpeg -i sample.mp3 sample.wav

サンプル音声からプロンプトを作成する

python tools/vqgan/inference.py \
    -i "sample.wav" \
    --checkpoint-path "checkpoints/vqgan-v1.pth"

テキストからトークンを作成する

python tools/llama/generate.py \
    --text "変換するテキスト" \
    --prompt-text "あなたの参考テキスト(サンプル音声のテキスト)" \
    --prompt-tokens "fake.npy" \
    --checkpoint-path "checkpoints/text2semantic-400m-v0.2-4k.pth" \
    --num-samples 2 \
    --compile

音声を作成する

python tools/vqgan/inference.py \
    -i "codes_0.npy" \
    --checkpoint-path "checkpoints/vqgan-v1.pth"

使用リソース

GPUは最大で3GBほどでした

所感

こちらの環境で作成した音声を確認したところ、DALL-E Xより日本語の精度が高くないみたいでした。
指定したテキスト以外にも生成した音声が入っていた + 日本語の発音に違和感がありました