일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 학습
- 딥러닝 음성 합성
- 한국어 tts
- singing voice synthesis
- Vocoder
- text-to-speech
- 타코트론
- you only look once
- YOLO
- 딥러닝
- korean tts
- 음성 합성
- melgan
- 트레이닝
- 딥러닝 보코더
- deep voice
- TTS
- DCTTS
- tacotron
- 윈도우
- 한국어 음성 합성
- 노래합성
- 보코더
- waveglow
- Today
- Total
chldkato
윈도우에서 딥러닝 음성 합성(Multi-Speaker Tacotron) 학습하기 본문
주의사항 1)
과정 중에 구글의 STT가 필요합니다.
만일 유료로 사용하실 경우 상당한 비용이 듭니다.
구글 클라우드 플랫폼에 가입한 후 카드를 등록하여 1년 동안 사용할 수 있는 무료 $300 크레딧을 받으신 후
Speech API 키를 받으면 됩니다.
https://webnautes.tistory.com/1247
계정 키를 받는 과정은 위 글을 참고하였습니다. 파이썬 예제 테스트 전까지 진행하시면 됩니다.
주의사항 2)
tensorflow 버전 1.3을 요구하기 때문에 다운그레이드하여 진행하는게 편합니다.
최신 아나콘다로는 설치하기 어렵기 때문에 아나콘다 4.2.0 버전으로 진행하였습니다.
CUDA는 8.0, cuDNN은 6.0으로 설치하시면 됩니다.
주의사항 3)
ffmpeg가 없으면 데이터를 받을 수 없습니다.
위 글을 참고해주세요.
1. 코드 다운로드 및 학습 준비
https://github.com/carpedm20/multi-speaker-tacotron-tensorflow
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로 좋은 성과를 보려면 하나씩 수작업해서 좋은 데이터를 선별하는 수밖에 없습니다.
'딥러닝' 카테고리의 다른 글
윈도우에서 Tacotron 한국어 TTS 학습하기 (98) | 2020.03.25 |
---|---|
윈도우에서 DCTTS (Deep Convolutional TTS) 학습하기 (19) | 2019.10.30 |
딥러닝 음성 합성 (TTS) / 보코더 github, 논문 모음 (0) | 2019.09.15 |
윈도우에서 waveglow 학습하기 (4) | 2019.09.14 |
윈도우에서 YOLO 학습하기 (9) | 2019.07.12 |