From d86ffa2386ab4b93a2ca7c1a42ef0cb3fa4592c7 Mon Sep 17 00:00:00 2001 From: Kenn Zhang Date: Sat, 27 Jan 2024 15:15:08 +0800 Subject: [PATCH 01/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9Dockerfile=EF=BC=8C?= =?UTF-8?q?=E4=BD=BF=E5=85=B6=E7=9B=B4=E6=8E=A5=E5=88=A9=E7=94=A8=E6=9C=80?= =?UTF-8?q?=E6=96=B0=E7=9A=84requirements.txt=E5=AE=89=E8=A3=85Python?= =?UTF-8?q?=E5=8C=85=EF=BC=9B=E5=B9=B6=E5=9C=A8=E6=9E=84=E5=BB=BA=E8=BF=87?= =?UTF-8?q?=E7=A8=8B=E4=B8=AD=E9=A2=84=E5=85=88=E4=B8=8B=E8=BD=BDmoda=20AS?= =?UTF-8?q?R=E5=92=8Cnltk=E7=9B=B8=E5=85=B3=E7=9A=84=E6=A8=A1=E5=9E=8B?= =?UTF-8?q?=E5=88=B0=E9=95=9C=E5=83=8F=E4=B8=AD=E4=BB=A5=E4=BE=BF=E5=8A=A0?= =?UTF-8?q?=E5=BF=AB=E5=88=9D=E6=AC=A1=E8=BF=90=E8=A1=8C=E7=9A=84=E9=80=9F?= =?UTF-8?q?=E5=BA=A6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Docker/download.py | 7 +++++++ Dockerfile | 26 +++++++++----------------- README.md | 3 ++- docker-compose.yaml | 2 +- docs/cn/README.md | 2 +- docs/ja/README.md | 3 ++- 6 files changed, 22 insertions(+), 21 deletions(-) create mode 100644 Docker/download.py diff --git a/Docker/download.py b/Docker/download.py new file mode 100644 index 00000000..46becacd --- /dev/null +++ b/Docker/download.py @@ -0,0 +1,7 @@ +# Download moda ASR related models +from modelscope import snapshot_download +model_dir = snapshot_download('damo/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch') +model_dir = snapshot_download('damo/speech_fsmn_vad_zh-cn-16k-common-pytorch') +model_dir = snapshot_download('damo/punc_ct-transformer_zh-cn-common-vocab272727-pytorch') + + diff --git a/Dockerfile b/Dockerfile index cbf92cb5..78c09e07 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM cnstark/pytorch:2.0.1-py3.9.17-cuda11.8.0-ubuntu20.04 LABEL maintainer="breakstring@hotmail.com" -LABEL version="dev-20240123.03" +LABEL version="dev-20240127.f9387e0" LABEL description="Docker image for GPT-SoVITS" @@ -18,27 +18,19 @@ RUN apt-get update && \ WORKDIR /workspace COPY . /workspace +# install python packages +RUN pip install -r requirements.txt + # Download models RUN chmod +x /workspace/Docker/download.sh && /workspace/Docker/download.sh -# 本应该从 requirements.txt 里面安装package,但是由于funasr和modelscope的问题,暂时先在后面手工安装依赖包吧 -RUN pip install --no-cache-dir torch numpy scipy tensorboard librosa==0.9.2 numba==0.56.4 pytorch-lightning gradio==3.14.0 ffmpeg-python onnxruntime tqdm cn2an pypinyin pyopenjtalk g2p_en chardet transformers jieba psutil PyYAML -# 这里强制指定了modelscope和funasr的版本,后面damo_asr的模型让它们自己下载 -RUN pip install --no-cache-dir modelscope~=1.10.0 torchaudio sentencepiece funasr~=0.8.7 +# Download moda ASR related +RUN python /workspace/Docker/download.py -# 先屏蔽掉,让容器里自己下载 -# Clone damo_asr -#WORKDIR /workspace/tools/damo_asr/models -#RUN git clone --depth 1 https://www.modelscope.cn/iic/speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch.git speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch && \ -# (cd speech_paraformer-large_asr_nat-zh-cn-16k-common-vocab8404-pytorch && git lfs pull) -#RUN git clone --depth 1 https://www.modelscope.cn/iic/speech_fsmn_vad_zh-cn-16k-common-pytorch.git speech_fsmn_vad_zh-cn-16k-common-pytorch && \ -# (cd speech_fsmn_vad_zh-cn-16k-common-pytorch && git lfs pull) -#RUN git clone --depth 1 https://www.modelscope.cn/iic/punc_ct-transformer_zh-cn-common-vocab272727-pytorch.git punc_ct-transformer_zh-cn-common-vocab272727-pytorch && \ -# (cd punc_ct-transformer_zh-cn-common-vocab272727-pytorch && git lfs pull) +# Download nltk realted +RUN python -m nltk.downloader averaged_perceptron_tagger +RUN python -m nltk.downloader cmudict -#RUN parallel --will-cite -a /workspace/Docker/damo.sha256 "echo -n {} | sha256sum -c" - -#WORKDIR /workspace EXPOSE 9870 EXPOSE 9871 diff --git a/README.md b/README.md index 2d856bb7..30b6b977 100644 --- a/README.md +++ b/README.md @@ -114,8 +114,9 @@ For UVR5 (Vocals/Accompaniment Separation & Reverberation Removal, additionally) ### Using Docker -#### docker-compose.yaml configuration +#### docker-compose.yaml configuration +0. Regarding image tags: Due to rapid updates in the codebase, the packaging of images with the 'latest' tag on [Docker Hub](https://hub.docker.com/r/breakstring/gpt-sovits) has been temporarily suspended, shifting instead to using the hash value of the most current commit from the targeted git repo. For instance, you might see image names and tags such as: breakstring/gpt-sovits:dev-20240127.f9387e0. This signifies the image was packaged for the commit f9387e0 on January 27, 2024. Additionally, when using these images, please remember to modify the parameters in your docker-compose.yaml or docker command line accordingly. Alternatively, you can build locally using a Dockerfile according to your own needs. 1. Environment Variables: - is_half: Controls half-precision/double-precision. This is typically the cause if the content under the directories 4-cnhubert/5-wav32k is not generated correctly during the "SSL extracting" step. Adjust to True or False based on your actual situation. diff --git a/docker-compose.yaml b/docker-compose.yaml index ed6f82a5..09967b1d 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -2,7 +2,7 @@ version: '3.8' services: gpt-sovits: - image: breakstring/gpt-sovits:dev-20240123.03 + image: breakstring/gpt-sovits:dev-20240127.f9387e0 container_name: gpt-sovits-container environment: - is_half=False diff --git a/docs/cn/README.md b/docs/cn/README.md index 5cd58244..56033c1f 100644 --- a/docs/cn/README.md +++ b/docs/cn/README.md @@ -103,7 +103,7 @@ brew install ffmpeg ### 在 Docker 中使用 #### docker-compose.yaml 设置 - +0. image的标签:由于代码库更新很快,所以在 [Docker Hub](https://hub.docker.com/r/breakstring/gpt-sovits) 上暂时不再打包 latest 标签的镜像,转而通过当前针对的git repo中当前最新的commit的hash值。例如,您会看到形如: breakstring/gpt-sovits:dev-20240127.f9387e0 这样的镜像名称和标签。即代表 2024年1月27日打包针对 f9387e0 这个commit 的镜像。同时,您在使用时请注意修改 docker-compose.yaml 或者 docker 命令行中的参数。或者在本地根据您自己的需求通过Dockerfile进行构建。 1. 环境变量: - is_half: 半精度/双精度控制。在进行 "SSL extracting" 步骤时如果无法正确生成 4-cnhubert/5-wav32k 目录下的内容时,一般都是它引起的,可以根据实际情况来调整为True或者False。 diff --git a/docs/ja/README.md b/docs/ja/README.md index 181cafa8..5e932873 100644 --- a/docs/ja/README.md +++ b/docs/ja/README.md @@ -99,8 +99,9 @@ brew install ffmpeg ### Dockerの使用 -#### docker-compose.yamlの設定 +#### docker-compose.yamlの設定 +0. イメージのタグについて:コードベースの更新が速いため、[Docker Hub](https://hub.docker.com/r/breakstring/gpt-sovits) での最新(latest)タグのイメージのパッケージングを一時停止し、代わりに現在対象としているgitリポジトリの最新のコミットのハッシュ値を用います。例えば、breakstring/gpt-sovits:dev-20240127.f9387e0 のようなイメージ名とタグを見ることができます。これは、2024年1月27日にf9387e0のコミットに対してパッケージされたイメージを意味します。また、使用時はdocker-compose.yamlやdockerのコマンドラインのパラメータを変更することに注意してください。または、ご自身のニーズに合わせてDockerfileを使ってローカルでビルドすることができます。 1. 環境変数: - `is_half`:半精度/倍精度の制御。"SSL抽出"ステップ中に`4-cnhubert/5-wav32k`ディレクトリ内の内容が正しく生成されない場合、通常これが原因です。実際の状況に応じてTrueまたはFalseに調整してください。 From 13f1e55d13acbd8223bbcec7b8b6f7bf5ea216f7 Mon Sep 17 00:00:00 2001 From: Kenn Zhang Date: Sat, 27 Jan 2024 15:37:43 +0800 Subject: [PATCH 02/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9Dockerfile=E4=B8=AD?= =?UTF-8?q?=E7=9A=84=E7=89=88=E6=9C=AC=E4=BB=A5=E5=8F=8Adocker-compose.yam?= =?UTF-8?q?l=E4=B8=AD=E7=9A=84image=E5=B0=8F=E8=8A=82;=E5=9C=A8readme?= =?UTF-8?q?=E4=B8=AD=E5=A2=9E=E5=8A=A0=E7=9B=B8=E5=85=B3=E8=AF=B4=E6=98=8E?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Dockerfile | 2 +- README.md | 4 ++-- docker-compose.yaml | 2 +- docs/cn/README.md | 4 ++-- docs/ja/README.md | 4 ++-- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/Dockerfile b/Dockerfile index 78c09e07..ac85a4bf 100644 --- a/Dockerfile +++ b/Dockerfile @@ -2,7 +2,7 @@ FROM cnstark/pytorch:2.0.1-py3.9.17-cuda11.8.0-ubuntu20.04 LABEL maintainer="breakstring@hotmail.com" -LABEL version="dev-20240127.f9387e0" +LABEL version="dev-20240127" LABEL description="Docker image for GPT-SoVITS" diff --git a/README.md b/README.md index 30b6b977..c019127a 100644 --- a/README.md +++ b/README.md @@ -116,7 +116,7 @@ For UVR5 (Vocals/Accompaniment Separation & Reverberation Removal, additionally) #### docker-compose.yaml configuration -0. Regarding image tags: Due to rapid updates in the codebase, the packaging of images with the 'latest' tag on [Docker Hub](https://hub.docker.com/r/breakstring/gpt-sovits) has been temporarily suspended, shifting instead to using the hash value of the most current commit from the targeted git repo. For instance, you might see image names and tags such as: breakstring/gpt-sovits:dev-20240127.f9387e0. This signifies the image was packaged for the commit f9387e0 on January 27, 2024. Additionally, when using these images, please remember to modify the parameters in your docker-compose.yaml or docker command line accordingly. Alternatively, you can build locally using a Dockerfile according to your own needs. +0. Regarding image tags: Due to rapid updates in the codebase and the slow process of packaging and testing images, please check [Docker Hub](https://hub.docker.com/r/breakstring/gpt-sovits) for the currently packaged latest images and select as per your situation, or alternatively, build locally using a Dockerfile according to your own needs. 1. Environment Variables: - is_half: Controls half-precision/double-precision. This is typically the cause if the content under the directories 4-cnhubert/5-wav32k is not generated correctly during the "SSL extracting" step. Adjust to True or False based on your actual situation. @@ -134,7 +134,7 @@ docker compose -f "docker-compose.yaml" up -d As above, modify the corresponding parameters based on your actual situation, then run the following command: ``` -docker run --rm -it --gpus=all --env=is_half=False --volume=G:\GPT-SoVITS-DockerTest\output:/workspace/output --volume=G:\GPT-SoVITS-DockerTest\logs:/workspace/logs --volume=G:\GPT-SoVITS-DockerTest\SoVITS_weights:/workspace/SoVITS_weights --workdir=/workspace -p 9870:9870 -p 9871:9871 -p 9872:9872 -p 9873:9873 -p 9874:9874 --shm-size="16G" -d breakstring/gpt-sovits:dev-20240123.03 +docker run --rm -it --gpus=all --env=is_half=False --volume=G:\GPT-SoVITS-DockerTest\output:/workspace/output --volume=G:\GPT-SoVITS-DockerTest\logs:/workspace/logs --volume=G:\GPT-SoVITS-DockerTest\SoVITS_weights:/workspace/SoVITS_weights --workdir=/workspace -p 9870:9870 -p 9871:9871 -p 9872:9872 -p 9873:9873 -p 9874:9874 --shm-size="16G" -d breakstring/gpt-sovits:xxxxx ``` diff --git a/docker-compose.yaml b/docker-compose.yaml index 09967b1d..874824e0 100644 --- a/docker-compose.yaml +++ b/docker-compose.yaml @@ -2,7 +2,7 @@ version: '3.8' services: gpt-sovits: - image: breakstring/gpt-sovits:dev-20240127.f9387e0 + image: breakstring/gpt-sovits:xxxxx # please change the image name and tag base your environment container_name: gpt-sovits-container environment: - is_half=False diff --git a/docs/cn/README.md b/docs/cn/README.md index 56033c1f..02ae1cba 100644 --- a/docs/cn/README.md +++ b/docs/cn/README.md @@ -103,7 +103,7 @@ brew install ffmpeg ### 在 Docker 中使用 #### docker-compose.yaml 设置 -0. image的标签:由于代码库更新很快,所以在 [Docker Hub](https://hub.docker.com/r/breakstring/gpt-sovits) 上暂时不再打包 latest 标签的镜像,转而通过当前针对的git repo中当前最新的commit的hash值。例如,您会看到形如: breakstring/gpt-sovits:dev-20240127.f9387e0 这样的镜像名称和标签。即代表 2024年1月27日打包针对 f9387e0 这个commit 的镜像。同时,您在使用时请注意修改 docker-compose.yaml 或者 docker 命令行中的参数。或者在本地根据您自己的需求通过Dockerfile进行构建。 +0. image的标签:由于代码库更新很快,镜像的打包和测试又很慢,所以请自行在 [Docker Hub](https://hub.docker.com/r/breakstring/gpt-sovits) 查看当前打包好的最新的镜像并根据自己的情况选用,或者在本地根据您自己的需求通过Dockerfile进行构建。 1. 环境变量: - is_half: 半精度/双精度控制。在进行 "SSL extracting" 步骤时如果无法正确生成 4-cnhubert/5-wav32k 目录下的内容时,一般都是它引起的,可以根据实际情况来调整为True或者False。 @@ -122,7 +122,7 @@ docker compose -f "docker-compose.yaml" up -d 同上,根据您自己的实际情况修改对应的参数,然后运行如下命令: ``` -docker run --rm -it --gpus=all --env=is_half=False --volume=G:\GPT-SoVITS-DockerTest\output:/workspace/output --volume=G:\GPT-SoVITS-DockerTest\logs:/workspace/logs --volume=G:\GPT-SoVITS-DockerTest\SoVITS_weights:/workspace/SoVITS_weights --workdir=/workspace -p 9870:9870 -p 9871:9871 -p 9872:9872 -p 9873:9873 -p 9874:9874 --shm-size="16G" -d breakstring/gpt-sovits:dev-20240123.03 +docker run --rm -it --gpus=all --env=is_half=False --volume=G:\GPT-SoVITS-DockerTest\output:/workspace/output --volume=G:\GPT-SoVITS-DockerTest\logs:/workspace/logs --volume=G:\GPT-SoVITS-DockerTest\SoVITS_weights:/workspace/SoVITS_weights --workdir=/workspace -p 9870:9870 -p 9871:9871 -p 9872:9872 -p 9873:9873 -p 9874:9874 --shm-size="16G" -d breakstring/gpt-sovits:xxxxx ``` diff --git a/docs/ja/README.md b/docs/ja/README.md index 5e932873..1120336b 100644 --- a/docs/ja/README.md +++ b/docs/ja/README.md @@ -101,7 +101,7 @@ brew install ffmpeg #### docker-compose.yamlの設定 -0. イメージのタグについて:コードベースの更新が速いため、[Docker Hub](https://hub.docker.com/r/breakstring/gpt-sovits) での最新(latest)タグのイメージのパッケージングを一時停止し、代わりに現在対象としているgitリポジトリの最新のコミットのハッシュ値を用います。例えば、breakstring/gpt-sovits:dev-20240127.f9387e0 のようなイメージ名とタグを見ることができます。これは、2024年1月27日にf9387e0のコミットに対してパッケージされたイメージを意味します。また、使用時はdocker-compose.yamlやdockerのコマンドラインのパラメータを変更することに注意してください。または、ご自身のニーズに合わせてDockerfileを使ってローカルでビルドすることができます。 +0. イメージのタグについて:コードベースの更新が速く、イメージのパッケージングとテストが遅いため、[Docker Hub](https://hub.docker.com/r/breakstring/gpt-sovits) で現在パッケージされている最新のイメージをご覧になり、ご自身の状況に応じて選択するか、またはご自身のニーズに応じてDockerfileを使用してローカルで構築してください。 1. 環境変数: - `is_half`:半精度/倍精度の制御。"SSL抽出"ステップ中に`4-cnhubert/5-wav32k`ディレクトリ内の内容が正しく生成されない場合、通常これが原因です。実際の状況に応じてTrueまたはFalseに調整してください。 @@ -118,7 +118,7 @@ docker compose -f "docker-compose.yaml" up -d 上記と同様に、実際の状況に基づいて対応するパラメータを変更し、次のコマンドを実行します: ```markdown -docker run --rm -it --gpus=all --env=is_half=False --volume=G:\GPT-SoVITS-DockerTest\output:/workspace/output --volume=G:\GPT-SoVITS-DockerTest\logs:/workspace/logs --volume=G:\GPT-SoVITS-DockerTest\SoVITS_weights:/workspace/SoVITS_weights --workdir=/workspace -p 9870:9870 -p 9871:9871 -p 9872:9872 -p 9873:9873 -p 9874:9874 --shm-size="16G" -d breakstring/gpt-sovits:dev-20240123.03 +docker run --rm -it --gpus=all --env=is_half=False --volume=G:\GPT-SoVITS-DockerTest\output:/workspace/output --volume=G:\GPT-SoVITS-DockerTest\logs:/workspace/logs --volume=G:\GPT-SoVITS-DockerTest\SoVITS_weights:/workspace/SoVITS_weights --workdir=/workspace -p 9870:9870 -p 9871:9871 -p 9872:9872 -p 9873:9873 -p 9874:9874 --shm-size="16G" -d breakstring/gpt-sovits:xxxxx ``` From 3e4a03660b412c1ebfd6b5e7cb4662c2664de212 Mon Sep 17 00:00:00 2001 From: duliangang Date: Sun, 28 Jan 2024 16:28:24 +0800 Subject: [PATCH 03/11] fix chinese number to pinyin MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 数字转拼音不准的bug,因为将数字一个个分割了调用an2cn当然不准 --- GPT_SoVITS/text/chinese.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/GPT_SoVITS/text/chinese.py b/GPT_SoVITS/text/chinese.py index de3ef011..bb631a06 100644 --- a/GPT_SoVITS/text/chinese.py +++ b/GPT_SoVITS/text/chinese.py @@ -12,6 +12,8 @@ sys.path.append("/data/docker/liujing04/gpt-vits/gpt-vits-master") from text.symbols import punctuation from text.tone_sandhi import ToneSandhi +normalizer = lambda x: cn2an.transform(x, "an2cn") + current_file_path = os.path.dirname(__file__) pinyin_to_symbol_map = { line.split("\t")[0]: line.strip().split("\t")[1] @@ -151,10 +153,8 @@ def _g2p(segments): def text_normalize(text): - numbers = re.findall(r"\d+(?:\.?\d+)?", text) - for number in numbers: - text = text.replace(number, cn2an.an2cn(number), 1) - text = replace_punctuation(text) + dest_text=normalizer(text) + text = replace_punctuation(dest_text) return text From 2d69f103a3eb78e21a2230998b5ea04f0d36ad0a Mon Sep 17 00:00:00 2001 From: RVC-Boss <129054828+RVC-Boss@users.noreply.github.com> Date: Sun, 28 Jan 2024 17:58:17 +0800 Subject: [PATCH 04/11] Revert "fix chinese number to pinyin" --- GPT_SoVITS/text/chinese.py | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/GPT_SoVITS/text/chinese.py b/GPT_SoVITS/text/chinese.py index bb631a06..de3ef011 100644 --- a/GPT_SoVITS/text/chinese.py +++ b/GPT_SoVITS/text/chinese.py @@ -12,8 +12,6 @@ sys.path.append("/data/docker/liujing04/gpt-vits/gpt-vits-master") from text.symbols import punctuation from text.tone_sandhi import ToneSandhi -normalizer = lambda x: cn2an.transform(x, "an2cn") - current_file_path = os.path.dirname(__file__) pinyin_to_symbol_map = { line.split("\t")[0]: line.strip().split("\t")[1] @@ -153,8 +151,10 @@ def _g2p(segments): def text_normalize(text): - dest_text=normalizer(text) - text = replace_punctuation(dest_text) + numbers = re.findall(r"\d+(?:\.?\d+)?", text) + for number in numbers: + text = text.replace(number, cn2an.an2cn(number), 1) + text = replace_punctuation(text) return text From ecb4b23fc311462d78d5c72ff60e309bb9853d0f Mon Sep 17 00:00:00 2001 From: RVC-Boss <129054828+RVC-Boss@users.noreply.github.com> Date: Sun, 28 Jan 2024 19:19:57 +0800 Subject: [PATCH 05/11] Update data_module.py --- GPT_SoVITS/AR/data/data_module.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/GPT_SoVITS/AR/data/data_module.py b/GPT_SoVITS/AR/data/data_module.py index f3d895a0..037484a9 100644 --- a/GPT_SoVITS/AR/data/data_module.py +++ b/GPT_SoVITS/AR/data/data_module.py @@ -41,7 +41,7 @@ class Text2SemanticDataModule(LightningDataModule): # pad_val=self.config['data']['pad_val']) def train_dataloader(self): - batch_size = self.config["train"]["batch_size"] + batch_size = max(min(self.config["train"]["batch_size"],len(self._train_dataset)//4),1)#防止不保存 sampler = DistributedBucketSampler(self._train_dataset, batch_size=batch_size) return DataLoader( self._train_dataset, From f0cfe397089a6fd507d678c71adeaab5e7ed0683 Mon Sep 17 00:00:00 2001 From: RVC-Boss <129054828+RVC-Boss@users.noreply.github.com> Date: Sun, 28 Jan 2024 19:34:03 +0800 Subject: [PATCH 06/11] fix gpt not save issue. --- GPT_SoVITS/s1_train.py | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/GPT_SoVITS/s1_train.py b/GPT_SoVITS/s1_train.py index 30c167e5..3bbfdfb3 100644 --- a/GPT_SoVITS/s1_train.py +++ b/GPT_SoVITS/s1_train.py @@ -44,9 +44,8 @@ class my_model_ckpt(ModelCheckpoint): self.config = config def on_train_epoch_end(self, trainer, pl_module): - if not self._should_skip_saving_checkpoint( - trainer - ) and self._should_save_on_train_epoch_end(trainer): + # if not self._should_skip_saving_checkpoint(trainer) and self._should_save_on_train_epoch_end(trainer): + if self._should_save_on_train_epoch_end(trainer): monitor_candidates = self._monitor_candidates(trainer) if ( self._every_n_epochs >= 1 From 34a5ad7baa279c8a4674b02ebcb7ed9d57491f3f Mon Sep 17 00:00:00 2001 From: RVC-Boss <129054828+RVC-Boss@users.noreply.github.com> Date: Sun, 28 Jan 2024 19:50:59 +0800 Subject: [PATCH 07/11] Add files via upload --- webui.py | 21 +++++++-------------- 1 file changed, 7 insertions(+), 14 deletions(-) diff --git a/webui.py b/webui.py index 885aecbf..fba65ece 100644 --- a/webui.py +++ b/webui.py @@ -25,20 +25,13 @@ for path in site.getsitepackages(): if(site_packages_roots==[]):site_packages_roots=["%s/runtime/Lib/site-packages" % now_dir] #os.environ["OPENBLAS_NUM_THREADS"] = "4" os.environ["no_proxy"] = "localhost, 127.0.0.1, ::1" -os.environ["all_proxy"] = "" - for site_packages_root in site_packages_roots: if os.path.exists(site_packages_root): - try: - with open("%s/users.pth" % (site_packages_root), "w") as f: - f.write( - "%s\n%s/tools\n%s/tools/damo_asr\n%s/GPT_SoVITS\n%s/tools/uvr5" - % (now_dir, now_dir, now_dir, now_dir, now_dir) - ) - break - except PermissionError: - pass - + with open("%s/users.pth" % (site_packages_root), "w") as f: + f.write( + "%s\n%s/tools\n%s/tools/damo_asr\n%s/GPT_SoVITS\n%s/tools/uvr5" + % (now_dir, now_dir, now_dir, now_dir, now_dir) + ) from tools import my_utils import traceback import shutil @@ -662,7 +655,7 @@ with gr.Blocks(title="GPT-SoVITS WebUI") as app: with gr.Row(): if_label = gr.Checkbox(label=i18n("是否开启打标WebUI"),show_label=True) path_list = gr.Textbox( - label=i18n("打标数据标注文件路径"), + label=i18n(".list标注文件的路径"), value="D:\\RVC1006\\GPT-SoVITS\\raw\\xxx.list", interactive=True, ) @@ -688,7 +681,7 @@ with gr.Blocks(title="GPT-SoVITS WebUI") as app: label=i18n("*训练集音频文件目录"), # value=r"D:\RVC1006\GPT-SoVITS\raw\xxx", interactive=True, - placeholder=i18n("训练集音频文件目录-拼接-list文件里波形对应的文件名(不是全路径)。") + placeholder=i18n("填切割后音频所在目录!读取的音频文件完整路径=该目录-拼接-list文件里波形对应的文件名(不是全路径)。") ) gr.Markdown(value=i18n("1Aa-文本内容")) with gr.Row(): From 70a9c3d3e840051ea84f42d9a15492748594e83a Mon Sep 17 00:00:00 2001 From: RVC-Boss <129054828+RVC-Boss@users.noreply.github.com> Date: Sun, 28 Jan 2024 19:51:55 +0800 Subject: [PATCH 08/11] Update webui.py --- webui.py | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/webui.py b/webui.py index fba65ece..23d803de 100644 --- a/webui.py +++ b/webui.py @@ -25,13 +25,18 @@ for path in site.getsitepackages(): if(site_packages_roots==[]):site_packages_roots=["%s/runtime/Lib/site-packages" % now_dir] #os.environ["OPENBLAS_NUM_THREADS"] = "4" os.environ["no_proxy"] = "localhost, 127.0.0.1, ::1" +os.environ["all_proxy"] = "" for site_packages_root in site_packages_roots: if os.path.exists(site_packages_root): - with open("%s/users.pth" % (site_packages_root), "w") as f: - f.write( - "%s\n%s/tools\n%s/tools/damo_asr\n%s/GPT_SoVITS\n%s/tools/uvr5" - % (now_dir, now_dir, now_dir, now_dir, now_dir) - ) + try: + with open("%s/users.pth" % (site_packages_root), "w") as f: + f.write( + "%s\n%s/tools\n%s/tools/damo_asr\n%s/GPT_SoVITS\n%s/tools/uvr5" + % (now_dir, now_dir, now_dir, now_dir, now_dir) + ) + break + except PermissionError: + pass from tools import my_utils import traceback import shutil From b8ae5a2761e2654fc0c905498009d3de9de745a8 Mon Sep 17 00:00:00 2001 From: RVC-Boss <129054828+RVC-Boss@users.noreply.github.com> Date: Sun, 28 Jan 2024 20:10:36 +0800 Subject: [PATCH 09/11] Add files via upload --- GPT_SoVITS/inference_webui.py | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/GPT_SoVITS/inference_webui.py b/GPT_SoVITS/inference_webui.py index f725c5cd..454a372e 100644 --- a/GPT_SoVITS/inference_webui.py +++ b/GPT_SoVITS/inference_webui.py @@ -29,10 +29,10 @@ else: # ) # sovits_path = os.environ.get("sovits_path", "pretrained_models/s2G488k.pth") cnhubert_base_path = os.environ.get( - "cnhubert_base_path", "GPT_SoVITS/pretrained_models/chinese-hubert-base" + "cnhubert_base_path", "pretrained_models/chinese-hubert-base" ) bert_path = os.environ.get( - "bert_path", "GPT_SoVITS/pretrained_models/chinese-roberta-wwm-ext-large" + "bert_path", "pretrained_models/chinese-roberta-wwm-ext-large" ) infer_ttswebui = os.environ.get("infer_ttswebui", 9872) infer_ttswebui = int(infer_ttswebui) @@ -262,17 +262,19 @@ def nonen_get_bert_inf(text, language): return bert -#i18n("不切"),i18n("凑五句一切"),i18n("凑50字一切"),i18n("按中文句号。切"),i18n("按英文句号.切") def get_tts_wav(ref_wav_path, prompt_text, prompt_language, text, text_language,how_to_cut=i18n("不切")): t0 = ttime() prompt_text = prompt_text.strip("\n") - prompt_language, text = prompt_language, text.strip("\n") + if(prompt_text[-1]not in splits):prompt_text+="。"if prompt_text!="en"else "." + text = text.strip("\n") zero_wav = np.zeros( int(hps.data.sampling_rate * 0.3), dtype=np.float16 if is_half == True else np.float32, ) with torch.no_grad(): wav16k, sr = librosa.load(ref_wav_path, sr=16000) + if(wav16k.shape[0]>160000 or wav16k.shape[0]<48000): + raise OSError(i18n("参考音频在3~10秒范围外,请更换!")) wav16k = torch.from_numpy(wav16k) zero_wav_torch = torch.from_numpy(zero_wav) if is_half == True: @@ -297,7 +299,7 @@ def get_tts_wav(ref_wav_path, prompt_text, prompt_language, text, text_language, phones1, word2ph1, norm_text1 = clean_text_inf(prompt_text, prompt_language) else: phones1, word2ph1, norm_text1 = nonen_clean_text_inf(prompt_text, prompt_language) - if(how_to_cut==i18n("凑五句一切")):text=cut1(text) + if(how_to_cut==i18n("凑四句一切")):text=cut1(text) elif(how_to_cut==i18n("凑50字一切")):text=cut2(text) elif(how_to_cut==i18n("按中文句号。切")):text=cut3(text) elif(how_to_cut==i18n("按英文句号.切")):text=cut4(text) @@ -409,7 +411,7 @@ def split(todo_text): def cut1(inp): inp = inp.strip("\n") inps = split(inp) - split_idx = list(range(0, len(inps), 5)) + split_idx = list(range(0, len(inps), 4)) split_idx[-1] = None if len(split_idx) > 1: opts = [] @@ -423,7 +425,6 @@ def cut1(inp): def cut2(inp): inp = inp.strip("\n") inps = split(inp) - # print(inps) if len(inps) < 2: return inp opts = [] @@ -494,7 +495,7 @@ with gr.Blocks(title="GPT-SoVITS WebUI") as app: GPT_dropdown.change(change_gpt_weights,[GPT_dropdown],[]) gr.Markdown(value=i18n("*请上传并填写参考信息")) with gr.Row(): - inp_ref = gr.Audio(label=i18n("请上传参考音频"), type="filepath") + inp_ref = gr.Audio(label=i18n("请上传3~10秒内参考音频,超过会报错!"), type="filepath") prompt_text = gr.Textbox(label=i18n("参考音频的文本"), value="") prompt_language = gr.Dropdown( label=i18n("参考音频的语种"),choices=[i18n("中文"),i18n("英文"),i18n("日文")],value=i18n("中文") @@ -507,7 +508,7 @@ with gr.Blocks(title="GPT-SoVITS WebUI") as app: ) how_to_cut = gr.Radio( label=i18n("怎么切"), - choices=[i18n("不切"),i18n("凑五句一切"),i18n("凑50字一切"),i18n("按中文句号。切"),i18n("按英文句号.切"),], + choices=[i18n("不切"),i18n("凑四句一切"),i18n("凑50字一切"),i18n("按中文句号。切"),i18n("按英文句号.切"),], value=i18n("凑50字一切"), interactive=True, ) @@ -523,7 +524,7 @@ with gr.Blocks(title="GPT-SoVITS WebUI") as app: gr.Markdown(value=i18n("文本切分工具。太长的文本合成出来效果不一定好,所以太长建议先切。合成会根据文本的换行分开合成再拼起来。")) with gr.Row(): text_inp = gr.Textbox(label=i18n("需要合成的切分前文本"),value="") - button1 = gr.Button(i18n("凑五句一切"), variant="primary") + button1 = gr.Button(i18n("凑四句一切"), variant="primary") button2 = gr.Button(i18n("凑50字一切"), variant="primary") button3 = gr.Button(i18n("按中文句号。切"), variant="primary") button4 = gr.Button(i18n("按英文句号.切"), variant="primary") From 96128d604ad919a2ff6bf486f351cb4f1b4656d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=88=98=E6=82=A6?= Date: Sun, 28 Jan 2024 20:17:35 +0800 Subject: [PATCH 10/11] =?UTF-8?q?=E4=BF=AE=E6=94=B9=E6=96=87=E4=BB=B6?= =?UTF-8?q?=E5=8F=AF=E8=83=BD=E4=B8=8D=E5=AD=98=E5=9C=A8=E7=9A=84bug?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 修改文件可能不存在的bug --- webui.py | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/webui.py b/webui.py index 23d803de..6577705a 100644 --- a/webui.py +++ b/webui.py @@ -16,7 +16,11 @@ if(os.path.exists(tmp)): if(name=="jieba.cache"):continue path="%s/%s"%(tmp,name) delete=os.remove if os.path.isfile(path) else shutil.rmtree - delete(path) + try: + delete(path) + except Exception as e: + print(str(e)) + pass import site site_packages_roots = [] for path in site.getsitepackages(): From 698e9655132d194b25b86fbbc99d53c8d2cea2a3 Mon Sep 17 00:00:00 2001 From: RVC-Boss <129054828+RVC-Boss@users.noreply.github.com> Date: Sun, 28 Jan 2024 20:18:44 +0800 Subject: [PATCH 11/11] =?UTF-8?q?=E4=BF=AE=E5=A4=8D=E5=BC=80=E5=A4=B4?= =?UTF-8?q?=E5=90=9E=E5=AD=97?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- GPT_SoVITS/inference_webui.py | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) diff --git a/GPT_SoVITS/inference_webui.py b/GPT_SoVITS/inference_webui.py index 454a372e..d601d9fc 100644 --- a/GPT_SoVITS/inference_webui.py +++ b/GPT_SoVITS/inference_webui.py @@ -29,10 +29,10 @@ else: # ) # sovits_path = os.environ.get("sovits_path", "pretrained_models/s2G488k.pth") cnhubert_base_path = os.environ.get( - "cnhubert_base_path", "pretrained_models/chinese-hubert-base" + "cnhubert_base_path", "GPT_SoVITS/pretrained_models/chinese-hubert-base" ) bert_path = os.environ.get( - "bert_path", "pretrained_models/chinese-roberta-wwm-ext-large" + "bert_path", "GPT_SoVITS/pretrained_models/chinese-roberta-wwm-ext-large" ) infer_ttswebui = os.environ.get("infer_ttswebui", 9872) infer_ttswebui = int(infer_ttswebui) @@ -262,11 +262,18 @@ def nonen_get_bert_inf(text, language): return bert +splits = {",","。","?","!",",",".","?","!","~",":",":","—","…",} +def get_first(text): + pattern = "[" + "".join(re.escape(sep) for sep in splits) + "]" + text = re.split(pattern, text)[0].strip() + return text + def get_tts_wav(ref_wav_path, prompt_text, prompt_language, text, text_language,how_to_cut=i18n("不切")): t0 = ttime() prompt_text = prompt_text.strip("\n") if(prompt_text[-1]not in splits):prompt_text+="。"if prompt_text!="en"else "." text = text.strip("\n") + if(len(get_first(text))<4):text+="。"if text!="en"else "." zero_wav = np.zeros( int(hps.data.sampling_rate * 0.3), dtype=np.float16 if is_half == True else np.float32, @@ -371,24 +378,6 @@ def get_tts_wav(ref_wav_path, prompt_text, prompt_language, text, text_language, np.int16 ) - -splits = { - ",", - "。", - "?", - "!", - ",", - ".", - "?", - "!", - "~", - ":", - ":", - "—", - "…", -} # 不考虑省略号 - - def split(todo_text): todo_text = todo_text.replace("……", "。").replace("——", ",") if todo_text[-1] not in splits: