일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- Git
- 데이콘
- 코로나19
- 백준
- dacon
- gs25
- ChatGPT
- Kaggle
- AI 경진대회
- github
- 금융문자분석경진대회
- 프로그래머스
- ubuntu
- 편스토랑 우승상품
- leetcode
- 자연어처리
- 우분투
- 편스토랑
- Docker
- hackerrank
- 프로그래머스 파이썬
- 캐치카페
- SW Expert Academy
- PYTHON
- Baekjoon
- 파이썬
- programmers
- 맥북
- Real or Not? NLP with Disaster Tweets
- 더현대서울 맛집
- Today
- Total
솜씨좋은장씨
[음성합성] multi-speaker-tacotron-tensorflow 실행 시 발생 이슈 해결 방법 모음 본문
Ai Hub에서 서버를 지원받아 이전에 멀티캠퍼스에서 진행해보았던 음성합성 프로젝트를 계속 진행해보기로 하였습니다.
음성합성 프로젝트는 carpedm20(김태훈님)님의 multi-speaker-tacotron-tensorflow 오픈소스를 활용하였습니다.
이 글에서는 해당 오픈소스를 실행 하면서 마주치는 다양한 이슈들과 그 해결 방법에 대해서 정리해보고자 합니다.
1. ImportError: libcusolver.so.8.0: cannot open shared object file: No such file or directory
현재 사용하는 오픈소스는 TensorFlow 1.3.0 버전을 사용합니다.
이 1.3.0 버전은 CUDA 8.0이 필요하나 사용하고 있는 서버의 CUDA 버전이 8.0이 아닐 경우 발생합니다.
해결방법은 다음의 링크를 참고하시기 바랍니다.
2. Training non-korean : X use jamo
학습 step 이 계속 진행되다가 중간 중간 위와 같은 오류를 만나는 경우가 있습니다.
이는 학습 시작 전 파라미터를 바꾸어주지 않아 발생하는 오류 입니다.
바꾸어야하는 파라미터는 hparams.py의 11번째에 cleaners 입니다.
8 basic_params = {
9 # Comma-separated list of cleaners to run on text prior to training and eval. For non-English
10 # text, you may want to use "basic_cleaners" or "transliteration_cleaners" See TRAINING_DATA.md.
11 'cleaners': 'english_cleaners',
12 }
11 번째 줄 'cleaners' 를 english_cleaners에서 korean_cleaners로 변경합니다.
8 basic_params = {
9 # Comma-separated list of cleaners to run on text prior to training and eval. For non-English
10 # text, you may want to use "basic_cleaners" or "transliteration_cleaners" See TRAINING_DATA.md.
11 'cleaners': 'korean_cleaners',
12 }
3. jamo.jamo.InvalidJamoError: Could not synthesize characters to Hangul.
학습 스텝이 끝나고 체크포인트 파일을 만들고 wav와 png 파일을 저장하는 과정에서
jamo.jamo.InvalidJamoError: Could not synthesize characters to Hangul.
위와 같은 오류를 만나는 경우가 있습니다.
이를 해결하는 방법은 다음과 같습니다.
먼저 datasets 디렉토리 안에 있는 generate_data.py 를 수정합니다.
39 if config.metadata_path.endswith("json"):
40 with open(config.metadata_path) as f:
41 content = f.read()
42 info = json.loads(content)
40번째 라인의 with open(config.metadata_path) as f: 에 utf-8로 인코딩하도록
아래와 같이 encoding='utf-8'을 추가합니다.
39 if config.metadata_path.endswith("json"):
40 with open(config.metadata_path, encoding='utf-8') as f:
41 content = f.read()
42 info = json.loads(content)
그 다음 기존에 만들어져있던 datasets/son 안의 data 디렉토리를 삭제한 뒤
$ python3 -m datasets.generate_data ./datasets/son/alignment.json
다시 data를 생성해줍니다.
그 후 다시 학습을 시작해주면 이상없이 학습이 되는 것을 볼 수 있습니다.
5. 학습은 진행이 되는 것 같은데 GPU를 사용하지 않고 CPU를 사용해서 학습합니다.
TensorFlow 1.3.0 버전이 CPU 버전으로 설치되었는지 pip list 를 통하여 확인해봅니다.
CPU버전으로 설치되어있다면
$ pip install tesorflow-gpu==1.3.0
으로 gpu버전으로 설치한 뒤 다시 실행해보시기 바랍니다.
6. 자동으로 생성되는 그래프나 synthesizer.py를 통해 음성을 생성할때 나오는 그래프의 한글이 깨져서 나옵니다.
이는 plot.py에서 설정해둔 NanumBarunGothic을 찾지 못해 발생하는 오류로 우분투에서 폰트를 설정해주어야합니다.
설정하는 방법은 다음과 같습니다.
먼저 NanumGothic.ttf파일을 다운로드 받아 utils 디렉토리에 넣어줍니다.
그 다음 plot.py를 수정합니다.
matplotlib.font_manager._rebuild()
font_path = './utils/NanumGothic.ttf'
font_name = fm.FontProperties(fname=font_path).get_name()
matplotlib.rc('font', family=font_name, size=7)
위의 코드를 추가한 뒤 다시 실행해보면
한국어가 잘 나오는 것을 볼 수 있습니다.
ㅇ ㅗ ㄹ ㅐ ㄴ ㅁ ㅏ ㄴ ㅇ ㅔ 뒤와 Encoder timestep 부분에 내용이 잘리는 것을 더 알아보고 알게되면
적어보려고합니다.
그 외 각종 파라미터 조정 관련 이슈
계속 진행해보면서 발생하는 다른 이슈들 계속 업데이트 하고자합니다.
읽어주셔서 감사합니다!
'머신러닝 | 딥러닝' 카테고리의 다른 글
음성합성 프로젝트 도전! - 01 새로운 시작! (7) | 2019.11.05 |
---|---|
Google Colab에서 Google Drive와 연동하기 (4) | 2019.09.10 |