https://github.com/tonnetonne814/SiFi-VITS2-44100-Ja


번역에 deepl 씀





SiFi-VITS2-44100-Ja


DDPM-based Pitch Generation and Pitch Controllable Voice Synthesis.


이 저장소는 주로 비공식 VITS2, SiFi-GAN, RMS Singer를 참고하여 만든 실험용 TTS/SVS 모델로, Pitch 생성 모델과 TTS/SVS 모델은 별도로 학습을 진행합니다. 추론 시 SVS는 ust 파일에서 음성을, TTS는 입력 텍스트에서 음성을 합성합니다. 또한, 피치 재생성을 통해 음정이나 음색이 다른 음성을 생성할 수 있습니다. 마지막으로 TTS 모델에서 실험적으로 노래 음성을 합성합니다.


Text-to-Speech model architecture


PitchDDPM 아키텍처


⚠진행중인 작업들⚠

  • ✓ SVS 데이터셋, 두 가지 모두 전처리
  • ✓ SVS 데이터셋, Synthesizer 훈련
  • ✓ SVS 데이터셋, PitchDDPM 훈련
  • ✓ SVS 데이터셋, Synthesizer/PitchDDPM 사전 훈련
  • ✓ 추론(SVS Synthesizer 및 SVS PitchDDPM)
  • ✓ TTS 데이터셋, Synthesizer 전처리
  • ✓ TTS 데이터셋, PitchDDPM 전처리
  • ✓ TTS 데이터셋, Synthesizer 학습용 데이터셋
  • ✓ TTS 데이터셋, PitchDDPM 훈련
  •  TTS 데이터셋, Synthesizer/PitchDDPM 전처리
  •  추론(TTS Synthesizer 및 TTS PitchDDPM)
  •  추론(TTS Synthesizer and SVS PitchDDPM) ※실험용




1. 공통 - 환경 구축

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


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

conda create -n SiFiVITS2 python=3.8


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

conda activate SiFiVITS2


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

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


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

# OS=Linux, CUDA=11.7의 예시
pip3 install torch torchvision torchaudio


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

pip install -r requirements.txt


5. Monotonoic Alignment Search를 빌드한다.

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



2. 데이터 세트 준비

가성 데이터베이스는 나미네 리츠 가성 데이터베이스 Ver2, TTS 데이터는 JSUT Speech dataset의 Basic5000 음원, ITA 코퍼스의 Emotion 음원과 Recitation 음원, 그리고 자작 데이터셋 음원을 이용한 44100Hz에서의 학습을 가정한다.


  • 나미네 리츠 가성 데이터베이스 Ver2
  1. 나미네 리츠 가성 데이터베이스 Ver2를 다운로드 및 확장한다.
  2. 확장한 폴더 안에 있는 「波音リツ」歌声データベースVer2 폴더를 지정하고 다음을 실행한다. f0 method는 [crepe, harvest, parselmouth, dio] 중 하나를 입력한다.
python3 ./preprocess_svs.py --song_db_path ./path/to/jsut_ver1.1/「波音リツ」歌声データベースVer2/ --f0_method crepe --audio_normalize True


  • JSUT Basic5000
  1. JSUT Speech dataset을 다운로드 및 압축을 푼다.
  2. 확장한 폴더 안에 있는 basic5000 폴더를 지정하고 다음을 실행한다. f0 method는 [crepe, harvest, parselmouth, dio] 중 하나를 입력한다.
python3 ./preprocess_tts_synthesizer.py --dataset_name jsut --folder_path ./path/to/jsut_ver1.1/basic5000/ --f0_method crepe --audio_normalize True


  1. ITA 코퍼스 말뭉치 음성을 다운로드하여 전개한다.
  2. RECITATION 음원이 저장된 recitation 폴더와 EMOTION 음원이 저장된 emotion 폴더를 준비하고, 두 폴더가 저장된 폴더를 지정한 후 다음을 실행한다. f0 method는 [crepe, harvest, parselmouth, dio] 중 하나를 입력한다.
python3 ./preprocess_tts_synthesizer.py --dataset_name ita --folder_path ./path/to/ita_corpus/ --f0_method crepe --audio_normalize True

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

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


  • 자체 제작 데이터셋(단일 화자)
  1. 다음 요소에 유의하여 낭독 음성을 준비한다. (What makes a good TTS dataset 참고)
  • 텍스트와 발화의 길이가 정규분포를 이루고 있어야 한다.
  • 텍스트 데이터와 발화 음성에 오류가 없어야 한다.
  • 배경 잡음이 없어야 한다.
  • 발화 음성 데이터 간 말투가 비슷해야 한다.
  • 사용하는 언어의 음소를 모두 포함하고 있어야 한다.
  • 목소리 톤이나 음정 차이 등을 최대한 자연스럽게 녹음할 수 있어야 한다.

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

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

    iii. 준비한 음원이 저장된 폴더를 지정하고 다음을 실행한다. f0 method는 [crepe, harvest, parselmouth, dio] 중 하나를 입력한다.

