Retrieval-based-Voice-Conve.../docs/kr/training_tips_ko.md
2023-08-27 22:04:13 +09:00

4.8 KiB

RVC 훈련에 대한 설명과 팁들

본 팁에서는 어떻게 데이터 훈련이 이루어지고 있는지 설명합니다.

훈련의 흐름

GUI의 훈련 탭의 단계를 따라 설명합니다.

step1

실험 이름을 지정합니다. 또한, 모델이 피치(소리의 높낮이)를 고려해야 하는지 여부를 여기에서 설정할 수도 있습니다.. 각 실험을 위한 데이터는 /logs/experiment name/에 배치됩니다..

step2a

음성 파일을 불러오고 전처리합니다.

음성 파일 불러오기

음성 파일이 있는 폴더를 지정하면 해당 폴더에 있는 음성 파일이 자동으로 가져와집니다. 예를 들어 C:Users\hoge\voices를 지정하면 C:Users\hoge\voices\voice.mp3가 읽히지만 C:Users\hoge\voices\dir\voice.mp3는 읽히지 않습니다.

음성 로드에는 내부적으로 ffmpeg를 이용하고 있으므로, ffmpeg로 대응하고 있는 확장자라면 자동적으로 읽힙니다. ffmpeg에서 int16으로 변환한 후 float32로 변환하고 -1과 1 사이에 정규화됩니다.

잡음 제거

음성 파일에 대해 scipy의 filtfilt를 이용하여 잡음을 처리합니다.

음성 분할

입력한 음성 파일은 먼저 일정 기간(max_sil_kept=5초?)보다 길게 무음이 지속되는 부분을 감지하여 음성을 분할합니다.무음으로 음성을 분할한 후에는 0.3초의 overlap을 포함하여 4초마다 음성을 분할합니다.4초 이내에 구분된 음성은 음량의 정규화를 실시한 후 wav 파일을 /logs/실험명/0_gt_wavs로, 거기에서 16k의 샘플링 레이트로 변환해 /logs/실험명/1_16k_wavs에 wav 파일로 저장합니다.

step2b

피치 추출

wav 파일에서 피치(소리의 높낮이) 정보를 추출합니다. parselmouth나 pyworld에 내장되어 있는 메서드으로 피치 정보(=f0)를 추출해, /logs/실험명/2a_f0에 저장합니다. 그 후 피치 정보를 로그로 변환하여 1~255 정수로 변환하고 /logs/실험명/2b-f0nsf에 저장합니다.

feature_print 추출

HuBERT를 이용하여 wav 파일을 미리 embedding으로 변환합니다. /logs/실험명/1_16k_wavs에 저장한 wav 파일을 읽고 HuBERT에서 wav 파일을 256차원 feature들로 변환한 후 npy 형식으로 /logs/실험명/3_feature256에 저장합니다.

step3

모델의 훈련을 진행합니다.

초보자용 용어 해설

심층학습(딥러닝)에서는 데이터셋을 분할하여 조금씩 학습을 진행합니다.한 번의 모델 업데이트(step) 단계 당 batch_size개의 데이터를 탐색하여 예측과 오차를 수정합니다. 데이터셋 전부에 대해 이 작업을 한 번 수행하는 이를 하나의 epoch라고 계산합니다.

따라서 학습 시간은 단계당 학습 시간 x (데이터셋 내 데이터의 수 / batch size) x epoch 수가 소요됩니다. 일반적으로 batch size가 클수록 학습이 안정적이게 됩니다. (step당 학습 시간 ÷ batch size)는 작아지지만 GPU 메모리를 더 많이 사용합니다. GPU RAM은 nvidia-smi 명령어를 통해 확인할 수 있습니다. 실행 환경에 따라 배치 크기를 최대한 늘리면 짧은 시간 내에 학습이 가능합니다.

사전 학습된 모델 지정

RVC는 적은 데이터셋으로도 훈련이 가능하도록 사전 훈련된 가중치에서 모델 훈련을 시작합니다. 기본적으로 rvc-location/pretrained/f0G40k.pthrvc-location/pretrained/f0D40k.pth를 불러옵니다. 학습을 할 시에, 모델 파라미터는 각 save_every_epoch별로 logs/experiment name/G_{}.pthlogs/experiment name/D_{}.pth로 저장이 되는데, 이 경로를 지정함으로써 학습을 재개하거나, 다른 실험에서 학습한 모델의 가중치에서 학습을 시작할 수 있습니다.

index의 학습

RVC에서는 학습시에 사용된 HuBERT의 feature값을 저장하고, 추론 시에는 학습 시 사용한 feature값과 유사한 feature 값을 탐색해 추론을 진행합니다. 이 탐색을 고속으로 수행하기 위해 사전에 index을 학습하게 됩니다. Index 학습에는 근사 근접 탐색법 라이브러리인 Faiss를 사용하게 됩니다. /logs/실험명/3_feature256의 feature값을 불러와, 이를 모두 결합시킨 feature값을 /logs/실험명/total_fea.npy로서 저장, 그것을 사용해 학습한 index를/logs/실험명/add_XXX.index로 저장합니다.

버튼 설명

  • モデルのトレーニング (모델 학습): step2b까지 실행한 후, 이 버튼을 눌러 모델을 학습합니다.
  • 特徴インデックスのトレーニング (특징 지수 훈련): 모델의 훈련 후, index를 학습합니다.
  • ワンクリックトレーニング (원클릭 트레이닝): step2b까지의 모델 훈련, feature index 훈련을 일괄로 실시합니다.