2023-11-06 현재, 무료 미결제 상태로 작동 안 함





***

https://arca.live/b/aispeech/80030656

자동백업, 추가 기능이 있는 코랩을 사용하는 코랩 가이드

***



준비물:

1. A의 음성 wav 10분 이상

2. B의 노래/대화(목소리만)


결과물:

A의 노래/대화




이 글(독수리임ㅎ)에서는 준비물에는 어떠한 후보정도 필요 없는 데이터셋으로써 이상적인 상태라고 가정하고 진행

로컬 말고 코랩 기준 글임

코랩 또는 이 글 내용이 낡아서 맞지 않거나 오류가 나는 부분이 있을 수 있으므로 참고로만 하고 오류나면 채널에 질문글 올리던가 다른 글 찾아보던가 할 것


+코랩 오류나면 이 글에 사용된 코랩 말고 rvc crepe 코랩 찾아서 쓰는 걸 추천함. 사용법 다르니까 알아서 쓰셈

https://colab.research.google.com/drive/1TU-kkQWVf-PLO_hSa2QCMZS1XF5xVHqs?usp=sharing

+코랩이 아닌 컴퓨터에 깔아서 로컬로 쓰는 거면 올인원 가이드로

https://arca.live/b/aispeech/78639996



1. 음성 wav 파일(A의 음성) 정비


기본적으로 음성 학습 시에는 각 음성들을 5~15초 정도로 잘라 학습하는 것이 보통임

그러나 rvc에는 노말라이즈 등의 기능과 함께 자체 컷팅 기능이 동봉되어 있으므로(나도 방금 앎) 딱히 미리 잘라놓을 필요는 없음

근데 아무것도 없으면 좀 섭섭하므로 대신 wav들을 합치는 방법을 알려줌

***이미 2~15초? 정도의 적당한 크기로 짤려 있으면 압축하는 부분으로 바로 넘어가도 됨***




(대충 음성 wav들)



나는 전부 합칠 때 Audacity를 쓰지만 다른 프로그램도 있을 거임



암튼 전부 드래그해서 편집창에 던진다



대충 전부 때려박은 화면

오디오의 출발 지점이 모두 같음. 이대로 저장하면 개판이 난다




선택 -> 전체 하여 전체를 먼저 선택




여러 트랙->트랙 맞춤->말단에 맞추기로 나열함




이제 파일 -> 내보내기 -> WAV로 내보내기로 내보내면 됨

혹시 모르니까 파일 이름은 영어 숫자 밑줄로만 되있으면 좋고 인코딩은 16bit면 좋음



2. 코랩 사용

이제 해당 wav파일(또는 파일들)을 zip으로 압축한다





드라이브 열어서 아무데나 업로드 하기

나중에 또 써먹어야 되니까 어디 올려놨는지 정도는 기억해놓는 게 좋다.

참고로 압축하는 이유는 코랩 작업을 쉽게 하기 위해서지, rvc 자체에 필요한 건 아님

따라서 로컬로 할 경우 압축하지말고 작업폴더 안에 아무 빈 폴더 만들어서 거기 쑤셔박고 나중에 path to training folder로 경로지정 하면 된다.



 

이제 RVC를 연다

나는 GPU가 없는 븅신컴이므로 코랩으로 연다

일단 나는 이 코랩으로 열지만, 시간이 지나서 이 글이 오래되면 이 코랩이 작동을 안할 수 있으니 따로 최신 코랩 찾아서 하는 걸 추천한다

각 코랩마다 방식은 조금씩 달라도 같은 RVC라면 WebUI까지 돌리면 다 비슷비슷할거니까 대충 알아서 하셈



코랩 열었다

기본적으로는 코랩의 지시에 따르면 제대로 작동 된다

만약 위쪽 링크의 코랩을 사용했다면 3가지 미리 고쳐놔야할 부분이 있다


(1)

克隆仓库

부분 실행 직전에

import os
my_current_path = os.getcwd()
os.mkdir(my_current_path+ "/" + "Retrieval-based-Voice-Conversion-WebUI")

추가하고 실행




 

(2)

启动web

부분 실행 직전에

!aria2c --console-log-level=error -c -x 16 -s 16 -k 1M https://huggingface.co/lj1995/VoiceConversionWebUI/resolve/main/hubert_base.pt -d /content -o hubert_base.pt

추가하고 실행.





(3)

启动web

부분에서

%cd /content/Retrieval-based-Voice-Conversion-WebUI

를 지우고, 대신

%cd /content

를 입력하고 실행


이상을 잘 지킨다면 1차적으로 해당 코랩의 오류는 전부 해결된다

여태까지 RVC 코랩을 시도했다가 실패한 여러분들에게 심심한 사과(맛있음)의 말씀 드린다


+4)

