참고 : 이것은 개발 버전입니다. 안정적인 버전이 필요한 경우 V0.1.1을 확인하십시오.
저장소의 목표는 Wavenet 보코더의 구현을 제공하는 것입니다. 이는 언어 또는 음향 기능에 조절 된 고품질의 원시 음성 샘플을 생성 할 수 있습니다.
오디오 샘플은 https://r9y9.github.io/wavenet_vocoder/에서 제공됩니다.
https://colab.research.google.com에서 실행되어야 할 노트북이 제공됩니다.
참고 : 이것은 TTS (Text-To-Steeech) 모델이 아닙니다. 여기에 미리 훈련 된 모델을 사용하면 원시 텍스트가 아닌 Mel 스펙트로 그램이 주어진 파형을 합성 할 수 있습니다. TTS에 미리 훈련 된 모델을 사용하려면 Mel-Spectrogram 예측 모델 (예 : Tacotron2)이 필요합니다.
참고 : LJSPEECH의 사전 준비된 모델의 경우이 모델은 여러 번 미세 조정되었으며 총 1000k 이상의 단계에 대해 훈련되었습니다. 모델이 어떻게 훈련되었는지 알기 위해 문제 ( #1, #75, #45)를 참조하십시오.
| 모델 URL | 데이터 | Hyper Params URL | git 커밋 | 단계 |
|---|---|---|---|---|
| 링크 | ljspeech | 링크 | 2092a64 | 1000K ~ 단계 |
| 링크 | CMU 북극 | 링크 | B1A1076 | 740K 단계 |
미리 훈련 된 모델을 사용하려면 먼저 위에 언급 된 특정 GIT 커밋을 체크 아웃하십시오. 즉,
git checkout ${commit_hash}
그런 다음 readme의 "체크 포인트에서 합성"섹션을 따릅니다. 이전 버전의 synthesis.py는 --preset=<json> 매개 변수를 허용하지 않을 수 있으며 사전 설정 (JSON) 파일에 따라 hparams.py 변경해야 할 수도 있습니다.
예를 들어 시도 할 수 있습니다.
# Assuming you have downloaded LJSpeech-1.1 at ~/data/LJSpeech-1.1
# pretrained model (20180510_mixture_lj_checkpoint_step000320000_ema.pth)
# hparams (20180510_mixture_lj_checkpoint_step000320000_ema.json)
git checkout 2092a64
python preprocess.py ljspeech ~/data/LJSpeech-1.1 ./data/ljspeech
--preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
python synthesis.py --preset=20180510_mixture_lj_checkpoint_step000320000_ema.json
--conditional=./data/ljspeech/ljspeech-mel-00001.npy
20180510_mixture_lj_checkpoint_step000320000_ema.pth
generated
generated 디렉토리에서 생성 된 WAV 파일을 찾을 수 있습니다. 그것이 어떻게 작동하는지 궁금하십니까? 그런 다음 코드를 살펴보십시오 :)
이 저장소는 1) Pytorch 라이브러리, 2) 명령 줄 도구 및 3) ESPNET 스타일 레시피로 구성됩니다. 첫 번째는 Wavanet 기능을 제공하는 Pytorch 라이브러리입니다. 두 번째는 Wavenet 교육/추론, 데이터 처리 등을 실행하는 일련의 도구입니다. 마지막 것은 Wavenet 라이브러리와 유틸리티 도구를 결합한 재현 가능한 레시피입니다. 당신의 목적에 따라 그들을 살펴보십시오. 데이터 세트에서 파도를 만들고 싶다면 (가장 가능성이 높은 경우) 레시피가 당신을위한 길입니다.
git clone https://github.com/r9y9/wavenet_vocoder && cd wavenet_vocoder
pip install -e .
라이브러리 부분 만 있으면 PYPI에서 설치할 수 있습니다.
pip install wavenet_vocoder
이 저장소는 실험을 재현 가능하고 쉽게 관리 할 수 있도록 Kaldi 스타일 레시피를 제공합니다. 사용 가능한 레시피는 다음과 같습니다.
mulaw256 : 범주 형 출력 분포를 사용하는 Wavenet. 입력은 8 비트 mulaw 양자화 된 파형입니다.mol : 물류 (mol) Wavenet의 혼합물. 입력은 16 비트 원시 오디오입니다.gaussian : 단일 가우시안 Wavenet (일명 클라리넷의 교사 Wavenet). 입력은 16 비트 원시 오디오입니다. 모든 레시피에는 run.sh 가 있으며 데이터 전처리를 포함한 Wavenet Training/Onerfern를 수행하는 모든 단계를 지정합니다. 자세한 내용은 EGS 디렉토리의 run.sh를 참조하십시오.
통지 : 멀티 스피커 Wavenet의 글로벌 컨디셔닝은 위의 레시피에서 지원되지 않습니다 (구현하기가 어렵지 않아야합니다). 기능이 있는지 v0.1.12를 확인하거나 실제로 기능이 필요한 경우 문제를 제기하십시오.
레시피는 일반적인 것으로 설계되어 모든 데이터 세트에 사용할 수 있도록 일반화되었습니다. 자신의 데이터 세트에 레시피를 적용하려면 모든 WAV 파일을 단일 플랫 디렉토리에 넣어야합니다. 즉,
> tree -L 1 ~/data/LJSpeech-1.1/wavs/ | head
/Users/ryuichi/data/LJSpeech-1.1/wavs/
├── LJ001-0001.wav
├── LJ001-0002.wav
├── LJ001-0003.wav
├── LJ001-0004.wav
├── LJ001-0005.wav
├── LJ001-0006.wav
├── LJ001-0007.wav
├── LJ001-0008.wav
├── LJ001-0009.wav
그게 다야! 마지막 단계는 run.sh에서 db_root 수정하거나 db_root run.sh에 대한 명령 줄 인수로 제공하는 것입니다.
./run.sh --stage 0 --stop-stage 0 --db-root ~/data/LJSpeech-1.1/wavs/
레시피는 일반적으로 여러 단계로 구성됩니다. 레시피를 단계별로 실행하여 처음으로 어떻게 작동하는지 이해하는 것이 좋습니다. 이렇게하려면 다음과 같이 stage 및 stop_stage 지정하십시오.
./run.sh --stage 0 --stop-stage 0
./run.sh --stage 1 --stop-stage 1
./run.sh --stage 2 --stop-stage 2
전형적인 상황에서는 교육 단계를 위해 Cuda 장치를 설명 적으로 설명해야합니다.
CUDA_VISIBLE_DEVICES="0,1" ./run.sh --stage 2 --stop-stage 2
명령 줄 도구는 docopt와 함께 Writtern입니다. 기본 사용법은 각 문서를 참조하십시오.
하이퍼 파라미터를 JSON 파일에 덤프하십시오.
용법:
python tojson.py --hparams="parameters you want to override" <output_json_path>
용법:
python preprocess.py wavallin ${dataset_path} ${out_dir} --preset=<json>
참고 : 멀티 GPU 교육의 경우 Batch_Size % NUM_GPU == 0을 더 잘 보장합니다.
용법:
python train.py --dump-root=${dump-root} --preset=<json>
--hparams="parameters you want to override"
로컬 컨디셔닝 기능이 포함 된 감독이 주어지면 파형을 합성하십시오.
용법:
python evaluate.py ${dump_root} ${checkpoint} ${output_dir} --dump-root="data location"
--preset=<json> --hparams="parameters you want to override"
옵션 :
--num-utterances=<N> : 생성 될 발화 수. 지정되지 않은 경우 모든 전화를 생성하십시오. 디버깅에 유용합니다. 주목 : 이것은 아마도 지금 작동하지 않을 것입니다. 대신 evaluate.py를 사용하십시오.
합성 파형은 컨디셔닝 기능을 제공합니다.
용법:
python synthesis.py ${checkpoint_path} ${output_dir} --preset=<json> --hparams="parameters you want to override"
중요한 옵션 :
--conditional=<path> : (조건부 파동에 필요) 로컬 조건부 특징 (.NPY)의 경로. 이것이 지정된 경우, 생성 할 시간 단계는 조건부 특징의 크기에 따라 결정됩니다.주목 : 이것은 아마도 지금 작동하지 않을 것입니다. 작업 버전은 v0.1.1을 확인하십시오.
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=-1,gin_channels=-1"
gin_channels 및 cin_channels 음수 값으로 설정하여 글로벌 및 로컬 컨디셔닝을 비활성화해야합니다.
python train.py --dump-root=./data/cmu_arctic/ --speaker-id=0
--hparams="cin_channels=80,gin_channels=-1"
주목 : 이것은 아마도 지금 작동하지 않을 것입니다. 작업 버전은 v0.1.1을 확인하십시오.
python train.py --dump-root=./data/cmu_arctic/
--hparams="cin_channels=80,gin_channels=16,n_speakers=7"
로그는 기본적으로 ./log 디렉토리에 덤프됩니다. Tensorboard로 로그를 모니터링 할 수 있습니다.
tensorboard --logdir=log
매우 감사합니다!! 새로운 것을 찾으면 PR을 제출하십시오.