*윈도우 10(19045) / rtx3080 / 파이토치1.13.1+cu117 에서 실행하였습니다

*깃허브(https://github.com/yxlllc/DDSP-SVC) 원문 내용 기반으로 진행합니다

*"C:\DDSP-SVC" 디렉토리 기준으로 진행합니다

*빨간글씨는 명령어(복붙하면 됩니다), 파란글씨는 사족입니다


0.기본적으로 알아야될 것

-명령어 입력에는 cmd, powershell, vs 등등 아무거나 사용하셔도 무방합니다 - 그냥 cmd 쓰세요

-(diff-svc 혹은 이런 작업을 몇번 해보신 분들은 아시겠지만) 파이토치부터 시작해서 requirements로 깔리는 수많은 것들은 버전에 민감합니다. 각각의 구성요소가 다른 구성요소의 n버전 "이상"~m버전 "이하"를 요구하며 서로 얽혀있다보니 무조건 최신버전이 좋다는 생각은 수많은 에러를 만들어내는 원인이 되기에, 웬만하면 가이드 버전 맞춰서 설치하는 게 정신건강에 이롭습니다.


[ddsp-svc설치]

1-1.기본 프로그램부터 설치해봅시다

파이썬 3.8, 쿠다11.7 설치하시고..


1-2.cmd를 엽니다 (단축키 // 윈도우키+R - cmd 입력)


1-3.파이토치 설치단계입니다 - 설치하셨다면 스킵

pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu117

1-3-1.파이토치 버전 확인

python

import torch

print(torch.__version__)

버전이 뿅하고 나오면 성공

컨트롤+Z로 파이썬 빠져나온 뒤 1-4 진행하시면 됩니다


1-4.ddsp-svc를 설치합니다

cd C:\

git clone https://github.com/yxlllc/DDSP-SVC


1-5.ddsp-svc 폴더로 이동후 requirements 설치 - 오류없이 설치되어야 합니다

cd C:\DDSP-SVC

pip install -r requirements.txt


1-6.pretrained 모델 넣기

pretrained 모델 - C:\DDSP-SVC\pretrain\hubert (hubert보다 성능좋은 contentvec을 사용합니다)

https://oo.pe/https://ibm.ent.box.com/s/z1wgl1stco8ffooyatzdwsqn2psd9lrr


nsf_hifigan - C:\DDSP-SVC\pretrain\nsf_hifigan

https://oo.pe/https://github.com/openvpi/vocoders/releases/download/nsf-hifigan-v1/nsf_hifigan_20221211.zip


[데이터 전처리]

2-1.목소리 데이터를 구합니다(diff-svc를 사용하기 때문에 확장자는 mp4, mp3, wav 뭐든 상관없습니다)

*일반적인 대화 데이터는 웬만하면 넣지 마시고, 데이터가 너무 적어 불가피하게 사용해야겠다면 웃음소리는 꼭 빼세요.

*알고 계시겠지만 딥러닝에서의 인풋 데이터의 질은 너무나도 중요합니다. 질이 떨어지는 데이터는 버리세요.


2-2.데이터 정제

학습에 사용될 수 있는 이상적인 데이터는 저음부~고음부가 모두 담긴 깨끗한 보컬 파일인데, 본인 목소리로 학습하지 않는 이상 이런 데이터를 구하기가 쉽지 않습니다. 가수의 무손실 음원(flac)에서 보컬만 추출하는 방법을 예시로 설명드립니다. - mp3파일같은 손실압축파일은 보컬이 깔끔하게 분리되지 않을 수 있으니 추천드리지 않습니다.

-------------------------------------------------------------------------------------

2-2-1.instrumental 파일이 세트로 있는 경우 -> utagoe (사용법은 구글링)

2-2-2.instrumental 파일이 없는 경우 -> ultimate vocal remover (https://github.com/Anjok07/ultimatevocalremovergui) 이외 다른 프로그램도 많으니 재량껏 보컬만 추출하시면 됩니다

-------------------------------------------------------------------------------------

2-2-1의 방법을 사용하면 비교적 깨끗하게 추출이 가능한데, 2-2-2의 방법으로는 잡음이 섞여나오는 등 한계가 있기 때문에 따로 작업을 해주시는 게 좋습니다. goldwave(이후 노멀라이징 할때도 쓰입니다) 설치후 추출한 보컬 데이터를 열어 백보컬과 잡음을 제거한 후 저장합니다.

이후 izotope rx10같은 유틸리티로 de-reverb, de-noise를 약하게 먹여주면 조금 더 좋긴 하지만 귀찮고 손이 많이 가는 작업이라 안 해도 무방합니다.

모든 데이터를 다 손보셨다면 goldwave-일괄처리(batch processing)로 노멀라이징과 wav 변환을 시켜줍니다.

source 탭에서 파일(또는 폴더)를 선택하고, 옆의 process 탭으로 가서

add effect-goldwave-auto gain-default 로 노멀라이징을,

add effect-goldwave-silence reduction-shorten silences longer than 5 seconds 로 무음부분을 지워줍니다

convert 탭으로 가서 16비트 44.1 wav로 변환한 후 실행하시면 일괄작업됩니다

이후에 할 diff-svc를 이용한 전처리 과정에서도 노멀라이징과 무음부분 삭제를 해주긴 합니다만 막상 전처리 된 결과물을 보면 엉망진창이라 전문 프로그램으로 미리 노멀라이징 해줍니다. 제대로 무음삭제를 해 줘야 껍데기 파일 훈련시키는데 시간과 자원을 낭비하지 않고, 제대로 노멀라이징 해줘야 훈련 이후 결과물을 뽑아냈을 때 소리 크기가 안정적입니다.


2-3.diff-svc설치

- 전처리에 ddsp-svc보다 diff-svc를 사용하는 게 오류도 적고 정신건강에 좋습니다. wav를 15초 단위로 잘라주는 다른 유틸리티를 써도 무방합니다.

ddsp-svc쪽 cmd창은 놔두고 새로 하나 더 열어줍니다 (단축키 // 윈도우키+R - cmd)

cd C:\

git clone https://github.com/wlsdml1114/diff-svc

cd C:\diff-svc

pip install -r requirements.txt


2-4.diff-svc 아래에 preprocess 폴더를 만들고 데이터를 전부 넣어줍니다


2-5.데이터 자르기

python sep_wav.py

실행후 diff-svc\preprocess_out\final 에 보면 10~15초 단위로 잘린 파일들이 있습니다.

그대로 DDSP-SVC\data\train\audio로 가져옵니다.

diff-svc는 더 이상 쓸 일이 없으니 탐색기 창과 커맨드 창은 닫아줍니다.


2-6.데이터 전처리

다시 ddsp-svc 커맨드 창으로 돌아와서

python draw.py

실행하면 DDSP-SVC\data\train\audio 에 넣어놓은 데이터 중 "괜찮아 보이는" 5~10개 파일을

컴퓨터가 자동으로 선별하여 C:\DDSP-SVC\data\val\audio 쪽으로 이동시켜 줍니다.

val\audio쪽에 들어간 데이터들은 나중에 학습하면서 실시간으로 학습 정도를 확인할 수 있는 레퍼런스 파일이 되니

컴퓨터가 선별한 파일들이 마음에 들지 않으면 빼거나 교체해도 무방합니다.

python preprocess.py -c configs/combsub.yaml

ddsp-svc 내부 전처리 작업입니다. DDSP-SVC\data\train 쪽에 가보시면 f0, units, volume 폴더가 새로 생긴 걸 확인할 수 있습니다.


[학습]

3-1.먼저 설정파일을 수정해야 합니다.

DDSP-SVC\configs 에 combsub.yaml 파일을 엽니다. (연결 프로그램-메모장 또는 vscode)

8행 encoder: 'contentvec'

12행 encoder_out_channels: 256

13행 encoder_ckpt: pretrain/hubert/checkpoint_best_legacy_500.pt

36행 cache_device: 'cuda'

이렇게 수정해주시고

33행 34행은 각자 사양에 맞게 수정해야 하는데

num_workers는 디폴트값인 2로 두고

batch_size를 8~128 사이 값으로 조정합니다

*나중에 직접 트레이닝하면서 최적화할 수 있으니 대략적인 값으로만 알아서 설정하세요

num_workers는 cpu와 gpu 사이의 밸런스를, batch_size는 한번에 얼마나 큰 덩어리로 학습할 것인지를(=gpu vram 사용량) 결정합니다.

제가 쓰는 3080 12gb 기준 // 데이터파일 2000개 -> batch96, 데이터파일 500개 -> batch128 일때 vram 11gb정도 점유합니다.

배치사이즈를 너무 타이트하게 잡으면 램부족으로 학습이 중단되거나 학습이 매우 느려질 수 있으니 10% 여유분을 남겨 두셔야 합니다.


3-2.학습

python train.py -c configs/combsub.yaml

실행하면 데이터파일 로딩후 학습을 시작합니다. 작업관리자에서 gpu vram util을 확인합니다.

학습한 pt파일은 DDSP-SVC\exp\combsub-test 에 저장되며 기본설정으로 2000스텝마다 저장됩니다.

config.yaml 파일에서 num_workers와 batch_size 그리고 저장되는 주기인 (37행)interval_val 도 설정 가능합니다.

gpu가 영 일을 안한다 -> num_workers를 4로 수정 (사실 별 차이는 없습니다)

vram 사용량이 적다 -> batch_size를 적절히 수정

아까 수정한 combsub.yaml 이 전역설정, 방금 수정한 config.yaml 이 개별설정의 개념입니다.

-학습은 언제든지 종료할 수 있으며 커맨드 창에서 "컨트롤+C" 로 종료할 수 있습니다.

-학습 종료->배치사이즈 수정->재시작 해가며 적절한 배치사이즈를 찾으면 됩니다.

-학습을 다시 시작하면 맨 마지막으로 저장된 체크포인트부터 시작합니다.

-diff-svc와는 다르게 오래된 체크포인트를 자동으로 지워주지 않습니다. 용량확보가 필요하다면 수동으로 DDSP-SVC\exp\combsub-test 에서 오래된 pt 파일을 지워주면 됩니다.

학습과정을 보고싶다면 새로운 커맨드 창을 연 뒤

tensorboard --logdir="C:\DDSP-SVC\exp\combsub-test\logs"

명령어를 실행한 뒤 http://localhost:6006/ 주소로 접속하면 손실율(loss값) 추이와 함께 아까 data\val\audio 쪽에 따로 뽑아놨던 오디오 파일들이 학습되는 과정을 직접 들어볼 수 있습니다.

적당하게 학습이 진행됐다 싶으면 학습을 종료합니다.


[결과물 출력]

4-1.결과물 파일 처리

결과물을 뽑을 때도 vocal-instrumental 파일 분리가 필요합니다.

(vocal+instumental이 섞여있는 일반 음원에 학습한 데이터를 프로세싱하면 이상한 무엇인가가 나옵니다)

2-2에서 알려드린대로 재량껏 분리한 뒤 편의를 위해 DDSP-SVC\exp 폴더로 이동시킵니다.

각각 vocal.wav / instrumental.wav 로 이름변경한 뒤

python main.py -i "C:\DDSP-SVC\exp\vocal.wav" -m "C:\DDSP-SVC\exp\combsub-test\model_best.pt" -o "C:\DDSP-SVC\exp\vocal_trans.wav" -k 0 -id 1 -eak 0

실행하면 새로운 목소리로 덧입혀진 vocal_trans.wav 가 출력됩니다.

*원래 아웃풋 데이터가 크면(길이가 길면) 프로그램이 알아서 자른 뒤에 프로세싱하고 다시 이어붙이는데, 간혹 CUDA out of memory 에러가 뜨는 경우가 있습니다. 그럴 땐 번거롭지만 수동으로 적당히 잘라서 프로세싱한 뒤 다시 이어붙이면 됩니다.


4-2.결과물 합치기

이제 vocal_trans.wav 와 instrumental.wav 를 합치면 작업이 모두 끝납니다.

goldwave에서 vocal_trans.wav , instrumental.wav 두 파일을 모두 불러옵니다.

vocal_trans를 선택하고 컨트롤+C (복사)

아래쪽 instrumental 선택후 컨트롤+M 하면 vocal과 instrumental을 병합할 수 있습니다.

그리고 저장하면 끝!


.

.

사실 이 글을 쓰게 된 계기가 정보글이 별로 없어서 정보공유 차원에서 쓰기 시작한 것도 있지만

결과물이 생각보다 꽤 괜찮아서 자랑할려고 쓰기 시작했는데..

공지에 한국 가수는 창작물 업로드가 안된다네요 ㅠ.ㅠ

아무쪼록 도움이 되었으면 좋겠습니다