링크: 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
- JSUT Speech dataset을 다운로드 및 확장한다.
- 확장한 폴더 안에 있는 basic5000 폴더를 지정하고 다음을 실행한다.
python3 ./dataset/preprocess.py --dataset_name jsut --folder_path ./path/to/jsut_ver1.1/basic5000/ --sampling_rate 44100
- ITA 코퍼스 (예: 아미타로의 목소리 소재 공방 님)
- ITA코퍼스 말뭉치 음성파일을 다운로드하여 확장한다.
- 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 편집하기
주요 파라미터를 설명한다. 필요하면 편집한다.
분류 | 파라미터 이름 | 설명 |
train | log_interval | 지정한 단계마다 손실을 계산하여 기록한다. |
train | eval_interval | 지정한 단계마다 모델 평가를 수행한다. |
train | epochs | 학습 데이터 전체를 학습하는 횟수 |
train | batch_size | 한 번의 파라미터 업데이트에 사용할 학습 데이터 수 |
train | is_finetune | 파인튜닝을 할 것인지 여부 |
train | finetune_model_dir | 파인튜닝을 위한 checkpoints가 들어있는 폴더 |
data | training_files | 학습용 filelist의 텍스트 경로 |
data | validation_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
======================
라고 하네요~
뭐라는지 하나도 모르겠고 암튼 누가 하고 알려줘
코랩도 만들어줘
감사합니다땡큐