Notice
Recent Posts
Recent Comments
Link
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

uos-machine-learning

Text to Speech 딥보이스 3 돌려만보기 - Deep Voice 3 (Pytorch) 본문

딥러닝

Text to Speech 딥보이스 3 돌려만보기 - Deep Voice 3 (Pytorch)

이산한하루 2020. 6. 1. 13:56

오늘은 Text to Speech 딥 보이스 코드를 실행해보고 뜯어보는 시간을 가지겠습니다. 만들어진 오디오 샘플은 아래링크에서 확인가능하다고 합니다. 시작하기 전에 아래 코드로 먼저 설치해주세요. 다만 위 깃허브는 아웃풋을 실제 음성으로 만들 때 쓰는 World 알고리즘이 생략되어 있습니다. World 알고리즘이 구현된 코드가 궁금하시다면 링크로 들어가시면 됩니다.  

0. Installation

git clone https://github.com/r9y9/deepvoice3_pytorch && cd deepvoice3_pytorch
pip install -e ".[bin]"

1. Getting Started

1-0. Preset Parameters

더보기

이 코드에서는 많은 파라미터를 사용할 수 있습니다. 공개된 데이터셋에 맞춰 적절한 json 파라미터 파일을 제공하고 있습니다. 파라미터 json 파일은 presets 디렉토리에서 확인할 수 있습니다. 전체 TTS 합성과정 다음과 같은 과정으로 진행됩니다. 

  1. preprocess.py
  2. train.py
  3. synthesis.py

위 3가지 스크립트를 거치면 합성된 오디오 파일을 html에 붙여서 만들어 줍니다. 우선 데이터셋 다운로드 부터 해보겠습니다. 

1-1. Download dataset

더보기

각각의 링크에서 다운로드 받을 수 있습니다. 이 때 파일 구조는 다음과 같습니다. 

저 같은 경우에는 github 안에 data 디렉토리를 만들고 그 안에 dataset을 다운로드 받았습니다. metadata.csv를 열면  wavs 폴더에 있는 음성 파일의 이름과 그 파일에서 나오는 텍스트가 쌍으로 존재합니다. 

1-2. Preprocessing

아래 스크립트를 사용하면 데이터 파일에 있는 .wav를 전처리하여 mel-spectogram을 넘파이 배열로 바꿔 명시한 output 디렉토리에 새로 저장을 해줍니다.  

python preprocess.py ${dataset_name} ${dataset_path} ${out_dir} --preset=<json>

Supported ${dataset_name}s are:

  • ljspeech (en, single speaker)
  • vctk (en, multi-speaker)
  • jsut (jp, single speaker)
  • nikl_m (ko, multi-speaker)
  • nikl_s (ko, single speaker)

다운 받은 데이터 셋 중에 하나를 선택하여 실행을 하면 됩니다. 아래는 ljspeech 데이터셋을 사용하여 실행하는 명령어 예시입니다.

python preprocess.py --preset=presets/deepvoice3_ljspeech.json ljspeech ./data/LJSpeech-1.0/ ./data/ljspeech

그러면 아래와 같이 .npy로 전처리가 완료된 데이터가 만들어집니다. 

1-3. Training

아래 스크립트로 학습을 진행을 하면 됩니다.

python train.py --data-root=${data-root} --preset=<json> --hparams="parameters you may want to override"

만약 ljspeech 데이터셋을 사용한다면 아래 스크립트가 그 예시가 될 수 있습니다. 

python train.py --preset=presets/deepvoice3_ljspeech.json --data-root=./data/ljspeech/

default 로 10000 step 마다 checkpoint 폴더에 모델 체크포인트 (.pth)와 alignment (.png)를 저장합니다.  

학습 중인 checkpoint 폴더

결과물 예시

step000040000_text5_single_predicted.wav
0.21MB

오류났던 부분

이런 경우에는 Searched in 에 있는 디렉토리에 nltk_data 폴더를 새로 생성하고 그 아래 corpora 라는 이름의 폴더 생성후 아래 링크에서 cmudict.zip 을 다운 후 압축해제 하면 됩니다.

http://www.nltk.org/nltk_data/

 

1-4. Monitor with Tensorboard

로그들은 ./log 폴더에서 확인할 수 있습니다.

tensorboard --logdir=log

Scalar

loss에 대한 전반적인 모니터링을 할 수 있습니다. 

다양한 Loss Plot 제공

그 중에 예시를 살펴보면 점점 수렴하는 모습을 확인할 수 있습니다. 

Images

Images 배너에서는 Target 음성의 Mel / Linear spectogram과 Prediction 스펙토그램을 비교해볼 수 있습니다. 

Predicted
Target

Audio

오디오 배너에서는 만들어진 샘플을 텐서보드에서 실제로 들어볼 수 있습니다. 

1-5. Synthesize from a checkpoint

synthesis.py 에서 .txt 파일로부터 오디오 시그널을 합성하고 이를 html 파일로 저장할 수도 있습니다. 합성을 하면 wav파일이 output_dir에 저장됩니다. 

python synthesis.py ${checkpoint_path} ${text_list.txt} ${output_dir} --preset=<json>

실행했던 명령어 예시입니다. 

python synthesis.py ./checkpoint_step000020000.pth test_list.txt ./output_dir --preset=presets/deepvoice3_ljspeech.json

Example test_list.txt

His palms are sweaty, knees weak, arms are heavy
There's vomit on his sweater already, mom's spaghetti
He's nervous, but on the surface he looks calm and ready
To drop bombs, but he keeps on forgettin'
What he wrote down, the whole crowd goes so loud

2. 더 공부해볼 것

  • Custom Dataset으로 돌려보기
  • TTS Text 입력하면 음성으로 들려주는 웹 사이트 만들어 보기
Comments