이 논문에서는 인간 수준의 TTS 합성을 달성하기 위해 큰 음성 언어 모델 (SLM)을 사용하여 스타일 확산 및 적대적인 훈련을 활용하는 TTS (Text-Styeech) 모델 인 Styletts 2를 제시합니다. Styletts 2는 확산 모델을 통해 잠재 무작위 변수로서 모델링 스타일을 모델링하여 전임자와 다릅니다. 기준 음성을 필요로하지 않고 텍스트에 가장 적합한 스타일을 생성하여 효율적인 잠복 확산을 달성하면서 확산 모델이 제공하는 다양한 음성 합성의 혜택을 얻습니다. 또한, 우리는 WAVLM과 같은 대규모 미리 훈련 된 SLM을 엔드 투 엔드 훈련을위한 새로운 차별화 가능한 지속 시간 모델링을 가진 판별 자로 사용하여 음성 자연을 향상시킵니다. Styletts 2는 단일 스피커 LJSpeech 데이터 세트에서 인간 기록을 능가하고 원어민 영어 사용자가 판단한 다중 스피커 VCTK 데이터 세트에서 일치시킵니다. 또한 Libritts 데이터 세트에서 교육을 받으면 모델은 Zero-Shot 스피커 적응에 대한 이전 공개 모델을 능가합니다. 이 작업은 단일 및 멀티 스피커 데이터 세트 모두에서 최초의 인간 수준 TTS 합성을 달성하여 큰 SLM으로 스타일 확산 및 적대적 훈련의 잠재력을 보여줍니다.
종이 : https://arxiv.org/abs/2306.07691
오디오 샘플 : https://styletts2.github.io/
온라인 데모 : Hugging Face (멋진 온라인 데모에 감사합니다)
train_second.py 에 대한 DDP (Accelerator)를 수정하십시오 (이 문제를 해결하기 위해 최선을 다했지만 성공하지 못 했으므로 기꺼이 도와 주시면 #7을 참조하십시오). git clone https://github.com/yl4579/StyleTTS2.git
cd StyleTTS2pip install -r requirements.txtWindows Add :
pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu118 -U또한 데모를 실행하려면 Phonemizer 및 Espeak를 설치하십시오.
pip install phonemizer
sudo apt-get install espeak-ng첫 번째 단계 훈련 :
accelerate launch train_first.py --config_path ./Configs/config.yml두 번째 단계 교육 (DDP 버전이 작동하지 않으므로 현재 버전은 DP를 사용합니다. 다시 #7을 참조하십시오 .
python train_second.py --config_path ./Configs/config.yml 연속적으로 실행할 수 있으며 첫 번째 단계와 두 번째 단계를 모두 훈련시킵니다. 이 모델은 "epoch_1st_%05d.pth"및 "epoch_2nd_%05d.pth"형식으로 저장됩니다. 체크 포인트 및 텐서 보드 로그는 log_dir 에 저장됩니다.
데이터 목록 형식은 filename.wav|transcription|speaker 여야합니다. 스피커 레이블은 스타일 확산 모델 교육을위한 참조 오디오를 샘플링해야하기 때문에 멀티 스피커 모델에는 필요합니다.
config.yml에는 몇 가지 중요한 구성이 있습니다.
OOD_data : SLM 적대 훈련을위한 배포 외 텍스트의 경로. 형식은 text|anything 해야합니다.min_length : 교육을위한 최소 OOD 텍스트 길이. 이것은 합성 된 음성의 길이를 최소화하는 것입니다.max_len : 교육을위한 최대 오디오 길이. 장치가 프레임입니다. 기본 홉 크기는 300이므로 한 프레임은 약 300 / 24000 (0.0125)입니다. 메모리 외 문제가 발생하면 이것을 낮추십시오.multispeaker : 멀티 스피커 모델을 훈련하려면 true로 설정하십시오. 이는 Denoiser의 아키텍처가 단일 및 멀티 스피커 모델에 대해 다르기 때문에 필요합니다.batch_percentage : 이것은 SLM 적대 훈련 중에 Memory (Out-of Memory) 문제가 없는지 확인하기위한 것입니다. OOM 문제가 발생하면 더 낮은 번호를 설정하십시오.Utils 폴더에는 세 가지 미리 훈련 된 모델이 있습니다.
batch_size 또는 max_len 사용하십시오. 자세한 내용은 이슈 #10을 참조 할 수 있습니다. 스크립트는 DDP가 train_second.py 에서 작동하지 않기 때문에 DP를 사용하는 train_second.py 에서 수정되었습니다. 이 문제를 기꺼이 도와 주려면 위의 대담한 섹션을 참조하십시오.
python train_finetune.py --config_path ./Configs/config_ft.yml Libritts Checkpoint가 폴더 아래에 다운로드 및 압축을 풀고 있는지 확인하십시오. 기본 구성 config_ft.yml 50 개의 에포크에 대해 1 시간의 음성 데이터 (약 1K 샘플)를 가진 ljspeech의 Finetunes입니다. 4 개의 NVIDIA A100에서 마무리하는 데 약 4 시간이 걸렸습니다. 품질은 24 시간의 음성 데이터로 처음부터 훈련 된 ljspeech 모델보다 품질이 약간 악화되며 4 개의 A100에서 마무리하는 데 약 2.5 일이 걸렸습니다. 샘플은 #65 (댓글)에서 찾을 수 있습니다.
스크립트가 DDP에서 작동하지 않기 때문에 단일 GPU를 사용하고있는 경우 교육 속도와 VRAM을 저장하려면 다음을 수행 할 수 있습니다 ( #100에서 스크립트를 만들어 주신 @Korakoe에게 감사합니다).
accelerate launch --mixed_precision=fp16 --num_processes=1 train_finetune_accelerate.py --config_path ./Configs/config_ft.yml@KreeVoz는 오디오 품질을 극대화하는 제안과 함께 Finetuning의 일반적인 문제에 대한 자세한 메모를 작성했습니다. #81. 이 중 일부는 처음부터 훈련에도 적용됩니다. @iieleven11은 또한 미세 조정을위한 지침을 만들었습니다. #128.
joint_epoch 이후 메모리 밖 : GPU RAM이 SLM 적대 훈련 실행에 충분히 크지 않기 때문일 수 있습니다. 당신은 그것을 건너 뛸 수 있지만 품질은 더 나빠질 수 있습니다. joint_epoch epochs 보다 많은 수를 설정하면 SLM Advesaral Training을 건너 뛸 수 있습니다. 자세한 내용은 inference_ljspeech.ipynb (단일 스피커) 및 inference_libritts.ipynb (Multi-Speaker)를 참조하십시오. Libritts의 경우 데모를 실행하기 전에 참조 _audio.zip을 다운로드하고 demo 아래에서 압축을 풀어야합니다.
24 kHz의 LJSpeech 코퍼스의 사전 취사 스타일 2는 https://huggingface.co/yl4579/styletts2-ljspeech/tree/main에서 다운로드 할 수 있습니다.
Libritts의 사전 처리 된 Styletts 2 모델은 https://huggingface.co/yl4579/styletts2-libritts/tree/main에서 다운로드 할 수 있습니다.
Styletts 2를 가져 와서 자신의 코드로 실행할 수 있습니다. 그러나 추론은 GPL 라이센스 패키지에 의존 하므로이 저장소에 직접 포함되지 않습니다. GPL 라이센스 포크에는 수입 스크립트와 실험 스트리밍 API 등이 있습니다. Gruut를 사용하는 완전 MIT 라이센스 패키지 (Phonemizer와 Gruut의 불일치로 인해 품질이 낮음)도 사용할 수 있습니다.
이러한 미리 훈련 된 모델을 사용하기 전에, 당신은 합성 된 음성을 사용할 수있는 권한이 없다면, 당신은 청취자에게 미리 훈련 된 모델에 의해 합성된다는 것을 알리는 데 동의합니다. 즉, 당신은 합성 된 목소리를 공개하기 전에 자신의 목소리를 직접 또는 라이센스로 복제 할 수있는 권한을 부여하는 목소리 만 사용하거나, 이러한 목소리를 사용할 수있는 권한이 없다면 이러한 목소리가 합성된다고 공개적으로 발표해야합니다.
코드 : MIT 라이센스
미리 훈련 된 모델 : 이러한 미리 훈련 된 모델을 사용하기 전에, 당신은 합성 된 음성을 사용할 수있는 허가가 없다면, 당신은 청취자에게 미리 훈련 된 모델에 의해 합성된다는 것을 알리는 데 동의합니다. 즉, 당신은 합성 된 목소리를 공개하기 전에 자신의 목소리를 직접 또는 라이센스로 복제 할 수있는 권한을 부여하는 목소리 만 사용하거나, 이러한 목소리를 사용할 수있는 권한이 없다면 이러한 목소리가 합성된다고 공개적으로 발표해야합니다.