chldkato

윈도우에서 딥러닝 음성 합성(Multi-Speaker Tacotron) 학습하기 본문

딥러닝

윈도우에서 딥러닝 음성 합성(Multi-Speaker Tacotron) 학습하기

chldkato 2019. 7. 28. 19:08

주의사항 1)

과정 중에 구글의 STT가 필요합니다. 

만일 유료로 사용하실 경우 상당한 비용이 듭니다.

구글 클라우드 플랫폼에 가입한 후 카드를 등록하여 1년 동안 사용할 수 있는 무료 $300 크레딧을 받으신 후

Speech API 키를 받으면 됩니다.

 

https://webnautes.tistory.com/1247

 

음성인식, Google Cloud Speech-to-Text API 사용해보기

Cloud Speech API 서비스 계정 키를 발급받아서 샘플 코드를 실행하는 방법을 설명합니다. 마지막 업데이트 - 2018. 9. 20 1. Cloud Speech API 키 발급 받기 2. Cloud SDK 설치 3. 파이썬 예제 테스트 해보기 4...

webnautes.tistory.com

계정 키를 받는 과정은 위 글을 참고하였습니다. 파이썬 예제 테스트 전까지 진행하시면 됩니다.

 

 

주의사항 2)

tensorflow 버전 1.3을 요구하기 때문에 다운그레이드하여 진행하는게 편합니다.

최신 아나콘다로는 설치하기 어렵기 때문에 아나콘다 4.2.0 버전으로 진행하였습니다.

CUDA는 8.0, cuDNN은 6.0으로 설치하시면 됩니다.

 

 

주의사항 3)

ffmpeg가 없으면 데이터를 받을 수 없습니다.

 

https://kyoko0825.tistory.com/entry/%EC%9C%88%EB%8F%84%EC%9A%B0-10%EC%97%90%EC%84%9C-ffmpeg-%EC%82%AC%EC%9A%A9%ED%95%98%EA%B8%B0

 

윈도우 10에서 ffmpeg 사용하기

ffmpeg using on Windows 10 (2018.08.23) ffmpeg은 강력한 encoder/decoder이기 때문에 많은 곳에 사용된다. 하지만 GUI 에서의 사용의 제한으로 인해 command line으로만 사용이 가능하다. (windows key +r ->..

kyoko0825.tistory.com

위 글을 참고해주세요.

 

 

1. 코드 다운로드 및 학습 준비

 

https://github.com/carpedm20/multi-speaker-tacotron-tensorflow

 

carpedm20/multi-speaker-tacotron-tensorflow

Multi-speaker Tacotron in TensorFlow. Contribute to carpedm20/multi-speaker-tacotron-tensorflow development by creating an account on GitHub.

github.com

github에 사용법이 자세히 설명되어 있습니다.

 

손석희 음성 데이터 single speaker를 사용합니다.

pip install -r requirements.txt
python -c "import nltk; nltk.download('punkt')"

코드가 있는 폴더에서 명령 프롬프트로 실행합니다.

 

필요한 package를 설치하고 punkt 데이터를 다운받습니다.

 

에러가 있어 설치가 안된 것이 있으면 아래와 같이 설치합니다.

pip install --ignore-installed <package_name>

 

2. 한국어 음성(손석희) 데이터 다운로드

 

위에 주의사항 1)의 과정을 먼저 진행해야합니다.

 

윈도우에서 코드를 실행하기위해 수정해야하는 부분이 있습니다.

 

 

- UnicodeEncodeError: 'cp949' codec can't encode character 관련 에러

 

datasets/son/download.py 에서 

open(original_text_path, "w") 과 같이 open안에 "w"가 있는 부분을 

open(original_text_path, "w", encoding='utf8') 로 수정

참고로 open안에 "wb"가 있는 부분은 수정하지 않습니다.

 

recognition/alignment.py 에서 