安装依赖에서 gradio==3.14.0을 gradio==3.34.0으로

다른 코랩 보니 6/20일자로 고쳐진 것으로 추정



이제 각 문단의 왼쪽 위에 있는 탐스러운 재생 버튼을 순서대로 눌러주기만 하면 된다


이하는 위 링크의 코랩을 사용했다는 가정하에 적혀있다

위 링크의 코랩을 사용하지 않았다면 코랩의 자체 지시에 따르면 대충 진행될거임

WebUI부터는 사용법에 거의 차이가 없으므로 다시 이 글을 참고하면 됨








맨 위에 저 부분 실행하면 마지막에 (아니면 중간중간에) 저게 뜰텐데, 저 코드가 끝나면 꼭 저 버튼을 눌러서 런타임을 재시작하기 바란다



쭉 넘어가서 이 부분이 여러분들의 wav를 불러오는 부분이다



왼쪽의 폴더같은 마크를 열어 drive 폴더에 들어가 zip 파일을 올렸던 곳으로 이동한다



해당 파일을 우클릭 해서 경로 복사를 해주자



그대로 Ctrl V 해주면 경로가 복붙되니까 그 다음에 시작 버튼을 눌러주면 된




해당 부분까지 왔다면 시작 버튼을 누르고 잠시 기다린다

그러면 (코랩 기준)Running on public URL 이라고 뜨는 링크로 들어가서 WebUI를 열면 된다


3. rvc WebUI 사용

처음 들어갔을 때는 Model Inference 탭이다

노래/대사를 뽑아낼 때 사용하는 화면이므로 지금은 필요 없다

Train 탭을 눌러 음성 학습을 시작



Experiment name에는 이 모델의 식별 이름을 마음대로

기왕이면 띄어쓰기가 없는 영어/숫자/밑줄의 조합이 좋음

Target sampling rate는 wav의 주파수

v1을 선택했다면 네가 가져온 wav의 주파수에 가까운 주파수를

v2를 선택했다면 무조건 40k를 선택하자

*현재 v2 32/48k도 일단 되긴 하는데 이 코랩에선 안됨



Path to training folder는 위 링크 코랩을 썼으면 /content/dataset 을 지정하면 된다

네가 코랩의 화살표 버튼들을 돌리면서 너의 zip이 여기로 압축풀기 되었기 때문

로컬이라면 네가 음성 파일들을 쑤셔박은 그 폴더를 지장하면 될 거다

이제 저기 탐스러운 주황색 Process Data 버튼을 누르도록 하자



이 때 새로 열린 창이 아닌 원래 코랩 창으로 돌아가면 현재 진행상황을 볼 수 있다

혹시 몰라 말해두는데 새 창 열렸다고 코랩 닫지 마라

코랩이 RVC를 대신 돌려주는 거라 코랩 없으면 안된다



옆의 output message의 테두리가 오렌지색에서 하양으로 되돌아오면 해당 처리가 완료됐다는 뜻이다



다음은 피치 추출이다

코랩으로 열었다면 맨 왼쪽은 건들 필요 없고, 로컬이면 알아서 정보 넣어라

속도는 pm>dio>harvest 순이고, 성능은 역순이다

harvest로 해도 네가 무슨 3시간짜리 파일을 들고왔다던가 하는 게 아니면 그렇게까지 오래 걸리진 않는다



귀여운 Feature extraction 버튼을 눌러주고 오렌지색 테두리가 없어질때까지 기다린다

다음은 대망의 학습이다




 

Load pre-trained base path: 사전학습 모델이다

v1라면

/content/Retrieval-based-Voice-Conversion-WebUI/pretrained/f0G(선택한주파수)k.pth (위쪽)

/content/Retrieval-based-Voice-Conversion-WebUI/pretrained/f0D(선택한주파수)k.pth (아래쪽)

v2라면

/content/Retrieval-based-Voice-Conversion-WebUI/pretrained_v2/f0G40k.pth (위쪽)

/content/Retrieval-based-Voice-Conversion-WebUI/pretrained_v2/f0D40k.pth (아래쪽)

이라고 쳐둔다

참고로 파일의 f0은 피치를 추출한다는 뜻이며, 만약 If the model have pitch guidance~ 부분을 False로 했다면 f0이라고 적힌 부분을 떼고 복붙해야 한다


여기부터 보라색 짤이 섞일텐데, 이 path 부분을 잘못 입력한거 모르고 코랩오류인가 싶어서 다른 코랩 켜서 그렇다

이런 능지로도 돌릴 수 있는 RVC 굉장해



saving frequency: 얼마나 중간저장할건지

rvc는 최종버전이 되면 다시 학습할 수 없으므로 중간저장버전을 이용해야만 학습 재시작이 가능해진다

