目录 使用 SoftVC VITS 和 Bert-VITS2 深入研究语音克隆 准备数据集 歌曲摘录 UVR 工作流程 录音准备 小气鬼的音频设备 Audacity 工作流程 音频切片器 清理数据集 匹配响度 索维茨-SVC 设置环境 初始化 下载预训练模型 数据集准备 编辑配置 训练 推理 音频编辑 so-vits-svc-fork 安装 准备 训练 推理 DDSP-SVC 准备 训练 推理 Bert-vits2-V2.3 初始化 准备 转录 训练和推理 vits-简单-api 调整 分享模型 在 中,我尝试了一些 ,发现它很有趣。因此,我决定用自己的声音训练一个可用的模型。 上一篇文章 TTS Generation WebUI 该语音克隆项目探索了用于语音更改的 SVC 和用于文本转语音的 。没有一种工具可以完成所有工作。 VITS 我已经为这个项目测试了几种工具。许多好的指南,比如 、 、 ,都是中文的。所以,我认为用英语发布我的笔记会很有用。 这个 这个 这个 尽管 已经存档了几个月,可能是因为压抑,但它仍然是效果最好的工具。 so-vits-svc 其他相关工具(例如 、 、 和 提供更快/升的优化、更多功能或更好的接口。 so-vits-svc-fork so-vits-svc-5.0 DDSP-SVC RVC ) 但只要有足够的时间和资源,这些替代方案都无法与原始 so-vits-svc 产生的卓越结果相竞争。 对于 TTS,一种名为 的新工具效果非常好,并且在上个月的最终版本中已经成熟。它有一些非常不同的用例,例如音频内容创建。 Bert-VITS2 准备数据集 数据集的音频文件应为WAV格式,44100 Hz,16位,单声道,理想情况下为1-2小时。 歌曲摘录 是完成这项工作最简单的工具。有一个 详细解释了一切。 Ultimate Vocal Remover 线程 UVR 工作流程 删除并提取乐器 型号:VR - UVR(4_HP-Vocal-UVR) 设置:512 - 10 - GPU 输出 和不干净的人声 器乐 删除并提取背景声音。 型号:VR-UVR(5_HP-卡拉OK-UVR) 设置:512 - 10 - GPU 输出 和不干净的主声 背景人声 消除混响和噪音。 型号:VR - UVR-DeEcho-DeReverb 和 UVR-DeNoise 设置:512 - 10 - GPU - 仅无其他 输出 干净的主音 (可选)使用RipX(非免费)进行手动精细清理。 录音准备 最好在经过处理的房间内使用电容式麦克风进行录音,否则,请使用定向或动圈式麦克风来减少噪音。 小气鬼的音频设备 我第一次接触音乐是在高中的时候,当时使用的是蓝色的 Sennheiser MX500 和 Koss Porta Pro。我还记得第一次在 Sony VAIO 上使用 Cool Edit Pro 录制歌曲时的情景。 如今,作为业余爱好者,我仍然拒绝在音频硬件上花很多钱,因为它实际上是一个吸钱的黑洞。 尽管如此,我真的很欣赏这些廉价生产设备的可靠性。 我的设置的核心部分是 Behringer UCA202,它非常适合我的用例。我在降价期间以 10 美元的价格购买了它。 它是所谓的“音频接口”,但基本上只是一个具有多个端口的声卡。我的耳机使用了 RCA 转 3.5mm TRS 线缆,使用半开放式 K240s 进行常规输出,使用封闭式 HD669/MDR7506 进行监听输出。 上述三款耳机的正常价格均低于 100 美元。还有 Samson、Tascam、Knox Gear 等的克隆产品,价格不到 50 美元。 对于输入设备,出于环境噪音的考虑,我使用动圈麦克风。它是 SM58 副本(Pyle)+ Tascam DR-05 录音机(作为放大器)。其他克隆如 SL84c 或 wm58 也可以做到这一点。 我使用XLR转3.5mm TRS电缆将麦克风连接到录音机的MIC/外部输入,然后使用AUX电缆连接录音机的线路输出和UCA202的输入。 不建议购买“音频接口”和专用放大器来复制我的设置。 10 美元的 c-media USB 声卡应该足够了。我拥有的 Syba 型号能够直接对动圈麦克风甚至一些低端幻象供电麦克风进行“前置放大”。 该设置可以非常便宜(40~60 美元),但使用 UCA202 和 DR-05,声音会干净得多。我真的很喜欢我的旧数码录音机的物理控制、多功能性和便携性。 大胆工作流程 尽管当我作为设计师拿薪水时,我对劲舞团还是很满意的。但对于个人在有趣的项目中使用,Audacity 是避免 Adobe 混乱邪恶的方法。 降噪 德雷弗 截断沉默 标准化 音频切片器 使用 或 将音频文件切成小块以供以后使用。 audio-slicer audio-slicer (gui) 默认设置效果很好。 清理数据集 删除那些非常短的片段,并重新切片那些仍超过 10 秒的片段。 如果数据集很大,请删除所有小于 4 秒的数据。如果数据集较小,只需在 2 秒内删除那些数据。 如有必要,请对每个文件执行手动检查。 匹配响度 再次使用 Audacity 进行 ; 0db 应该可以。 响度归一化 索维茨-SVC 设置环境 虚拟环境对于在一个系统内运行多个 Python 工具至关重要。我以前使用虚拟机和 Docker,但现在我发现 比其他的更快、更方便。 anaconda 为so-vits-svc创建一个新环境,并激活它。 conda create -n so-vits-svc python=3.8 conda activate so-vits-svc 然后,安装要求。 git clone https://github.com/svc-develop-team/so-vits-svc cd so-vits-svc pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 #for linux pip install -r requirements.txt #for windows pip install -r requirements_win.txt pip install --upgrade fastapi==0.84.0 pip install --upgrade gradio==3.41.2 pip install --upgrade pydantic==1.10.12 pip install fastapi uvicorn 初始化 下载预训练模型 预训练 wget https://huggingface.co/WitchHuntTV/checkpoint_best_legacy_500.pt/resolve/main/checkpoint_best_legacy_500.pt wget https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/rmvpe.pt 日志/44k wget https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12/resolve/main/sovits_768l12_pre_large_320k/clean_D_320000.pth wget https://huggingface.co/datasets/ms903/sovits4.0-768vec-layer12/resolve/main/sovits_768l12_pre_large_320k/clean_G_320000.pth 原木/44k/扩散 wget https://huggingface.co/datasets/ms903/Diff-SVC-refactor-pre-trained-model/resolve/main/fix_pitch_add_vctk_600k/model_0.pt (替代) wget https://huggingface.co/datasets/ms903/DDSP-SVC-4.0/resolve/main/pre-trained-model/model_0.pt (替代) wget https://huggingface.co/datasets/ms903/Diff-SVC-refactor-pre-trained-model/blob/main/hubertsoft_fix_pitch_add_vctk_500k/model_0.pt 预训练/nsf_hifigan wget -P pretrain/ https://github.com/openvpi/vocoders/releases/download/nsf-hifigan-v1/nsf_hifigan_20221211.zip unzip -od pretrain/nsf_hifigan pretrain/nsf_hifigan_20221211.zip 数据集准备 将所有准备好的audio.wav文件放入 中 dataset_raw/character cd so-vits-svc python resample.py --skip_loudnorm python preprocess_flist_config.py --speech_encoder vec768l12 --vol_aug python preprocess_hubert_f0.py --use_diff 编辑配置 该文件位于 configs/config.json : 打印日志的频率 : 保存检查点的频率 : 总步数 : 保存检查点的数量,0 表示无限制。 : fp32 在我的例子中, :越小越快(越粗糙),越大越慢(更好)。 log interval eval interval epochs keep ckpts half_type batch_size 建议每个 VRAM 的批量大小:4=6G;6=8G;10=12G;14=16G;20=24G 保留 的默认值 configs/diffusion.yaml 训练 python cluster/train_cluster.py --gpu python train_index.py -c configs/config.json python train.py -c configs/config.json -m 44k python train_diff.py -c configs/diffusion.yaml 关于训练步骤: 使用 训练主模型;一般情况下20k-30k就可以了,50k以上就足够了。这可能需要几天时间,具体取决于 GPU 速度。 train.py 请随意通过 停止它,并且随时重新运行 来继续训练。 ctrl+c python train.py -c configs/config.json -m 44k 使用 训练扩散模型;训练步数建议为主模型的1/3。 train_diff.py 注意过度训练。使用 监视图以查看其是否变平。 tensorboard --logdir=./logs/44k 如有必要,将 从 0.0001 更改为 0.00005。 learning rate 完成后,共享/传输这些文件以进行推理。 配置/ 配置.json 扩散.yaml 日志/44k 特征和索引.pkl kmeans_10000.pt model_0.pt G_xxxxx.pt 推理 是时候尝试训练好的模型了。我更喜欢 Webui,因为它可以方便地调整参数。 但在启动之前,请在 中编辑以下行以进行 LAN 访问: webUI.py os.system("start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860) 运行 ;然后从网络浏览器访问其 。 python webUI.py ipaddress:7860 WebUI 没有英文本地化,但 会有所帮助。 沉浸式翻译 大多数参数使用默认值就可以很好地工作。请参阅 和 进行更改。 此 此 上传这5个文件: 及其 main model.pt config.json 及其 diffusion model.pt diffusion.yaml 用于说话的聚类模型 或用于唱歌的特征检索 。 kmeans_10000.pt feature_and_index.pkl 仅适用于说话,不适用于唱歌。使用时推荐 。 F0 predictor RMVPE 当使用具有男性声音的模型演唱女性歌曲时, 非常有用,反之亦然。 Pitch change 是控制基调的方式。使用 可以获得最清晰的语音,使用 可以获得最接近模型的语气。 Clustering model/feature retrieval mixing ratio 0.1 0.9 应设置在 左右,它可以在 步时增强结果。 shallow diffusion steps 50 30-100 音频编辑 此过程是可选的。只为创作出更好的歌曲。 我不会详细介绍这一点,因为我使用的音频编辑软件或所谓的 DAW(数字音频工作站)是非免费的。尽管整个行业都是付费和闭源的,但我无意提倡专有软件。 Audacity 支持多轨、效果等等。它也加载一些高级 VST 插件。 找到有关使用 Audacity 掌握歌曲的教程并不难。 通常,母带处理过程应该是混音/平衡、EQ/压缩、混响和成像。工具越先进,过程就越容易。 将来我肯定会花更多的时间在我的母带处理过程中采用 Audacity,我建议每个人都这样做。 so-vits-svc-fork 这是一个具有实时支持的 so-vits-svc ,并且模型是兼容的。更易于使用,但不支持 Diffusion 模型。对于专用的实时变声,建议使用 。 分支 变声器 安装 conda create -n so-vits-svc-fork python=3.10 pip conda activate so-vits-svc-fork git clone https://github.com/voicepaw/so-vits-svc-fork cd so-vits-svc-fork python -m pip install -U pip setuptools wheel pip install -U torch torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install -U so-vits-svc-fork pip install click sudo apt-get install libportaudio2 准备 将数据集.wav文件放入 so-vits-svc-fork/dataset_raw svc pre-resample svc pre-config 编辑 中的 。这个叉子的尺寸比原来的叉子大。 configs/44k/config.json batch_size 训练 svc pre-hubert svc train -t svc train-cluster 推理 将 GUI 与 结合使用。这需要本地桌面环境。 svcg 或者使用 CLI 与 进行实时处理,并 进行生成。 svc vc svc infer -m "logs/44k/xxxxx.pth" -c "configs/config.json" raw/xxx.wav DDSP-SVC 比 so-vits-svc 需要更少的硬件资源并且运行速度更快。它支持实时模型和扩散模型 (Diff-SVC)。 DDSP-SVC conda create -n DDSP-SVC python=3.8 conda activate DDSP-SVC git clone https://github.com/yxlllc/DDSP-SVC cd DDSP-SVC pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 pip install -r requirements.txt 这两个文件请参考 : 初始化部分 pretrain/rmvpe/model.pt pretrain/contentvec/checkpoint_best_legacy_500.pt 准备 python draw.py python preprocess.py -c configs/combsub.yaml python preprocess.py -c configs/diffusion-new.yaml 编辑 configs/ batch_size: 32 (16 for diffusion) cache_all_data: false cache_device: 'cuda' cache_fp16: false 训练 conda activate DDSP-SVC python train.py -c configs/combsub.yaml python train_diff.py -c configs/diffusion-new.yaml tensorboard --logdir=exp 推理 建议使用 ,因为它同时包含 DDSP 和扩散模型。 main_diff.py python main_diff.py -i "input.wav" -diff "model_xxxxxx.pt" -o "output.wav" 用于语音克隆的实时 GUI: python gui_diff.py Bert-vits2-V2.3 这是一个与上面的完全不同的 TTS 工具。通过使用它,我已经为我的父母制作了几本用我的声音制作的有声读物,他们非常喜欢。 我没有使用 ,而是使用了 的 fork 来简化设置。 原来的 v3u 初始化 conda create -n bert-vits2 python=3.9 conda activate bert-vits2 git clone https://github.com/v3ucn/Bert-vits2-V2.3.git cd Bert-vits2-V2.3 pip install torch==2.0.1+cu118 torchvision==0.15.2+cu118 torchaudio==2.0.2+cu118 --index-url https://download.pytorch.org/whl/cu118 pip install -r requirements.txt 下载预训练模型(包括中文、日文、英文): wget -P slm/wavlm-base-plus/ https://huggingface.co/microsoft/wavlm-base-plus/resolve/main/pytorch_model.bin wget -P emotional/clap-htsat-fused/ https://huggingface.co/laion/clap-htsat-fused/resolve/main/pytorch_model.bin 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 wget -P bert/chinese-roberta-wwm-ext-large/ https://huggingface.co/hfl/chinese-roberta-wwm-ext-large/resolve/main/pytorch_model.bin wget -P bert/bert-base-japanese-v3/ https://huggingface.co/cl-tohoku/bert-base-japanese-v3/resolve/main/pytorch_model.bin wget -P bert/deberta-v3-large/ https://huggingface.co/microsoft/deberta-v3-large/resolve/main/pytorch_model.bin wget -P bert/deberta-v3-large/ https://huggingface.co/microsoft/deberta-v3-large/resolve/main/pytorch_model.generator.bin wget -P bert/deberta-v2-large-japanese/ https://huggingface.co/ku-nlp/deberta-v2-large-japanese/resolve/main/pytorch_model.bin 创建角色模型文件夹 mkdir -p Data/xxx/models/ 下载基础模型: !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/DUR_0.pth !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/D_0.pth !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/G_0.pth !wget -P Data/xxx/models/ https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/resolve/main/WD_0.pth #More options https://openi.pcl.ac.cn/Stardust_minus/Bert-VITS2/modelmanage/model_filelist_tmpl?name=Bert-VITS2_2.3%E5%BA%95%E6%A8%A1 https://huggingface.co/Erythrocyte/bert-vits2_base_model/tree/main https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/tree/main 编辑 ,将所有 替换为 train_ms.py bfloat16 float16 编辑 以进行 LAN 访问: webui.py webbrowser.open(f"start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860) 编辑 的 和 Data/xxx/config.json batch_size spk2id 准备 与 类似的工作流程。 上一节 去除噪音和静音,标准化,然后将未切片的WAV文件放入 中。 Data/xxx/raw 编辑 、 和 的 。 dataset_path num_workers keep_ckpts config.yml 运行 对 WAV 文件进行切片。 python3 audio_slicer.py 通过删除 2 秒以下的小文件来清理数据集 ( )。 Data/xxx/raw 转录 安装耳语 pip install git+https://github.com/openai/whisper.git 要关闭语言自动检测,请设置为仅英语,并使用 模型;编辑 如下: large short_audio_transcribe.py # set the spoken language to english print('language: en') lang = 'en' options = whisper.DecodingOptions(language='en') result = whisper.decode(model, mel, options) # set to use large model parser.add_argument("--whisper_size", default="large") #Solve error "Given groups=1, weight of size [1280, 128, 3], expected input[1, 80, 3000] to have 128 channels, but got 80 channels instead" while using large model mel = whisper.log_mel_spectrogram(audio,n_mels = 128).to(model.device) 运行 以开始转录。 python3 short_audio_transcribe.py 对切片数据集重新采样: python3 resample.py --sr 44100 --in_dir ./Data/zizek/raw/ --out_dir ./Data/zizek/wavs/ 预处理转录: python3 preprocess_text.py --transcription-path ./Data/zizek/esd.list 生成 BERT 功能配置: python3 bert_gen.py --config-path ./Data/zizek/configs/config.json 训练和推理 运行 开始训练 python3 train_ms.py 编辑模型路径的 : config.yml model: "models/G_20900.pth" 运行 启动 webui 进行推理 python3 webui.py vits-简单-api 是一个使用经过训练的模型的 Web 前端。我使用它主要是因为它的长文本支持,而原始项目没有。 vits-simple-api git clone https://github.com/Artrajz/vits-simple-api git pull https://github.com/Artrajz/vits-simple-api cd vits-simple-api conda create -n vits-simple-api python=3.10 pip conda activate vits-simple-api && pip install -r requirements.txt (可选)将预训练的模型文件从 复制到 Bert-vits2-V2.3/ vits-simple-api/bert_vits2/ 将 和 复制到 Bert-vits2-V2.3/Data/xxx/models/G_xxxxx.pth Bert-vits2-V2.3/Data/xxx/config.json vits-simple-api/Model/xxx/ 根据首选编辑 和 的 MODEL_LIST Default parameter config.py 编辑 如下: Model/xxx/config.json "data": { "training_files": "Data/train.list", "validation_files": "Data/val.list", "version": "2.3" 检查/编辑 中的 为 config.yml model_list [xxx/G_xxxxx.pth, xxx/config.json] 运行 python app.py 调整 表示音调, 表示随机性, 表示发音, 表示速度。 和 是不言自明的 SDP Ratio Noise Noise_W Length emotion style 分享模型 在其 中,有很多其他人分享的 VITS 模型。您可以先尝试一下,然后从 中下载所需的模型。 Hugging Face 仓库 文件 因其高质量而被一些内容创作社区广泛使用。它包含数百个字符,但仅支持中文和日文。 原神模型 在 中,有很多由中国热门主播和 VTuber 制作的 Bert-vits2 模型。 另一个仓库 已经有项目制作 AI Vtuber。我期待这项技术在不久的将来如何改变这个行业。 这样 的 https://techshinobi.org/posts/voice-vits/https://techshinobi.org/posts/voice-vits/