목차
이전 포스팅 에서 TTS Generation WebUI를 조금 사용해 보았는데 재미있더군요. 그래서 나는 내 목소리로 사용 가능한 모델을 훈련시키기로 결정했습니다.
이 음성 복제 프로젝트에서는 음성 변경을 위한 SVC와 텍스트 음성 변환을 위한 VITS를 모두 살펴봅니다. 모든 작업을 수행하는 하나의 도구는 없습니다.
저는 이 프로젝트를 위해 여러 도구를 테스트했습니다. this , this , this 와 같은 좋은 가이드 중 상당수는 중국어로 되어 있습니다. 그래서 영어로 노트를 게시하는 것이 도움이 될 것이라고 생각했습니다.
so-vits-svc는 억압으로 인해 몇 달 동안 아카이브되었지만 여전히 최상의 결과를 위한 도구입니다.
so-vits-svc-fork , so-vits-svc-5.0 , DDSP-SVC 및 RVC 와 같은 기타 관련 도구는 더 빠른/리터 최적화, 더 많은 기능 또는 더 나은 인터페이스를 제공합니다.
그러나 시간과 자원이 충분하다면 이러한 대안 중 어느 것도 원래 so-vits-svc가 생성한 우수한 결과와 경쟁할 수 없습니다.
TTS의 경우 Bert-VITS2 라는 새로운 도구가 환상적으로 작동하며 지난 달 최종 릴리스를 통해 이미 성숙해졌습니다. 예를 들어 오디오 콘텐츠 제작과 같이 매우 다양한 사용 사례가 있습니다.
데이터세트의 오디오 파일은 WAV 형식, 44100Hz, 16비트, 모노, 이상적으로는 1~2시간이어야 합니다.
Ultimate Vocal Remover 는 이 작업을 위한 가장 쉬운 도구입니다. 모든 것을 자세히 설명하는 스레드가 있습니다.
모델 : VR - UVR(4_HP-Vocal-UVR)
설정: 512 - 10 - GPU
출력 악기 및 부정한 보컬
모델 : VR - UVR(5_HP-노래방-UVR)
설정: 512 - 10 - GPU
출력 배경 보컬 과 깨끗하지 않은 메인 보컬
모델: VR - UVR-DeEcho-DeReverb 및 UVR-DeNoise
설정: 512 - 10 - GPU - 없음 기타만
클린 메인보컬 출력
콘덴서 마이크를 사용하여 처리된 방에서 녹음하는 것이 더 낫습니다. 그렇지 않으면 방향성 또는 동적 마이크를 사용하여 소음을 줄입니다.
제가 처음으로 음악에 입문한 것은 고등학교 시절 파란색 Sennheiser MX500과 Koss Porta Pro였습니다. Cool Edit Pro를 사용하여 Sony VAIO에 있는 노래를 처음으로 녹음했던 때를 아직도 기억합니다.
요즘 나는 아마추어로서 오디오 하드웨어에 많은 돈을 쓰는 것을 여전히 거부합니다. 왜냐하면 그것은 말 그대로 돈을 빨아들이는 블랙홀이기 때문입니다.
그럼에도 불구하고 이렇게 값싼 생산 장비의 신뢰성은 정말 감사합니다.
내 설정의 핵심 부분은 Behringer UCA202이며 내 사용 사례에 딱 맞습니다. 가격 인하 기간에 10달러에 구입했습니다.
소위 "오디오 인터페이스"이지만 기본적으로는 여러 포트가 있는 사운드 카드일 뿐입니다. 헤드폰에는 RCA-3.5mm TRS 케이블을 사용했고, 일반 출력에는 반개방형 K240을, 모니터 출력에는 폐쇄형 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의 혼란스러운 악을 피하는 방법입니다.
나중에 사용할 수 있도록 오디오 슬라이서 또는 오디오 슬라이서(gui)를 사용하여 오디오 파일을 작은 조각으로 분할합니다.
기본 설정은 훌륭하게 작동합니다.
매우 짧은 것을 제거하고 여전히 10초가 넘는 것을 다시 자릅니다.
데이터 세트가 큰 경우 4초 미만의 데이터를 모두 제거합니다. 작은 데이터 세트의 경우 2초 미만의 데이터만 제거합니다.
필요한 경우 모든 단일 파일에 대해 수동 검사를 수행합니다.
Loudness Normalization 과 함께 Audacity를 다시 사용하십시오. 0db가 해야 합니다.
하나의 시스템 내에서 여러 Python 도구를 실행하려면 가상 환경이 필수적입니다. 저는 VM과 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를 선호합니다.
하지만 실행하기 전에 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에는 영어 현지화가 없지만 Immersive Translate가 도움이 될 것입니다.
대부분의 매개변수는 기본값과 잘 작동합니다. 변경하려면 this 및 this 을 참조하십시오.
다음 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 포크 이며, 모델이 호환됩니다. 사용하기는 더 쉽지만 확산 모델을 지원하지 않습니다. 전용 실시간 음성 변경을 위해서는 음성 변경 장치를 사용하는 것이 좋습니다.
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
svcg
와 함께 GUI를 사용하십시오. 이를 위해서는 로컬 데스크탑 환경이 필요합니다.
또는 실시간으로 svc vc
와 함께 CLI를 사용하고 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
DDSP와 확산 모델이 모두 포함되어 있으므로 main_diff.py
사용하는 것이 좋습니다.
python main_diff.py -i "input.wav" -diff "model_xxxxxx.pt" -o "output.wav"
음성 복제를 위한 실시간 GUI:
python gui_diff.py
이것은 위의 모든 것과 완전히 다른 TTS 도구입니다. 이를 사용하여 이미 부모님을 위해 내 목소리로 여러 오디오북을 만들었고 부모님이 정말 좋아하셨습니다.
원본을 사용하는 대신 더 쉬운 설정을 위해 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
모든 bfloat16
float16
으로 바꿔 train_ms.py
편집합니다.
LAN 액세스를 위해 webui.py
편집합니다.
webbrowser.open(f"start http://localhost:7860") app.launch(server_name="0.0.0.0", server_port=7860)
batch_size
및 spk2id
에 대한 Data/xxx/config.json
편집합니다.
이전 섹션 과 유사한 작업 흐름입니다.
노이즈와 무음을 제거하고 정규화한 다음 슬라이스되지 않은 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"
추론을 위해 webui를 시작하려면 python3 webui.py
실행하세요.
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
자명하다
Hugging Face 저장소 에는 다른 사람들이 공유하는 VITS 모델이 많이 있습니다. 먼저 사용해 본 후 파일 에서 원하는 모델을 다운로드할 수 있습니다.
Genshin 모델은 높은 품질로 인해 일부 콘텐츠 제작 커뮤니티에서 널리 사용됩니다. 수백 개의 문자가 포함되어 있지만 중국어와 일본어만 지원됩니다.
또 다른 저장소 에는 인기 있는 중국 스트리머와 VTuber로 만든 Bert-vits2 모델이 많이 있습니다.
이미 이런 AI 브이튜버를 만드는 프로젝트도 있고 이런 것도 있습니다. 이 기술이 가까운 미래에 어떻게 업계를 변화시킬 수 있을지 기대됩니다.
https://techshinobi.org/posts/voice-vits/https://techshinobi.org/posts/voice-vits/