-
Notifications
You must be signed in to change notification settings - Fork 137
コードベースを大規模にリファクタリングし、ライブラリ (Python パッケージ) としてほかの Python コードから利用できるように改善 #92
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Conversation
…from server_editor.py The logic has not been changed, only renaming, splitting and moving modules on a per-function basis. Existing code will be left in place for the time being to avoid breaking the training code, which is not subject to refactoring this time.
…OX to style_bert_vits2/text_processing/japanese/user_dict/
… definitions and comments
…tyle_bert_vits2/models/ The code has not yet been cleaned up, just moved.
… loaded BERT models/tokenizer and replace all from_pretrained() to load_model/load_tokenizer
…each language to style_bert_vits2/text_processing/(language)/bert_feature.py
… style_bert_vits2/text_processing/__init__.py This was often used in 3 function sets and felt like a wasteful division with few lines.
…VITS2 Since app.py and server_editor.py already exist as alternative Web UI, there is no need to revive webui.py in the future.
I have determined that this is excessive for this project at this time.
"text_processing" is clearer, but the import statement is longer. "nlp" is shorter and makes it clear that it is natural language processing.
pyopenjtalk_worker.initialize() has the side effect of starting another process and should not be executed automatically on import.
By executing "hatch run test:test", you can check whether the test passes in all Python 3.9 to 3.12 environments.
Style-Bert-VITS2 has been reported to not work with some PyTorch 2.2 series, but Python 3.12 is only supported in Torch >= 2.2, so Python 3.12 support is not provided for the time being
Enabling type checking with Pylance.
BERT models and tokenizers are already stored and managed in the bert_models module and should not be stored here. In addition, since there may be situations where the user would like to use cpu instead of mps for inference when using it as a library, the automatic switching process to mps was removed.
The Pydantic models in the library are written for Pydantic v2 and will not work with Pydantic v1.
Prebuilt wheels for almost every OS/architecture (except musl) are now available on PyPI, eliminating the need for a build environment. ref: https://pypi.org/project/pyworld-prebuilt/
Pydantic models are more robust and properties can be accessed by dots.
大規模なリファクタリングありがとうございます。 |
#93 にて修正等をしていきますが、とりあえずこのリファクタリングに直結する修正等はこちらで逐次報告していくことにします(認識の違いがあると後々また面倒になりそうなので)(その他の不具合修正等はこちらで行います)。 フォーマットやスタイルについて。いろいろ考えるのが面倒なので、black formatterのデフォルト設定にすべて合わせることにします(特に文字列のクォーテーションがダブルなことやデフォルト引数時の空白無しや最大文字数や空行等) importスタイルを |
@tsukumijima 僭越ながら、私が携わったopenjtalkの別プロセス化について
おっしゃっている通り、pyopenjtalk_worker はあくまで このあたり、うまく分離できると良さそうという直観だけあります。 いずれにしても、とりしまさんが期待するライブラリとして 補足
旧 user_dictの__init__.pyやjapanese.pyでpyopenjtalk_workerのinitializeを呼んでいたこと、 私自身、こういったオープンソース開発はまだ不慣れなので せっかく大変なコード変更をしていただいても、 |
すみません、自分が初めてhatchを知って使い方が分かっていないのはあると思いますが、自分のWindowsのCUDA環境では、環境が作られる際にtorchがおそらくCPU版が入ってしまい、
となり、 |
#92 (comment) に関して続き ご判断されるのはlitaginさんであり、私は通りすがりではありますが
を同時に行うのは根本的に難しいというのを 例えば
またあるいは、
はブランチで区別というのもあるかと思います。 |
@tsukumijima |
デフォルトの |
私は Linux でしか試していないのですが盲点でした…。 hatch は仮想環境作成時、pyproject.toml に記載された依存関係を自動的にインストールします。
私も完全には理解していないのですが、https://pytorch.org/get-started/locally/ を見る限り上記のパターンとなっているようです。 …長くなりましたが、要は Linux ではデフォルトで CUDA 対応版 torch がインストールされるが、Windows ではデフォルトで CPU 対応版 torch がインストールされてしまうことが原因と思われます。 しかも、Poetry などと異なり、pyproject.toml には現状プラットフォームや環境ごとに個別に依存関係を細かく指定することができません (参考) 。 Windows 環境メインで開発されているとのことなので、支障するようであれば一旦コメントアウトしておくのが一番手っ取り早いかと思います。 |
一旦個人的な好みに合わせて書いてしまいましたが、フォーマットについて考えるのが面倒であればデファクトである black に任せてしまうのも十分アリだと思います。
この点私もどうするか悩みましたが、現状のコードでは 現時点で app.py や server_editor.py などの Style-Bert-VITS2 内部のサーバーでは起動前に
私も大規模な変更を避けるためにあえてこの実装にしたのだろうという理解でした。納得です。
実際私もライブラリ用のコードを切り出して別リポジトリで公開しようかとも考えました。ただやはり二重管理になりますし、変更への追従に多大な手間がかかる課題があります(そして面倒になって放棄されうる)。 今回の pyopenjtalk_worker の件に関して言えば、上記方法でライブラリとしての |
あーそこも盲点でした…。 ただ、g2p.py への すべてのエントリーポイントとなるスクリプトに from style_bert_vits2.nlp.japanese import pyopenjtalk_worker
from style_bert_vits2.nlp.japanese.user_dict import update_dict
# ライブラリとしての style-bert-vits2 のうち、自然言語処理関連のモジュールをすべてインポート
from style_bert_vits2.nlp import * # type: ignore
# pyopenjtalk_worker を起動
pyopenjtalk_worker.initialize_worker()
# dict_data/ 以下の辞書データを pyopenjtalk に適用
update_dict() … server_editor.py などで このようにすれば、Style-Bert-VITS2 内部から自然言語処理関連モジュールを import すると自動的に pyopenjtalk_worker が起動され、デフォルト辞書データパスから辞書データが適用されます。 |
大変、ご丁寧なご回答、ありがとうございます。
大変なリファクタリングをしてまでライブラリ化するにあたっては、 initialize_workerの呼び出しによるスイッチの許容や 現状のコードからも明らかなように
と言及しましたように、似たようなことが起こらないかだけ不安ですが、
こちらは、言い訳がましくてすみませんでした。 おそらくオープンソース開発はケースバイケースな |
@tsukumijima
ここの箇所で、ライブラリという概念や通常の使用方法について曖昧にしか知らないのでお聞きしたいのですが、今の状態で また具体的にライブラリとして公開した場合は、どのような使われ方・インストール方法・ユースケースを想定しているのでしょうか? |
すみません、ここも盲点でした… (確かに手元でビルドした sdist は 3.1GB くらいになっちゃってました) 。
ライブラリとしての SBV2 は
以前のコメントで書いた通りですが、使われ方/ユースケースは LLM と組み合わせりした GUI アプリや、独自に実装した音声合成 API サーバーなどが考えられます。 インストール方法は pip や Poetry になります。
bert_models.py の load_model/load_tokenizer() をライブラリユーザーが事前に呼び出す形を想定しています。 このため、ライブラリとしての SBV2 側で新たに配慮いただく必要はありません。 Note bert_models.py の内部で使われている transformers ライブラリの from_pretrained() は、むしろ Hugging Face のリポジトリ名を指定する使い方のほうが一般的で、(Style-)Bert-VITS2 の実装手法はむしろかなりイレギュラーだと思います。 Note Bert-VITS2 でモデルをわざわざローカルに保存している (ついでにハイパーパラメータなどをリポジトリ内に含めている) のも、中国国内からだと Hugging Face へのアクセスが非常に遅い or 金盾で規制されている事が理由だったはずです。 なので日本国内で使う分には、bert/ フォルダや slm/ フォルダを削除して from_pretrained() にローカルのパスではなく Hugging Face のリポジトリ名を渡す形にしてしまっても全く問題ないと思います。(キャッシュディレクトリを統一したければ from_pretrained() に cache_dir を指定すれば良い) ![]() Important ここまで書いて、bert_models.load_model/load_tokenizer() に、内部で呼び出す from_pretrained() に渡す用の PS: 上記問題を修正したプルリクエストを出させていただきました。マージしていただければ幸いです。 |
* Create emo_gen.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * update server.py, fix bugs in func get_text() and infer(). (litagin02#52) * Extract get_text() and infer() from webui.py. (litagin02#53) * Extract get_text() and infer() from webui.py. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * add emo emb * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * init emo gen * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * init emo * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * init emo * Delete bert/bert-base-japanese-v3 directory * Create .gitkeep * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Create add_punc.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix bug in bert_gen.py (litagin02#54) * Update README.md * fix bug in models.py (litagin02#56) * 更新 models.py * Fix japanese cleaner (litagin02#61) * 初步,睡觉明天继续写( * 好好好放错分支了,熬夜是大忌 * [pre-commit.ci] pre-commit autoupdate (litagin02#55) * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/pre-commit/pre-commit-hooks: v4.4.0 → v4.5.0](pre-commit/pre-commit-hooks@v4.4.0...v4.5.0) * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Create tokenizer_config.json * update preprocess_text.py:过滤一个音频匹配多个文本的情况 (litagin02#57) * update preprocess_text.py:过滤音频不存在的情况 (litagin02#58) * 修复日语cleaner和bert * better * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: Stardust·减 <[email protected]> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Sora <[email protected]> * Apply Code Formatter Change * Add config.yml for global configuration. (litagin02#62) * Add config.yml for global configuration. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix bug in webui.py. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Rename config.yml to default_config.yml. Add ./config.yml to gitignore. * Add config.py to parse config.yml * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Update webui.py (litagin02#65) * Update webui.py: 1. Add auto translation from Chinese to Japanese. 2. Start to use config.py in webui.py to set config instead of using the command line. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Fix (litagin02#68) * 加上ー * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Update infer.py and webui.py. Supports loading and inference models of 1.1.1 version. (litagin02#66) * Update infer.py and webui.py. Supports loading and inference models of 1.1.1 version. * Update config.json * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Fix bug in translate.py (litagin02#69) * Supports loading and inference models of 1.1、1.0.1、1.0 version. (litagin02#70) * Supports loading and inference models of 1.1、1.0.1、1.0 version. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Delete useless file in OldVersion --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Update japanese.py (litagin02#71) Handling JA long pronunciations * 使用配置文件配置bert_gen.py, preprocess_text.py, resample.py (litagin02#72) * Update bert_gen.py, preprocess_text.py, resample.py. Support using config.yml in these files. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update bert_gen.py * Update bert_gen.py, fix bug. --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Delete bert/bert-base-japanese-v3 directory * Create config.json * Create tokenizer_config.json * Create vocab.txt * Update server.py. 支持多版本多模型 (litagin02#76) * Update server.py. 支持多版本多模型 * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Dev webui (litagin02#77) * 申请pr (litagin02#75) * 2023/10/11 update 界面优化 * Update webui.py 翻译英文页面为中文 * Update train_ms.py 单卡训练 * 加入图片 * Update extern_subprocess.py * Update asr_transcript.py * Update asr_transcript.py * Update asr_transcript.py * Update extern_subprocess.py * Update asr_transcript.py * Update asr_transcript.py * Update asr_transcript.py * Update all_process.py * Update extern_subprocess.py * Update all_process.py * Update all_process.py * Update asr_transcript.py * Update extern_subprocess.py * Update webui.py * Create re_matching.py * Update webui.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update all_process.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update all_process.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update all_process.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update asr_transcript.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Pack 'update' functions into a module * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update all_process.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update asr_transcript.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update extern_subprocess.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update README.md * Update README.md * Update README.md * Update README.md * Update README.md * Update all_process.py * Update asr_transcript.py * Update webui.py * Add files via upload * Update extern_subprocess.py * Update all_process.py * Update asr_transcript.py * Update bert_gen.py * Update extern_subprocess.py * Update preprocess_text.py * Update re_matching.py * Update resample.py * Update update_status.py * Update update_status.py * Update webui.py * Update all_process.py * Update preprocess_text.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update train_ms.py --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Stardust·减 <[email protected]> Co-authored-by: innnky <[email protected]> * Delete all_process.py * Delete asr_transcript.py * Delete extern_subprocess.py --------- Co-authored-by: spicysama <[email protected]> Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: innnky <[email protected]> * Create config.json * Create preprocessor_config.json * Create vocab.json * Delete emotional/wav2vec2-large-robust-12-ft-emotion-msp-dim/.gitkeep * Update emo_gen.py * Delete add_punc.py * add emotion_clustering.i * Apply Code Formatter Change * Update models.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update preprocess_text.py (litagin02#78) * Update preprocess_text.py. 检测重复以及不存在的音频 (litagin02#79) * Handle Janpanese long pronunciations (litagin02#80) * Handle Janpanese long pronunciations * Update japanese.py * Update japanese.py * Use unified phonemes for Japanese long vowel (litagin02#82) * Use an unified phoneme for Japanese long vowel `symbol.py` has not been updated to ensure compatibility with older version models. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * 增加一个按钮,点击后可以按句子切分,添加“|” (litagin02#81) * Update re_matching.py * Update webui.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Fix phonemer bug (litagin02#83) * Fix phonemer bug * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Fix long vowel handler bug (litagin02#84) * Fix long vowel handler bug * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * 加入整合包管理器的特性:长文本合成可以自定义句间段间停顿 (litagin02#85) * Update webui.py * Update re_matching.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Update train_ms.py * fix' * Update cleaner.py * add en * add en * Update english.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add en * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add en * add en * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * add en * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * 更新 README.md * 更新 README.md * 更新 README.md * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Change phonemer to pyopenjtalk (litagin02#86) * Change phonemer to pyopenjtalk * 修改为openjtalk便于安装 --------- Co-authored-by: Stardust·减 <[email protected]> * 更新 english.py * Fix english_bert_mock.py. (litagin02#87) * Add punctuation execptions (litagin02#88) * Add punctuation execptions * Ellipses exceptions * remove get bert * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix bug in oldVersion. (litagin02#89) * Update requirements.txt * change to large * rollback requirements.txt * Feat: Enable 1.1.1 models using fix-ver infer. (litagin02#91) * Feat: Enable 1.1.1 models using fix-ver infer. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Add Japanese accent (high-low) (litagin02#90) * Add punctuation execptions * Ellipses exceptions * Add Japanese accent * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Do not replace iteration mark (litagin02#92) * Add punctuation execptions * Ellipses exceptions * Add Japanese accent * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Do not replace iteration mark --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Fix: fix import error in oldVersion (litagin02#93) * Refactor: reusing model loading in webui.py and server.py. (litagin02#94) * Feat: Enable using config.yml in train_ms.py (litagin02#96) * 更新 emo_gen.py * Change emo_gen.py (litagin02#97) * Fix emo_gen bugs * Add multiprocess * Fix queue (litagin02#98) * Fix emo_gen bugs * Add multiprocess * Del var * Fix queue * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Fix training bugs (litagin02#99) * Updatge cluster notebook * Fix train * Fix filename * Update infer.py (litagin02#100) * Update infer.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Add reference audio (litagin02#101) * Add reference audio * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update * Update * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: Stardust·减 <[email protected]> * Fix: fix 1.1.1-fix (litagin02#102) * Fix infer bug (litagin02#103) * Feat: Add server_fastapi.py. (litagin02#104) * Feat: Add server_fastapi.py. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Fix: Update requirements.txt. --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Fix: requirements.txt. (litagin02#105) * Swith to deberta-v3-large (litagin02#106) * Swith to deberta-v3-large * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Feat: Update config.py. (litagin02#107) * Feat: Update config.py. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Dev fix (litagin02#108) * fix bugs when deploying * fix bugs when deploying * fix bugs when deploying * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Revert "Dev fix (litagin02#108)" (litagin02#109) This reverts commit 685e18a. * Dev fix (litagin02#110) * fix bugs when deploying * fix bugs when deploying * fix bugs when deploying * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * fix fixed bugs * fix fixed bugs * fix fixed bug 3 * fix fixed bug 4 * fix fixed bug 5 * fix * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Add emo vec quantizer (litagin02#111) Co-authored-by: Stardust·减 <[email protected]> * Clean req and gitignore (litagin02#112) * Clean req and gitignore * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Switch to deberta-v2-large-japanese (litagin02#113) * Switch to deberta-v2-large-japanese * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Fix emo bugs (litagin02#114) * Fix english (litagin02#115) * Remove emo (litagin02#117) * Don't train codebook * Remove emo * Update * Update * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Merge dev into no-emo (litagin02#122) * [pre-commit.ci] pre-commit autoupdate (litagin02#95) * [pre-commit.ci] pre-commit autoupdate updates: - [github.com/astral-sh/ruff-pre-commit: v0.0.292 → v0.1.1](astral-sh/ruff-pre-commit@v0.0.292...v0.1.1) - [github.com/psf/black: 23.9.1 → 23.10.0](psf/black@23.9.1...23.10.0) * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Don't train codebook (litagin02#116) * Update requirements.txt * Update english_bert_mock.py * Fix: server_fastapi.py (litagin02#118) * Fix: server_fastapi.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Fix: don't print debug logging. (litagin02#119) * Fix: don't print debug logging. * Feat: support emo_gen config * Fix config * Apply Code Formatter Change * 更新,修正bug (litagin02#121) * Feat: Update infer.py preprocess_text.py server_fastapi.py. * Fix resample.py. Maintain same directory structure in out_dir as in_dir. * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci * Update resample.py * [pre-commit.ci] auto fixes from pre-commit.com hooks for more information, see https://pre-commit.ci --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> * Update server_fastapi.py to no-emo ver * Update config.py, no emo config --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: OedoSoldier <[email protected]> Co-authored-by: Stardust·减 <[email protected]> Co-authored-by: Stardust-minus <[email protected]> * Update train_ms.py * Update latest version info (litagin02#124) --------- Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> Co-authored-by: jiangyuxiaoxiao <[email protected]> Co-authored-by: AkitoLiu <[email protected]> Co-authored-by: Stardust-minus <[email protected]> Co-authored-by: OedoSoldier <[email protected]> Co-authored-by: spicysama <[email protected]> Co-authored-by: innnky <[email protected]> Co-authored-by: YYuX-1145 <[email protected]>
コードベースを大規模にリファクタリングし、ライブラリ (Python パッケージ) としてほかの Python コードから利用できるように改善
以前から Discord にてお伝えしている通りですが、Style-Bert-VITS2 のコードベースを大規模にリファクタリングし、ライブラリとしてほかの Python コードから利用できるようにしました。
同時に Style-Bert-VITS2 固有のディレクトリ構造に依存しているコードを修正し、ユーザーが
style-bert-vits2
ライブラリの動作をコントローラブルに置けるように改良しました。Note
一例を挙げると、従来のコードでは、モジュールをインポートした瞬間に
AutoTokenizer.from_pretrained()
が実行されてしまっていました。従来のコードはただでさえハードコードされたパスに依存している上、インポートした瞬間に BERT モデル/トークナイザーがロードされてしまいます。この状況では、とても「コントローラブル」であるとは言えません。
特にモデルのロードは重たい処理ですから、ユーザーが明示的に、任意のタイミングでモデルをロードできる形が理想的です。
別途
pip install hatch
で Hatch をインストールした上でhatch build
を実行すると、dist/style_bert_vits2-(version)-py3-none-any.whl
に wheel パッケージ (.whl) が生成されます。この「ライブラリとしての」
style-bert-vits2
を PyPI に公開するかどうかはお任せします。Note
PyPI に公開せずとも、wheel がリリースに公開されていれば pip に wheel の URL を指定してライブラリをインストールできます。また GitHub の URL を
git+https://
のスキームで指定してインストールすることも可能なはずです。良くなること
server_editor.py
/server_fastapi.py
から (ライブラリとして切り出された) コア API を呼び出す形になるため、今までどこがどう引っ付いてるのか分からなかった依存関係が明確化されるstyle-bert-vits2
を組み込んだ CLI 音声合成ツールを作ったりも可能になる悪くなること
リファクタリング方針
以下の方針でリファクタリングを行いました。
(pyproject.toml が配置されているディレクトリ)/(パッケージ名)/
以下に当該パッケージのソースコードが配置されている必要があるstyle_bert_vits2/
以下に切り出したコードのみとし、それ以外のコードは import の変更など最低限の変更にとどめるserver_editor.py
/server_fastapi.py
などもリファクタリングの対象外train_ms.py
のようなクリティカルな影響を与える学習用コードはできるだけそのままにしておきたく…style_bert_vits2
パッケージをインポートしただけで意図せず BERT モデルがロードされてしまう、など変更点
変更点が非常に多いため、一部書き出せていないものがあるかもしれません。
style_bert_vits2/nlp/
以下にコードを集約し、さらに各言語固有の実装をstyle_bert_vits2/nlp/(chinese|english|japanese)
に移動したstyle_bert_vits2/models/
以下に集約したwebui.py
も含まれるstyle_bert_vits2/models/
以下にあるモデル構造が定義されているコードは、私が機械学習に全く精通しておらずコードの内容を全く理解できていないこと、非常に専門的な上に通常ライブラリユーザーは触らないことを鑑み、Docstring の付与を省略したstyle_bert_vits2/
以下のすべてのコードに型ヒントを追加し、型エラーを修正|
は使わず、敢えて Union, Optional を利用している)# type: ignore
を付与して型エラーを抑制した# type: ignore
が付与されている行のコードの型安全性は保証されない__
の prefix をつけるとプライベートになる (参考)get_bert()
をextract_bert_feature()
に変更したりなどstyle_bert_vits2/
以下に切り出した部分を Python パッケージ (wheel) にビルドできるようにしたhatch run test:test
を実行すると自動的に専用の仮想環境が構築され、Python 3.9 〜 3.11 すべてでライブラリが動作するかをテストできるtests/wavs/
に保存されるutils.HParams
を Pydantic モデル (HyperParameters) に移行したことで、特定の型のプロパティが存在することが保証されるようになったbert/
以下に保存されているモデルが利用されるbert/
フォルダに BERT のモデルを保存する構成なのも、中国だと Hugging Face へのアクセスが制限されており openi という中国国内のミラーからダウンロードする必要があったからのはずtransformers
ライブラリの既定のキャッシュディレクトリにキャッシュされる)style-bert-vits2
を含めて exe 化する場合、pyopenjtalk_worker は『Python インタプリタ上で実行されていることを前提に』subprocess.Popen() +python -m
で別プロセスで pyopenjtalk サーバーを起動する設計のため、正常動作しないことが容易に予想されるpyopenjtalk_worker.initialize()
をpyopenjtalk_worker.initialize_worker()
にリネームした上で、明示的にpyopenjtalk_worker.initialize()
を実行しなかった場合は通常の pyopenjtalk にフォールバックするように変更したapp.py
(webui/inference.py
) /server_editor.py
/server_fastapi.py
にはpyopenjtalk_worker.initialize_worker()
を記述してあるため、今まで通り複数プロセスで辞書を共有できるLanguages
の StrEnum で管理するように変更server_editor.py
ではこの Enum が使われていたが、大半のコードでは未だ文字列ベースでの言語判定になっていた.vscode/settings.json
)を追加vscode/extensions.json
) に Python と Pylance を追加した--host 0.0.0.0
を指定するとすべてのネットワークインターフェイスで HTTP サーバーがリッスンされる変更が非常に大規模なこともあり、さすがにこのままフォークを維持していくのは正直かなりつらいです…。
コーディングスタイルが気に入らない箇所などあれば後で遠慮せず修正していただいて構いませんので、まずはマージしていただけると非常に助かります。
今回の変更で何か不明な点があれば、コメントいただければ回答いたします。
お手数おかけしますが、何卒よろしくお願いいたします。