Chapter 4. Bert-VITS2 사전 준비 및 훈련 시작

2024년 01월 09일
 | 
Info-Geon

Chapter 1,2,3를 통해 기본적인 준비를 다 끝냈습니다, 고생 많으셨어요!

이번 Chapter에서는 Bert-VITS2를 훈련시키기 위한 패키지를 설치하고, 학습 데이터를 준비하여 훈련을 시켜보도록 하겠습니다!

크게 어렵지는 않을거고, 잘 따라하시면 문제 없이 진행 가능 하실겁니다!

그리고 진행 전에는 가상환경을 키고!!! 진행해주세요.

conda activate <가상환경명>

4-1. Bert-VITS2 clone 및 관련 패키지 설치

1. Bert-VITS2를 사용하기 위하여, git clone 을 통해 git에 있는 Bert-VITS2 폴더를 clone해 올 것입니다.

원하시는 폴더로 wsl의 경로를 이동시킨 뒤, 아래 명령어를 입력해주세요.

(만일 git이 설치 안되어 있다면 git을 설치해야합니다, sudo apt-get install git 이라는 명령어로 설치 가능한데, 자세한 사항은 다음에 작성하도록 하겠습니다!)

				
					conda activate python310 // 가상환경 실행, conda activate <가상환경 이름> 입니다.
cd bert-vits2 //bert-vits2 폴더로 이동
git clone https://github.com/fishaudio/Bert-VITS2.git
				
			

2. 저는 D:/bert-vits2/ 에 clone을 시켰기 때문에, D:/bert-vits2/Bert-VITS2라는 폴더가 생겼고, 내부에 여러가지 관련 파일이 생겼을 겁니다!

3. clone이 완료되면, 관련 패키지를 설치하도록 하겠습니다.

아래 명령어를 입력해주세요.

(원래는 Anaconda의 경우에는 의존성 관리나 여러 측면때문에 pip 보다 conda를 사용하는게 더 좋다고 하는데, conda에 없는 패키지도 있고 해서 일괄 pip로 설치하도록 하겠습니다.

저는 원래는 가능하면 다음 순서대로 설치합니다.

1) conda install <패키지명>

2) conda install -c conda-forge <패키지명>

3) conda install -c <channel>

4) pip install <패키지명> )

				
					pip install -r requirements.txt
				
			

아주 간단하게 Bert-VITS2를 clone 하였고, 관련 패키지 설치가 완료되었습니다!

4-2. 커스텀 학습 데이터 구성 및 모델 훈련 준비

1. Bert-VITS2 폴더에서 아래와 같은 명령어를 입력하여, webui_preprocess.py를 실행합니다.
키면 아래와 같은 페이지가 뜰거에요.
				
					python webui_preprocess.py
				
			

2. 왼쪽 위의 RoBERTa, WavLM의 링크를 클릭하여 들어가서, 다운로드를 받은 뒤 각각 언어에 맞는 폴더에 넣으시면 됩니다! 

중국어(中文 RoBERTa) -> Bert-VITS2/bert/chinese-roberta-wwm-ext-large 폴더,

영어(英文 DeBERTa) -> Bert-VITS2/bert/deberta-v3-large 폴더,

일본어(日文 DeBERTa) -> Bert-VITS2/bert/deberta-v2-large-japanese-char-wwm 폴더

WavLM -> Bert-VITS2/slm/wavlm-base-plus 폴더

이렇게 언어별로 다운받아서, bert 폴더 안에 있는 각각의 폴더로 넣으시면 됩니다. (WavLM은 slm/wavlm-base-plus 폴더에 넣으시면 되요)

(아래 사진 참고해주세요, 다운로드 받은 폴더에서 해당 폴더로 옮기시면 됩니다.)

3. 그럼 이제 학습 데이터를 준비하도록 하겠습니다!

음성 데이터: 

 – 1시간 분량

 – 파일 1개당 1~10초 사이 (1초 이하거나, 10초 이상의 데이터는 제거해주세요)

 – 파일명: crs_00001.wav (음성명_순서.wav 와 같은 형식)

 

텍스트 데이터:

 – train, validation, transcription 이렇게 3가지가 필요합니다.

 – 파일명|음성명|언어|내용 과 같은 형식을 가지면 됩니다.

 – 예시) crs_00001.wav|crs|JP|簡単でしょ?

 – validation의 경우에는 전체 텍스트 데이터의 5%정도를 뽑아서 만들어 주시면 됩니다.

 

텍스트 데이터의 경우에는 whisper를 통해 음성데이터로부터 추출하면 되는데, 이는 나중에 다시 작성하도록 하겠습니다. (학습 데이터를 만드는 방법은 추후에 다시 작성하도록 하겠습니다.)

저의 경우에는 음성명을 crs로 했고, 파일명은 crs_*****.wav 이며, 텍스트데이터는 esd.list, train.list, val.list로 하였습니다.

(list파일은 txt파일을 txt->list로 확장자 변환 한거에요.)

 

4. Bert-VITS2폴더에 data 폴더를 만들고, 다음과 같이 위치시키시면 됩니다.

├── data

│   ├── crs

│   │   ├── esd.list

│   │   ├── train.list

│   │   ├── val.list

│   │   ├── raw

│   │   │   ├── crs_00001.wav

│   │   │   ├── crs_00002.wav

 

│   │   │   ├── …

즉, data 폴더 밑에 crs 폴더를 만들고, 그 밑에 esd.list, train.list, val.list를 놓고, 같은 위치에 raw 폴더를 만들어 음성 데이터는 raw 폴더 밑에 넣어주시면 됩니다.

 