candidates = [strip_fn(line) for line in open(news_path, encoding='cp949') 를 

candidates = [strip_fn(line) for line in open(news_path, encoding='utf-8') 로 수정

 

datasets/generate_data.py 에서 

with open(config.metadata_path) 을 

with open(config.metadata_path, encoding='utf-8') 로 수정

 

 

Exception: OS error: RetryError 관련 에러

 

recognition/alignment.py 에서 맨 위와 맨 아래 부분 다음과 같이 수정

...
import time
...

def text_recognition(path, config):
    time.sleep(0.7)
    root, ext = os.path.splitext(path) 
...

    parser.add_argument('--recognition_encoding', default='utf-8')
...

 

- github에서 압축 파일로 다운받아 사용하시는 경우

 

train.py의 130번째 줄 log(' [*] git recv-parse HEAD:\n%s' % get_git_revision_hash()) 를 주석처리 합니다.

 

 

밑에 1) ~ 6) 과정은 약 5시간 정도 걸리며 용량(수 십 기가)이 상당히 크기 때문에 미리 대비해야합니다.

 

1) 손석희 앵커브리핑 영상과 음성파일을 다운받는다.

python -m datasets.son.download

2) 음성에 맞춰 분할합니다.

python -m audio.silence --audio_pattern "./datasets/son/audio/*.wav" --method=pydub

3) Google Cloud Speech-to-Text API로 텍스트를 인식합니다.

python -m recognition.google --audio_pattern "./datasets/son/audio/*.*.wav"

4) 실제 대본과 비교하여 score_threshold 값 이상만 추출합니다.

python -m recognition.alignment --recognition_path "./datasets/son/recognition.json" --score_threshold=0.5

5) 학습에 쓰일 데이터 셋을 생성합니다.

python -m datasets.generate_data ./datasets/son/alignment.json

6) 각 파일별 앞부분은 배경음이 있는 경우가 있어 제거합니다.

rm -f ./datasets/son/data/*.0000.npz

 

 

3. 학습

 

hparams.py 를 열어서 cleaners를 korean_cleaners로 수정해줍니다.

python train.py --data_path=datasets/son

코드를 실행하면 logs폴더에 학습 결과가 저장됩니다.

python train.py --data_path=datasets/son --load_path logs/son_2019-07-29

이전 학습 결과를 불러와 이어서 학습하려면 위의 코드를 실행합니다.

 

ogs 뒤의 폴더 명은 본인 폴더명에 맞춰 수정해줍니다.

python train.py --data_path=datasets/son1,datasets/son2

multi로 하실분은 hparams.py에서 model_type을 single에서 deepvoice로 수정 후 위 코드를 실행합니다.

 

datasets 뒤의 폴더 명은 본인 폴더명에 맞춰 수정해줍니다.

 

 

4. 테스트

 

음성에 맞춰 파일 길이를 자르기 위해

synthesizer.py 에서 78번째 줄 librosa_trim을 True로, 맨 마지막에 attention_trim를 True로 수정합니다.

python synthesizer.py --load_path logs/son_2019-07-29 --text "가나다"

logs 뒤의 폴더 명을 수정하고 만들고 싶은 text를 넣어 코드를 실행합니다.

 

결과는 samples 폴더에 저장됩니다.

 

 

-추가

 

single의 경우 학습을 100k 이상은 해야한다고 합니다. 

 

1080ti 기준으로 2일 이상 걸립니다.

 

코드 제목 자체가 Multi-Speaker Tacotron 이니 single보다 multi가 핵심입니다.

 

실제로 single의 경우 학습이 잘 되기 어렵습니다.

 

특히 손석희 데이터가 질이 좋은 편이 아니고 구글 STT 성능도 많이 떨어집니다.

 

손석희 데이터 single로 좋은 성과를 보려면 하나씩 수작업해서 좋은 데이터를 선별하는 수밖에 없습니다.

Comments