Skip to content
/ model Public

야이민수야고마워 모델

Notifications You must be signed in to change notification settings

YIEys/model

Repository files navigation

🎵 노래민수야고마워 - Model

Diff-SVC 모델를 사용해 노래의 음성을 원하는 음성로 변환하는 프로젝트


🚀 Diff-SVC Local Training Tutorial

1. 레포지토리 fork하기

Diff-SVC repository : https://github.com/prophesier/diff-svc 해당 리포지토리에서는, diff-svc-local 폴더를 fork하면 됨.

2. conda 환경 구축하기 (Setting up the Environment)

anaconda3와 cuda 설치 안되어있다면, 설치하기

python=3.8 인 conda 환경 구축하기 (3.8 버전 혹은 3.9 버전 설치 바람.)

conda create -n diff-svc python=3.8

환경 활성화하기. (모델 돌리기 전에, 항상 먼저 실행해줘야 함.)

conda activate diff-svc

3. requirements 설치하기 (Install requirements)

conda install pytorch torchvision torchaudio pytorch-cuda=11.7 -c pytorch -c nvidia

pytorch, torchvision 버전에 맞춰 설치하기.

pip install -r requirements.txt
pip install -r requirements_short.txt

requirements.txt를 통해 필요한 패키지 설치하기.

4. pretrained model checkpoints 다운받기

해당 구글드라이브 폴더에서 다운 받으면 됨. : checkpoints - Google Drive

다운받아 checkpoints 폴더에 넣어주면 됨.

nsf_hifigan_xxxx.zip https://github.com/openvpi/vocoders/releases 여기서도 다운 받을 수 있음. (44.1kHz 모델 훈련하고 싶으면, nsf_hifigan(44.1kHz vocoder) 파일 꼭 다운받아야함.)

nsf_hifigan_finetune, nsf_hifigan_onnx 필요 없음.

5. 데이터 준비하기 (Dataset Preparation)

타깃 대상의 보컬 데이터 준비하기

  • 배경음악 없어야 함.
  • 단독 목소리이어야 함.
  • 말하기 / 노래 데이터 사용 가능함. *일반적으로, 노래 데이터가 더 믾이 사용되는 편임.
  • .wav , .ovv 파일 형태이어야 함.
  • 5~15초 길이의 오디오 파일이어야 함. (더 길어도 가능하지만, CUDA OOM에 문제가 생길 수 있음.)
  • 샘플링 레이트는 24kHz 이상이 좋은 편임. 16kHZ 이하면 안됨.
  • 폴더명, 파일명에 공백이 있으면 안됨.
  • 파일명은 고유해야함. (다른 폴더에 있어도, 파일명이 같으면 안됨.)
  • 최소 6개의 파일 이상 있어야함.

+) 노래 부르는 영상에서, 반주 제외하고, 음성 부분만 추출해줌.

+) 44100Hz & 16비트 변환

데이터 정제

1. de-noise & de-reverb

데이터에 노이즈가 많다면, 정제해주는 것이 좋음.

2. loudness normalization

3. audio slicing

굳이 따로 슬라이싱할 필요 없음. 프로그램이 알아서 슬라이싱해줌. 따로 슬라이싱 원하다면,

15초 간격으로 음성 분리해서 파일로 저장해줌.

6. 전처리 (Preprocessing)

슬라이싱

preprocess 라는 폴더 생성하고, 학습 데이터 넣어주기.

그 후,

python sep_wav.py
# 슬라이싱하는 데, 시간이 오래 걸릴 수 있음

완료된 후, preprocess_out 폴더에 슬라이싱된 데이터 확인 가능함.

해당 데이터를 data/raw/{speaker_name} 를 생성해 넣어주기.

(여기서, 이미 따로 오디오 슬라이싱 작업을 진행한 경우 해당 단계를 패스함.)

이진화

원시 오디오 데이터를 이진 파일로 변환하기.

config.yaml (24kHz vocoder 사용하는 경우)

config_nsf.yaml (44.1kHz vocoder 사용하는 경우)

confg 파일에서 {speaker_name}으로 변경하기 (경로 마지막 부분 nsf라고 써있는 부분을 변경하기)

config 파일 수정하기 전, 복사본 생성해두기.

binary_data_dir: data/binary/{speaker_name}
# 전처리 데이터 파일 경로

raw_data_dir: data/raw/{speaker_name}
# 원시 데이터 파일 경로

speaker_id: {speaker_name}
# 타깃 대상 이름

work_dir: checkpoints/{speaker_name}

