본문 바로가기

Python

F5-TTS로 초간단&초경량 TTS 개발하기

728x90
728x90

이 포스트에서는 2024년 10월 공개된 F5-TTS를 이용하여 가정용 컴퓨터에서도 손쉽게 구동할 수 있는 TTS 프로그램을 개발해 본다.

F5-TTS

F5-TTS는 E2-TTS에서 속도를 개선한 모델이라고 한다.

 

모델에 대한 논문과 코드 리포를 공개하고 있고, 영어와 중국어가 pretrained 된 상태이기 때문에 영어와 중국어 목소리 생성에 바로 이용할 수 있다.

 

또한 이 모델은 GPU 자원을 상당히 적게 쓴다.

 

 

모델을 불러올 때 최대 VRAM 3gb를 잡아먹는데 대부분의 컴퓨터에서는 문제가 없을 수준이다.

 

논문 - https://arxiv.org/pdf/2410.06885

 

코드 - https://github.com/SWivid/F5-TTS

 

GitHub - SWivid/F5-TTS: Official code for "F5-TTS: A Fairytaler that Fakes Fluent and Faithful Speech with Flow Matching"

Official code for "F5-TTS: A Fairytaler that Fakes Fluent and Faithful Speech with Flow Matching" - SWivid/F5-TTS

github.com

 

사용법

먼저 pip으로 해당 라이브러리를 설치할 수 있다. 파이토치가 먼저 설치되어야 함을 잊지 말자.

pip install git+https://github.com/SWivid/F5-TTS.git

 

아주 친절하게도 우리 같은 엔드 유저들이 바로 사용할 수 있는 api를 제공하고 있다. api에서 모델을 불러와 사용자가 넘겨준 레퍼런스를 기반으로 목표 텍스트에 대응하는 목소리를 추론하는 방식이다.

 

TTS 모델을 사용하기 위해 아래와 같이 객체를 생성해 보자.

 

import f5_tts.api

tts_model = f5_tts.api.F5TTS()

 

목소리를 생성하기 위해선 infer() 메서드를 사용하는데 4개의 매개변수가 필수로 들어간다. 각 매개변수의 뜻은 다음과 같다.

  • ref_file: 기반 목소리가 될 오디오 파일 위치
  • ref_text: ref_file에 담긴 목소리 텍스트
  • gen_text: 생성하고 싶은 목소리의 텍스트
  • file_wave: 파일 저장 위치

F5-TTS는 레퍼런스로 제공되는 오디오에서 15초를 넘기는 분량은 모두 무시하니 이점 유의하도록 하자.

 

15초 이내의 레퍼런스 파일과 텍스트를 만들어서 넣어보자. 한국어는 지원하지 않으므로 게임에서 영어 목소리를 녹음했다.

 

 

 

이제 infer() 메서드를 사용해 목소리를 생성해 보자.

 

target_text = "You’re her hero, Scott. Just be the person that she already thinks you are."
r_audio, r_text = load_ref()

tts_model = f5_tts.api.F5TTS()
tts_model.infer(ref_file=r_audio, ref_text=r_text, gen_text=target_text, file_wave="result.wav")

 

 

 

타깃 샘플링 레이트가 24khz라 많이 선명하지는 않지만, 그럭저럭 들을만한 음질로 목소리가 생성되는 것을 확인할 수 있다.

 

지금까지 F5-TTS에서 기본으로 제공되는 모델을 사용하여 영어 TTS 프로그램을 개발해 봤다. 리포지토리 링크에서 훈련, 파인 튜닝과 관련된 가이드가 제공되므로 한국어 TTS를 개발하고자 하는 사람에게 유용하게 쓰일 수 있을 것이다.

TODO

논문을 보면 학습에면 A100 8장이 사용되었다고 하는데, 가정용 스펙으로도 추가 학습이 가능한지 살펴볼 필요가 있을 것이다.

 

보코더의 음질은 24khz인데, 44.1khz 음질을 제공하는 보코더 모델을 장착할 수 있는지 알아봐야 할 것이다.

728x90
728x90

'Python' 카테고리의 다른 글

[Python] 외부 프로세스 실행시키기  (0) 2024.11.25