5. 위와 같이 데이터 세팅이 다 되었으면 webui_preprocess.py를 통해 실행했던 페이지로 다시 돌아온 뒤, 다음과 같이 바꿔주시면 됩니다.

밑줄 친 부분을 본인의 데이터셋 이름으로 넣어 주시면 됩니다, 저의 경우에는 crs 겠죠?

그리고 본인의 GPU 성능에 따라 아래의 Batch size를 정해주시면 되는데, 저는 3060이기 때문에 4로 정했습니다. 8은 안되더라구요…ㅠㅠ

그리고 빨간색으로 네모나게 표시되어 있는 실행(집행)을 누르면 

Bert-VITS2 폴더에 없던 config.yml 파일이 쨘! 하고 생겨납니다!

 

6. 이제 우리는 config.yml 파일을 수정할 것입니다. vscode와 같은 편집기를 통해 config.yml을 실행해주세요.

아래 이미지와 같이 왼쪽 부분을 오른쪽과 같이 수정했습니다.

(Data/ -> data/<데이터셋 이름>)

(audios/raw -> raw)

(audios/wavs -> wavs)

(filelists/한자.list -> filelists/esd.list)

이렇게 본인의 커스텀 데이터 셋에 맞춰서 수정을 하시면 됩니다!

7. webui_preprocess.py를 통해 실행했던 페이지로 다시 돌아온 뒤, 

第二步:预处理音频文件 을 실행시켜주시기 바랍니다. (완료되기까지 시간이 조금 걸림)

그럼 raw와 같은 위치에 wavs 폴더와, 그 밑에 wav 파일이 생겨났을 겁니다.

 

8. 이번에는 第三步:预处理标签文件 를 실행시켜주시기 바랍니다.

그렇다면 config, models 폴더와 파일 esd.list.cleaned가 생겨났을 겁니다. 그리고 list 파일을 확인하시면 다음과 같이 내용이 수정되어 있을 거에요.

{path}/crs_00001.wav|crs|JP|ふざけないで| f u z a k e n a i d e

 

9. 이번에는 第四步:生成 BERT 特征文件를 실행시켜주시기 바랍니다.

그럼 wavs폴더 아래에 bert.pt 파일들이 생기셨을 겁니다.

이로서 학습을 위한 preprocessing이 끝났습니다!

 

9번에서 아래와 같은 오류가 발생하는 분이 있을 수도 있습니다.

				
					error: mkl-service + intel(r) mkl: mkl_threading_layer=intel is incompatible with libgomp.so.1 library. 
    try to import numpy first or set the threading layer accordingly. set mkl_service_force_intel to force it.
				
			

그럼 webui_preprocess.py에 아래 코드를 넣어주세요.

				
					import os
os.environ['MKL_THREADING_LAYER']='GNU'
				
			

또는

				
					import os
os.environ['MKL_SERVICE_FORCE_INTEL']='1'
				
			

이걸 넣어주시면 문제없이 실행 될거에요!

4-3. Pre-trained 모델 다운로드 및 훈련 시작

1. Bert-VITS2-2.3 Pre-trained 모델을 다운로드 하기 위해, 아래 사이트로 이동해주세요.

https://huggingface.co/OedoSoldier/Bert-VITS2-2.3/tree/main

사이트로 이동한 뒤, DUR_0.pth, D_0.pth, G_0.pth, WD_0.pth를 다운받아, 

data/<데이터셋 폴더>/models 에 넣어주세요.

2. 위에서 수정했던 config.yml 에서 90번째줄에 내용을

config_path: “configs/config.json”

으로 변경해주세요.

(train_ms의 config에 관한 내용 수정입니다. 줄 수는 다를수도 있어요)

3. 명령어 창에서 아래 명령어를 실행하면, 학습이 시작됩니다.

				
					torchrun --nproc_per_node=1 train_ms.py
				
			

(위 이미지는 제가 Pre-trained model을 넣지 않은 상태에서 실행했었어서, checkpoint를 가져오는 모습이 안나와있네요ㅠㅠㅠㅠㅠ

Pre-trained model을 넣으시면 load checkpoint 하면서 뜰거에요!)

 

그리고 학습이 잘 되고 있는지 확인하고 싶으실때는, 작업관리자에서 GPU를 누르시고, 아래 사진과 같이 Cuda 할당량이 높은지, 전용 GPU 메모리 사용량이 높은지 확인하시면 됩니다!

드디어 기나긴 Bert-VITS2 설치 및 훈련 실행이 끝났네요!

여기까지 하시느라 정말 고생이 많으셨습니다~ 저는 3060으로 해서 그런지, 1000 Epoch(800k steps 정도) 학습 시키는데 거의 1주일 걸렸네요…ㅠㅠ

암튼 다들 좋은 결과 있으시기를 바라요!


다음 글은 먼저 앞서 적었던 whisper을 통한 음성 데이터로부터 텍스트 데이터 얻는 방법부터 작성 할게요!

그리고 모델 훈련한 뒤, 음성 추출을 하는 방법을 작성하도록 하겠습니다! 아주 쉬우니 그냥 따라하시면 되요!

음성 추출이 끝나고 나면, 커스텀 학습 데이터 추출하는 방법에 대해 작성하도록 하겠습니다.

그럼 담에 봐요~


<관련 글 링크>

Chapter 1-1. 윈도우에서 WSL2 설치

Chapter 1-2. WSL2에 우분투 설치

Chapter 1-3. C드라이브 용량이 부족한 사람을 위한 우분투 D 드라이브로 옮기기

Chapter 2. WSL2에 아나콘다 설치 후 가상환경 만들기

Chapter 3. WSL 아나콘다에서 Cuda, cuDNN, Pytorch 설치하기