
Convolutional Networks 기반 텍스트 음성 연설 합성 모델의 Pytorch 구현 :
오디오 샘플은 https://r9y9.github.io/deepvoice3_pytorch/에서 제공됩니다.
https://colab.research.google.com에서 실행 해야하는 노트북은 다음과 같습니다.
참고 : 사전 예방 된 모델은 마스터와 호환되지 않습니다. 곧 업데이트됩니다.
| URL | 모델 | 데이터 | 하이퍼 매개 변수 | git 커밋 | 단계 |
|---|---|---|---|---|---|
| 링크 | Deepvoice3 | ljspeech | 링크 | ABF0A21 | 640K |
| 링크 | Nyanko | ljspeech | builder=nyanko,preset=nyanko_ljspeech | BA59DC7 | 585K |
| 링크 | 멀티 스피커 Deepvoice3 | vctk | builder=deepvoice3_multispeaker,preset=deepvoice3_vctk | 0421749 | 300K + 300K |
미리 훈련 된 모델을 사용하려면 위에서 언급 한 특정 git 커밋 에있는 것이 좋습니다. 즉,
git checkout ${commit_hash}
그런 다음 특정 git 커밋의 읽기에있는 "체크 포인트에서 합성"섹션을 따르십시오. 최신 개발 버전의 저장소가 작동하지 않을 수 있습니다.
예를 들어 시도 할 수 있습니다.
# pretrained model (20180505_deepvoice3_checkpoint_step000640000.pth)
# hparams (20180505_deepvoice3_ljspeech.json)
git checkout 4357976
python synthesis.py --preset=20180505_deepvoice3_ljspeech.json
20180505_deepvoice3_checkpoint_step000640000.pth
sentences.txt
output_dir
hparams.py 참조하십시오.builder 사용하려는 모델을 지정합니다. deepvoice3 , deepvoice3_multispeaker [1] 및 nyanko [2]가 예측됩니다.위에 나열된 패키지를 먼저 설치 한 다음 설치하십시오
git clone https://github.com/r9y9/deepvoice3_pytorch && cd deepvoice3_pytorch
pip install -e ".[bin]"
회전해야 할 많은 하이퍼 매개 변수는 작업중인 모델과 데이터에 따라 다릅니다. 일반적인 데이터 세트 및 모델의 경우, 잘 작동하는 것으로 알려진 매개 변수 ( 사전 설정 )는 저장소에 제공됩니다. 자세한 내용은 presets 디렉토리를 참조하십시오. 주목하십시오
preprocess.pytrain.pysynthesis.py 확인 --preset=<json> 옵션 매개 변수는 사전 설정 매개 변수를로드 할 위치를 지정합니다. 사전 설정 매개 변수를 사용하려면 전처리, 교육 및 평가 전체에서 동일한 --preset=<json> 사용해야합니다. 예,
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech
대신
python preprocess.py ljspeech ~/data/LJSpeech-1.0
# warning! this may use different hyper parameters used at preprocessing stage
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech
용법:
python preprocess.py ${dataset_name} ${dataset_path} ${out_dir} --preset=<json>
지원되는 ${dataset_name} s는 다음과 같습니다.
ljspeech (en, 싱글 스피커)vctk (EN, 멀티 스피커)jsut (JP, 싱글 스피커)nikl_m (KO, 멀티 스피커)nikl_s (KO, 싱글 스피커) ljspeech dataset/deepvoice3에 적합한 것으로 알려진 사전 설정 매개 변수를 사용하고 ~/data/LJSpeech-1.0 에 데이터가 있다고 가정하면 다음으로 데이터를 전처리 할 수 있습니다.
python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ~/data/LJSpeech-1.0/ ./data/ljspeech
이 작업이 완료되면 ./data/ljspeech 에서 추출 된 기능 (Mel-Spectrograms 및 Linear Spectrograms)이 표시됩니다.
JSON 형식의 메타 데이터를 사용하여 자신의 데이터 세트를 구축하는 것이 현재 지원됩니다. 용법:
python preprocess.py json_meta ${list-of-JSON-metadata-paths} ${out_dir} --preset=<json>
기존 사전 설정 JSON 파일, 특히 n_speakers 수정해야 할 수도 있습니다. 영어 멀티 스피커의 경우 presets/deepvoice3_vctk.json 으로 시작하십시오.
JSON 메타 데이터 파일에 설명 된 데이터 세트 A (스피커 A) 및 데이터 세트 B (스피커 B)가 있다고 가정하면 ./datasets/datasetA/alignment.json 및 ./datasets/datasetB/alignment.json 에 설명 할 수 있습니다.
python preprocess.py json_meta "./datasets/datasetA/alignment.json,./datasets/datasetB/alignment.json" "./datasets/processed_A+B" --preset=(path to preset json file)
일부 데이터 세트, 특히 자동으로 생성 된 데이터 세트에는 긴 침묵과 바람직하지 않은 선행/후행 소음이 포함되어 숯 수준 SEQ2SEQ 모델을 훼손 할 수 있습니다. (예 : VCTK, VCTK_PREPROCESS로 덮여 있지만)
문제를 다루기 위해 gentle_web_align.py Will을 처리합니다
gentle_web_align.py 칼디 기반의 음성 텍스트 정렬 도구 인 Gentle을 사용합니다. 이것은 웹에 보존 된 온화한 응용 프로그램에 액세스하고, 주어진 사운드 세그먼트를 전 사운드 세그먼트와 정렬하고 결과를 HTK 스타일 레이블 파일로 변환하여 preprocess.py 로 처리됩니다. Linux/Mac/Windows (Docker를 통해)에서 부드럽게 실행할 수 있습니다.
예비 결과에 따르면 vctk_preprocess/prepare_vctk_labels.py 의 HTK/FESTIVE/MERLIN 기반 방법은 VCTK에서 더 잘 작동하지만 젠버 클립은 주변 소음이있는 오디오 클립으로 더 안정적입니다. (예 : 영화 발췌)
사용법 : (부드러운 것으로 가정하면 localhost:8567 에서 실행 중이라고 가정합니다 (지정되지 않은 경우 기본값))
datasetA/wavs 에 있고 전사는 datasetA/txts 에 있습니다) python gentle_web_align.py -w "datasetA/wavs/*.wav" -t "datasetA/txts/*.txt" --server_addr=localhost --port=8567
datasetB/speakerN/blahblah.wav 및 datasetB/speakerN/blahblah.txt ) python gentle_web_align.py --nested-directories="datasetB" --server_addr=localhost --port=8567
발화에 대한 음소 정렬이 있으면 preprocess.py 실행하여 기능을 추출 할 수 있습니다.
용법:
python train.py --data-root=${data-root} --preset=<json> --hparams="parameters you may want to override"
ljspeech 데이터 세트를 사용하여 DeepVoice3 스타일 모델을 작성한다고 가정하면 다음과 같이 모델을 교육 할 수 있습니다.
python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech/
모델 체크 포인트 (.pth) 및 정렬 (.png)은 기본적으로 10000 단계 당 ./checkpoints 디렉토리에 저장됩니다.
Pleae는 이것을 미리 확인하고 아래 명령을 따르십시오.
python preprocess.py nikl_s ${your_nikl_root_path} data/nikl_s --preset=presets/deepvoice3_nikls.json
python train.py --data-root=./data/nikl_s --checkpoint-dir checkpoint_nikl_s --preset=presets/deepvoice3_nikls.json
로그는 기본적으로 ./log 디렉토리에 덤프됩니다. Tensorboard로 로그를 모니터링 할 수 있습니다.
tensorboard --logdir=log
텍스트 목록이 주어지면 synthesis.py 숙련 된 모델의 오디오 신호를 합성합니다. 사용법은 다음과 같습니다.
python synthesis.py ${checkpoint_path} ${text_list.txt} ${output_dir} --preset=<json>
예제 test_list.txt :
Generative adversarial network or variational auto-encoder.
Once upon a time there was a dear little girl who was loved by every one who looked at her, but most of all by her grandmother, and there was nothing that she would not have given to the child.
A text-to-speech synthesis system typically consists of multiple stages, such as a text analysis frontend, an acoustic model and an audio synthesis module.
VCTK 및 NIKL은 멀티 스피커 모델을 구축하기위한 지원되는 데이터 세트입니다.
VCTK의 일부 오디오 샘플은 성능에 영향을 미치는 긴 침묵이 있기 때문에 VCTK_PREPROCESS에 따라 Phoneme 정렬을 수행하고 침묵을 제거하는 것이 좋습니다.
각 발화에 대한 음소 정렬이 있으면 다음으로 기능을 추출 할 수 있습니다.
python preprocess.py vctk ${your_vctk_root_path} ./data/vctk
이제 데이터를 준비 했으므로 DeepVoice3의 멀티 스피커 버전을 훈련 할 수 있습니다.
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
다른 데이터 세트에서 배운 임베딩을 재사용하려면 대신이 작업을 수행 할 수 있습니다.
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk
--preset=presets/deepvoice3_vctk.json
--log-event-path=log/deepvoice3_multispeaker_vctk_preset
--load-embedding=20171213_deepvoice3_checkpoint_step000210000.pth
이것은 훈련 속도를 약간 향상시킬 수 있습니다.
../nikl_preprocoess에서 청소 오디오 샘플을 얻을 수 있습니다. 세부 사항은 여기에 있습니다.
Nikl Corpus가 전처리에서 사용할 준비가되면 다음과 같이 기능을 추출 할 수 있습니다.
python preprocess.py nikl_m ${your_nikl_root_path} data/nikl_m
이제 데이터를 준비 했으므로 DeepVoice3의 멀티 스피커 버전을 훈련 할 수 있습니다.
python train.py --data-root=./data/nikl_m --checkpoint-dir checkpoint_nikl_m
--preset=presets/deepvoice3_niklm.json
데이터가 매우 제한되어 있다면 미리 훈련 된 모델을 미세 회전시켜 시도 할 수 있습니다. 예를 들어 LJSpeech에서 미리 훈련 된 모델을 사용하면 다음 명령으로 VCTK 스피커 p225 (30 분)의 데이터에 적응할 수 있습니다.
python train.py --data-root=./data/vctk --checkpoint-dir=checkpoints_vctk_adaptation
--preset=presets/deepvoice3_ljspeech.json
--log-event-path=log/deepvoice3_vctk_adaptation
--restore-parts="20171213_deepvoice3_checkpoint_step000210000.pth"
--speaker-id=0
내 경험을 통해 모델을 처음부터 훈련시키는 대신 합리적인 음성 품질을 매우 빠르게 얻을 수 있습니다.
위에 사용 된 두 가지 중요한 옵션이 있습니다.
--restore-parts=<N> : 모델 매개 변수를로드 할 위치를 지정합니다. --checkpoint=<N> 옵션과의 차이는 1) --restore-parts=<N> 모든 유효하지 않은 매개 변수를 무시하고 --checkpoint=<N> 그렇지 않습니다. 2) --restore-parts=<N> 트레이너에게 0 단계부터 시작하도록 지시하는 반면 --checkpoint=<N> 트레이너에게 마지막 단계에서 계속하도록 지시합니다. --checkpoint=<N> 정확히 동일한 모델을 사용하고 계속 훈련하는 경우 괜찮아야하지만 모델 아키텍처를 사용자 정의하고 미리 훈련 된 모델의 장점을 사용하려는 경우 유용합니다.--speaker-id=<N> : 교육에 사용되는 데이터 스피커를 지정합니다. 멀티 스피커 데이터 세트를 사용하는 경우에만 지정해야합니다. vctk의 경우, 데이터 세트의 speaker_info.txt 에 따라 스피커 ID가 점진적으로 (0, 1, ..., 107) 자동으로 할당됩니다. 멀티 스피커 모델을 교육하는 경우 스피커 적응은 n_speakers 동일 할 때만 작동합니다.
이것은 matplotlib에 대한 백엔드에 따라 발생할 수 있습니다. matplotlib의 백엔드를 변경하고 다음과 같이 작동하는지 확인하십시오.
MPLBACKEND=Qt5Agg python train.py ${args...}
#78에서 Engiecat은 Matplotlib의 백엔드를 Tkinter (TKAGG)에서 PYQT5 (QT5AGG)로 변경하면 문제가 해결되었다고보고했습니다.
코드의 일부는 다음 프로젝트에서 조정되었습니다.
@Jraulhernandezi가 만든 배너 및 로고 (#76)