Skip to content

Commit

Permalink
Merge branch 'dev'
Browse files Browse the repository at this point in the history
  • Loading branch information
litagin02 committed Feb 7, 2024
2 parents 023592e + c33baf0 commit 071eab3
Show file tree
Hide file tree
Showing 3 changed files with 75 additions and 4 deletions.
2 changes: 2 additions & 0 deletions docs/CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -7,9 +7,11 @@
- 学習の際のメモリ使用量を削減しようと頑張った

### バグ修正や改善
- 学習WebUIからTensorboardのログを見れるように
- 音声合成(やそのAPI)において、同時に別の話者が選択され音声合成がリクエストされた場合に発生するエラーを修正
- モデルマージ時に、そのレシピを`recipe.json`ファイルへ保存するように変更
- 「改行で分けて生成」がより感情が乗る旨の明記等、軽微な説明文の改善
-`ーーそれは面白い`」や「`なるほど。ーーーそういうことか。`」等、長音記号の前が母音でない場合、長音記号``でなくダッシュ``の勘違いだと思われるので、ダッシュ記号として処理するように変更

## v2.0.1 (2024-02-05)

Expand Down
19 changes: 18 additions & 1 deletion text/japanese.py
Original file line number Diff line number Diff line change
Expand Up @@ -485,9 +485,26 @@ def distribute_phone(n_phone: int, n_word: int) -> list[int]:


def handle_long(sep_phonemes: list[list[str]]) -> list[list[str]]:
"""
フレーズごとに分かれた音素(長音記号がそのまま)のリストのリスト`sep_phonemes`を受け取り、
その長音記号を処理して、音素のリストのリストを返す。
基本的には直前の音素を伸ばすが、直前の音素が母音でない場合もしくは冒頭の場合は、
おそらく長音記号とダッシュを勘違いしていると思われるので、ダッシュに対応する音素`-`に変換する。
"""
for i in range(len(sep_phonemes)):
if sep_phonemes[i][0] == "ー":
sep_phonemes[i][0] = sep_phonemes[i - 1][-1]
if i != 0:
prev_phoneme = sep_phonemes[i - 1][-1]
if prev_phoneme in VOWELS:
# 母音と「ん」のあとの伸ばし棒なので、その母音に変換
sep_phonemes[i][0] = sep_phonemes[i - 1][-1]
else:
# 「。ーー」等おそらく予期しない長音記号
# ダッシュの勘違いだと思われる
sep_phonemes[i][0] = "-"
else:
# 冒頭に長音記号が来ていおり、これはダッシュの勘違いと思われる
sep_phonemes[i][0] = "-"
if "ー" in sep_phonemes[i]:
for j in range(len(sep_phonemes[i])):
if sep_phonemes[i][j] == "ー":
Expand Down
58 changes: 55 additions & 3 deletions webui_train.py
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,11 @@
import json
import os
import shutil
import subprocess
import socket
import sys
import time
import webbrowser
from datetime import datetime
from multiprocessing import cpu_count

Expand All @@ -10,9 +15,11 @@

from common.constants import LATEST_VERSION
from common.log import logger
from common.stdout_wrapper import SAFE_STDOUT
from common.subprocess_utils import run_script_with_log, second_elem_of

logger_handler = None
tensorboard_executed = False

# Get path settings
with open(os.path.join("configs", "paths.yml"), "r", encoding="utf-8") as f:
Expand Down Expand Up @@ -316,6 +323,46 @@ def train(model_name, skip_style=False, use_jp_extra=True, speedup=False):
return True, "Success: 学習が完了しました"


def wait_for_tensorboard(port=6006, timeout=10):
start_time = time.time()
while True:
try:
with socket.create_connection(("localhost", port), timeout=1):
return True # ポートが開いている場合
except OSError:
pass # ポートがまだ開いていない場合

if time.time() - start_time > timeout:
return False # タイムアウト

time.sleep(0.1)


def run_tensorboard(model_name):
global tensorboard_executed
if not tensorboard_executed:
python = sys.executable
tensorboard_cmd = [
python,
"-m",
"tensorboard.main",
"--logdir",
f"Data/{model_name}/models",
]
subprocess.Popen(
tensorboard_cmd,
stdout=SAFE_STDOUT, # type: ignore
stderr=SAFE_STDOUT, # type: ignore
)
yield gr.Button("起動中…")
if wait_for_tensorboard():
tensorboard_executed = True
else:
logger.error("Tensorboard did not start in the expected time.")
webbrowser.open("http://localhost:6006")
yield gr.Button("Tensorboardを開く")


initial_md = f"""
# Style-Bert-VITS2 ver {LATEST_VERSION} 学習用WebUI
Expand Down Expand Up @@ -369,7 +416,7 @@ def train(model_name, skip_style=False, use_jp_extra=True, speedup=False):
"""

if __name__ == "__main__":
with gr.Blocks(theme="NoCrypt/miku") as app:
with gr.Blocks(theme="NoCrypt/miku").queue() as app:
gr.Markdown(initial_md)
with gr.Accordion(label="データの前準備", open=False):
gr.Markdown(prepare_md)
Expand Down Expand Up @@ -548,7 +595,7 @@ def train(model_name, skip_style=False, use_jp_extra=True, speedup=False):
style_gen_btn = gr.Button(value="実行", variant="primary")
info_style = gr.Textbox(label="状況")
gr.Markdown("## 学習")
with gr.Row(variant="panel"):
with gr.Row():
skip_style = gr.Checkbox(
label="スタイルファイルの生成をスキップする",
info="学習再開の場合の場合はチェックしてください",
Expand All @@ -564,7 +611,8 @@ def train(model_name, skip_style=False, use_jp_extra=True, speedup=False):
visible=False, # Experimental
)
train_btn = gr.Button(value="学習を開始する", variant="primary")
info_train = gr.Textbox(label="状況")
tensorboard_btn = gr.Button(value="Tensorboardを開く")
info_train = gr.Textbox(label="状況")

preprocess_button.click(
second_elem_of(preprocess_all),
Expand Down Expand Up @@ -635,6 +683,10 @@ def train(model_name, skip_style=False, use_jp_extra=True, speedup=False):
inputs=[model_name, skip_style, use_jp_extra_train, speedup],
outputs=[info_train],
)
tensorboard_btn.click(
run_tensorboard, inputs=[model_name], outputs=[tensorboard_btn]
)

use_jp_extra.change(
lambda x: gr.Checkbox(value=x),
inputs=[use_jp_extra],
Expand Down

0 comments on commit 071eab3

Please sign in to comment.