# Deep Voice2 음성합성 및 KALDI 음성인식 환경 구축
- 최초 작성일: 2021년 8월 6일(금)
## 목차
[TOC]
<!-- ## 의뢰 내용
1. Multi-Speaker Tacotron in TensorFlow TensorFlow implementation of Deep Voice 2: Multi- Speaker Neural Text-to-Speech. (이하 : 딥러닝 음성합성) 의 환경 구축 및 학습, 합성 시스템 구현
2. 학습 데이터를 확보하기 위해 KALDI 란 음성인식 모델로 특정 화자의 일부 음성과 TEXT 데이터로 음성을 학습시킨 후, 해당 화자의 나머지 모든 음성데이터는 해당 음성 인식기 (STT) 로 TEXT 를 뽑아내어 최종 음성합성 데이터로 확보하는 방법을 위해, KALDI 음성 인식 개발 환경 구현하기(http://nblog.syszone.co.kr/archives/9788) 를 참조하여 환경 구축
## 희망 결과물
- https://github.com/carpedm20/multi-Speaker-tacotron-tensorflow 구동 가능한 전체 환경(학습 환경)을 구축 요청드립니다.
- 전처리 및 학습, 딥러닝 음성합성 과정에 대한 설명(사용방법)
- python 3.6 과 cuda 8.0, cudnn 6.0, tensorflow 혹은 tensorflow-gpu 1.3.0 환경등, 동작 환 경(설치 및 사용) 구축
- 변경해야 하는 파라미터에 대한 정리 및 적용
- 기본 제공되지 않는 임의의 화자의 음성 데이터를 학습하여 딥러닝 음성합성이 가능하도 록 구축. (학습데이터는 형식을 요청하면 의뢰자가 제공, 단, KALDI 음성 인식 개발 환경을 수주 개발자가 적용하여 어느정도 자동화가 되어야 상호 업무가 빨리 끝남)
- 상기 환경을 구축하기 위해 GPU 가 탑재된 하드웨어가 필요할 경우 업무 시작전 협의하 에 SSH 또는 원격 접속 환경 지원 해드립니다.(NVIDIA JETSON AGX XAVIER) -->
## 구축 내용 개요
### Deep Voice2 음성합성
1. https://github.com/carpedm20/multi-Speaker-tacotron-tensorflow 구동 가능환경 구축
2. python 3.6 과 cuda 8.0, cudnn 6.0, tensorflow 혹은 tensorflow-gpu 1.3.0 환경등, 동작 환 경(설치 및 사용) 구축
3. 변경해야 하는 파라미터에 대한 정리 및 적용
4. 전처리 및 학습, 딥러닝 음성합성 과정에 대한 설명(사용방법)
### KALDI 음성인식 환경 구축
1. https://github.com/kaldi-asr/kaldi.git 구동 가능환경 구축
- http://nblog.syszone.co.kr/archives/9788 블로그 참조
## 필요사항
- 구글 STT를 사용할 수 있는 api key
- 학습/추론에 필요한 GPU
- 외부에서 ssh로 접근가능하도록 방화벽이 열려 있어야함.
- Deep Voice 2 음성학습을 위한 학습 데이터 제공 필요
## 사전 테스트 예시
### Deep Voice2 음성합성

<!-- ## Dockerfile
```
FROM lablup/common-tensorflow:1.3-py36-cuda8 as tf-binary
FROM nvidia/cuda:8.0-cudnn6-runtime-ubuntu16.04
MAINTAINER Mario Cho "m.cho@lablup.com"
RUN apt-get update && \
apt-get install -y \
ca-certificates \
wget curl git-core \
vim-tiny zip unzip \
libssl-dev \
libmpdec2 \
proj-bin libproj-dev \
libgeos-dev libgeos++-dev \
mime-support \
gcc g++ make \
xz-utils \
libsqlite3-dev && \
apt-get clean && \
rm -rf /var/lib/apt/lists/
#install Python 3
RUN curl https://www.python.org/ftp/python/3.6.8/Python-3.6.8.tar.xz -o /opt/python.tar.xz && \
cd /opt && tar xvf python.tar.xz && \
cd /opt/*/ && ./configure && \
make && make install && \
ln -s -f /usr/local/bin/python3.6 /usr/bin/python
RUN curl -fSsL -O https://bootstrap.pypa.io/get-pip.py && \
python get-pip.py && \
rm get-pip.py
ENV PYTHONUNBUFFERED=1 \
LD_LIBRARY_PATH="/usr/local/cuda/lib64:/usr/local/nvidia/lib64" \
PATH="/usr/local/nvidia/bin:/usr/local/cuda/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" \
LANG=C.UTF-8
# Install CUDA-8.0 + cuDNN 6.0
RUN ln -s /usr/local/cuda-8.0 /usr/local/cuda && \
ln -s /usr/lib/x86_64-linux-gnu/libcudnn.so.6.0.21 /usr/local/cuda/lib64/libcudnn.so && \
ldconfig
RUN apt-get -y update
RUN apt-get -y upgrade
RUN apt-get install -y ffmpeg
```
## 설정
```
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/opt/python361/lib
```
## 실행
```
docker run -it --rm --gpus all --name tts -v home/joonoh/바탕화면/kmong/tts:/ tts /bin/bash
docker run -it --rm --gpus all --name tts -v /home/joonoh/desktop/kmong/tts:/home lablup/common-tensorflow:1.3-py36-cuda8 /bin/bash
```
## 코드 수정
```
loss_coeff = defaultdict(one)
if config.metadata_path.endswith("json"):
with open(config.metadata_path, 'r', encoding='utf8') as f:
```
## 학습
```
python3 train.py --data_path=datasets/LJSpeech_1_0 --checkpoint_interval 10
```
## 추론
```
python3 synthesizer.py --load_path logs/LJSpeech_1_0_2021-08-04_14-13-15/model.ckpt-10 --text="Winter is coming." --is_korean=False
```

한글은 google stt를 사용해야하여, 영어 데이터로 테스트를 했습니다. -->