AI 인공지능 튜토리얼

[Local GPU] RVC V2 목소리(노래) 모델 학습 및 AI 커버 방법

Art Rudy
반응형

지난 번 포스팅에서는 구글 Colab을 이용하여 AI커버에 사용할 목소리 모델을 학습하는 방법을 다루었다. 운이 좋게 좋은 그래픽카드를 구하게 되어서 로컬 환경에서 나의 GPU를 사용하여 학습을 시킬 수 있는 방법을 찾아보며 2주 가까이 여러가지 시도를 해보며 연구해보았다. 

AMD그래픽카드에서는 아직 시험해보지 않아서. NVIDIA 기준으로 설명하겠습니다.

구글 Colab과 비교해보았을 때, GPU 성능이 현저하게 낮지만 않다면 장점이 훨씬 많은 것 같다. 런타임 끊김 현상에 대한 문제도 없고, 무료이기도 하며, 가장 좋은 장점은!! 학습 시켜둔 데이터를 이어서 학습할 수 있다는 것이다! 코랩에서는 이어서 학습 방법을 도저히 찾을 수 없었고, 많은 자원을 사용하기 위해서는 계속해서 결제를 해야한다는 단점이 있었는데 이 모든 단점들을 극복할 수 있었다ㅠㅠ

total epoch와 save_every_epoch를 설정하는 부분에 있어서 maximum 값이 정해져 있어서 1000epoch 이상으로 학습을 할 수 없는 위기(?!)를 맞이하였지만.. python 코드를 약간 수정하여 maximum 값을 늘릴 수 있다는 것을 알았고, 희망을 얻었다! 그리하여.. 1만 epoch 학습에 성공하였다. 

RVC에 대한 설명은 지난번 포스팅과 동일하게 간단하게 적어두고 튜토리얼을 시작하도록 하겠다! 이번 포스팅은 목소리 학습 뿐만 아니라 목소리 변환을 하는 방법도 다루어 AI 커버를 할 수 있는 올인원 포스팅을 준비했다.

Windows 환경과 Linux Ubuntu 환경에서 서버를 구동하여 모두 테스트 해보았으니, 모르는게 있거나 잘못된 정보가 있다면 댓글 부탁드립니다!

 

RVC란?

Retrieval-based Voice Conversion : 검색 기반 음성 변환
AI 음성 합성 기술로 기존의 음성데이터를 이용해 변조하는 방식이다. 음성 변조와 비슷하다고 생각하면 될 듯하다. 

RVC(목소리 변조 AI 프로그램)는 실시간 음성 변환 기술을 기반으로 한 프로그램으로, 음성의 특징을 조작하여 다양한 목소리를 생성하고 변조할 수 있는 도구이다. 이 프로그램은 AI 기술을 활용하여 음성 데이터를 분석하고 재구성함으로써 목소리의 톤, 억양, 발음 등을 변경할 수 있다.

 

RVC v2 학습 사전 준비

a. 프로그램 설치

- Windows 버전 이용시

https://huggingface.co/lj1995/VoiceConversionWebUI/tree/main

 

lj1995/VoiceConversionWebUI at main

Detected Pickle imports (3) "torch.HalfStorage", "collections.OrderedDict", "torch._utils._rebuild_tensor_v2" What is a pickle import?

huggingface.co

RVC-beta.7z 파일을 다운받아서 압축

을 풀어주고, go-web.bat 파일을 실행시켜준다.
이 프로그램을 이용하기 위해서는 python을 미리 설치해주어야 한다. 
go-web.bat 파일을 실행하면 먼저 콘솔창이 뜨고, 정상적으로 작동한다면 아래와 같은 결과와 브라우저 창이 하나 뜰 것이다. 브라우저를 실수로 종료하더라도 http://localhost:7897/ 로 입력해서 접속할 수 있다. 포트 번호는 경우에 따라 다를 수 있으니 콘솔창을 확인하도록 한다.

 

- Linux 버전으로 직접 서버 구축해서 이용시

https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI

 

GitHub - RVC-Project/Retrieval-based-Voice-Conversion-WebUI: Easily train a good VC model with voice data <= 10 mins!

Easily train a good VC model with voice data <= 10 mins! - RVC-Project/Retrieval-based-Voice-Conversion-WebUI

github.com

소스코드 zip 파일 압축을 풀고 README를 따라서 서버 구축 후에 아래 과정을 똑같이 진행하면 된다.
https://github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI/blob/main/docs/kr/README.ko.md

 

Retrieval-based-Voice-Conversion-WebUI/docs/kr/README.ko.md at main · RVC-Project/Retrieval-based-Voice-Conversion-WebUI

Easily train a good VC model with voice data <= 10 mins! - RVC-Project/Retrieval-based-Voice-Conversion-WebUI

github.com

똑같이 진행해봐도 의존성 설정하는 과정에서 무수히 많은 에러를 경험하게 될 것이다... 제가 경험했던 에러들이라면 가르쳐드릴테니 댓글로 물어보세여...★

