링크: https://github.com/tonnetonne814/unofficial-vits2-44100-Ja






unofficial vits2-TTS implementation in pytorch (44100Hz 일본어판)

VITS2: Improving Quality and Efficiency of Single-Stage Text-to-Speech with Adversarial Learning and Architecture Design


이 리포지토리는 44100Hz의 일본어 음성을 학습 및 출력할 수 있도록 편집한 unofficial vits2-TTS implementation in pytorch이며, 2023/08/22 update 5까지 반영되어 있습니다.



1. 환경 구축

Anaconda를 통한 실행 환경 구축을 가정한다.


0. Anaconda에서 "vits2"라는 이름의 가상 환경을 생성한다. [y] or n을 물어보면 [y]를 입력한다.

conda create -n vits2 python=3.8


1. 가상 환경을 활성화한다.

conda activate vits2


2. 이 저장소를 클론한다(또는 Download Zip으로 다운로드한다).

git clone https://github.com/tonnetonne814/unofficial-vits2-44100-Ja.git
cd unofficial-vits2-44100-Ja # 폴더로 이동


3. https://pytorch.org/ URL로부터 PyTorch1.13.1를 다운로드한다 

# OS=Linux, CUDA=11.7의 예시
pip install torch==1.13.1+cu117 torchvision==0.14.1+cu117 torchaudio==0.13.1 --extra-index-url https://download.pytorch.org/whl/cu117


4. 기타 필요한 패키지를 설치한다.

pip install -r requirements.txt


5. Monotonoic Alignment Search를 빌드한다.

cd monotonic_align
mkdir monotonic_align
python setup.py build_ext --inplace
cd ...




2. 데이터셋 준비

JSUT Speech dataset의 Basic5000 음원, ITA Corpus의 Emotion 음원과 Recitation 음원, 그리고 자체 제작한 데이터셋 음원으로 44100Hz에서의 학습을 가정한다.


  • JSUT Basic5000
  1. JSUT Speech dataset을 다운로드 및 확장한다.
  2. 확장한 폴더 안에 있는 basic5000 폴더를 지정하고 다음을 실행한다.
python3 ./dataset/preprocess.py --dataset_name jsut --folder_path ./path/to/jsut_ver1.1/basic5000/ --sampling_rate 44100


  1. ITA코퍼스 말뭉치 음성파일을 다운로드하여 확장한다.
  2. RECITATION 음원이 저장된 recitation 폴더와 EMOTION 음원이 저장된 emotion 폴더를 준비하고, 두 폴더가 저장된 폴더를 지정하여 다음을 실행한다.
python3 ./dataset/preprocess.py --dataset_name ita --folder_path ./path/to/ita_corpus/ --sampling_rate 44100

음원은 파일명에 001, 002 등 3자리 숫자로 구분하므로 3자리 숫자를 포함해야 한다.

음원을 저장하는 2개의 폴더 이름은 각각 "recitation"과 "emotion"으로 한다.


  • 자체 제작 데이터셋(단일 화자)

i. 다음 요소에 유의하여 낭독 음성을 준비한다. (What makes a good TTS dataset 참고)

  • 텍스트와 발화의 길이가 정규분포를 이루고 있어야 한다.
  • 텍스트 데이터와 발화 음성에 오류가 없어야 한다.
  • 배경 잡음이 없어야 한다.
  • 발화 음성 데이터 간 말투가 비슷해야 한다.
  • 사용하는 언어의 음소를 모두 포함하고 있어야 한다.
  • 목소리 톤이나 음정 차이 등을 최대한 자연스럽게 녹음할 수 있어야 한다.


ii. ./dataset/homebrew/transcript_utf8.txt에 다음과 같은 형식으로 음원과 발화 텍스트를 작성해 주세요.

wav 파일명(확장자 없음): 음성 텍스트


iii. 준비한 음원이 저장된 폴더를 지정하고 다음을 실행한다.

python3 dataset/preprocess.py --dataset_name homebrew --folder_path ./path/to/wav_folder/ --sampling_rate 44100




3. configs 폴더 내 json 편집하기

주요 파라미터를 설명한다. 필요하면 편집한다.


분류파라미터 이름설명
trainlog_interval지정한 단계마다 손실을 계산하여 기록한다.
traineval_interval지정한 단계마다 모델 평가를 수행한다.
trainepochs학습 데이터 전체를 학습하는 횟수
trainbatch_size한 번의 파라미터 업데이트에 사용할 학습 데이터 수
trainis_finetune파인튜닝을 할 것인지 여부
trainfinetune_model_dir파인튜닝을 위한 checkpoints가 들어있는 폴더
datatraining_files학습용 filelist의 텍스트 경로
datavalidation_files검증용 filelist의 텍스트 경로




4. 학습하기

다음 명령을 입력하여 학습을 시작한다.

CUDA Out of Memory 에러가 발생하면 config.json에서 batch_size를 작게 설정한다.


  • JSUT Basic5000
python train.py -c configs/vits2_jsut_nosdp.json -m JSUT_BASIC5000 # no-sdp
# python train.py -c configs/vits2_jsut_base.json -m JSUT_BASIC5000 # with sdp:비추천


  • ITA 코퍼스
python train.py -c configs/vits2_ita_nosdp.json -m ITA_CORPUS # no-sdp
# python train.py -c configs/vits2_ita_base.json -m ITA_CORPUS # with sdp:비추천


  • 자체 제작 데이터셋
python train.py -c configs/vits2_homebrew_nosdp.json -m homebrew_dataset # no-sdp
# python train.py -c configs/vits2_homebrew_base.json -m homebrew_dataset # with sdp: 비추천


학습 과정은 터미널에도 표시되지만, tensorboard를 통해 확인하면 생성된 음성을 시청하거나, 스펙트럼, 각 손실 전이를 육안으로 확인할 수 있다.

tensorboard --logdir logs




5. 추론

다음 명령을 입력하여 추론을 시작한다. config.json의 경로와 생성기 모델 경로를 지정한다.

python3 inference.py --config ./path/to/config.json --model_path ./path/to/G_model.pth


실행 후 텍스트를 입력하면 음성이 생성된다. 음성은 자동으로 재생되고 infer_logs 폴더(없는 경우 자동 생성)에 저장된다.




6. 파인튜닝

파인튜닝을 할 경우, 생성기 모델의 checkpoint를 G_finetune.pth, 식별자 모델의 checkpoints를 D_finetune.pth, DUR 모델의 checkpoint를 DUR_finetune.pth로 이름을 바꾼 후, config.json에서 입력해둔 finetune_model_dir 폴더 내에 배치한다. 이후 config.json 내 is_finetune을 true로 변경한 후 [4. 학습] 명령어로 학습을 시작하면 파인튜닝을 할 수 있다.


사전 학습 모델

추가 예정

JSUT 87k steps pyopenjtalk_prosody





======================

라고 하네요~

뭐라는지 하나도 모르겠고 암튼 누가 하고 알려줘

코랩도 만들어줘

감사합니다땡큐