Ossian은 최소한의 전문가 감독을 통해 TTS 시스템을 구축하는 연구를 완화하는 데 중점을 둔 TTS (Text-Steepee) 시스템 구축을위한 Python 코드 모음입니다. IT 작업은 EU FP7 프로젝트 Simple4all의 자금 조달로 시작 되었으며이 저장소에는 이전에 사용 가능한 것보다 최신 버전이 포함되어 있습니다. 특히, 툴킷의 원래 버전은 음향 모델링을 수행하기 위해 HTS에 의존했습니다. HT를 사용할 수는 있지만 이제 Merlin Toolkit과 함께 훈련 된 신경망의 사용을 지원합니다. 개선 방법에 대한 모든 의견과 피드백은 매우 환영합니다.
여기 중국 문서가 있습니다. 一些中文文档和总结可以发现于 : 중국 오시안 닥터.
Perl 5가 필요합니다.
Python 2.7 이 필요합니다.
필요한 경우 Python virtualenv 내에서 pip 패키지 설치 프로그램을 사용하여 필요한 패키지를 얻으십시오.
pip install numpy
pip install scipy
pip install configobj
pip install scikit-learn
pip install regex
pip install lxml
pip install argparse
우리는 Merlin 툴킷을 사용하여 신경망을 훈련시켜 다음의 종속성을 만듭니다.
pip install bandmat
pip install theano
pip install matplotlib
sox 사용하여 음성 데이터를 처리합니다.
apt-get install sox
다음과 같이 Ossian Github 저장소를 복제하십시오.
git clone https://github.com/candlewill/Ossian.git
이것은 ./Ossian 이라는 디렉토리를 만듭니다. 다음 논의는 환경 변수 $OSSIAN 디렉토리를 가리 키라고 가정합니다.
Ossian은 정렬 및 (선택적으로) 음향 모델링을위한 숨겨진 Markov 모델 툴킷 (HTK) 및 HMM 기반 음성 합성 시스템 (HTS)에 의존합니다. 필요한 도구를 얻고 컴파일하는 데 대한 메모는 다음과 같습니다. HTK 소스 코드의 사본을 얻으려면 HTK 웹 사이트에 사용자 이름과 비밀번호를 얻으려면 등록해야합니다. 여기서는 이것들이 얻어졌으며 환경 변수 $HTK_USERNAME 과 $HTK_PASSWORD 그들에게 가리킨다고 가정합니다.
다음 스크립트를 실행하면 필요한 도구 (Merlin 포함)를 다운로드하여 설치합니다.
./scripts/setup_tools.sh $HTK_USERNAME $HTK_PASSWORD
스크립트 ./scripts/setup_tools.sh 다음을 수행합니다.
$OSSIAN/tools/merlin 으로 클론하고 헤드를 8aed278 로 재설정합니다.merlin/tools/WORLD/ Folder에 CD를 CD로 만들고 구축 한 다음 analysis 및 synth $OSSIAN/tools/bin/ 에 복사하십시오. cd $OSSIAN /tools/merlin/tools/WORLD/
make -f makefile
make -f makefile analysis
make -f makefile synth
mkdir -p $OSSIAN /tools/bin/
cp $OSSIAN /tools/merlin/tools/WORLD/build/{analysis,synth} $OSSIAN /tools/bin/$OSSIAN/tools/ Folder에 설치하십시오.$OSSIAN/tools/ 에 설치하십시오.$OSSIAN/tools/ 에 설치하십시오.SEQUITUR , STANFORD 의 값을 0에서 1으로 변경하면 g2p-r1668-r3 및 corenlp-python 패키지가 설치됩니다. 모든 도구가 $OSSIAN/tools/ Directory에 설치되므로 $OSSIAN/tools/bin 디렉토리에는 Ossian이 사용하는 모든 바이너리가 포함됩니다.
위에서 언급 한 도구를 수동으로 설치하고 처음부터 설치하지 않으려면 소프트 링크를 만들어 이러한 도구를 설치 한 위치에 Ossian을 알릴 수 있습니다.
# 1 Mannuly clone the merlin repo
# 2 Downlaod WORLD, HTK, HDecode, HTS, HTS-engine, SPTK, build and install.
# 3 Copy all of the binaries into one folder. E.g., bin.
# 3 Where is your merlin dir
export merlin_dir=/home/dl80/heyunchao/Programs/Ossian/tools/merlin
# 4 Where is the bin direcotry inculuding all the binaries
export bin_dir=/home/dl80/heyunchao/Programs/Ossian/tools/bin
# 5 Create soft link in your Ossian/tools direcotry
cd /home/dl80/heyunchao/Programs/MyOssian_Github/tools
ln -s $merlin_dir merlin
ln -s $bin_dir bin 우리는 여기에 사전 구축 된 바이너리 컬렉션을 제공합니다. ossian_required_bin.tar. 누군가가 스크래치를 만들고 싶지 않은 경우 $bin_dir 디렉토리로 다운로드하여 이동하십시오.
Ossian은 교육 데이터가 디렉토리에있을 것으로 예상합니다.
./corpus/<OSSIAN_LANG>/speakers/<DATA_NAME>/txt/*.txt
./corpus/<OSSIAN_LANG>/speakers/<DATA_NAME>/wav/*.wav
텍스트 및 웨이브 파일은 서로 일관되게 번호를 매기는 것입니다. <OSSIAN_LANG> 및 <DATA_NAME> 은 모두 임의의 문자열이지만 명백한 의미를 가진 사람을 선택하는 것이 합리적입니다.
일부 안내를 위해이 장난감 (루마니아어) 코퍼스를 다운로드하여 포장하십시오.
cd $OSSIAN
wget https://www.dropbox.com/s/uaz1ue2dked8fan/romanian_toy_demo_corpus_for_ossian.tar?dl=0
tar xvf romanian_toy_demo_corpus_for_ossian.tar?dl=0
이것은 다음과 같은 디렉토리 구조를 만듭니다.
./corpus/rm/speakers/rss_toy_demo/
./corpus/rm/text_corpora/wikipedia_10K_words/
이 작은 데이터 세트에 몇 가지 목소리를 만들어 봅시다. 결과는 나빠질 것이지만, 아무리 나쁘게 말할 수 있다면 아무리 나쁘게 작동하더라도 도구가 작동하고 자신의 선택에 대한 더 많은 데이터를 재교육 할 수 있습니다. 다음은이 데이터에 대한 HTS 기반 및 신경망 기반 음성을 훈련시키는 방법에 대한 지침입니다.
여기에서 준비한 다양한 언어로 1 시간의 데이터 세트를 다운로드 할 수 있습니다 : http://tundra.simple4all.org/ssw8data.html
Ossian은 주어진 '레시피'에 따라 음성을 훈련시킵니다. 레시피는 텍스트에서 텍스트에서 음성으로 전환하기 위해 발화에 적용되는 일련의 프로세스를 지정하며 $OSSIAN/recipes/<RECIPE>.cfg ( <RECIPE> 은 사용중인 특정 레시피의 이름입니다). naive_01_nn 이라는 레시피로 시작하겠습니다. 신시사이저에 구성 요소를 추가하려면 시작하는 가장 좋은 방법은 기존 레시피의 파일을 가져 와서 새 이름을 가진 파일로 복사하여 수정하는 것입니다.
레시피 naive_01_nn 문자를 음향 모델링 단위로 순진하게 사용하는 언어 독립 레시피입니다. 합리적인 정형 외계인 (예 : 루마니아어)이있는 언어는 합리적으로 작동하며 영어에는 적합하지 않습니다.
Ossian은 <DATA_NAME> 에 대한 교육 중에 생성 된 모든 파일을 언어 <OSSIAN_LANG> 로 <RECIPE> 에 따라 다음과 같이 부르는 디렉토리에 넣습니다.
$OSSIAN/train/<OSSIAN_LANG>/speakers/<DATA_NAME>/<RECIPE>/
음성을 성공적으로 훈련 한 경우 합성에 필요한 구성 요소가 다음으로 복사됩니다.
$OSSIAN/voices/<OSSIAN_LANG>/<DATA_NAME>/<RECIPE>/
우리가 처음부터 음성 훈련으로 시작하고 싶다고 가정하면, 우리는 데이터/언어/레시피의 조합에 대해 이러한 위치가 아직 존재하지 않는지 확인할 수 있습니다.
rm -r $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/ $OSSIAN/voices/rm/rss_toy_demo/naive_01_nn/
그런 다음 훈련하려면 다음을 수행하십시오.
cd $OSSIAN
python ./scripts/train.py -s rss_toy_demo -l rm naive_01_nn
훈련 중에 인쇄 된 다양한 메시지가 알려 주므로, 기간 및 음향 모델링에 사용될 신경망 자체의 교육은 Ossian 내에서 직접 지원되지 않습니다. 지속 시간 및 음향 모델을 위해 네트워크를 훈련시키는 데 필요한 데이터 및 구성은 위 명령 줄에 의해 준비되지만 Merlin 툴킷은 실제로 모델을 훈련하려면 별도로 호출되어야합니다. 생산 된 NNS는 Ossian에 적합한 형식으로 다시 변환해야합니다. 이것은 약간 지저분하지만 Ossian과 Merlin의 더 나은 통합은 진행중인 개발 영역입니다.
이 작업을 수행하는 방법은 다음과 같습니다. 위의 ./scripts/train.py 호출했을 때 동일한 지침이 인쇄되었습니다. 먼저 지속 시간 모델을 훈련하십시오.
cd $OSSIAN
export THEANO_FLAGS=""; python ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/duration_predictor/config.cfg
이 장난감 데이터의 경우 이와 같은 CPU에 대한 교육이 빠릅니다. 또는 교육을 위해 GPU를 사용하려면 다음을 수행하십시오.
./scripts/util/submit.sh ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/duration_predictor/config.cfg
훈련이 정상화되면 훈련 된 모델을 Ossian을 위해 더 나은 형식으로 내보낼 수 있습니다. 기본적인 문제는 NN-TTS 도구가 모델을 Python Pickle 파일로 저장한다는 것입니다. GPU 머신에서 작성되면 GPU 시스템에서만 사용할 수 있습니다. 이 스크립트는 Ossian이 이해하는보다 유연한 형식으로 변환됩니다. 교육에 사용한 것과 동일한 구성 파일과 새 형식을 넣어야 할 때 디렉토리 이름으로 호출하십시오.
python ./scripts/util/store_merlin_model.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/duration_predictor/config.cfg $OSSIAN/voices/rm/rss_toy_demo/naive_01_nn/processors/duration_predictor
지속 시간 모델을 훈련시킬 때 WARNING: no silence found! -이 문제는 문제가되지 않으며 무시할 수 있습니다.
음향 모델과 유사하게 :
cd $OSSIAN
export THEANO_FLAGS=""; python ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/acoustic_predictor/config.cfg
또는:
./scripts/util/submit.sh ./tools/merlin/src/run_merlin.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/acoustic_predictor/config.cfg
그 다음에:
python ./scripts/util/store_merlin_model.py $OSSIAN/train/rm/speakers/rss_toy_demo/naive_01_nn/processors/acoustic_predictor/config.cfg $OSSIAN/voices/rm/rss_toy_demo/naive_01_nn/processors/acoustic_predictor
훈련이 정상화되면 연설을 합성 할 수 있습니다. $OSSIAN/test/txt/romanian.txt 에는 루마니아 문장이 예를 들어 있습니다 - 우리는 $OSSIAN/test/wav/romanian_toy_naive.wav 에서 웨이브 파일을 합성 할 것입니다.
mkdir $OSSIAN/test/wav/
python ./scripts/speak.py -l rm -s rss_toy_demo -o ./test/wav/romanian_toy_HTS.wav naive_01_nn ./test/txt/romanian.txt
비교를 위해이 문장에 대한 오디오를 찾을 수 있습니다 (교육에 사용되지 않았습니다).
지속 시간 및 음향 모델 교육에 사용되는 구성 파일은 장난감 데이터 세트에 대해서는 작동하지만 다른 데이터 세트로 이동하면 편집을 실험하여 더 나은 영구성을 얻으려면 실험해야합니다. 특히, 당신은 많은 양의 데이터에 대한 목소리를 훈련시키기 위해 training_epochs를 늘리고 싶을 것입니다. 이것은 음향 모델의 경우 EG 30, 기간 모델의 경우 100으로 설정 될 수 있습니다. 또한 Learning_rate, Batch_size 및 네트워크 아키텍처 (hidden_layer_size, hidden_layer_type)를 실험하고 싶습니다. 현재 Ossian은 피드 포워드 네트워크 만 지원합니다.
입력으로 주어진 텍스트를 합성하는 명령은 다음과 같습니다.
python ./scripts/speak.py -l $OSSIAN_LANG -s $DATA_NAME -o ./test/wav/ ${OSSIAN_LANG} _ ${DATA_NAME} _test.wav $RECIPE ./test/txt/test.txt 여기서 ./test/wav/${OSSIAN_LANG}_${DATA_NAME}_test.wav ossian_lang} {data_name }_test.wav 및 $RECIPE ./test/txt/test.txt 는 합성 된 웨이브 및 입력 텍스트입니다.
speak.py 의 완전한 사용은 다음과 같습니다.
usage: speak.py [-h] -s SPEAKER -l LANG [-o OUTPUT] [-t STAGE] [-play] [-lab]
[-bin CUSTOM_BINDIR]
config [files [files ...]]
positional arguments:
config configuration to use: naive, semi-naive, gold, as
defined in < ROOT > /recipes/ < config > -d irectory
files text files to speak, reading from stdin by default
optional arguments:
-h , --help show this help message and exit
-s SPEAKER the name of the speaker: < ROOT > /corpus/ < LANG > / < SPEAKER >
-l LANG the language of the speaker: < ROOT > /corpus/ < LANG >
-o OUTPUT output audio here
-t STAGE defines the current usage stage (definitions of stages
should by found in < config > /recipe.cfg
-play play audio after synthesis
-lab make label file as well as wave in output location
-bin CUSTOM_BINDIR pre-trained 모델을 내보내려면 다음 파일을 포장해야합니다.
voice/train/cn/speakers/king_cn_corpus/naive_01_nn.cn/questions_dur.hed.conttrain/cn/speakers/king_cn_corpus/naive_01_nn.cn/questions_dur.hedtrain//cn/speakers/king_cn_corpus/naive_01_nn.cn/questions_dnn.hed.cont그런 다음 올바른 디렉토리에 넣은 후 다른 사람이 귀하의 모델을 사용하여 주어진 텍스트를 합성 할 수 있습니다.
여기서는 중국 TTS에 대한 간단한 미리 훈련 된 모델을 제공합니다. 모델이 테스트를 위해 제한된 작은 내부 코퍼스에 대한 교육을 받으면 합성 된 음성의 품질은 그리 좋지 않습니다.
간단한 미리 훈련 된 중국 모델 : ossian_cn_pretraind_model.tar.gz
이 모델에서 생성 된 일부 샘플은 여기에서 찾을 수 있습니다 : ossian_chinese_samples.zip
최신 Merlin Repo를 사용하려면 지금 가능합니다. 그러나 내보내기 모델의 경우 일부 files no exist . 해당 파일을 수동으로 오른쪽 폴더에 복사하여 처리 할 수 있습니다. 이 파일은 훈련 후에 존재하지만 올바른 디렉토리에는 없습니다. find -name *.dat 사용하여 어디에 있는지 찾을 수 있습니다.
예는 다음과 같습니다.
# Duration model
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_ACOUST/inter_module/norm_info__mgc_lf0_vuv_bap_187_MVN.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn//cmp//norm_info_mgc_lf0_vuv_bap_187_MVN.dat
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_ACOUST/inter_module/label_norm_HTS_3491.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn//cmp//label_norm_HTS_3491.dat
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_ACOUST/nnets_model/feed_forward_6_tanh.model /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn//dnn_training_ACOUST//nnets_model/DNN_TANH_TANH_TANH_TANH_TANH_TANH_LINEAR__mgc_lf0_vuv_bap_0_6_1024_1024_1024_1024_1024_1024_3491.187.train.243.0.002000.rnn.model
# Acoustic model
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_DUR/inter_module/norm_info__dur_5_MVN.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn///norm_info_dur_5_MVN.dat
cp ./train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/dnn_training_DUR/inter_module/label_norm_HTS_3482.dat /root/Ossian/train/cn/speakers/toy_cn_corpus/naive_01_nn.cn/
...우리는 Ossian과 함께 많은 다른 레시피를 사용했는데, 이는 다른 사람들에게 유용 할 정도로 정리 될 때 여기에 문서화 될 것입니다. 이는 어휘, 문자 간 규칙 등의 형태로 구축 된 목소리에 더 많은 지식을 추가 할 수 있으며 대상 언어에 사용할 수있는 기존 훈련 된 구성 요소를 통합 할 수 있습니다. 그들 중 일부는 여기에서 찾을 수 있습니다.
이 프로젝트는 CSTR-Edinburgh/Ossian을 기반으로합니다. 모든 저작권은 원래 프로젝트에 속합니다.
Yunchao 그는