b. 목소리 음원 파일 준비

목소리 모델을 만들기 위해서는 학습시키고자 하는 목소리 파일이 최소 5~10분 정도 필요하다. 잡음이 없는 곳에서 무반주에 녹음한 노래 녹음 파일을 학습할 것을 권장한다.(노래방 X, 무반주 노래 O)

녹음 파일 없이 다른 가수들의 목소리를 이용하고 싶다면 아래 노래와 MR 분리하기 챕터를 확인하고 MR을 제거한 목소리 음원을 준비하면 된다.

 

 

RVC V2 본격 이용해보기!

1. 노래와 MR 분리하기

이 프로그램을 사용하여 음원을 분리하는 작업은 추천하지 않는다. 
왜냐하면 UVR5를 프로그램 내에서 API로 호출하여 사용하는 방식인데, 내가 원하는 프로세스 메서드나 MDX-NET MODEL을 사용할 수 없다. 프로그램에 함께 들어있는 Process Method와 MDX-NET MODEL을 사용해야 하는데, 이 프로젝트에 들어있는 음성 분리 모델의 퀄리티가 썩 맘에 들지 않는다. 모델을 직접 다운받아서 프로젝트 안에 넣고 이용해보려고 했으나, 프로젝트 내부에서 json이나 mapping 설정을 따로 잡아줘야 하는 것 같다. 어려워서 포기했다. 그냥 UVR5 다운받아서 편하게 분리하는 것을 추천한다..

하지만,, 그마저도 귀찮으신 분들은.. 그냥 이 방법을 사용해도 무방하다.

우선 가수의 목소리를 훈련시키기 위해서 음원 파일을 준비한다.

음악 파일을 드래그해서 업로드를 해준다.
※ 드래그로 업로드 할 시, 위의 Enter the path of the audio folder to be processed 부분은 지워줘야 됨.


1. Model

VR-DeEchoNormal : 리버브 분리
VR-DeEchoAggresssive : 리버브 분리
VR-DeEchoDeReverb : 리버브 분리
HP5_only_main_vocal : 메인 보컬 분리 (추천)
HP2_all_vocals : 보컬 분리
HP3_all_vocals : 보컬 분리
onnx_derverb_By_FoxJoy : 리버브 분리


2. Specify the output folder for vocals : 분리된 음성파일 저장경로

ex) /data/김연우/Retrieval-based-Voice-Conversion-WebUI/specify/vocal


3. Specify the output folder for accompaniment : 분리된 악기 파일 저장경로

ex) /data/김연우/Retrieval-based-Voice-Conversion-WebUI/specify/instruments

 

4. Export file format

wav, flac, mp3, m4a 형식 중 선택


2. RVC v2를 이용한 모델 학습

Step 1

실험 구성을 작성합니다. 실험 데이터는 'logs' 폴더에 저장되며 각 실험에는 별도의 폴더가 있다. 실험 구성, 로그 및 훈련된 모델 파일이 포함된 실험 이름 경로를 수동으로 입력한다.

1. Train 탭으로 이동.
2. 모델명 작성(오류 방지를 위해 대문자X, 띄어쓰기X, 알파벳 소문자와 '-' 숫자 조합으로만 작성하길 추천)
3. 타겟 샘플링 선택 (40k과 48k 큰 차이는 없으나 데이터셋(본인의 음원 파일)의 샘플 레이트가 44.1khz이면 40k로 설정 권장, 48k이상이면 48K로 설정)
4. true: 피치 포함(노래 가능), false: 피치 없음 (국어책 읽기만 가능)
5. v2로 선택.
6. 본인 컴퓨터 CPU 프로세서 수의 절반 정도로 설정. 프로세서가 16이라면 8이하로 설정. 
(※ 프로세서 값을 너무 높게 설정하지 말 것)
7. 훈련시킬 음성파일이 있는 폴더 지정.
8. Process data는 누르지 말고 맨 마지막 과정에서 One-click training으로 진행.


Step 2

1. 그래픽카드 선택 (그래픽카드가 한 개일 경우, 기본값으로 둔다. 두개 이상일 경우 0, 0-1, 1, 0-1-2 이런식으로 사용할 그래픽카드를 설정해준다)
2. 피치 식별 기술 (harverst, rmvpermvpe_gpu 중 하나 선택, rmvpe 계열이 2023.09 기준 가장 최신 기술이라고 한다.) 
3. 그래픽카드 프로세스 선택 (그래픽카드가 한 개일 경우, 기본값으로 둔다. 두개 이상일 경우 0-0, 1-1, 0-1-0-1 이런식으로 사용할 그래픽카드 프로세스를 설정해준다)
4. Feature extraction는 누르지 말고 맨 마지막 과정에서 One-click training으로 진행.


Step 3

