목소리를 변환하고자 할 때 다양한 툴을 활용할 수 있지만, 이번에 Applio를 사용하여 보았다. RVC(Retrieval-based Voice Conversion) 기술 등이 목소리 변환에 활용될 수 있는데 이런 기술들을 쉽게 사용할 수 있는 환경이라고 이해하였다. MIT license로 상업적 이용도 가능해보였다.
(공식 사이트) https://applio.org/
Applio
A simple, high-quality voice conversion tool focused on simplicity and ease of use.
applio.org
(깃헙 페이지, 26년 3월 기준 Star 3k) https://github.com/IAHispano/Applio
GitHub - IAHispano/Applio: A simple, high-quality voice conversion tool focused on ease of use and performance.
A simple, high-quality voice conversion tool focused on ease of use and performance. - IAHispano/Applio
github.com
아래 코드를 통해 구글 Colab에서 Applio를 실행하였다.
https://colab.research.google.com/github/iahispano/applio/blob/main/assets/Applio.ipynb
Applio.ipynb
Run, share, and edit Python notebooks
colab.research.google.com
코드가 굉장히 간단하였다. RVC-Project/Retrieval-based-Voice-Conversion-WebUI는 Colab에서 패키지를 설치할 때 문제가 종종 발생했었는데 그런 문제도 없이 설치 및 실행이 잘 되었다.

위의 마지막 셀을 실행하면 링크를 주는데 이를 클릭하면 Applio를 사용할 수 있다.

특정 목소리 파일을 다른 목소리로 파일로 바꿔주는 기능 (Inference)이나 특정 텍스트를 목소리로 바꿔주는 기능 (TTS) 등 다양한 기능이 존재하였다.
변환에는 Voice model (.pth 파일)과 Index file (.index 파일)을 사용할 수 있다.

Voice model과 index file은 Hugging Face에서 검색해볼 수 있다.