코랩이 중간에 끊기면 어짜피 중간 저장 버전도 날아가므로 그냥 맨 뒤로 돌리면 된다

코랩 안 써도 어짜피 용량 생각보다 많이 차지해서 숫자 낮게 하는 건 개인적으로 추천 안 한다


Total training epochs: 얼마나 학습을 오래할건지

epoch 1개당 모든 wav 파일을 한 번 순회하여 학습했다는 걸 의미하며, 파일 전체의 크기가 커질수록 epoch 하나의 시간도 늘어난다

나는 약 30분 파일인데, 1epoch당 1분 살짝 안 되게 걸리니까 참고하셈

나는 보통 100 epoch로 학습시키는데, 300은 기본으로 쓴다는 사람도 있었으니, 자기 wav에 가장 적합한 epoch 수를 찾기 위해서는 시행착오를 겪어야 할 수도 있음

높은 epoch가 보통 가장 좋긴 하지만, 900 epoch 정도는 오히려 정확도가 떨어질 수 있다고 함


batch_size for every GPU: 잘 모르지만 코랩 기준 20으로 올려놓으면 학습이 조금 빨라진다

어짜피 코랩 막 사용할수록 일찍 뺏어간다는데 총량 비슷할거면 빠른 편이 좋을 듯?



Train model을 먼저 하고

그 다음에 Train feature index를 하도록 한다

train model이 가장 시간을 많이 잡아먹는다 index는 그다지




이제 학습은 모두 끝났으니 맨 처음 Model inference 탭으로 돌아온다


Inferencing voice를 눌러 학습한 모델의 pth를 선택해준다

선택창에 없으면 Refresh voice list and index path를 누르고 다시 선택한다



transpose: 음악 키 변경

기본 설정은 0, 범위는 위아래로 각각 1옥타브만큼

숫자가 올라갈수록 노래의 피치가 올라가고 반대로 숫자가 내려갈수록 노래의 피치가 내려간다

여자 목소리로 남자 노래를 부르게 할 때나 반대 상황에서 사용할 수 있다


Enter the path audio~에서 부르게 할 노래의 경로를 지정해준다

맨 위에서 얘기한 B의 노래/대화가 들어갈 자리

구글드라이브에 있다면 zip 파일을 찾을 때와 마찬가지로 경로를 찾아 복붙하면 되고, 아니라면 코랩에 직접 업로드 하고 지정해도 된다

코랩에 업로드 한 건 런타임 끝나면 사라지니까 조심


Path to Feature index file~은 코랩에서 logs/(모델이름) 폴더 밑에 있는 경로를 찾아 added_IVF~~.index 라고 되어있는 파일의 경로를 주면 된다

해당 파일이 어딨는지 모르겠다면, 밑에 있는 Path to the '.index' file in~~ 부분에서 자동으로 검색해주니까 그걸로 찾으면 됨

대신 위쪽 Enter the path audio~ 경로는 비어있어야 함


Select the algorithm for pitch extraction~은 학습때와 마찬가지로 피치를 추출하는 알고리즘 선택이다

원래는 pm이랑 harvest밖에 없는데 다른 코랩으로 열어서 이렇다

위에 나와있는 대로 pm이 더 빠르고 harvest가 더 고퀄이다

하지만 가끔 pm이 무시하는 삑사리를 harvest가 잡아내서 이상하게 나오는 경우가 있으므로 나는 pm이랑 harvest 결과물 따로따로 보관해서 나중에 삑사리 나는 부분만 pm으로 바꿔 넣기도 함

참고로 harvest로 추출하면 노래가 1분 좀 넘기 시작하면 에러가 뜨므로 몇 조각으로 잘라서 추론하는 걸 추천한다

+최근에 crepe 추가됨. 속도 pm>harvest>crepe, 성능 역순


Resample the audio in post-processing~: 주파수 샘플링

0으로 하면 전에 결과물이 직접 고른 주파수로 나온다

0 이외는 선택한 숫자대로의 주파수로 샘플링 되어 나온다


Use volume envelope of input to~: 원본 목소리 크기 사용

숫자가 낮아질수록 원본과 같은 음량을 따라간다

기본은 1 모델의 음량을 사용




탐스러운 Convert 버튼을 누르면 잠시 후 옆칸에 오디오가 출력되므로 알아서 다운로드 하면 된다

그 밑에는 폴더 단위로 변환하는 기능이고 대충 비슷하게 하면 된다


해당 모델을 나중에 다시 써먹고 싶으면 logs 폴더의 added_IVF~~.index랑 weight 폴더의 (모델이름).pth를 다운로드 해서 다음번에 학습은 건너뛰고 pth를 같은 위치에 업로드하면 된다(index는 구글드라이브에 있어도 Path to Feature index file~에서 경로 지정하면 됨)