(선택사항) pitch extraction 알고리즘 변경

CREPE 알고리즘 (pitch extraction)

use_crepe: true
# 더 좋은 결과를 위해 true로 설정함. 빠른 전처리를 원하면 false로 설정하기.

환경설정 (꼭 하기)

**# Windows (cmd)**
set PYTHONPATH=.
set CUDA_VISIBLE_DEVICES=0
python preprocessing/binarize.py --config training/config_nsf.yaml

**# Linux**
export PYTHONPATH=. 
CUDA_VISIBLE_DEVICES=0 # GPU 사용 설정
python preprocessing/binarize.py --config training/config_nsf.yaml

이때,

File "preprocessing/binarize.py", line 6, in <module>
    from utils.hparams import set_hparams, hparams
ModuleNotFoundError: No module named 'utils.hparams'

오류가 뜨면,

최상위 폴더로 [binarize.py](http://binarize.py) 를 옮기고,

python binarize.py --config training/config_nsf.yaml

이 오류가 나는 것은 환경변수 설정이 잘 안되어서임.

그리고 아래와 같은 오류가 뜨면,

RuntimeError: stft requires the return_complex parameter be given for real inputs, and will further require that return_complex=True in a future PyTorch release.

modules/nsf_hifigan/nvSTFT.py 에서 해당 코드에 return_complex=False 파라미터 추가하기.

7. 훈련 (Training)

config 파일 수정

max_sentences: 88 # VRAM의 80G에 해당하므로, VRAM에 따라 조정해줘야 함.
# CUDA Out of Memory 에러가 뜨면,
# config 파일에서, max_sentences (batch_size)를 줄여주면 됨.
# 여기서는 10으로 설정함.

# 선택사항
endless_ds: false
# true로 설정하면, 1,000개의 epoch를 하나의 epoch로 취급함.

val_check_interval: 2000
# test dataset에 대한 추론할 때, 2,000 step마다 checkpoint를 저장함.

num_ckpt_keep: 10
# checkpoint 파일이 최신 10개로 유지됨.

훈련 실행

set CUDA_VISIBLE_DEVICES=0
python run.py --config training/config_nsf.yaml --exp_name {project_name} --reset

![Untitled]((https://user-images.githubusercontent.com/88659167/236933858-39330ae3-70fb-4e73-b62c-d3dbe2f4bc04.png)

checkpoints는 `{your_project_folder}/checkpoints/{youer_project_name}` 에서 `val_check_interval` step (default는 2,000 step)마다 저장됨.

+) Tensorboard (선택사항)

tensorboard를 통해, 진행사항을 보고 싶다면,

tensorboard --logdir=checkpoints/{your_project_name}/lightning_logs/lastest

실행 후, http://localhost:6006/ 에서 Tensorboard 확인하기.

8. 추론 (Inference)

input 데이터 음성을 타깃 대상의 음성으로 변환하는 단계임. ex) 뉴진스 노래를 침착맨 목소리로 변경하기

이를 “랜더링 (rendering)”이라고 부르는 편임.

추론 단계에서, [infer.py](http://infer.py) 혹은 inference.ipynb 파일를 사용하게 됨.

사용의 편의를 위해 inference.ipynb 파일 사용을 추천함.

Jupyter Notebook을 사용하기 위해,

conda install notebook
conda install ipykernel
ipython kernel install --user --name=diff-svc # kernel 이름은 각자 편의대로.
  • project_name : training에 사용된 프로젝트 이름; config 파일에서 설정한 이름
  • model_path : checkpoint 파일 경로
  • config_path : config 파일 경로
  • wav_fn : input 오디오 파일 경로
  • wav_gen : output 오디오 파일이 저장될 경로 *.wav 대신 .flac와 같은 다양한 오디오 파일 형식을 지원함.
  • key=0 (선택사항) : 피치 조정 ex) 남자 목소리를 여자 목소리로 변경한다면, 8 혹은 12로 설정
  • pndm_speedup (선택사항) : 추론 가속 계수 default값이 20은, 1000/20=50 diffusion step이 추론 중에 실행된다는 의미. 더 빠른 추론을 원하면, 해당 값을 높이면 됨.
  • use_crepe (선택사항) : true로 설정하면, CREPE 알고리을 사용해 추론 도중에 pitch extraction 한다는 의미. false로 설정하면, 더 빠르게 추론 결과를 얻을 수 있음

output 파일은 wav_gen 에서 설정한 경로로 저장됨.


Referece

About

야이민수야고마워 모델

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •