This commit is contained in:
litagin02
2024-01-08 18:23:27 +09:00
parent 2112110fcf
commit 7358f5e426
4 changed files with 20 additions and 7 deletions

2
.gitignore vendored
View File

@@ -19,4 +19,4 @@ venv/
*.zip *.zip
*.csv *.csv
*.bak *.bak
mos_*.png /mos_results/

4
app.py
View File

@@ -69,7 +69,7 @@ def tts_fn(
json_data = json.loads(kata_tone_json_str) json_data = json.loads(kata_tone_json_str)
# tupleを使うように変換 # tupleを使うように変換
for kana, tone in json_data: for kana, tone in json_data:
assert isinstance(kana, str) and isinstance(tone, int) assert isinstance(kana, str) and tone in (0, 1), f"{kana}, {tone}"
kata_tone.append((kana, tone)) kata_tone.append((kana, tone))
except Exception as e: except Exception as e:
logger.warning(f"Error occurred when parsing kana_tone_json: {e}") logger.warning(f"Error occurred when parsing kana_tone_json: {e}")
@@ -113,7 +113,7 @@ def tts_fn(
# アクセント指定に使えるようにアクセント情報を返す # アクセント指定に使えるようにアクセント情報を返す
norm_text = text_normalize(text) norm_text = text_normalize(text)
kata_tone = g2kata_tone(norm_text) kata_tone = g2kata_tone(norm_text)
kata_tone_json_str = json.dumps(kata_tone, ensure_ascii=False, indent=2) kata_tone_json_str = json.dumps(kata_tone, ensure_ascii=False)
elif tone is None: elif tone is None:
kata_tone_json_str = "" kata_tone_json_str = ""
message = f"Success, time: {duration} seconds." message = f"Success, time: {duration} seconds."

View File

@@ -2,9 +2,17 @@
## v1.3 ## v1.3
### 大きい変更
- 日本語の発音・アクセント処理部分のバグを大幅に改良
- `車両``シャリヨオ``見つける``ミッケル`と発音・学習されており、その単語のアクセント情報が全て死んでいた
- `私はそれを見る`のアクセントが`ワ➚タシ➘ワ ソ➚レ➘オ ミ➘ル`だったのを`ワ➚タシワ ソ➚レ オ ミ➘ル`に修正
- アクセントの誤りを修正して音声合成できるように(万能制御ではない)。
- これまでのモデルにも使える。アクセントや発音等が改善される可能性あり。学習し直すとよりよくなる可能性もある。
### 改善
- `Dataset.bat`の音声スライスと書き起こしをよりカスタマイズできるように秒数指定や書き起こしのWhisperモデル指定や言語指定等 - `Dataset.bat`の音声スライスと書き起こしをよりカスタマイズできるように秒数指定や書き起こしのWhisperモデル指定や言語指定等
- `Style.bat`のスタイル作成で、新しい方法DBSCANを追加(こちらのほうがスタイル数を指定できない代わりに特徴がよく出るかもしれません)。 - `Style.bat`のスタイル作成で、新しい可視化方法UMAPと新しいスタイル分けの方法DBSCANを追加
- クラウド実行等の際にパスの指定をこちらでできるように、パスの設定を`configs/paths.yml`にまとめましcolabの[ノートブック](http://colab.research.google.com/github/litagin02/Style-Bert-VITS2/blob/master/colab.ipynb)もそれに伴って変えたので新しいものを使ってください)。デフォルトは`dataset_root: Data``assets_root: model_assets`です。クラウド等でやる方はここを変更してください。 - クラウド実行等の際にパスの指定をこちらでできるように、パスの設定を`configs/paths.yml`にまとめたcolabの[ノートブック](http://colab.research.google.com/github/litagin02/Style-Bert-VITS2/blob/master/colab.ipynb)もそれに伴って更新)。デフォルトは`dataset_root: Data``assets_root: model_assets`なので、クラウド等でやる方はここを変更してください。
- どのステップ数の出力がよいかの「一つの」指標として [SpeechMOS](https://github.com/tarepan/SpeechMOS) を使うスクリプトを追加: - どのステップ数の出力がよいかの「一つの」指標として [SpeechMOS](https://github.com/tarepan/SpeechMOS) を使うスクリプトを追加:
```bash ```bash
python speech_mos.py -m <model_name> python speech_mos.py -m <model_name>

View File

@@ -16,6 +16,9 @@ from config import config
warnings.filterwarnings("ignore") warnings.filterwarnings("ignore")
mos_result_dir = Path("mos_results")
mos_result_dir.mkdir(exist_ok=True)
test_texts = [ test_texts = [
# JVNVコーパスのテキスト # JVNVコーパスのテキスト
# https://sites.google.com/site/shinnosuketakamichi/research-topics/jvnv_corpus # https://sites.google.com/site/shinnosuketakamichi/research-topics/jvnv_corpus
@@ -95,7 +98,9 @@ results = sorted(results, key=lambda x: x[2][-1], reverse=True)
for model_file, step, scores in results: for model_file, step, scores in results:
logger.info(f"{model_file}: {scores[-1]}") logger.info(f"{model_file}: {scores[-1]}")
with open(f"mos_{model_name}.csv", "w", encoding="utf-8", newline="") as f: with open(
mos_result_dir / f"mos_{model_name}.csv", "w", encoding="utf-8", newline=""
) as f:
writer = csv.writer(f) writer = csv.writer(f)
writer.writerow(["model_path"] + ["step"] + test_texts + ["mean"]) writer.writerow(["model_path"] + ["step"] + test_texts + ["mean"])
for model_file, step, scores in results: for model_file, step, scores in results:
@@ -147,7 +152,7 @@ plt.legend(loc="upper left", bbox_to_anchor=(1, 1))
plt.tight_layout() plt.tight_layout()
# グラフを画像として保存plt.show() の前に実行する) # グラフを画像として保存plt.show() の前に実行する)
plt.savefig(f"mos_{model_name}.png") plt.savefig(mos_result_dir / f"mos_{model_name}.png")
# グラフを表示 # グラフを表示
plt.show() plt.show()