1. Save frequency : 저장 빈도수. 코랩과 달리 로컬에서 학습을 할 때 가장 좋은 점은 중간에 학습이 중단되더라도 Save frequency로 저장된 파일들을 사용할 수 있다는 것이다. 하드 용량이 넉넉하다면 빈도수를 낮게 설정하여 자주 저장하도록 하고, 그렇지 않다면 위험을 감수하고 높게 설정해도 무관하다.
2. Total training epochs : 총 학습량. 기존에 학습했던 모델을 이어서 학습하더라도 이 설정값 만큼만 학습한다. 예를 들어 기존에 100epoch를 학습한 모델로 100epoch를 추가로 학습시키고 싶을 땐 200epoch로 설정해주면 된다. 
3. Batch size per GPU : 그래픽카드를 얼마나 사용할 지 설정. 값을 높게 줄수록 학습 속도와 퀄리티는 높아지지만 GPU 사용량이 많아져서 너무 높을 경우 VRAM 초과로 학습이 중단될 수 있다. 2의 배수로 설정하는 것이 효율이 좋다고 한다.
4. 체크포인트 파일 : 이 옵션은 가장 최신 ckpt 학습 모델 파일만 저장할지 여부에 대한 옵션이다. 학습된 모델의 구조를 제외한 변수들을 담고 있는 파일이다. 즉, 모델의 가중치만 담고 있는 파일이다. 그래서 모델에 대한 메타정보를 담고 있기 때문에 재학습이 가능하다는 특징이 있다. 하지만, 실제 모델을 돌릴 때 필요 없는 정보들이 너무 많아서 파일의 크기가 무겁다는 단점이 있다. 만약을 위해서 이 옵션은 'no'로 설정하길 추천한다.
5. 데이터셋 GPU 메모리 캐싱 여부 : 데이터셋이 10분 미만이라면 켜는 것이 좋지만 그 이상이라면 체크를 해제하도록 한다.
6. 저장 빈도마다 작은 최종 모델을 weights 폴더에 저장할 지 여부

(※ 이 파일이 매우매우 중요하다!! 학습이 다 끝난 후 모델을 이용할 때, added_어쩌고.index파일과 이 파일 두개가 꼭 필요하다.)

중간 저장을 하고 싶은 분들은 'Yes'로 하길 권장. 결국 맨 마지막 pth파일만 사용하겠지만, 중간에 오류가 나거나 학습이 중간에 끊긴 경우 중간 저장된 파일을 사용할 수 있음.

7. 그래픽카드 프로세스 선택 (그래픽카드가 한 개일 경우, 기본값으로 둔다. 두개 이상일 경우 0-0, 1-1, 0-1 이런식으로 사용할 그래픽카드 프로세스를 설정해준다)
8. One-click training

 

3. 학습된 모델을 이용하여 목소리 변환하기

1. Model Inference 탭으로 이동
2-3. Refresh voice list and index path 새로 고침 후 본인이 만든 모델 찾아 고르기 
4. Transpose 변환할 음원의 키 변경 (남성 -> 여성, 여성 -> 남성의 경우 +- 4~6 key 정도가 적당)
5. 변환할 보컬 음원 파일이 있는 경로를 입력
ex) /data/김연우/Retrieval-based-Voice-Conversion-WebUI/Specify/vocal
6. 모델명.index로 끝나는 파일 하나 있는데 고르기 (2번 과정에서 모델을 선택하면 자동으로 설정이 된다)
7. 피치 식별 기술 선택 (harverst, rmvpe, rmvpe_gpu 중 하나 선택, rmvpe 계열이 가장 최신 기술이다.)
8. 다른 값들은 전부 Default로 놔두고 Convert 버튼을 눌러서 변환에 성공하면 아래와 같은 결과를 확인할 수 있다.

에러뜨는 경우에는 변환할 노래의 경로를 제대로 입력했는지 확인해본다.
음원의 저장/ 경로는 어딘지 모르겠다.. 분명 어딘가에 있을텐데.. 위의 사진에서 화살표로 표시해둔 부분을 클릭하면 다운받을 수 있는 탭이 나온다. 

이상으로 로컬 환경에서 GPU를 사용하여 RVC V2 목소리 학습 및 AI 커버를 하는 방법을 알아보았다. 결과물은 AI 커버 목소리만 생성되는 것이 맞다. 생성된 결과물을 가지고 DAW를 이용하여 믹싱, 마스터링 과정을 거치면 AI 커버곡이 완성된다!

 

 

다음 포스팅은 학습된 모델만 있다면 이런 복잡한 과정 없이 그저 마우스 드래그와 버튼 클릭 한번으로 AI 커버를 완성할 수 있는 프로그램 사용법에 대해서 다뤄보도록 하겠습니다.



음원분리 프로그램 다운 (Ultimate Vocal Remover)
https://ultimatevocalremover.com/

AI 목소리 모델
https://huggingface.co/QuickWick/Music-AI-Voices/tree/main

무료 웹기반 DAW 밴드랩
https://www.bandlab.com

반응형