• AIGC:语音克隆模型Bert-VITS2-2.3部署与实战


     1 VITS2模型

    1.1 摘要

    单阶段文本到语音模型最近被积极研究,其结果优于两阶段管道系统。以往的单阶段模型虽然取得了较大的进展,但在间歇性非自然性、计算效率、对音素转换依赖性强等方面仍有改进的空间。本文提出VITS2,一种单阶段的文本到语音模型,通过改进之前工作的几个方面,有效地合成了更自然的语音。本文提出了改进的结构和训练机制,所提出的方法在提高多说话人模型中语音特征的自然度、相似性以及训练和推理效率方面是有效的。证明了所提出方法可以显著减少以前工作中对音素转换的强依赖,允许完全端到端单阶段方法。

    论文地址:https://arxiv.org/pdf/2307.16430.pdf

    演示地址:https://vits-2.github.io/demo/

    VITS1讲解详见:https://mp.csdn.net/mp_blog/creation/editor/130904876

    1.2 介绍

    最近,基于深度神经网络的文本到语音的发展取得了重大进展。基于深度神经网络的文本到语音转换是一种从输入文本生成相应原始波形的方法;它有几个有趣的特性,通常使文本到语音任务具有挑战性。通过对特征的快速回顾,可以发现文本到语音任务涉及到将不连续的文本特征转换为连续的波形。输入和输出具有数百倍的时间步长差异,它们之间的对齐必须非常精确才能合成高质量的语音音频。此外,输入文本中不存在的韵律和说话人特征需要自然地表达,文本输入可以有多种说话方式,这是一个一对多的问题。合成高质量语音具有挑战性的另一个因素是,人们在听音频时专注于单个组件;因此,即使构成整个音频的数十万个信号中只有一小部分是非自然的,人类也可以很容易地感知它们。效率是导致任务困难的另一个因素。合成的音频具有很高的时间分辨率,通常每秒包含超过20,000个数据,需要高效的采样方法。

    由于文本到语音的任务特点,解决方案也可以是复杂的。之前的工作通过将从输入文本生成波形的过程分为两个级联阶段来解决这些问题。一种流行的方法涉及从第一阶段的输入文本中生成中间语音表示,如梅尔语谱图或语言特征,然后以第二阶段的这些中间表示为条件生成原始波形。两级管道系统具有简化每个模型和便于训练的优点;然而,它们也有以下限制。

    • 错误从第一阶段传播到第二阶段。
    • 它不是利用模型内部学习到的表示,而是通过人类定义的特征(如梅尔语谱图或语言特征)进行中介。
    • 生成中间特征所需的计算量。最近,为了解决这些限制,直接从输入文本中生成波形的单阶段模型已被积极研究。单阶段模型不仅优于两阶段管道系统,而且显示了生成与人类几乎不可区分的高质量语音的能力。

    虽然之前的工作使用单阶段方法取得了巨大的成功,但模型vits存在以下问题:间歇性不自然、时长预测器效率低、输入格式复杂以缓解对齐和时长建模的局限性(使用空白标记)、多说话人模型中说话人相似性不足、训练速度慢以及对音素转换的依赖性强。本文提供了解决这些问题的方法。本文提出一种通过对抗性学习训练的随机时长预测器,利用transformer块和说话人条件文本编码器改进的归一化流,以更好地对多个说话人特征进行建模。实验结果表明,所提出的方法提高了质量和效率。此外,通过使用规范化文本作为模型输入的实验表明,该方法减少了对音素转换的依赖。因此,该方法更接近于完全的端到端单阶段方法。

    1.3 模型

    在本节中,我们描述了四个小节的改进:时长预测(duration prediction)、具有归一化流的增广变分自编码器(augmented variational autoencoder with normalizing flows)、对齐搜索(alignment search)和以说话人为条件的文本编码器(and speaker-conditioned text encoder)。本文提出一种使用对抗性学习来训练时长预测器的方法,以在训练和合成方面都具有较高的效率来合成自然语音。该模型本质上是使用上一项工作[4,17]中提出的单调对齐搜索(MAS)来学习对齐,并进一步建议进行修改以提高质量。提出了一种通过将transformer块引入到规范化流程中来提高自然性的方法,能在转换分布时捕获长期依赖。此外,本文还改进了多说话人模型中的说话人条件,以提高说话人相似度。

    1.3.1 基于时间步进条件判别的随机时长预测器

    之前的工作表明,基于流的随机时长预测器比确定性方法更有效地提高了合成语音的自然度。结果很好;然而,基于流的方法需要相对更多的计算和一些复杂的技术。本文提出一种具有对抗性学习的随机时长预测器,以合成更自然的语音,在训练和合成方面的效率都比之前的工作更高。建议的持续时间预测器和鉴别器的概述如图1a所示。我们应用对抗性学习来训练时间预测器,使用与生成器相同的输入条件判别器来适当区分预测的时间。我们使用文本的隐藏表示htext和高斯噪声zd作为生成器G的输入;使用MAS获得的对数尺度的htext和持续时间(以d表示)或从持续时间预测器(以dˆ表示)中预测的htext和持续时间(以d表示)作为鉴别器d的输入。一般生成对抗网络的鉴别器被输入固定长度的输入,而预测每个输入token的持续时间,并且输入序列的长度随每个训练实例而变化。为正确区分可变长度的输入,本文提出一种时间逐步判别器,可区分所有token的每个预测持续时间。我们使用两种类型的损失;对抗学习的最小二乘损失函数和均方误差损失函数:

    提出的时长预测器和训练机制允许在较短的步骤中学习时长,并且时长预测器被单独训练作为最后的训练步骤,从而减少了训练的整体计算时间。

    1.3.2 带高斯噪声的单调对齐搜索

    在之前的工作之后,我们将MAS引入到我们的模型中来学习对齐。该算法产生了在所有可能的单调对齐中具有最高概率的文本和音频之间的对齐,并训练模型以最大化其概率。该方法是有效的;然而,在搜索和优化特定的对齐之后,搜索其他更合适的对齐会受到限制。为了缓解这个问题,我们在计算的概率中添加了一个小的高斯噪声。这为模型提供了额外的机会来搜索其他对齐。我们只在训练开始时添加这种噪声,因为MAS使模型能够快速学习对齐。参考之前的工作[4],该工作详细描述了算法,正向操作中所有可能位置的Q值都计算出最大对数似然。我们在操作中计算的Q值上添加了小的高斯噪声。

    其中i和j分别表示输入序列和后验序列上的特定位置,z表示来自标准化流的转换潜变量。是从标准正态分布中采样的噪声、P的标准差和从0.01开始并每步递减2×10^−6的噪声尺度的乘积。

    1.3.3 使用Transformer块的归一化流

    之前的工作展示了用归一化流增强的变分自编码器合成高质量语音音频的能力。归一化流包含卷积块,卷积块是捕获相邻数据模式的有效结构,使模型能够合成高质量的语音。在转换分布时,捕捉长期依赖关系的能力至关重要,因为语音的每个部分都与不相邻的其他部分相关。虽然卷积块可以有效捕获相邻模式,但由于其感受野的限制,在捕获长期依赖关系方面存在不足。因此,我们在归一化流中添加了一个带有残差连接的小transformer块,以捕获长期依赖关系,如图1b所示。图2显示了实际的注意力得分图和卷积块的感受野。可以确定,transformer块在变换分布时在不同位置收集信息,这是感受野不可能做到的。

     

     1.3.4 说话人条件文本编码器

    由于多说话人模型是根据说话人条件用单一模型合成多种特征的语音,表达每个说话人的个人语音特征是一个重要的质量因素,也是自然度的一个重要因素。已有工作表明,单阶段模型可以高质量地对多个说话人进行建模。考虑到说话人的特定发音和语调等特征会显著影响每个说话人的语音特征的表达,但输入文本中不包含这些特征,设计了一个以说话人信息为条件的文本编码器,通过在编码输入文本的同时学习这些特征来更好地模仿每个说话人的各种语音特征。我们将说话人向量设置在文本编码器的第三个transformer块上,如图1c所示。

    1.4 实验

    我们在两个不同的数据集上进行了实验。使用LJ语音数据集[20]验证自然度的提升,使用VCTK数据集[21]验证模型是否能更好地再现说话人特征。LJ语音数据集由单个说话者的13100个短音频片段组成,总长度约为24小时。音频格式是16位PCM,采样率为22.05 kHz,我们使用它没有任何操作。我们将数据集随机分为训练集(12,500个样本)、验证集(100个样本)和测试集(500个样本)。

    VCTK数据集由109个具有不同口音的英语母语者发出的约44,000个短音频片段组成。音频剪辑的总长度约为44小时。音频格式为16位PCM,采样率为44.1 kHz。我们将采样率降低到22.05 kHz。我们将数据集随机分为训练集(43,470个样本)、验证集(100个样本)和测试集(500个样本)。采用80波段mel尺度谱图计算重建损失。与之前的工作[17]相比,我们使用相同的语谱图作为后验编码器的输入。快速傅里叶变换、窗口和跳数分别设置为1024、1024和256。

    我们使用音素序列和规范化文本作为模型的输入进行了实验。我们使用开源软件[22]将文本序列转换为国际音标序列,并将该序列输入文本编码器。与之前的工作[17]相比,我们没有使用空白标记。对于规范化文本的实验,我们使用开源软件[23]用简单的规则规范化输入文本,并将其提供给文本编码器。

    使用AdamW[24]优化器训练网络,β1 = 0.8, β2 = 0.99,权重衰减λ = 0.01。学习率衰减在每轮中以0.9991/8因子进行调度,初始学习率为2 × 10^−4。我们每一步为网络提供256个训练实例。继之前的工作[17]之后,应用带窗口的生成器训练。我们在四个NVIDIA V100 gpu上使用混合精度训练。生成波形的网络和持续时间预测器分别训练了800k和30k步。

    1.5 结果

    1.5.1 自然度评估

    为了验证所提模型能够合成自然语音,进行了众包平均意见得分(MOS)测试。在听了从测试集中随机选择的音频样本后,打分者对他们的自然程度进行了从1到5的5分评分。考虑到之前的工作[17]已经显示出与人工记录相似的质量,我们还进行了比较平均意见分数(CMOS)测试,该测试适合通过直接比较来评估高质量样本。评价者在听了从测试集中随机选择的音频样本后,对他们相对偏好的自然程度进行了评分,总分为7分,从3到3分不等评价者被允许对每个音频样本进行一次评估。对所有音频样本进行归一化处理,以避免幅度差异对得分的影响。我们使用官方实现和之前工作[17]的预训练权重作为比较模型。评价结果见表1和表2a。该方法与已有工作[17]的MOS值差为0.09,CMOS值和置信区间分别为0.201和±0.105。实验结果表明,该方法显著提高了合成语音的质量。此外,我们使用[18]方法对CMOS进行了评估,该方法在不同的结构和训练机制下表现出良好的性能。为了评估,我们使用官方实现和预训练权重生成样本。实验结果的CMOS和置信区间分别为0.176和±0.125,表明该方法明显优于传统方法。

    1.5.2 消融研究

    为验证所提方法的有效性,进行了消融研究。为验证对抗学习训练的随机时间预测器的有效性,将其替换为具有相同结构的确定性时间预测器,并使用L2损失进行训练。确定性时间预测器的训练步骤与之前的工作[17]相同。为验证对齐搜索中使用的噪声调度的有效性,对模型进行无噪声训练。为了验证模型的有效性,在归一化流程中没有transformer模块的情况下对模型进行训练。评价结果如表1所示。确定性持续时间预测器、无噪声的对准搜索和无变压器块的归一化流的消融研究的MOS差值分别为0.14、0.15和0.06。由于不使用空白标记和线性语谱图,计算效率将得到提高,删除一些所提出的方法与之前的工作[17]相比,性能较低。实验结果表明,所提方法在提高图像质量方面是有效的。

    1.5.3 说话人相似度评估

    为了确认多说话人模型中说话人相似度的提升,通过众包的方式进行了类似于之前工作的相似度MOS测试。在测试中,从测试集中随机采样的人类录制音频作为参考,评分者以1到5的五分制对参考音频和相应合成音频之间的相似性进行评分。如4.1节所述,允许评价者对每个音频样本进行一次评估,并对音频样本进行归一化。评价结果见表2b。VITS2的评分比[17]高0.2个MOS,表明该方法在多说话人建模时能够有效提高说话人相似度。

    1.5.4 减少对音素转换的依赖

    之前的工作[17,26]在单阶段方法中表现出良好的性能,但仍然对音素转换有很强的依赖性。因为规范化的文本并没有告知它的实际发音,这使得学习准确的发音具有挑战性。这是目前实现完全端到端单阶段语音合成的一个关键障碍。本文提出,该方法通过可懂度测试显著改善了这个问题。在使用谷歌的自动语音识别API转录测试集中的500个合成音频后,我们以真实文本为参考计算字符错误率(CER)。我们将以下四个模型的结果与真实值进行了比较:提出的模型使用音素序列,提出的模型使用规范化文本,之前的工作使用音素序列,以及之前的工作使用规范化文本。表3给出了对比,这证实了提出的模型不仅优于之前的工作,而且我们的模型在使用归一化文本时的性能与使用音素序列的模型相当。它展示了数据驱动的、完全端到端方法的可能性。

    1.5.5 综合和训练速度的比较

    我们将该模型的综合和训练速度与之前的工作进行了比较。我们测量了从LJ语音数据集中随机选择的500个句子,从输入序列中生成原始波形的整个过程的同步经过时间。我们使用单个NVIDIA V100 GPU,批处理大小为1。我们还在四块NVIDIA V100 gpu上测量并平均了五个epoch中每个步骤的训练计算经过的时间。表4显示了结果。由于该预测器比以往的工作更高效、可单独训练、输入序列更短,因此提高了训练和合成速度;性能提升分别为20.5%和22.7%。

    1.6 结论

    本文提出VITS2,一种单阶段的文本到语音模型,可以有效地合成更自然的语音。通过在时长预测器中引入对抗学习,提高了训练推理效率和自然度。将transformer块添加到规范化流中,以捕获在转换分布时的长期依赖关系。通过在对齐搜索中引入高斯噪声,提高了合成质量。对音素转换的依赖显著减少,这对实现完全端到端单阶段语音合成构成了挑战。测试结果也表明,整体可懂度得到了提升。通过实验、质量评估和计算速度测量,验证了所提方法的有效性。在语音合成领域仍然存在着各种必须解决的问题,我们希望我们的工作可以作为未来研究的基础。

    2 使用Bert-VITS2-2.3训练个性化语音

    2.1 conda环境准备

    conda环境准备详见:annoconda

    2.2 运行环境构建

    1. git clone https://github.com/v3ucn/Bert-vits2-V2.3.git
    2. cd Bert-VITS2-2.3
    3. conda create -n vits2 python=3.9
    4. conda activate vits2
    5. pip install torch==2.2.1 torchvision==0.17.1 torchaudio==2.2.1 --index-url https://download.pytorch.org/whl/cu118
    6. pip install -r requirements.txt
    7. pip install openai-whisper
    8. conda install ffmpeg

    2.3 预训练模型下载

    2.3.1 bert模型下载

     

    1. !wget -P slm/wavlm-base-plus/ https://huggingface.co/microsoft/wavlm-base-plus/resolve/main/pytorch_model.bin
    2. !wget -P emotional/clap-htsat-fused/ https://huggingface.co/laion/clap-htsat-fused/resolve/main/pytorch_model.bin
    3. !wget -P emotional/wav2vec2-large-robust-12-ft-emotion-msp-dim/ https://huggingface.co/audeering/wav2vec2-large-robust-12-ft-emotion-msp-dim/resolve/main/pytorch_model.bin
    4. !wget -P bert/chinese-roberta-wwm-ext-large/ https://huggingface.co/hfl/chinese-roberta-wwm-ext-large/resolve/main/pytorch_model.bin
    5. !wget -P bert/deberta-v2-large-japanese-char-wwm/ https://huggingface.co/ku-nlp/deberta-v2-large-japanese-char-wwm/blob/main/pytorch_model.bin
    6. !wget -P bert/deberta-v3-large/ https://huggingface.co/microsoft/deberta-v3-large/resolve/main/pytorch_model.bin
    7. !wget -P bert/deberta-v3-large/ https://huggingface.co/microsoft/deberta-v3-large/resolve/main/pytorch_model.generator.bin
    8. !wget -P bert/deberta-v2-large-japanese/ https://huggingface.co/ku-nlp/deberta-v2-large-japanese/resolve/main/pytorch_model.bin

    通过命令查看下载的中文模型,显示如下:

    1. [root@localhost Bert-VITS2-2.3]# ll bert/chinese-roberta-wwm-ext-large/
    2. 总用量 1276256
    3. -rw-r--r--. 1 root root 3 34 19:26 added_tokens.json
    4. -rw-r--r--. 1 root root 690 34 19:26 config.json
    5. -rw-r--r--. 1 root root 1306484351 34 19:27 pytorch_model.bin
    6. -rw-r--r--. 1 root root 2063 34 19:27 README.md
    7. -rw-r--r--. 1 root root 113 34 19:27 special_tokens_map.json
    8. -rw-r--r--. 1 root root 20 34 19:27 tokenizer_config.json
    9. -rw-r--r--. 1 root root 268962 34 19:27 tokenizer.json
    10. -rw-r--r--. 1 root root 109540 34 19:27 vocab.txt

    通过命令查看下载的英文模型,显示如下: 

    1. [root@localhost Bert-VITS2-2.3]# ll bert/deberta-v3-large/
    2. 总用量 855624
    3. -rw-r--r--. 1 root root 580 34 19:29 config.json
    4. -rw-r--r--. 1 root root 560 34 19:29 generator_config.json
    5. -rw-r--r--. 1 root root 873673253 34 19:31 pytorch_model.bin
    6. -rw-r--r--. 1 root root 3263 34 19:31 README.md
    7. -rw-r--r--. 1 root root 2464616 34 19:31 spm.model
    8. -rw-r--r--. 1 root root 52 34 19:31 tokenizer_config.json

    通过命令查看下载的日文模型,显示如下: 

    1. [root@localhost Bert-VITS2-2.3]# ll bert/deberta-v2-large-japanese-char-wwm
    2. 总用量 1287660
    3. -rw-r--r--. 1 root root 895 34 19:27 config.json
    4. -rw-r--r--. 1 root root 1318456639 34 19:29 pytorch_model.bin
    5. -rw-r--r--. 1 root root 3471 34 19:29 README.md
    6. -rw-r--r--. 1 root root 125 34 19:29 special_tokens_map.json
    7. -rw-r--r--. 1 root root 520 34 19:29 tokenizer_config.json
    8. -rw-r--r--. 1 root root 88150 34 19:29 vocab.txt

    测试bert模型:

    1. export PYTHONPATH=$PYTHONPATH:${cur_dir}
    2. python ./text/chinese_bert.py
    3. python ./text/japanese_bert.py

    2.3.2 VITS2预训练模型

    1. !wget -P checkpoints/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/DUR_0.pth
    2. !wget -P checkpoints/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/D_0.pth
    3. !wget -P checkpoints/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/G_0.pth
    4. !wget -P checkpoints/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/WD_0.pth

    下载完成后,命令查看显示如下:

    1. [root@localhost Bert-VITS2-2.3]# ll checkpoints/
    2. 总用量 1262412
    3. -rw-r--r--. 1 root root 561078330 34 19:32 D_0.pth
    4. -rw-r--r--. 1 root root 13943737 34 19:31 DUR_0.pth
    5. -rw-r--r--. 1 root root 703575766 34 19:39 G_0.pth
    6. -rw-r--r--. 1 root root 14098786 34 19:48 WD_0.pth

    2.4 数据预处理

    2.4.1 长音频分割与自动识别

    1. mkdir -p data
    2. mkdir -p data/long
    3. mkdir -p data/short
    4. mkdir -p data/long/zhang

    新建data目录,在data的目录下新建long的文件夹,存储长音频文件,在long下新建用户zhang的长音频,把长音频放在data/long/zhang目录下,如下所示:

    1. [root@localhost Bert-VITS2-2.3]# ll data/long/zhang
    2. 总用量 7584
    3. -rw-r--r--. 1 root root 7764536 35 14:38 zhang01.wav

    下载whisper模型,存储到~/.cache/whisper/目录下:

    !wget -P ~/.cache/whisper/ https://openaipublic.azureedge.net/main/whisper/models/345ae4da62f9b3d59415adc60127b97c714f32e89e936602e85993674d08dcb1/medium.pt

    创建python文件

    vi split_long_audio.py
    1. import os
    2. from pathlib import Path
    3. import librosa
    4. from scipy.io import wavfile
    5. import numpy as np
    6. import whisper
    7. def split_long_audio(model, filepaths, save_dir, person, out_sr=44100):
    8. files = os.listdir(filepaths)
    9. filepaths=[os.path.join(filepaths, i) for i in files]
    10. for file_idx, filepath in enumerate(filepaths):
    11. save_path = Path(save_dir)
    12. save_path.mkdir(exist_ok=True, parents=True)
    13. print(f"Transcribing file {file_idx}: '{filepath}' to segments...")
    14. result = model.transcribe(filepath, word_timestamps=True, task="transcribe", beam_size=5, best_of=5)
    15. segments = result['segments']
    16. wav, sr = librosa.load(filepath, sr=None, offset=0, duration=None, mono=True)
    17. wav, _ = librosa.effects.trim(wav, top_db=20)
    18. peak = np.abs(wav).max()
    19. if peak > 1.0:
    20. wav = 0.98 * wav / peak
    21. wav2 = librosa.resample(wav, orig_sr=sr, target_sr=out_sr)
    22. wav2 /= max(wav2.max(), -wav2.min())
    23. for i, seg in enumerate(segments):
    24. start_time = seg['start']
    25. end_time = seg['end']
    26. wav_seg = wav2[int(start_time * out_sr):int(end_time * out_sr)]
    27. wav_seg_name = f"{person}_{i}.wav"
    28. i += 1
    29. out_fpath = save_path / wav_seg_name
    30. wavfile.write(out_fpath, rate=out_sr, data=(wav_seg * np.iinfo(np.int16).max).astype(np.int16))
    31. # 使用whisper语音识别
    32. def transcribe_one(audio_path):
    33. audio = whisper.load_audio(audio_path)
    34. audio = whisper.pad_or_trim(audio)
    35. mel = whisper.log_mel_spectrogram(audio).to(model.device)
    36. _, probs = model.detect_language(mel)
    37. print(f"Detected language: {max(probs, key=probs.get)}")
    38. lang = max(probs, key=probs.get)
    39. options = whisper.DecodingOptions(beam_size=5)
    40. result = whisper.decode(model, mel, options)
    41. print(result.text)
    42. return result.text
    43. if __name__ == '__main__':
    44. whisper_size = "medium"
    45. model = whisper.load_model(whisper_size)
    46. persons = ['zhang']
    47. for person in persons:
    48. audio_path = f"./data/short/{person}"
    49. if os.path.exists(audio_path):
    50. for filename in os.listdir(audio_path):
    51. file_path = os.path.join(audio_path, filename)
    52. os.remove(file_path)
    53. split_long_audio(model, f"./data/long/{person}", f"./data/short/{person}", person)
    54. files = os.listdir(audio_path)
    55. file_list_sorted = sorted(files, key=lambda x: int(os.path.splitext(x)[0].split('_')[1]))
    56. filepaths = [os.path.join(audio_path, i) for i in file_list_sorted]
    57. for file_idx, filepath in enumerate(filepaths):
    58. text = transcribe_one(filepath)
    59. with open(f"./data/short/{person}/{person}_{file_idx}.lab", 'w') as f:
    60. f.write(text)

     运行上面的文件

    python split_long_audio.py

    运行完成后,长音频被切割为短音频,存储在data/short目录下,如下所示

    1. [root@localhost Bert-VITS2-2.3]# ll data/short/zhang/
    2. 总用量 9948
    3. -rw-r--r--. 1 root root 57 35 19:06 zhang_0.lab
    4. -rw-r--r--. 1 root root 328150 35 19:06 zhang_0.wav
    5. -rw-r--r--. 1 root root 15 35 19:06 zhang_10.lab
    6. -rw-r--r--. 1 root root 97066 35 19:06 zhang_10.wav
    7. -rw-r--r--. 1 root root 12 35 19:06 zhang_11.lab
    8. -rw-r--r--. 1 root root 128816 35 19:06 zhang_11.wav
    9. -rw-r--r--. 1 root root 33 35 19:06 zhang_12.lab
    10. -rw-r--r--. 1 root root 209960 35 19:06 zhang_12.wav
    11. -rw-r--r--. 1 root root 36 35 19:06 zhang_13.lab
    12. -rw-r--r--. 1 root root 234656 35 19:06 zhang_13.wav
    13. -rw-r--r--. 1 root root 27 35 19:06 zhang_14.lab
    14. -rw-r--r--. 1 root root 202904 35 19:06 zhang_14.wav
    15. -rw-r--r--. 1 root root 472 35 19:06 zhang_15.lab
    16. -rw-r--r--. 1 root root 455154 35 19:06 zhang_15.wav
    17. -rw-r--r--. 1 root root 43 35 19:06 zhang_16.lab
    18. -rw-r--r--. 1 root root 400474 35 19:06 zhang_16.wav
    19. -rw-r--r--. 1 root root 27 35 19:06 zhang_17.lab
    20. -rw-r--r--. 1 root root 142928 35 19:06 zhang_17.wav
    21. -rw-r--r--. 1 root root 30 35 19:06 zhang_18.lab
    22. -rw-r--r--. 1 root root 179972 35 19:06 zhang_18.wav
    23. -rw-r--r--. 1 root root 9 35 19:06 zhang_19.lab
    24. -rw-r--r--. 1 root root 81188 35 19:06 zhang_19.wav
    25. -rw-r--r--. 1 root root 37 35 19:06 zhang_1.lab
    26. -rw-r--r--. 1 root root 255824 35 19:06 zhang_1.wav
    27. -rw-r--r--. 1 root root 18 35 19:06 zhang_20.lab
    28. -rw-r--r--. 1 root root 125288 35 19:06 zhang_20.wav
    29. -rw-r--r--. 1 root root 21 35 19:06 zhang_21.lab
    30. -rw-r--r--. 1 root root 171152 35 19:06 zhang_21.wav
    31. -rw-r--r--. 1 root root 23 35 19:06 zhang_22.lab
    32. -rw-r--r--. 1 root root 239948 35 19:06 zhang_22.wav
    33. -rw-r--r--. 1 root root 39 35 19:06 zhang_23.lab
    34. -rw-r--r--. 1 root root 229364 35 19:06 zhang_23.wav
    35. -rw-r--r--. 1 root root 28 35 19:06 zhang_24.lab
    36. -rw-r--r--. 1 root root 241712 35 19:06 zhang_24.wav
    37. -rw-r--r--. 1 root root 27 35 19:06 zhang_25.lab
    38. -rw-r--r--. 1 root root 201140 35 19:06 zhang_25.wav
    39. -rw-r--r--. 1 root root 36 35 19:06 zhang_26.lab
    40. -rw-r--r--. 1 root root 185264 35 19:06 zhang_26.wav
    41. -rw-r--r--. 1 root root 12 35 19:06 zhang_27.lab
    42. -rw-r--r--. 1 root root 183500 35 19:06 zhang_27.wav
    43. -rw-r--r--. 1 root root 47 35 19:06 zhang_28.lab
    44. -rw-r--r--. 1 root root 213488 35 19:06 zhang_28.wav
    45. -rw-r--r--. 1 root root 21 35 19:06 zhang_29.lab
    46. -rw-r--r--. 1 root root 119996 35 19:06 zhang_29.wav
    47. -rw-r--r--. 1 root root 24 35 19:06 zhang_2.lab
    48. -rw-r--r--. 1 root root 123524 35 19:06 zhang_2.wav
    49. -rw-r--r--. 1 root root 27 35 19:06 zhang_30.lab
    50. -rw-r--r--. 1 root root 185262 35 19:06 zhang_30.wav
    51. -rw-r--r--. 1 root root 34 35 19:06 zhang_31.lab
    52. -rw-r--r--. 1 root root 158806 35 19:06 zhang_31.wav
    53. -rw-r--r--. 1 root root 24 35 19:06 zhang_32.lab
    54. -rw-r--r--. 1 root root 139400 35 19:06 zhang_32.wav
    55. -rw-r--r--. 1 root root 36 35 19:06 zhang_33.lab
    56. -rw-r--r--. 1 root root 284048 35 19:06 zhang_33.wav
    57. -rw-r--r--. 1 root root 33 35 19:06 zhang_34.lab
    58. -rw-r--r--. 1 root root 187026 35 19:06 zhang_34.wav
    59. -rw-r--r--. 1 root root 25 35 19:06 zhang_35.lab
    60. -rw-r--r--. 1 root root 139402 35 19:06 zhang_35.wav
    61. -rw-r--r--. 1 root root 20 35 19:06 zhang_36.lab
    62. -rw-r--r--. 1 root root 88244 35 19:06 zhang_36.wav
    63. -rw-r--r--. 1 root root 18 35 19:06 zhang_37.lab
    64. -rw-r--r--. 1 root root 273464 35 19:06 zhang_37.wav
    65. -rw-r--r--. 1 root root 24 35 19:06 zhang_38.lab
    66. -rw-r--r--. 1 root root 213486 35 19:06 zhang_38.wav
    67. -rw-r--r--. 1 root root 36 35 19:06 zhang_39.lab
    68. -rw-r--r--. 1 root root 172918 35 19:06 zhang_39.wav
    69. -rw-r--r--. 1 root root 24 35 19:06 zhang_3.lab
    70. -rw-r--r--. 1 root root 164096 35 19:06 zhang_3.wav
    71. -rw-r--r--. 1 root root 1 35 19:06 zhang_40.lab
    72. -rw-r--r--. 1 root root 54728 35 19:06 zhang_40.wav
    73. -rw-r--r--. 1 root root 9 35 19:06 zhang_41.lab
    74. -rw-r--r--. 1 root root 107650 35 19:06 zhang_41.wav
    75. -rw-r--r--. 1 root root 30 35 19:06 zhang_42.lab
    76. -rw-r--r--. 1 root root 134108 35 19:06 zhang_42.wav
    77. -rw-r--r--. 1 root root 18 35 19:06 zhang_43.lab
    78. -rw-r--r--. 1 root root 225836 35 19:06 zhang_43.wav
    79. -rw-r--r--. 1 root root 9 35 19:06 zhang_44.lab
    80. -rw-r--r--. 1 root root 234656 35 19:06 zhang_44.wav
    81. -rw-r--r--. 1 root root 39 35 19:06 zhang_45.lab
    82. -rw-r--r--. 1 root root 206432 35 19:06 zhang_45.wav
    83. -rw-r--r--. 1 root root 34 35 19:06 zhang_46.lab
    84. -rw-r--r--. 1 root root 174680 35 19:06 zhang_46.wav
    85. -rw-r--r--. 1 root root 21 35 19:06 zhang_47.lab
    86. -rw-r--r--. 1 root root 104120 35 19:06 zhang_47.wav
    87. -rw-r--r--. 1 root root 27 35 19:06 zhang_48.lab
    88. -rw-r--r--. 1 root root 79424 35 19:06 zhang_48.wav
    89. -rw-r--r--. 1 root root 6 35 19:06 zhang_49.lab
    90. -rw-r--r--. 1 root root 118232 35 19:06 zhang_49.wav
    91. -rw-r--r--. 1 root root 24 35 19:06 zhang_4.lab
    92. -rw-r--r--. 1 root root 179972 35 19:06 zhang_4.wav
    93. -rw-r--r--. 1 root root 28 35 19:06 zhang_50.lab
    94. -rw-r--r--. 1 root root 329912 35 19:06 zhang_50.wav
    95. -rw-r--r--. 1 root root 18 35 19:06 zhang_51.lab
    96. -rw-r--r--. 1 root root 142928 35 19:06 zhang_51.wav
    97. -rw-r--r--. 1 root root 21 35 19:06 zhang_52.lab
    98. -rw-r--r--. 1 root root 104120 35 19:06 zhang_52.wav
    99. -rw-r--r--. 1 root root 9 35 19:06 zhang_53.lab
    100. -rw-r--r--. 1 root root 179972 35 19:06 zhang_53.wav
    101. -rw-r--r--. 1 root root 9 35 19:06 zhang_5.lab
    102. -rw-r--r--. 1 root root 95300 35 19:06 zhang_5.wav
    103. -rw-r--r--. 1 root root 15 35 19:06 zhang_6.lab
    104. -rw-r--r--. 1 root root 88244 35 19:06 zhang_6.wav
    105. -rw-r--r--. 1 root root 45 35 19:06 zhang_7.lab
    106. -rw-r--r--. 1 root root 217016 35 19:06 zhang_7.wav
    107. -rw-r--r--. 1 root root 12 35 19:06 zhang_8.lab
    108. -rw-r--r--. 1 root root 72368 35 19:06 zhang_8.wav
    109. -rw-r--r--. 1 root root 31 35 19:06 zhang_9.lab
    110. -rw-r--r--. 1 root root 243474 35 19:06 zhang_9.wav

    2.4.2 生成预处理文本

    vi gen_filelist.py
    1. import os
    2. out_file = f"filelists/full.txt"
    3. def process():
    4. persons = ['zhang']
    5. ch_language = 'ZH'
    6. with open(out_file, 'w', encoding="Utf-8") as wf:
    7. for person in persons:
    8. path = f"./data/short/{person}"
    9. files = os.listdir(path)
    10. for f in files:
    11. if f.endswith(".lab"):
    12. with open(os.path.join(path, f), 'r', encoding="utf-8") as perFile:
    13. line = perFile.readline()
    14. result = f"./data/short/{person}/{f.split('.')[0]}.wav|{person}|{ch_language}|{line}"
    15. wf.write(f"{result}\n")
    16. if __name__ == "__main__":
    17. process()

     运行文件

    python gen_filelist.py

    运行成功后,在filelists下生成txt文件,如下所示:

    1. [root@localhost Bert-VITS2-2.3]# ll filelists/
    2. 总用量 1080
    3. -rw-r--r--. 1 root root 140641 35 19:15 full.txt

    2.4.3 调用文本预处理

    python preprocess_text.py

    如出现nltk_data下载失败,解决方案:nltk_data下载失败问题解决

    再次运行python preprocess_text.py,显示如下:

    1. 已根据默认配置文件default_config.yml生成配置文件config.yml。请按该配置文件的说明进行配置后重新运行。
    2. 如无特殊需求,请勿修改default_config.yml或备份该文件。

    更改根目录下config.yml配置文件,配置如下:

    1. # 全局配置
    2. # 对于希望在同一时间使用多个配置文件的情况,例如两个GPU同时跑两个训练集:通过环境变量指定配置文件,不指定则默认为./config.yml
    3. # 拟提供通用路径配置,统一存放数据,避免数据放得很乱
    4. # 每个数据集与其对应的模型存放至统一路径下,后续所有的路径配置均为相对于datasetPath的路径
    5. # 不填或者填空则路径为相对于项目根目录的路径
    6. dataset_path: ""
    7. # 模型镜像源,默认huggingface,使用openi镜像源需指定openi_token
    8. mirror: ""
    9. openi_token: "" # openi token
    10. # resample 音频重采样配置
    11. # 注意, “:” 后需要加空格
    12. resample:
    13. # 目标重采样率
    14. sampling_rate: 44100
    15. # 音频文件输入路径,重采样会将该路径下所有.wav音频文件重采样
    16. # 请填入相对于datasetPath的相对路径
    17. in_dir: "data/short" # 相对于根目录的路径为 /datasetPath/in_dir
    18. # 音频文件重采样后输出路径
    19. out_dir: "data/short"
    20. # preprocess_text 数据集预处理相关配置
    21. # 注意, “:” 后需要加空格
    22. preprocess_text:
    23. # 原始文本文件路径,文本格式应为{wav_path}|{speaker_name}|{language}|{text}。
    24. transcription_path: "filelists/full.txt"
    25. # 数据清洗后文本路径,可以不填。不填则将在原始文本目录生成
    26. cleaned_path: ""
    27. # 训练集路径
    28. train_path: "filelists/train.list"
    29. # 验证集路径
    30. val_path: "filelists/val.list"
    31. # 配置文件路径
    32. config_path: "configs/config.json"
    33. # 每个语言的验证集条数
    34. val_per_lang: 4
    35. # 验证集最大条数,多于的会被截断并放到训练集中
    36. max_val_total: 12
    37. # 是否进行数据清洗
    38. clean: true
    39. # bert_gen 相关配置
    40. # 注意, “:” 后需要加空格
    41. bert_gen:
    42. # 训练数据集配置文件路径
    43. config_path: "configs/config.json"
    44. # 并行数
    45. num_processes: 4
    46. # 使用设备:可选项 "cuda" 显卡推理,"cpu" cpu推理
    47. # 该选项同时决定了get_bert_feature的默认设备
    48. device: "cuda"
    49. # 使用多卡推理
    50. use_multi_device: false
    51. # emo_gen 相关配置
    52. # 注意, “:” 后需要加空格
    53. emo_gen:
    54. # 训练数据集配置文件路径
    55. config_path: "configs/config.json"
    56. # 并行数
    57. num_processes: 4
    58. # 使用设备:可选项 "cuda" 显卡推理,"cpu" cpu推理
    59. device: "cuda"
    60. # 使用多卡推理
    61. use_multi_device: false
    62. # train 训练配置
    63. # 注意, “:” 后需要加空格
    64. train_ms:
    65. env:
    66. MASTER_ADDR: "localhost"
    67. MASTER_PORT: 10086
    68. WORLD_SIZE: 1
    69. LOCAL_RANK: 0
    70. RANK: 0
    71. # 可以填写任意名的环境变量
    72. # THE_ENV_VAR_YOU_NEED_TO_USE: "1234567"
    73. # 底模设置
    74. base:
    75. use_base_model: false
    76. repo_id: "Stardust_minus/Bert-VITS2"
    77. model_image: "Bert-VITS2_2.2-Clap底模" # openi网页的模型名
    78. # 训练模型存储目录:与旧版本的区别,原先数据集是存放在logs/model_name下的,现在改为统一存放在Data/你的数据集/models下
    79. model: "checkpoints"
    80. # 配置文件路径
    81. config_path: "configs/config.json"
    82. # 训练使用的worker,不建议超过CPU核心数
    83. num_workers: 16
    84. # 关闭此项可以节约接近50%的磁盘空间,但是可能导致实际训练速度变慢和更高的CPU使用率。
    85. spec_cache: True
    86. # 保存的检查点数量,多于此数目的权重会被删除来节省空间。
    87. keep_ckpts: 8
    88. # webui webui配置
    89. # 注意, “:” 后需要加空格
    90. webui:
    91. # 推理设备
    92. device: "cuda"
    93. # 模型路径
    94. model: "checkpoints/G_104000.pth"
    95. # 配置文件路径
    96. config_path: "configs/config.json"
    97. # 端口号
    98. port: 7860
    99. # 是否公开部署,对外网开放
    100. share: false
    101. # 是否开启debug模式
    102. debug: false
    103. # 语种识别库,可选langid, fastlid
    104. language_identification_library: "langid"
    105. # server-fastapi配置
    106. # 注意, “:” 后需要加空格
    107. # 注意,本配置下的所有配置均为相对于根目录的路径
    108. server:
    109. # 端口号
    110. port: 5000
    111. # 模型默认使用设备:但是当前并没有实现这个配置。
    112. device: "cuda"
    113. # 需要加载的所有模型的配置,可以填多个模型,也可以不填模型,等网页成功后手动加载模型
    114. # 不加载模型的配置格式:删除默认给的两个模型配置,给models赋值 [ ],也就是空列表。参考模型2的speakers 即 models: [ ]
    115. # 注意,所有模型都必须正确配置model与config的路径,空路径会导致加载错误。
    116. # 也可以不填模型,等网页加载成功后手动填写models。
    117. models:
    118. - # 模型的路径
    119. model: ""
    120. # 模型config.json的路径
    121. config: ""
    122. # 模型使用设备,若填写则会覆盖默认配置
    123. device: "cuda"
    124. # 模型默认使用的语言
    125. language: "ZH"
    126. # 模型人物默认参数
    127. # 不必填写所有人物,不填的使用默认值
    128. # 暂时不用填写,当前尚未实现按人区分配置
    129. speakers:
    130. - speaker: "科比"
    131. sdp_ratio: 0.2
    132. noise_scale: 0.6
    133. noise_scale_w: 0.8
    134. length_scale: 1
    135. - speaker: "五条悟"
    136. sdp_ratio: 0.3
    137. noise_scale: 0.7
    138. noise_scale_w: 0.8
    139. length_scale: 0.5
    140. - speaker: "安倍晋三"
    141. sdp_ratio: 0.2
    142. noise_scale: 0.6
    143. noise_scale_w: 0.8
    144. length_scale: 1.2
    145. - # 模型的路径
    146. model: ""
    147. # 模型config.json的路径
    148. config: ""
    149. # 模型使用设备,若填写则会覆盖默认配置
    150. device: "cpu"
    151. # 模型默认使用的语言
    152. language: "JP"
    153. # 模型人物默认参数
    154. # 不必填写所有人物,不填的使用默认值
    155. speakers: [ ] # 也可以不填
    156. # 百度翻译开放平台 api配置
    157. # api接入文档 https://api.fanyi.baidu.com/doc/21
    158. # 请不要在github等网站公开分享你的app id 与 key
    159. translate:
    160. # 你的APPID
    161. "app_key": ""
    162. # 你的密钥
    163. "secret_key": ""

     运行该脚本后,filelists文件夹下会生成.clean等文件,如下所示

    1. [root@localhost Bert-VITS2-2.3]# ll filelists/
    2. 总用量 1516
    3. -rw-r--r--. 1 root root 130606 35 19:52 full.txt
    4. -rw-r--r--. 1 root root 466277 35 19:55 full.txt.cleaned
    5. -rw-r--r--. 1 root root 119 34 19:57 sample.list
    6. -rw-r--r--. 1 root root 464364 35 19:55 train.list
    7. -rw-r--r--. 1 root root 474663 34 19:57 train.txt
    8. -rw-r--r--. 1 root root 1913 35 19:55 val.list
    9. -rw-r--r--. 1 root root 2724 34 19:57 val.txt

    2.4.4 重采样

    python resample.py

    重采样后的音频文件会覆盖原来的文件。

    2.4.5 生成pt文件

    python bert_gen.py

    运行完成后显示如下:

    1. [root@localhost Bert-VITS2-2.3]# python resample.py
    2. 1170it [00:09, 117.80it/s]
    3. 音频重采样完毕!
    4. (vits2) [root@localhost Bert-VITS2-2.3]# python bert_gen.py
    5. bert生成完毕!, 共有1111个bert.pt生成!
    6. (vits2) [root@localhost Bert-VITS2-2.3]# ll data/short/zhang/
    7. 总用量 15824
    8. -rw-r--r--. 1 root root 57 35 19:06 zhang_0.lab
    9. -rw-r--r--. 1 root root 328150 35 19:56 zhang_0.wav
    10. -rw-r--r--. 1 root root 15 35 19:06 zhang_10.lab
    11. -rw-r--r--. 1 root root 97066 35 19:56 zhang_10.wav
    12. -rw-r--r--. 1 root root 12 35 19:06 zhang_11.lab
    13. -rw-r--r--. 1 root root 128816 35 19:56 zhang_11.wav
    14. -rw-r--r--. 1 root root 33 35 19:06 zhang_12.lab
    15. -rw-r--r--. 1 root root 209960 35 19:56 zhang_12.wav
    16. -rw-r--r--. 1 root root 36 35 19:06 zhang_13.lab
    17. -rw-r--r--. 1 root root 234656 35 19:56 zhang_13.wav
    18. -rw-r--r--. 1 root root 27 35 19:06 zhang_14.lab
    19. -rw-r--r--. 1 root root 202904 35 19:56 zhang_14.wav
    20. -rw-r--r--. 1 root root 472 35 19:06 zhang_15.lab
    21. -rw-r--r--. 1 root root 455154 35 19:56 zhang_15.wav
    22. -rw-r--r--. 1 root root 43 35 19:06 zhang_16.lab
    23. -rw-r--r--. 1 root root 400474 35 19:56 zhang_16.wav
    24. -rw-r--r--. 1 root root 27 35 19:06 zhang_17.lab
    25. -rw-r--r--. 1 root root 142928 35 19:56 zhang_17.wav
    26. -rw-r--r--. 1 root root 30 35 19:06 zhang_18.lab
    27. -rw-r--r--. 1 root root 179972 35 19:56 zhang_18.wav
    28. -rw-r--r--. 1 root root 9 35 19:06 zhang_19.lab
    29. -rw-r--r--. 1 root root 81188 35 19:56 zhang_19.wav
    30. -rw-r--r--. 1 root root 37 35 19:06 zhang_1.lab
    31. -rw-r--r--. 1 root root 255824 35 19:56 zhang_1.wav
    32. -rw-r--r--. 1 root root 18 35 19:06 zhang_20.lab
    33. -rw-r--r--. 1 root root 125288 35 19:56 zhang_20.wav
    34. -rw-r--r--. 1 root root 21 35 19:06 zhang_21.lab
    35. -rw-r--r--. 1 root root 171152 35 19:56 zhang_21.wav
    36. -rw-r--r--. 1 root root 23 35 19:06 zhang_22.lab
    37. -rw-r--r--. 1 root root 239948 35 19:56 zhang_22.wav
    38. -rw-r--r--. 1 root root 39 35 19:06 zhang_23.lab
    39. -rw-r--r--. 1 root root 229364 35 19:56 zhang_23.wav
    40. -rw-r--r--. 1 root root 28 35 19:06 zhang_24.lab
    41. -rw-r--r--. 1 root root 241712 35 19:56 zhang_24.wav
    42. -rw-r--r--. 1 root root 27 35 19:06 zhang_25.lab
    43. -rw-r--r--. 1 root root 201140 35 19:56 zhang_25.wav
    44. -rw-r--r--. 1 root root 36 35 19:06 zhang_26.lab
    45. -rw-r--r--. 1 root root 185264 35 19:56 zhang_26.wav
    46. -rw-r--r--. 1 root root 12 35 19:06 zhang_27.lab
    47. -rw-r--r--. 1 root root 183500 35 19:56 zhang_27.wav
    48. -rw-r--r--. 1 root root 47 35 19:06 zhang_28.lab
    49. -rw-r--r--. 1 root root 213488 35 19:56 zhang_28.wav
    50. -rw-r--r--. 1 root root 21 35 19:06 zhang_29.lab
    51. -rw-r--r--. 1 root root 119996 35 19:56 zhang_29.wav
    52. -rw-r--r--. 1 root root 24 35 19:06 zhang_2.lab
    53. -rw-r--r--. 1 root root 123524 35 19:56 zhang_2.wav
    54. -rw-r--r--. 1 root root 27 35 19:06 zhang_30.lab
    55. -rw-r--r--. 1 root root 185262 35 19:56 zhang_30.wav
    56. -rw-r--r--. 1 root root 34 35 19:06 zhang_31.lab
    57. -rw-r--r--. 1 root root 158806 35 19:56 zhang_31.wav
    58. -rw-r--r--. 1 root root 24 35 19:06 zhang_32.lab
    59. -rw-r--r--. 1 root root 139400 35 19:56 zhang_32.wav
    60. -rw-r--r--. 1 root root 36 35 19:06 zhang_33.lab
    61. -rw-r--r--. 1 root root 284048 35 19:56 zhang_33.wav
    62. -rw-r--r--. 1 root root 33 35 19:06 zhang_34.lab
    63. -rw-r--r--. 1 root root 187026 35 19:56 zhang_34.wav
    64. -rw-r--r--. 1 root root 25 35 19:06 zhang_35.lab
    65. -rw-r--r--. 1 root root 139402 35 19:56 zhang_35.wav
    66. -rw-r--r--. 1 root root 20 35 19:06 zhang_36.lab
    67. -rw-r--r--. 1 root root 88244 35 19:56 zhang_36.wav
    68. -rw-r--r--. 1 root root 18 35 19:06 zhang_37.lab
    69. -rw-r--r--. 1 root root 273464 35 19:56 zhang_37.wav
    70. -rw-r--r--. 1 root root 24 35 19:06 zhang_38.lab
    71. -rw-r--r--. 1 root root 213486 35 19:56 zhang_38.wav
    72. -rw-r--r--. 1 root root 36 35 19:06 zhang_39.lab
    73. -rw-r--r--. 1 root root 172918 35 19:56 zhang_39.wav
    74. -rw-r--r--. 1 root root 24 35 19:06 zhang_3.lab
    75. -rw-r--r--. 1 root root 164096 35 19:56 zhang_3.wav
    76. -rw-r--r--. 1 root root 1 35 19:06 zhang_40.lab
    77. -rw-r--r--. 1 root root 54728 35 19:56 zhang_40.wav
    78. -rw-r--r--. 1 root root 9 35 19:06 zhang_41.lab
    79. -rw-r--r--. 1 root root 107650 35 19:56 zhang_41.wav
    80. -rw-r--r--. 1 root root 30 35 19:06 zhang_42.lab
    81. -rw-r--r--. 1 root root 134108 35 19:56 zhang_42.wav
    82. -rw-r--r--. 1 root root 18 35 19:06 zhang_43.lab
    83. -rw-r--r--. 1 root root 225836 35 19:56 zhang_43.wav
    84. -rw-r--r--. 1 root root 9 35 19:06 zhang_44.lab
    85. -rw-r--r--. 1 root root 234656 35 19:56 zhang_44.wav
    86. -rw-r--r--. 1 root root 39 35 19:06 zhang_45.lab
    87. -rw-r--r--. 1 root root 206432 35 19:56 zhang_45.wav
    88. -rw-r--r--. 1 root root 34 35 19:06 zhang_46.lab
    89. -rw-r--r--. 1 root root 174680 35 19:56 zhang_46.wav
    90. -rw-r--r--. 1 root root 21 35 19:06 zhang_47.lab
    91. -rw-r--r--. 1 root root 104120 35 19:56 zhang_47.wav
    92. -rw-r--r--. 1 root root 27 35 19:06 zhang_48.lab
    93. -rw-r--r--. 1 root root 79424 35 19:56 zhang_48.wav
    94. -rw-r--r--. 1 root root 6 35 19:06 zhang_49.lab
    95. -rw-r--r--. 1 root root 118232 35 19:56 zhang_49.wav
    96. -rw-r--r--. 1 root root 24 35 19:06 zhang_4.lab
    97. -rw-r--r--. 1 root root 179972 35 19:56 zhang_4.wav
    98. -rw-r--r--. 1 root root 28 35 19:06 zhang_50.lab
    99. -rw-r--r--. 1 root root 329912 35 19:56 zhang_50.wav
    100. -rw-r--r--. 1 root root 18 35 19:06 zhang_51.lab
    101. -rw-r--r--. 1 root root 142928 35 19:56 zhang_51.wav
    102. -rw-r--r--. 1 root root 21 35 19:06 zhang_52.lab
    103. -rw-r--r--. 1 root root 104120 35 19:56 zhang_52.wav
    104. -rw-r--r--. 1 root root 9 35 19:06 zhang_53.lab
    105. -rw-r--r--. 1 root root 179972 35 19:56 zhang_53.wav
    106. -rw-r--r--. 1 root root 9 35 19:06 zhang_5.lab
    107. -rw-r--r--. 1 root root 95300 35 19:56 zhang_5.wav
    108. -rw-r--r--. 1 root root 15 35 19:06 zhang_6.lab
    109. -rw-r--r--. 1 root root 88244 35 19:56 zhang_6.wav
    110. -rw-r--r--. 1 root root 45 35 19:06 zhang_7.lab
    111. -rw-r--r--. 1 root root 217016 35 19:56 zhang_7.wav
    112. -rw-r--r--. 1 root root 12 35 19:06 zhang_8.lab
    113. -rw-r--r--. 1 root root 72368 35 19:56 zhang_8.wav
    114. -rw-r--r--. 1 root root 31 35 19:06 zhang_9.lab
    115. -rw-r--r--. 1 root root 243474 35 19:56 zhang_9.wav

    2.5 模型训练

    开启模型训练:

    python train_ms.py

    出现如下界面,则模型训练开始执行了:

    1. python train_ms.py
    2. 加载config中的配置localhost
    3. 加载config中的配置10086
    4. 加载config中的配置1
    5. 加载config中的配置0
    6. 加载config中的配置0
    7. 加载环境变量
    8. MASTER_ADDR: localhost,
    9. MASTER_PORT: 10086,
    10. WORLD_SIZE: 1,
    11. RANK: 0,
    12. LOCAL_RANK: 0
    13. 03-05 19:58:50 INFO | data_utils.py:62 | Init dataset...
    14. 100%|███████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 1107/1107 [00:00<00:00, 57873.02it/s]
    15. 03-05 19:58:50 INFO | data_utils.py:77 | skipped: 2, total: 1107
    16. 03-05 19:58:50 INFO | data_utils.py:62 | Init dataset...
    17. 100%|█████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████████| 4/4 [00:00<00:00, 47934.90it/s]
    18. 03-05 19:58:50 INFO | data_utils.py:77 | skipped: 0, total: 4
    19. Using noise scaled MAS for VITS2
    20. Using duration discriminator for VITS2
    21. INFO:checkpoints:Loaded checkpoint 'checkpoints/DUR_0.pth' (iteration 0)
    22. INFO:checkpoints:Loaded checkpoint 'checkpoints/G_0.pth' (iteration 0)
    23. INFO:checkpoints:Loaded checkpoint 'checkpoints/D_0.pth' (iteration 0)
    24. ******************检测到模型存在,epoch为 1,gloabl step为 0*********************
    25. INFO:checkpoints:Loaded checkpoint 'checkpoints/WD_0.pth' (iteration 0)
    26. Some weights of the model checkpoint at ./slm/wavlm-base-plus were not used when initializing WavLMModel: ['encoder.pos_conv_embed.conv.weight_g', 'encoder.pos_conv_embed.conv.weight_v']
    27. - This IS expected if you are initializing WavLMModel from the checkpoint of a model trained on another task or with another architecture (e.g. initializing a BertForSequenceClassification model from a BertForPreTraining model).
    28. - This IS NOT expected if you are initializing WavLMModel from the checkpoint of a model that you expect to be exactly identical (initializing a BertForSequenceClassification model from a BertForSequenceClassification model).
    29. Some weights of WavLMModel were not initialized from the model checkpoint at ./slm/wavlm-base-plus and are newly initialized: ['encoder.pos_conv_embed.conv.parametrizations.weight.original0', 'encoder.pos_conv_embed.conv.parametrizations.weight.original1']
    30. You should probably TRAIN this model on a down-stream task to be able to use it for predictions and inference.
    31. 0%| | 0/126 [00:00<?, ?it/s]INFO:checkpoints:Train Epoch: 0 [0%]

    2.6 tensorboard可视化

    python -m tensorboard.main --logdir=data/models --host=192.168.1.160

  • 相关阅读:
    TCP/IP协议、UDP协议及网络基础概念
    初识matlab
    设计模式-观察者模式详解
    PriorityQueue优先级队列
    基于.Net开发的ChatGPT客户端,兼容Windows、IOS、安卓、MacOS、Linux
    C#访问修饰符
    shell 多线程
    洛谷刷题C语言:PET、KEMIJA、PROSJEK、KORNISLAV、RESETO
    Python深度学习-第一章、什么是深度学习
    linux 使用 squid
  • 原文地址:https://blog.csdn.net/lsb2002/article/details/136460054