IMS Toucan은 독일 슈투트가르트 대학교 (University of Stuttgart)의 자연 언어 처리 연구소 (IMS) 에서 개발 된 최첨단 텍스트 음성 연설 합성을 사용하여 교육, 사용 및 가르치기위한 툴킷입니다. 우리의 시스템은 빠르고 제어 가능하며 많은 컴퓨팅이 필요하지 않습니다.

이 저장소가 유용하다고 생각되면 별을주는 것을 고려하십시오. 많은 숫자가 나를 행복하게 만들고 동기 부여가되고 있습니다. 더 동기를 부여하고 싶다면이 툴킷을 후원하는 것을 고려할 수도 있습니다. 우리는 이것에 대해서만 Github 스폰서 만 사용합니다. 다른 플랫폼에는 제작자 인 척하는 사기꾼이 있습니다. 그들이 당신을 속이게하지 마십시오. 코드와 모델은 절대적으로 무료이며 포옹 얼굴에 대한 관대 한 지원 덕분에 GPU에서 모델을 사용할 수있는 모델의 인스턴스도 있습니다.
포옹 페이스에서 대화식 대규모 다중 언어 데모를 확인하십시오.
우리는 또한 포옹 얼굴에 대규모 다국어 TTS 데이터 세트를 게시했습니다.
지원되는 언어 목록은 여기에서 찾을 수 있습니다
Python 3.10은 권장 버전입니다.
이 툴킷을 설치하려면 사용하려는 기계에 복제하십시오 (해당 기계에서 모델을 훈련하려는 경우 적어도 하나의 CUDA 활성화 GPU가 있어야합니다. 추론을 위해 GPU가 필요하지 않음).
Linux를 사용하는 경우 다음 패키지를 설치하거나 APT-Get으로 설치해야합니다 (대부분의 분포에서 사전 설치된).
libsndfile1
espeak-ng
ffmpeg
libasound-dev
libportaudio2
libsqlite3-dev
복제 된 디렉토리로 이동하십시오. 기본 요구 사항을 설치하기 위해 가상 환경을 작성하고 활성화하는 것이 좋습니다. 아래 명령은 Linux에서 수행해야 할 모든 것을 요약합니다. Windows를 실행중인 경우 두 번째 줄을 변경해야합니다. VENV 문서를 살펴보십시오.
python -m venv <path_to_where_you_want_your_env_to_be>
source <path_to_where_you_want_your_env_to_be>/bin/activate
pip install --no-cache-dir -r requirements.txt
도구를 다시 사용하기 시작할 때마다 두 번째 줄을 실행하여 가상 환경을 다시 활성화합니다. GPU를 사용하려면 Linux 시스템에서 다른 작업을 수행 할 필요가 없습니다. Windows 시스템에서 GPU 지원을 제공하는 설치 명령의 공식 Pytorch 웹 사이트를 살펴보십시오.
기본 서브 폴더에 저장 될 데이터 세트를 전처리하여 발생하는 캐시 파일뿐만 아니라 사전에 사전 및 훈련 된 모델을 원하지 않으면 Utility/storage_config.py 편집하여 전 세계적으로 해당 디렉토리를 설정할 수 있습니다 (경로는 리포지토리 루트 디렉토리 또는 절대적으로 관련 될 수 있습니다).
사전 치료 된 모델을 사용할 필요는 없지만 상당히 속도를 높일 수 있습니다. 포옹 덕분에 필요할 때 자동으로 즉시 다운로드 될 것입니까? 특히 VB.
Espeak-NG는 선택 사항으로 많은 언어로 많은 특별 사례를 처리하는 것이 좋습니다.
대부분의 Linux 환경에서 이미 설치 될 예정이며 그렇지 않은 경우 충분한 권한이있는 경우 간단히 실행하여 설치할 수 있습니다.
apt-get install espeak-ng
Windows 의 경우 GitHub 릴리스 페이지에 편리한 .MSI 설치 프로그램 파일을 제공합니다. 비 LINUX 시스템에 설치 한 후에도 Phonemizer Library에 PHONEMIZER_ESPEAK_LIBRARY 환경 변수를 설정하여 ESPEAK 설치를 찾을 수있는 위치 에도이 문제에서 논의됩니다.
Mac 의 경우 불행히도 훨씬 더 복잡합니다. Sang Hyun Park 덕분에 Mac에 설치하기위한 안내서가 있습니다. M1 MacS의 경우 ESPEAK-NG를 시스템에 설치하는 가장 편리한 방법은 ESPEAK-NG의 MACPORTS 포트를 통해입니다. MacPorts 자체는 MacPorts 웹 사이트에서 설치할 수 있으며 Apple의 Xcode도 필요합니다. Xcode 및 MacPorts가 설치되면 Espeak-NG 포트를 통해 설치할 수 있습니다.
sudo port install espeak-ng
Windows 설치 지침에 명시된 바와 같이 ESPEAK-NG 설치는 Phonemizer 라이브러리의 변수로 설정해야합니다. 환경 변수는 위에 연결된 github 스레드에 주어진 PHONEMIZER_ESPEAK_LIBRARY 입니다. 그러나이 변수를 설정 해야하는 espeak-ng 설치 파일은 Mac의 .dll 파일이 아닌 .dylib 파일입니다. espeak-ng 라이브러리 파일을 찾으려면 port contents espeak-ng 실행할 수 있습니다. 당신이 찾고있는 특정 파일은 libespeak-ng.dylib 입니다.
InferenceInterfaces/ToucanTTSInterface.py 사용하여 숙련 된 모델 또는 예방 된 모델을로드 할 수 있습니다. 사용하려는 모델을 식별하는 적절한 디렉토리 핸들로 객체를 만들기 만하면됩니다. 나머지는 백그라운드에서 운동해야합니다. set_language 및 set_speaker_embedding 함수를 사용하여 언어 임베딩 또는 스피커 임베딩을 설정할 수 있습니다. 대부분의 것들은 자기 설명이어야합니다.
InferenceInterface 에는 텍스트에서 오디오를 만드는 두 가지 방법이 포함되어 있습니다. read_to_file 및 read_aloud 입니다.
read_to_file은 문자열 목록과 파일 이름을 입력하는 역할을합니다. 그것은 목록의 문장을 종합하고 그 사이의 짧은 일시 정지와 관련하여 그것들을 다른 주장으로 제공하는 필라 패스에 씁니다.
read_aloud는 문자열 만 가져 와서 음성으로 변환하고 시스템 스피커를 사용하여 즉시 재생합니다. 옵션 인수 보기를 True 로 설정하면 시각화가 팝업되어 프로그램이 계속되도록 닫아야합니다.
그들의 사용은 run_interactive_demo.py 및 run_text_to_file_reader.py 에서 입증됩니다.
지속 시간, 피치 곡선의 분산 및 에너지 곡선의 분산을 제어하기위한 간단한 스케일링 매개 변수가 있습니다. 대화식 데모 또는 리더를 사용할 때 코드에서 변경하거나 자신의 코드에서 사용할 때 간단히 인터페이스로 전달할 수 있습니다.
모델의 언어를 변경하고 사전에 사기꾼 모델에서 사용할 수있는 언어를 확인하려면 여기에 링크 된 목록을 살펴보십시오.
유틸리티 라는 디렉토리에는 path_to_transcript_dicts.py 라는 파일이 있습니다. 이 파일에서는 데이터 세트의 각 오디오 파일에 대한 모든 절대 경로가있는 사전을 리턴하는 기능을 작성해야합니다.
그런 다음 디렉토리 Training Interfaces/Recipes 로 이동하십시오. 거기에서 단일 데이터 세트 또는 finetuning_example_multilingual.py 에서 Finetune을 원한다면 finetuning_example_simple.py 파일의 사본을 작성하십시오. 이 사본을 참조로 사용하고 새 데이터 세트를 사용하기 위해 필요한 변경 만 할 것입니다. repay_tts_corpus 함수에 대한 호출을 찾으십시오. 방금 만든 중 하나로 사용한 Path_to_transcript_dict를 교체하십시오. 그런 다음 해당 캐시 디렉토리의 이름을 데이터 세트에 적합한 것으로 변경하십시오. 또한 체크 포인트가 저장되는 변수 save_dir를 찾으십시오. 이것은 기본값입니다. 체크 포인트에서 미세 조정하여 다른 디렉토리에 저장하려는 경우 명령 줄 인수를 사용하여 나중에 파이프 라인을 호출 할 때이를 덮어 쓸 수 있습니다. 마지막으로, 데이터 세트 생성 및 Train Loop 함수로 호출 할 때 LANG 인수를 데이터와 일치하는 ISO 639-3 언어 ID로 변경하십시오.
미세 조정 사례에서 열차 루프에 주어진 주장은 사전에 사전 된 모델에서 미세 조정의 경우를위한 것입니다. 처음부터 훈련을 원한다면 이름에 Toucantts가있는 다른 파이프 라인을 살펴보고 그곳에서 사용 된 주장을 살펴보십시오.
이 작업이 완료되면 거의 완료되면 이제 최상위 레벨의 run_training_pipeline.py 파일에서 사용할 수 있도록해야합니다. 상기 파일에서 방금 만든 파이프 라인에서 실행 기능을 가져 와서 의미있는 이름을 부여하십시오. 이제 pipeline_dict 에서 가져온 기능을 값으로 추가하고 의미가있는 속기로 사용하십시오.
레시피가 만들어지면 훈련은 매우 쉽습니다.
python run_training_pipeline.py <shorthand of the pipeline>
다음 인수를 제공 할 수는 있지만 그럴 필요는 없습니다 (훈련을 위해서는 최소한 GPU ID를 지정해야합니다).
--gpu_id <ID of the GPU you wish to use, as displayed with nvidia-smi, default is cpu. If multiple GPUs are provided (comma separated), then distributed training will be used, but the script has to be started with torchrun.>
--resume_checkpoint <path to a checkpoint to load>
--resume (if this is present, the furthest checkpoint available will be loaded automatically)
--finetune (if this is present, the provided checkpoint will be fine-tuned on the data from this pipeline)
--model_save_dir <path to a directory where the checkpoints should be saved>
--wandb (if this is present, the logs will be synchronized to your weights&biases account, if you are logged in on the command line)
--wandb_resume_id <the id of the run you want to resume, if you are using weights&biases (you can find the id in the URL of the run)>
멀티 GPU 교육을 위해서는 여러 GPU ID (Comma 분리)를 제공하고 Torchrun으로 스크립트를 시작해야합니다. 또한 GPU 수를 지정해야합니다. 이는 공급하는 ID 수와 일치해야합니다. 조심 : Torchrun은 nohup과 호환되지 않습니다! 대신 tmux를 사용하여 쉘에서 로그인 한 후 스크립트를 계속 실행하십시오.
torchrun --standalone --nproc_per_node=4 --nnodes=1 run_training_pipeline.py <shorthand of the pipeline> --gpu_id "0,1,2,3"
모든 시대가 발생한 후 (또는 특정 단계 수 후에) 일부 로그는 콘솔과 가중치 및 바이어스 웹 사이트에 로그인하여 플래그를 설정하면 기록됩니다. 메모리 오류가 발생하지 않으면 실행중인 파이프 라인에서 Training_Loop에 대한 호출 인수에서 배치 크기를 줄여야합니다. CUDA 메모리 오류에서 더 이상 벗어나지 않을 때까지 작은 단계로 배치 크기를 줄이십시오.
저장을 위해 지정된 디렉토리에는 체크 포인트 파일 및 스펙트로 그램 시각화 데이터가 나타납니다. 체크 포인트는 상당히 크기 때문에 가장 최근의 5 개만 유지됩니다. 훈련 단계의 양은 사용중인 데이터와 사전에 사전 검사 점에서 미세 조정하는지 또는 처음부터 교육하는지 여부에 따라 크게 달라집니다. 데이터가 적을수록 붕괴를 방지하기 위해 더 적은 단계를 밟아야합니다. 일찍 멈추고 싶다면 모든 어린이 프로세스가 죽어야하는 모든 아동용이기 때문에 프로세스를 죽이십시오. 뒤에 유령 프로세스가 남아 있으면 다음 명령을 사용하여 수동으로 죽일 수 있습니다.
fuser -v /dev/nvidia*
체크 포인트가 저장 될 때마다 추론에 사용할 수있는 압축 버전도 생성되며 Best.py 라고합니다.
사용자가 제기 한 몇 가지 요점은 다음과 같습니다.
run_scorer.py 에서 샘플을 찾아 제거 할 수있는 득점자가 있습니다.UserWarning: Detected call of lr_scheduler.step() before optimizer.step(). - 우리는 사용자 정의 스케줄러를 사용하고 토치는 스케줄러와 Optimizer를 잘못된 순서로 호출한다고 잘못 생각합니다. 이 경고를 무시하십시오. 완전히 의미가 없습니다.WARNING[XFORMERS]: xFormers can't load C++/CUDA extensions. [...] - 또 다른 의미없는 경고. 우리는 실제로 Xformers를 스스로 사용하지 않으며, 그것은 우리의 종속성 중 하나의 종속성의 일부일 뿐이지 만 어느 곳에서나 사용되지 않습니다.The torchaudio backend is switched to 'soundfile'. Note that 'sox_io' is not supported on Windows. [...] - 창문 아래에서 발생하며 아무것도 영향을 미치지 않습니다.WARNING:phonemizer:words count mismatch on 200.0% of the lines (2/1) [...] . 왜 Espeak 가이 경고를 시작하기 시작했는지 모르겠지만 아무것도 영향을 미치지 않으므로 무시하는 것이 안전 해 보입니다.NaN 으로 바뀝니다. 기본 학습 속도는 깨끗한 데이터에서 작동합니다. 데이터가 덜 깨끗한 경우 득점자를 사용하여 문제가있는 샘플을 찾거나 학습 속도를 줄입니다. 가장 일반적인 문제는 연설에서 일시 정지가 있지만 텍스트에서 그들을 암시하는 것은 없습니다. 그렇기 때문에 문장 부호를 남기지 않는 ASR Corpora는 일반적으로 TTS에 사용하기가 어렵습니다. FastSpeech 2 및 GST의 기본 Pytorch 모듈은 ESPNET에서 가져 왔으며 Hifi-Gan의 Pytorch 모듈은 Parallel Wavegan 저장소에서 가져옵니다. matchatts에 요약 된 조건부 변동 기반 Postnet과 관련된 일부 모듈은 공식 Matchatts 코드베이스에서 가져오고 일부는 Stabletts 코드베이스에서 가져옵니다. Grapheme-to-Phoneme 변환의 경우, 우리는 전술 한 ESPEAK-NG 및 트랜스 폰에 의존합니다. 우리는 공간을 절약하기 위해 열차 데이터를 캐싱하기위한 중간 표현으로 신경 오디오 코덱 인 Encodec을 사용합니다.
@inproceedings{lux2021toucan,
year = 2021,
title = {{The IMS Toucan system for the Blizzard Challenge 2021}},
author = {Florian Lux and Julia Koch and Antje Schweitzer and Ngoc Thang Vu},
booktitle = {Blizzard Challenge Workshop},
publisher = {ISCA Speech Synthesis SIG}
}
@inproceedings{lux2022laml,
year = 2022,
title = {{Language-Agnostic Meta-Learning for Low-Resource Text-to-Speech with Articulatory Features}},
author = {Florian Lux and Ngoc Thang Vu},
booktitle = {ACL}
}
@inproceedings{lux2022cloning,
year = 2022,
title = {{Exact Prosody Cloning in Zero-Shot Multispeaker Text-to-Speech}},
author = {Lux, Florian and Koch, Julia and Vu, Ngoc Thang},
booktitle = {SLT},
publisher = {IEEE}
}
@inproceedings{lux2022lrms,
year = 2022,
title = {{Low-Resource Multilingual and Zero-Shot Multispeaker TTS}},
author = {Florian Lux and Julia Koch and Ngoc Thang Vu},
booktitle = {AACL}
}
@inproceedings{lux2023controllable,
year = 2023,
title = {{Low-Resource Multilingual and Zero-Shot Multispeaker TTS}},
author = {Florian Lux and Pascal Tilli and Sarina Meyer and Ngoc Thang Vu},
booktitle = {Interspeech}
publisher = {ISCA}
}
@inproceedings{lux2023blizzard,
year = 2023,
title = {{The IMS Toucan System for the Blizzard Challenge 2023}},
author = {Florian Lux and Julia Koch and Sarina Meyer and Thomas Bott and Nadja Schauffler and Pavel Denisov and Antje Schweitzer and Ngoc Thang Vu},
booktitle = {Blizzard Challenge Workshop},
publisher = {ISCA Speech Synthesis SIG}
}
@inproceedings{lux2024massive,
year = 2024,
title = {{Meta Learning Text-to-Speech Synthesis in over 7000 Languages}},
author = {Florian Lux and Sarina Meyer and Lyonel Behringer and Frank Zalkow and Phat Do and Matt Coler and Emanuël A. P. Habets and Ngoc Thang Vu},
booktitle = {Interspeech}
publisher = {ISCA}
}