다만 상업적 이용이 가능한 모델을 찾기가 쉽지 않았다.
그 외에 Voice Models(https://voice-models.com/)나 디스코드 AI HUB에서도 보이스 모델을 찾을 수 있지만, 목소리의 사용 허가를 대부분 받지는 않았을테니 주의해서 사용할 필요가 있어보였다.
모델 파일을 찾았다면 다운로드하여 Applio에서 사용할 수 있도록 넣어줘야 한다.

다운로드 탭에서 링크를 통해 직접 다운로드할 수도 있고, 다운로드한 파일을 Drop하여 업로드할 수 있다.
모델이 준비되었다면 Inference 탭에서 모델을 로드하고, 변환하고자 하는 오디오 파일을 업로드한다.
이때 mpa형식 파일은 오류가 나고, wav 파일이어야 오류 없이 변환이 되었다.
변환 툴을 사용해도 되지만, Windows 녹음기에서는 녹음할 때 파일을 wav파일로 저장하도록 설정할 수 있었다.

해당 파일을 넣고 Convert 버튼을 누르면 변환된 목소리를 확인할 수 있다.
그런데 Applio 문서를 읽다보니 위의 코드를 Colab에서 사용하면 문제가 될 수 있어보였다.

현재 코드 버전은 그래픽 UI를 실행하는데, 이건 Colab의 서비스 정책에 맞지는 않아서 구글 계정에 제한이 생길 수도 있다는 내용이었다.
그래서 그 대안으로 그래픽 UI가 없는 코드를 소개해주었는데, 그것이 아래 노트북 파일이다.
https://colab.research.google.com/github/iahispano/applio/blob/main/assets/Applio_NoUI.ipynb
Applio_NoUI.ipynb
Run, share, and edit Python notebooks
colab.research.google.com
해당 파일을 사용하면 계정 제한의 걱정 없이 그래픽 UI 버전과 동일한 기능을 사용할 수 있다. 하지만 그래픽 UI 버전이 처음 사용할 때는 이해가 더 쉬운 듯.
Training (모델 학습)
다음으로 오디오 파일을 이용하여 새로운 모델을 학습해보았다.
마찬가지로 NoUI 버전은 처음 이해하기 어려워서 UI 버전으로 진행하였다.
대부분은 Default 옵션으로 진행하였다.
1. Model Settings
모델 이름과 Sampling rate 등을 설정한다.

2. Preprocess
학습에 사용할 오디오 파일을 전처리하는 단계이다. 특정 폴더에 넣어두고 그 경로를 적어도 되고, 아니면 Dataset Creator를 통해 오디오 파일을 업로드해도 된다.

본인의 목소리를 학습시켜도 되고, 아래와 같이 공개된 보이스 파일을 사용할 수도 있다. ChatGPT에 따르면 아래 파일들은 상업적으로도 사용할 수 있다고 한다 (다만 CC BY 4.0은 출처를 밝혀야 한다. CC0는 출처를 밝히지 않아도 되는 듯). 일부 모델에 대한 설명은 Hugging Face에서도 찾아볼 수 있다 (https://huggingface.co/learn/audio-course/chapter6/tts_datasets).
- VCTK (https://datashare.ed.ac.uk/handle/10283/3443, CC BY 4.0)
- LibriSpeech (https://www.openslr.org/12, CC BY 4.0)
- Mozilla Common Voice (https://datacollective.mozillafoundation.org/, 여러 종류의 라이센스)
- LibriVox (https://librivox.org/, Public Domain)
- LJSpeech (https://keithito.com/LJ-Speech-Dataset/, Public Domain)
참고로 LibriVox 내 오디오 파일이 가장 자유롭게 사용할 수 있어 보였다 (출처 표시도 필요 없다). LJSpeech도 LibriVox project에서 생성된 파일이라는 설명이 있었고, LibriSpeech도 LibriVox 내 오디오 파일로부터 추가적인 정리를 거쳐서 만들어졌다고 한다.

Advanced Settings도 있었지만 기본으로 두고 진행하였다. Preprocess Dataset 버튼을 누르면 진행한다.

3. Extract
목소리의 특징을 뽑아내는 단계라고 이해하였다. 마찬가지로 Default 옵션으로 진행하였다.

4. Training
실제로 모델을 학습하는 단계이다. Default로 진행하였다.

Advanced Setttings도 살펴보았다. 기본적으로는 pretrained 모델에서 학습을 시작하지만, pretrained 모델 없이 학습을 할 수도 있고 (Fresh Training), custom pretrained 모델을 학습에 사용할 수도 있었다. 나는 기본 pretrained 모델을 사용하였다.

Batch size가 4, Total Epoch가 200이었기 때문에 아래와 같이 총 800 스텝을 진행하였다. 이때 10번의 epoch마다 모델을 저장하여 총 20개의 모델이 저장된다 (my-project_10e_40s.pth, ..., my-project_200e_800s.pth). 보통은 가장 뒤의 파일부터 들어보고 (my-project_200e_800s.pth), 품질이 탁하거나 발음이 무너지면 조금 앞 에폭 파일로 내려가서 비교하는 식으로 고르는 것을 ChatGPT가 추천해줬다. 인덱스 파일은 마지막에 생성된다 (my-project.index). G_2223333.pth와 D_2223333.pth도 생성되는데, ChatGPT에 따르면 각각 Generator 체크포인트와 Discriminator 체크포인트로서 재학습용 목적의 파일이라고 한다.
my-project | epoch=2 | step=8 | time=10:21:10 | training_speed=0:00:02 | lowest_value=55.51 (epoch 2 and step 6)
my-project | epoch=3 | step=12 | time=10:21:13 | training_speed=0:00:02 | lowest_value=49.823 (epoch 3 and step 11)
...
my-project | epoch=199 | step=796 | time=10:50:52 | training_speed=0:00:02 | lowest_value=4.28 (epoch 97 and step 385)
my-project | epoch=200 | step=800 | time=10:50:57 | training_speed=0:00:04 | lowest_value=4.28 (epoch 97 and step 385)
Saved model '/content/Applio/logs/my-project/G_2223333.pth' (epoch 200)
Saved model '/content/Applio/logs/my-project/D_2223333.pth' (epoch 200)
Training has been successfully completed with 200 epoch, 800 steps and 40.601 loss gen.
Lowest generator loss: 4.28 at epoch 97, step 385
Saved model '/content/Applio/logs/my-project/my-project_200e_800s.pth' (epoch 200 and step 800)
Saved index file '/content/Applio/logs/my-project/my-project.index'
TTS 탭에서 생성한 모델을 바로 이용해볼 수 있다.

'AI Sound > News & Tips' 카테고리의 다른 글
| [TTS] 유료 TTS 서비스인 타입캐스트 (Typecast) (0) | 2023.05.07 |
|---|---|
| [Google] 구글의 Text-To-Speech (TTS) 서비스 (0) | 2023.03.05 |