python3 ./preprocess_tts_synthesizer.py --dataset_name homebrew --folder_path ./path/to/wav_folder/ --f0_method crepe --audio_normalize True



3. configs 폴더 내의 yaml 편집


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



파라미터 이름설명
log_interval지정한 단계마다 손실을 기록한다.
eval_interval지정한 단계마다 모델 평가를 수행한다.
max_epochs학습 데이터 전체를 학습하는 상한 횟수
batch_size한 번의 파라미터 업데이트에 사용할 학습 데이터 수
is_finetune파인튜닝을 할 것인지 여부(True/False)
finetune_G파인튜닝을 위한 제너레이터 모델 경로
finetune_D파인튜닝을 위한 Discriminator 모델 패스
finetune_DUR파인튜닝을 위한 DurationDiscriminator 모델 경로
training_files학습용 filelist의 텍스트 경로
validation_files검증용 filelist의 텍스트 경로
oto2lab_path음절과 음소 대응 파일 경로
ph_statistics_path가성 DB용 음소 통계 파일 경로(preprocess 시 생성)
noteid2hz_txt_path MIDI음표 번호와 주파수[Hz]가 대응되는 파일 경로




4. Synthesizer 학습

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

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


  • 나미네 리츠 가성 데이터베이스 Ver2
python train_SVS_synthesizer.py -c configs/namine_DB.yaml -m namine_synthesizer


  • JSUT Basic5000
python train_TTS_synthesizer.py -c configs/jsut.yaml -m jsut_synthesizer


  • ITA 코퍼스
python train_TTS_synthesizer.py -c configs/ita.yaml -m ITA_synthesizer


  • 자체 제작 데이터셋
python train_TTS_synthesizer.py -c configs/homebrew.yaml -m homebrew_synthesizer


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


tensorboard --logdir logs




5. PitchDDPM 학습


  • 나미네 리츠 가창 데이터베이스 Ver2
python train_SVS_F0Diffusion.py -c configs/namine_DB.yaml -m namine_f0_diffusion


  • JSUT Basic5000
# python train_TTS_F0Diffusion.py -c configs/jsut.yaml -m jsut_f0_diffusion


  • ITA 코퍼스
# python train_TTS_F0Diffusion.py -c configs/ita.yaml -m ita_f0_diffusion


  • 자체 제작 데이터셋
# python train_TTS_F0Diffusion.py -c configs/homebrew.yaml -m homebrew_f0_diffusion


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


tensorboard --logdir logs




6. 추론

다음 명령을 입력하여 추론을 시작한다. 각 인수는 적절히 변경한다.


  • SVS 모델로 노래 음성 합성 (SVS synthesizer and SVS PitchDDPM)
python3 inference_svs.py --config ./path/to/config.json --F0diff_model_path ./path/to/F0Diff_G_model.pth --Synthesizer_model_path ./path/to/Synthesizer_G_model.pth --UST_path ./path/to/yourfile.ust --oto2lab_path ./oto2lab.table/ --ask_retake True 

생성된 음성은 각 구절마다 infer_logs 폴더(존재하지 않는 경우 자동 생성)에 저장된다. 또한, 음정이 마음에 들지 않을 경우 리테이크(retake)를 통해 원하는 음정이 될 때까지 반복해서 부를 수 있다.


  • TTS 모델로 음성 합성 (TTS synthesizer and TTS PitchDDPM)
#python3 inference_tts.py --config ./path/to/config.json --F0diff_model_path ./path/to/F0Diff_G_model.pth --Synthesizer_model_path ./path/to/Synthesizer_G_model.pth --UST_path ./path/to/yourfile.ust --oto2lab_path ./oto2lab.table/ 


  • TTS 모델로 노래 목소리 합성 (TTS synthesizer and SVS PitchDDPM)
#python3 inference_svs_use_tts.py --config ./path/to/config.json --F0diff_model_path ./path/to/F0Diff_G_model.pth --Synthesizer_model_path ./path/to/Synthesizer_G_model.pth --UST_path ./path/to/yourfile.ust --oto2lab_path ./oto2lab.table/ 




7. 파인 튜닝

파인 튜닝을 할 경우 config.yaml 내의 is_finetune을 true로 변경하고 config.yaml 내의 finetune_G/D/DUR에 각 모델 경로를 기술하고 '4. 학습' 명령어로 학습을 시작하면 파인 튜닝을 할 수 있습니다.


사전 학습 모델

  • ✓ SVS Synthesizer (나미네 리츠 가성 데이터베이스 Ver2) 450k steps
  • ✓ SVS PitchDDPM (나미네 리츠 가성 데이터베이스 Ver2) 288k steps
  •  TTS Synthesizer (JSUT Basic5000)
  •  TTS PitchDDPM (JSUT Basic5000)




뭔지는 사실 모르겠고 암튼 뭔가 있어보여서 번역기 긁어왔음

TTS 학습이랑 노래 학습은 따로따로인가

이제 누가 해보고 감상좀 감사합니다