AI 탐구노트

Fish-Speech를 이용한 음성 생성 테스트 본문

DIY 테스트

Fish-Speech를 이용한 음성 생성 테스트

42morrow 2024. 9. 23. 16:00

최근에 새로 소개한 텍스트-음성 변환(TTS) 모델인  'Fish-Speech'를 로컬에서 테스트 해 보려고 합니다. 

억양, 리듬이 적용되어 자연스런 음성을 만들 수 있다고 하기 때문입니다. 

 

예전에 '책 읽어주는 부모' 였던가...

AI로 부모의 목소리를 복제해서 아이에게 텍스트로 된 동화 책을 읽어주는 서비스가 있었던 걸로 압니다. 

실제 그동안 다양한 음성복제(Voice Cloning) 모델이 나왔고 개중에는 상당히 괜찮은 것들도 있었죠.

하지만, 시간도 장비도 없어서 해 볼 엄두를 못 내고 있었는데 이번에 시간이 좀 나서 해보려고 합니다. 

 

환경구성

저는 PC에서 우분투를 사용하고 있어서 바로 Conda를 이용해 환경 구성을 해 봤습니다. 

환경 구성은 Fish-Speech의 깃헙에서 Local Inference 관련 내용을 그대로 따랐습니다. 

 

# Create a python 3.10 virtual environment, you can also use virtualenv
conda create -n fish-speech python=3.10
conda activate fish-speech

# Install pytorch (CUDA를 사용하는 버전으로 하기 위해 이 부분만 수정했습니다)
# pip3 install torch torchvision torchaudio
pip3 install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu124

# Install fish-speech
pip3 install -e .[stable]

# (Ubuntu / Debian User) Install sox + ffmpeg
apt install libsox-dev ffmpeg

 

Github Repository 복제

우선 Fish-Speech의 코드를 다운받습니다.

$ git clone https://github.com/fishaudio/fish-speech
$ cd fish-speech

 

WebUI 빌드 및 실행 

그 뒤 설명은 WebUI를 빌드하고 실행하는 것이어서 그것도 그래도 해 봤습니다.

$ python tools/webui.py \
    --llama-checkpoint-path checkpoints/fish-speech-1.4 \
    --decoder-checkpoint-path checkpoints/fish-speech-1.4/firefly-gan-vq-fsq-8x1024-21hz-generator.pth \
    --compile


... 상략...
2024-09-22 17:01:39.685 | INFO     | __main__:<module>:516 - Warming up done, launching the web UI...
Running on local URL:  http://127.0.0.1:7860

To create a public link, set `share=True` in `launch()`.

 

 

실행문의 '--compile'은 CUDA를 사용하기 위한 것으로 CPU만으로 할 경우보다 최대 10배 가량의 추론 속도 차이가 나니 꼭 이렇게 하실 것을 권유 드립니다. 

 

WebUI 실행 화면

 

정상적으로 수행되고 웹 UI를 로딩할 수 있는 URL이 나옵니다. 

브라우저 상에서 열어보면 다음과 같은 화면이 나옵니다. HuggingFace에서 보았던 Demo 화면과 거의 유사합니다. 

 

사진 : 로컬에서 실행한 Fish-Speech의 Web UI 화면

 

 

이 도구를 사용해서 테스트를 해 봅니다.

 

Input Text는 조선일보의 기사 내용 중 일부를 발췌해 봤고 해당 부분의 텍스트 내용은 다음과 같습니다. 

이들은 세계적으로 선풍적인 인기를 끌고 있는 비만 치료제 위고비·젭바운드 등의 기반이 되는 ‘글루카곤 유사 펩타이드(GLP)-1’을 발견하고 개발한 공로를 인정받았다. 세계적으로 9억명 이상이 비만을 겪고 있는 상황에서, 비만 환자들의 고통을 줄였다는 것이다. 래스커상은 의학 분야 최고 권위의 상 중 하나로, 수상자 중 상당수가 노벨 생리의학상까지 거머쥐었다. 이들이 인류의 비만 문제를 해결하는 데 기여했다는 점에서 다음 달 노벨 생리의학상 수상 가능성이 높게 점쳐지고 있다. 이미 이 물질로 약을 개발한 제약사들은 돈방석에 앉았다. 노보노디스크는 지난해 GLP-1 계열 약으로만 185억달러(약 24조7000억원)의 매출을 올렸고, 젭바운드를 개발한 미국의 일라이릴리는 세계 시가총액 10위 안에 진입했다.

 

툴에서 Input Text로 입력하고 실행해 봅니다. 

 

Advanced Config 상의 설정값을 하나씩 변경해가며 음성을 생성해 봅니다. 

 

기본적으로 'Batch Inference'의 값은 1로 설정되어 있습니다.

이 값은 툴에서는 4까지 가능한데 4로 해놓고 생성시키면 좌측에 보이듯 한번에 생성하는 음성이 4개가 나타납니다. 

 

'Generate' 대신 'Streaming Generate'를 선택하면 처리되는 과정의 음성을 직접 들려줍니다. 

제 경우, 바로바로 들으면서 안 맞다 싶으면 고치는 쪽으로 하는 것을 좋아해서 Streaming Audio가 더 편하다 생각되었습니다. 

사진 : Fish-Speech의 Web UI를 이용해서 테스트하는 장면

 

 

생성된 결과물 음성 예시 

최종적으로 만들어진 음성파일은 다음과 같습니다.

남성 목소리 하나와 아주 약하게 읽어내린 여성 목소리 하나만 올려 봅니다. 

 

audio_01.mp3
0.40MB
audio_02.mp3
0.39MB

 

 

 

우선 설정값만 변경하면 정말 다양한 사람들의 음색을 입힌 음성을 만들 수 있어 놀라웠습니다.

 

한국어를 처리하는데 있어서 아쉬웠던 것은 자연스런 음색이긴 하지만, 문장에 특수 기호가 들어가거나 영문 스펠링을 개별적으로 읽는다거나, 문구의 연결 부분이 다소 어색한 부분들이 보였다는 것입니다.

입력하는 텍스트를 조금씩 조정하면 훨씬 더 나아지지 않을까 하는 생각이 들긴 했는데 그런 부분까지 자동화를 할 수 있는 방안이 나왔으면 하는 바램이 먼저 생겼습니다. -_-;