目录
在上一篇文章中,我尝试了一些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是完成这项工作最简单的工具。有一个线程详细解释了一切。
型号: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 - 仅无其他
输出干净的主音
最好在经过处理的房间内使用电容式麦克风进行录音,否则,请使用定向或动圈式麦克风来减少噪音。
我第一次接触音乐是在高中的时候,当时使用的是蓝色的 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 应该可以。
虚拟环境对于在一个系统内运行多个 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
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
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
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
log interval
: 打印日志的频率eval interval
: 保存检查点的频率epochs
: 总步数keep ckpts
: 保存检查点的数量,0 表示无限制。 half_type
: fp32 在我的例子中, 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
关于训练步骤:
使用train.py
训练主模型;一般情况下20k-30k就可以了,50k以上就足够了。这可能需要几天时间,具体取决于 GPU 速度。
请随意通过ctrl+c
停止它,并且随时重新运行python train.py -c configs/config.json -m 44k
来继续训练。
使用train_diff.py
训练扩散模型;训练步数建议为主模型的1/3。
注意过度训练。使用tensorboard --logdir=./logs/44k
监视图以查看其是否变平。
如有必要,将learning rate
从 0.0001 更改为 0.00005。
完成后,共享/传输这些文件以进行推理。
配置.json
扩散.yaml
是时候尝试训练好的模型了。我更喜欢 Webui,因为它可以方便地调整参数。
但在启动之前,请在webUI.py
中编辑以下行以进行 LAN 访问:
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分支,并且模型是兼容的。更易于使用,但不支持 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)。
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
建议使用main_diff.py
,因为它同时包含 DDSP 和扩散模型。
python main_diff.py -i "input.wav" -diff "model_xxxxxx.pt" -o "output.wav"
用于语音克隆的实时 GUI:
python gui_diff.py
这是一个与上面的完全不同的 TTS 工具。通过使用它,我已经为我的父母制作了几本用我的声音制作的有声读物,他们非常喜欢。
我没有使用原来的,而是使用了v3u的 fork 来简化设置。
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
编辑webui.py
以进行 LAN 访问:
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
。
运行python3 audio_slicer.py
对 WAV 文件进行切片。
通过删除 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"
运行python3 webui.py
启动 webui 进行推理
vits-simple-api是一个使用经过训练的模型的 Web 前端。我使用它主要是因为它的长文本支持,而原始项目没有。
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
是不言自明的
在其Hugging Face 仓库中,有很多其他人分享的 VITS 模型。您可以先尝试一下,然后从文件中下载所需的模型。
原神模型因其高质量而被一些内容创作社区广泛使用。它包含数百个字符,但仅支持中文和日文。
在另一个仓库中,有很多由中国热门主播和 VTuber 制作的 Bert-vits2 模型。
已经有项目制作这样的AI Vtuber。我期待这项技术在不久的将来如何改变这个行业。
https://techshinobi.org/posts/voice-vits/https://techshinobi.org/posts/voice-vits/