Feat: add kotoba-whisper, etc
This commit is contained in:
@@ -47,6 +47,7 @@ def do_transcribe(
|
||||
use_hf_whisper,
|
||||
batch_size,
|
||||
num_beams,
|
||||
hf_repo_id,
|
||||
):
|
||||
if model_name == "":
|
||||
return "Error: モデル名を入力してください。"
|
||||
@@ -71,9 +72,12 @@ def do_transcribe(
|
||||
if use_hf_whisper:
|
||||
cmd.append("--use_hf_whisper")
|
||||
cmd.extend(["--batch_size", str(batch_size)])
|
||||
success, message = run_script_with_log(cmd)
|
||||
if hf_repo_id != "openai/whisper":
|
||||
cmd.extend(["--hf_repo_id", hf_repo_id])
|
||||
success, message = run_script_with_log(cmd, ignore_warning=True)
|
||||
if not success:
|
||||
return f"Error: {message}. エラーメッセージが空の場合、何も問題がない可能性があるので、書き起こしファイルをチェックして問題なければ無視してください。"
|
||||
return "音声の文字起こしが完了しました。"
|
||||
|
||||
|
||||
how_to_md = """
|
||||
@@ -170,6 +174,12 @@ def create_dataset_app() -> gr.Blocks:
|
||||
use_hf_whisper = gr.Checkbox(
|
||||
label="HuggingFaceのWhisperを使う(速度が速いがVRAMを多く使う)",
|
||||
)
|
||||
hf_repo_id = gr.Dropdown(
|
||||
["openai/whisper", "kotoba-tech/kotoba-whisper-v1.1"],
|
||||
label="HuggingFaceのWhisperモデル",
|
||||
value="openai/whisper",
|
||||
visible=False,
|
||||
)
|
||||
compute_type = gr.Dropdown(
|
||||
[
|
||||
"int8",
|
||||
@@ -234,17 +244,19 @@ def create_dataset_app() -> gr.Blocks:
|
||||
use_hf_whisper,
|
||||
batch_size,
|
||||
num_beams,
|
||||
hf_repo_id,
|
||||
],
|
||||
outputs=[result2],
|
||||
)
|
||||
use_hf_whisper.change(
|
||||
lambda x: (
|
||||
gr.update(visible=x),
|
||||
gr.update(visible=x),
|
||||
gr.update(visible=not x),
|
||||
gr.update(visible=not x),
|
||||
),
|
||||
inputs=[use_hf_whisper],
|
||||
outputs=[batch_size, compute_type, device],
|
||||
outputs=[hf_repo_id, batch_size, compute_type, device],
|
||||
)
|
||||
|
||||
return app
|
||||
|
||||
@@ -278,7 +278,11 @@ def save_style_vectors_from_files(
|
||||
|
||||
|
||||
def save_style_vectors_by_dirs(model_name: str, audio_dir_str: str):
|
||||
import sys
|
||||
if model_name == "":
|
||||
return "モデル名を入力してください。"
|
||||
if audio_dir_str == "":
|
||||
return "音声ファイルが入っているディレクトリを入力してください。"
|
||||
|
||||
from concurrent.futures import ThreadPoolExecutor
|
||||
from multiprocessing import cpu_count
|
||||
|
||||
@@ -349,7 +353,7 @@ method0 = """
|
||||
|
||||
**注意**
|
||||
|
||||
- Ver 2.5.0以降では、raw/フォルダにサブディレクトリに分けて音声ファイルを入れるだけで、スタイルベクトルが自動で作成されるので、この手順は不要です。
|
||||
- Ver 2.5.0以降では、`inputs/`フォルダや`raw/`フォルダにサブディレクトリに分けて音声ファイルを入れるだけで、スタイルベクトルが自動で作成されるので、この手順は不要です。
|
||||
- それ未満のバージョンで学習したモデルに新しくスタイルベクトルをつけたい場合や、学習に使ったのとは別の音声でスタイルベクトルを作成したい場合に使います。
|
||||
- 学習との整合性のため、もし**現在学習中や、今後学習する予定がある場合は**、音声ファイルは、`Data/{モデル名}/wavs`フォルダではなく**新しい別のディレクトリに保存してください**。
|
||||
|
||||
|
||||
@@ -405,6 +405,15 @@ def run_tensorboard(model_name: str):
|
||||
yield gr.Button("Tensorboardを開く")
|
||||
|
||||
|
||||
change_log_md = """
|
||||
**Ver 2.5以降の変更点**
|
||||
|
||||
- `raw/`フォルダの中で音声をサブディレクトリに分けて配置することで、自動的にスタイルが作成されるようになりました。詳細は下の「使い方/データの前準備」を参照してください。
|
||||
- これまでは1ファイルあたり14秒程度を超えた音声ファイルは学習には用いられていませんでしたが、Ver 2.5以降ではその制限がなくなりました。ただし:
|
||||
- 音声ファイルが長い場合の学習効率は悪いかもしれず、挙動も確認していません
|
||||
- この変更で要求VRAMが増えるので、学習に失敗したりVRAM不足になる場合は、バッチサイズを小さくするか、学習ボタンの横の「カスタムバッチサンプラーを使う」を試してみてください(この場合は以前と同じ挙動となります)。
|
||||
"""
|
||||
|
||||
how_to_md = """
|
||||
## 使い方
|
||||
|
||||
@@ -416,9 +425,6 @@ how_to_md = """
|
||||
|
||||
- 途中から学習を再開する場合は、モデル名を入力してから「学習を開始する」を押せばよいです。
|
||||
|
||||
注意: 標準スタイル以外のスタイルを音声合成で使うには、スタイルベクトルファイル`style_vectors.npy`を作る必要があります。これは、`Style.bat`を実行してそこで作成してください。
|
||||
動作は軽いはずなので、学習中でも実行でき、何度でも繰り返して試せます。
|
||||
|
||||
## JP-Extra版について
|
||||
|
||||
元とするモデル構造として [Bert-VITS2 Japanese-Extra](https://github.com/fishaudio/Bert-VITS2/releases/tag/JP-Exta) を使うことができます。
|
||||
@@ -426,40 +432,60 @@ how_to_md = """
|
||||
"""
|
||||
|
||||
prepare_md = """
|
||||
まず音声データ(wavファイルで1ファイルが2-12秒程度の、長すぎず短すぎない発話のものをいくつか)と、書き起こしテキストを用意してください。
|
||||
まず音声データと、書き起こしテキストを用意してください。
|
||||
|
||||
それを次のように配置します。
|
||||
```
|
||||
├── Data
|
||||
├── Data/
|
||||
│ ├── {モデルの名前}
|
||||
│ │ ├── esd.list
|
||||
│ │ ├── raw
|
||||
│ │ │ ├── ****.wav
|
||||
│ │ │ ├── ****.wav
|
||||
│ │ │ ├── ...
|
||||
│ │ ├── raw/
|
||||
│ │ │ ├── foo.wav
|
||||
│ │ │ ├── bar.mp3
|
||||
│ │ │ ├── style1/
|
||||
│ │ │ │ ├── baz.wav
|
||||
│ │ │ │ ├── qux.wav
|
||||
│ │ │ ├── style2/
|
||||
│ │ │ │ ├── corge.wav
|
||||
│ │ │ │ ├── grault.wav
|
||||
...
|
||||
```
|
||||
|
||||
wavファイル名やモデルの名前は空白を含まない半角で、wavファイルの拡張子は小文字`.wav`である必要があります。
|
||||
`raw` フォルダにはすべてのwavファイルを入れ、`esd.list` ファイルには、以下のフォーマットで各wavファイルの情報を記述してください。
|
||||
### 配置の仕方
|
||||
- 上のように配置すると、`style1/`と`style2/`フォルダの内部(直下以外も含む)に入っている音声ファイルたちから、自動的にデフォルトスタイルに加えて`style1`と`style2`というスタイルが作成されます
|
||||
- 特にスタイルを作る必要がない場合や、スタイル分類機能等でスタイルを作る場合は、`raw/`フォルダ直下に全てを配置してください。このように`raw/`のサブディレクトリの個数が0または1の場合は、スタイルはデフォルトスタイルのみが作成されます。
|
||||
- 音声ファイルのフォーマットはwav形式以外にもmp3等の多くの音声ファイルに対応しています
|
||||
|
||||
### 書き起こしファイル`esd.list`
|
||||
|
||||
`Data/{モデルの名前}/esd.list` ファイルには、以下のフォーマットで各音声ファイルの情報を記述してください。
|
||||
|
||||
|
||||
```
|
||||
****.wav|{話者名}|{言語ID、ZHかJPかEN}|{書き起こしテキスト}
|
||||
path/to/audio.wav(wavファイル以外でもこう書く)|{話者名}|{言語ID、ZHかJPかEN}|{書き起こしテキスト}
|
||||
```
|
||||
|
||||
- ここで、最初の`path/to/audio.wav`は、`raw/`からの相対パスです。つまり、`raw/foo.wav`の場合は`foo.wav`、`raw/style1/bar.wav`の場合は`style1/bar.wav`となります。
|
||||
- 拡張子がwavでない場合でも、`esd.list`には`wav`と書いてください、つまり、`raw/bar.mp3`の場合でも`bar.wav`と書いてください。
|
||||
|
||||
|
||||
例:
|
||||
```
|
||||
wav_number1.wav|hanako|JP|こんにちは、聞こえて、いますか?
|
||||
wav_next.wav|taro|JP|はい、聞こえています……。
|
||||
foo.wav|hanako|JP|こんにちは、元気ですか?
|
||||
bar.wav|taro|JP|はい、聞こえています……。何か用ですか?
|
||||
style1/baz.wav|hanako|JP|今日はいい天気ですね。
|
||||
style1/qux.wav|taro|JP|はい、そうですね。
|
||||
...
|
||||
english_teacher.wav|Mary|EN|How are you? I'm fine, thank you, and you?
|
||||
...
|
||||
```
|
||||
日本語話者の単一話者データセットでも構いません。
|
||||
|
||||
- 音声ファイルはrawフォルダの直下でなくてもサブフォルダに入れても構いません。その場合は、`esd.list`の最初には`raw`からの相対パスを記述してください。
|
||||
もちろん日本語話者の単一話者データセットでも構いません。
|
||||
"""
|
||||
|
||||
|
||||
def create_train_app():
|
||||
with gr.Blocks().queue() as app:
|
||||
gr.Markdown(change_log_md)
|
||||
with gr.Accordion("使い方", open=False):
|
||||
gr.Markdown(how_to_md)
|
||||
with gr.Accordion(label="データの前準備", open=False):
|
||||
|
||||
Reference in New Issue
Block a user