AI 탐구노트

MeloTTS : CPU로도 실시간 음성합성을 지원하는 경량 TTS 모델 본문

DIY 테스트

MeloTTS : CPU로도 실시간 음성합성을 지원하는 경량 TTS 모델

42morrow 2025. 1. 18. 10:49

 

인공지능 기술의 발전과 함께, 텍스트를 자연스러운 음성으로 변환하는 텍스트-투-스피치(Text-to-Speech, TTS) 시스템의 수요가 급증하고 있습니다. 특히, 다양한 언어를 지원하면서도 경량화된 TTS 모델은 엣지 디바이스나 임베디드 시스템과 같은 제한된 환경에서의 활용 가능성을 높여줍니다.

 

얼마 전 'Kokoro-82M' 이라는 TTS 모델을 소개한 바 있었습니다. 경량 TTS 모델로 8200만개의 매개변수만으로 아주 좋은 성능과 처리 속도를 보여준다고 말입니다. 게다가 공식 지원 언어에 한국어가 들어가 있다는 장점도 있었죠. 'Local Elevenlabs'라고 불릴 정도로 사람들의 주목을 많이 끌었습니다. 

 

 

Kokoro-82M: 컴팩트하면서 강력한 TTS 솔루션

텍스트-음성 변환(TTS)은 현대 인공지능 기술의 핵심적인 응용 중 하나로, 음성 인터페이스, 오디오북, 팟캐스트 제작 등 다양한 영역에서 중요한 역할을 담당하고 있습니다. 이 분야에서 새롭게

42morrow.tistory.com

 

위의 모델 소개 이후에 혹시나 이것 말고도 경량 TTS 모델들 가운데 괜찮은 것이 더 있나 해서 몇 가지를 더 찾아봤습니다. 아니나다를까 생각보다 훌륭한 경량 TTS 모델이 또 있더군요. 그래서, 이번 글에서는 이번에 찾은 MeloTTS를 소개해 볼까 합니다.


 

기존 방식의 문제점

기존의 TTS 시스템은 복잡한 파이프라인과 대용량 모델로 인해 엣지 디바이스나 임베디드 시스템에서의 실시간 처리에 어려움이 있었습니다. 특히, 다국어 지원과 고품질 음성 생성을 동시에 추구할 경우, 모델의 크기와 복잡성이 증가하여 배포 및 실행 환경에 제약이 따랐습니다.

 

MeloTTS란

MeloTTS는 MIT 와 MyShell.ai가 개발한 고품질 다국어 텍스트-음성(TTS) 라이브러리로, 지원되는 언어로는 영어(미국, 영국, 인도, 호주), 스페인어, 프랑스어, 중국어(영어 혼합), 일본어, 한국어 등이 있습니다. MeloTTS의 가장 큰 장점은 그 경량화된 설계로, 엣지나 인공지능 주변 장치(AIPC) 시스템에 적합하며 우수한 성능을 자랑합니다.

 

MeloTTS는 앞서의 문제점을 해결하기 위해 Variational Inference와 적대적 학습(adversarial learning)을 기반으로 한 엔드-투-엔드 TTS 모델인 VITS(Variational Inference with adversarial learning for end-to-end Text-to-Speech)를 채택했고 이를 통해 모델의 경량화와 고품질 음성 생성을 동시에 달성하였습니다.

 

그림 : MeloTTS에서 채택한 VITS에서의 추론 프로절차

 

참고) VITS : Variational Inference(변분 추론)과 Adversarial Learning(적대적 학습)이라는 두 가지 기술을 결합하여 개발된 텍스트-투-스피치(TTS) 모델입니다. (국내 AI 연구진의 논문에 소개되었습니다) 전자는 음성 데이터의 효율적 표현, 후자는 자연스런 음성 학습의 역할을 수행합니다. 

 

MeloTTS의 특징

 

  • 다국어 지원 : 여러 언어와 다양한 영어 억양을 지원하여 글로벌 사용자들에게 적합합니다. 
  • 실시간 추론 : CPU에서도 실시간 추론이 가능할 정도로 효율적인 성능을 제공합니다.
  • 경량 디자인 : 에지 장치 및 AI PC 등과 같은 시스템에 배포하는데도 적합합니다. 
  • 사용자 정의 데이터셋 학습 : 사용자 정의 데이터셋을 통한 모델 학습을 지원하여 특정 응용 분야에 맞는 음성 합성이 가능합니다.

MeloTTS의 기술적 세부 사항

  • 종단간 텍스트-음성 변환 (ViTS)을 위한 적대적 학습을 통한 변형 추론 기반입니다.
  • 각 언어 유형에 대해 BERT 모델과 해당 MeloTTS 모델이라는 두 가지 모델을 사용합니다.
  • 다양한 장치(CPU, GPU, NPU)에 대한 OpenVINO 툴킷을 사용하여 최적화할 수 있습니다.

 

제약사항

  • 현재 공개된 정보에 따르면, MeloTTS는 다양한 언어를 지원하지만 모든 언어와 억양을 포괄하지는 않습니다. 
  • 사용자 정의 데이터셋을 활용한 모델 학습 시에는 해당 데이터셋의 품질과 양에 따라 성능이 좌우될 수 있습니다.
  • 언어 별 다양한 스피커 템플릿이 제공되진 않습니다. 예를 들어 한국어를 지원하는 스피커는 1개의 템플릿만 제공됩니다. 이는 Kokoro 모델과의 차이점이라고 할 수 있습니다)
  • 텍스트의 전처리가 필요합니다. 한글과 영어가 섞여 있거나 인용 부호 등으로 인해 오류가 발생할 수 있습니다. 다만... 중국어 지원버전의 경우는 혼합된 영어 텍스트도 처리할 수 있다고 합니다. 

테스트

1) 환경 준비

# 가상 환경 생성
$ conda create -n melotts python=3.11
$ conda activate melotts

# 코드 다운로드 
$ git clone https://github.com/myshell-ai/MeloTTS.git
$ cd MeloTTS

# 필요 패키지 설치
$ pip install -e .
$ python -m unidic download

 

 

2) 테스트 용 데이터 (텍스트)

테스트에 사용할 텍스트는 아래 네이버 기사에서 가져와 봤습니다. 

 

오픈AI "中과 AI 경쟁 앞서려면 외부 투자·지원 규정 필요"

"글로벌 펀드 1천750억달러 대기…못 끌어오면 中에 들어가" 김태종 특파원 = 챗GPT 개발사 오픈AI는 중국과 인공지능(AI) 경쟁에서 앞서기 위해서는 외부의 투자와 지원을 위한 규정이 필요하다고

n.news.naver.com

 

 

챗GPT 개발사 오픈AI는 중국과 인공지능(AI) 경쟁에서 앞서기 위해서는 외부의 투자와 지원을 위한 규정이 필요하다고 13일(현지시간) 밝혔다.오픈AI는 이날 '경제 청사진'(Economic Blueprint)이라는 15페이지 분량의 제안서를 통해 "칩, 데이터, 에너지는 AI 승리의 열쇠"라며 "미국이 경쟁 우위를 확보할 수 있도록 모든 주에서 똑같이 적용될 수 있는 규칙을 마련하기 위해 지금 행동해야 한다"고 강조했다. 오픈AI의 이날 제안은 트럼프 2기 출범을 며칠 앞두고 나왔다.샘 올트먼 오픈AI 최고경영자(CEO)도 트럼프의 취임 기금에 약 100만 달러를 기부하며 다른 빅테크 경영진과 같이 트럼프와 관계 개선을 시도하고 있다. 오픈AI는 "글로벌 펀드에는 AI 프로젝트에 투자될 약 1천750억 달러(257조원)가 대기 중"이라며 "미국이 이를 끌어들이지 못한다면 중국이 지원하는 프로젝트로 흘러 들어가 중국의 글로벌 영향력을 강화할 것"이라고 우려했다. 또 AI 모델에 대한 수출 통제안을 제시하며 기술 오용 가능성이 높은 적대국의 접근을 차단하는 한편, "동맹국과 파트너에게 첨단 AI 모델을 제공해 중국이 아닌 미국 기술에 기반한 AI 생태계를 구축할 수 있도록 지원해야 한다"고 강조했다. 아울러 공공적으로 이용할 수 있는 정보를 학습할 수 있는 AI의 능력을 보장하되 창작자가 무단 디지털 복제를 당하지 않도록 보호하고, 미 전역에서 새로운 데이터 센터 건설을 간소화하고 확대해야 한다고 설명했다. 오픈AI는 각 주의 고유한 데이터를 활용해 AI 허브를 구축하고, 예를 들어 캔자스는 농업 분야에서 AI 활용에 초점을 맞추는 방식으로 AI 일자리와 전문 지식이 모든 지역에 혜택을 주도록 해야 한다고 덧붙였다.오픈AI는 이달 말에 워싱턴 D.C.에서 행사를 개최해 이런 제안 안에 대해 논의할 계획인 것으로 알려졌다.

 

내용은 위와 같습니다. 이 글에는 '( )' 나 인용부호, 그리고 영어 단어들이 섞여 있습니다. 테스트 해 보니 이런 것들이 섞여 있으면 코드에서 오류가 발생하더군요. 그래서, 이런 부분들을 걸러내는 작업을 우선 진행해야 했습니다. 


이 작업은 챗GPT를 통해서 진행합니다. 

주어진 문장을 다음과 같은 절차로 처리하고 결과를 알려주세요.
1.( )로 되어 있는 부분들은 삭제해 주세요.
2.인용부호(예: ''', '"' 등은 없애주세요.
3.최종으로 영어단어는 한글 발음으로 바꿔주세요. 예를 들어 '챗GPT'는 '챗지피티'와 같이 변경되어야 합니다. 


이 과정을 거쳐 나온 결과물은 다음과 같습니다. 

챗지피티 개발사 오픈에이아이는 중국과 인공지능 경쟁에서 앞서기 위해서는 외부의 투자와 지원을 위한 규정이 필요하다고 13일 밝혔다. 오픈에이아이는 이날 이코노믹 블루프린트라는 15페이지 분량의 제안서를 통해 칩 데이터 에너지는 에이아이 승리의 열쇠라며 미국이 경쟁 우위를 확보할 수 있도록 모든 주에서 똑같이 적용될 수 있는 규칙을 마련하기 위해 지금 행동해야 한다고 강조했다. 오픈에이아이의 이날 제안은 트럼프 2기 출범을 며칠 앞두고 나왔다. 샘 올트먼 오픈에이아이 최고경영자도 트럼프의 취임 기금에 약 백만 달러를 기부하며 다른 빅테크 경영진과 같이 트럼프와 관계 개선을 시도하고 있다. 오픈에이아이는 글로벌 펀드에는 에이아이 프로젝트에 투자될 약 천칠백오십억 달러 이백오십칠조원이 대기 중이라며 미국이 이를 끌어들이지 못한다면 중국이 지원하는 프로젝트로 흘러 들어가 중국의 글로벌 영향력을 강화할 것이라고 우려했다. 또 에이아이 모델에 대한 수출 통제안을 제시하며 기술 오용 가능성이 높은 적대국의 접근을 차단하는 한편 동맹국과 파트너에게 첨단 에이아이 모델을 제공해 중국이 아닌 미국 기술에 기반한 에이아이 생태계를 구축할 수 있도록 지원해야 한다고 강조했다. 아울러 공공적으로 이용할 수 있는 정보를 학습할 수 있는 에이아이의 능력을 보장하되 창작자가 무단 디지털 복제를 당하지 않도록 보호하고 미 전역에서 새로운 데이터 센터 건설을 간소화하고 확대해야 한다고 설명했다. 오픈에이아이는 각 주의 고유한 데이터를 활용해 에이아이 허브를 구축하고 예를 들어 캔자스는 농업 분야에서 에이아이 활용에 초점을 맞추는 방식으로 에이아이 일자리와 전문 지식이 모든 지역에 혜택을 주도록 해야 한다고 덧붙였다. 오픈에이아이는 이달 말에 워싱턴 디씨에서 행사를 개최해 이런 제안 안에 대해 논의할 계획인 것으로 알려졌다.

 

 

3) 테스트 코드

from melo.api import TTS

# Speed is adjustable
speed = 1.5
device = 'cpu' # or cuda:0

text = "챗지피티 개발사 오픈에이아이는 중국과 인공지능 경쟁에서 앞서기 위해서는 외부의 투자와 지원을 위한 규정이 필요하다고 13일 밝혔다. 오픈에이아이는 이날 이코노믹 블루프린트라는 15페이지 분량의 제안서를 통해 칩 데이터 에너지는 에이아이 승리의 열쇠라며 미국이 경쟁 우위를 확보할 수 있도록 모든 주에서 똑같이 적용될 수 있는 규칙을 마련하기 위해 지금 행동해야 한다고 강조했다. 오픈에이아이의 이날 제안은 트럼프 2기 출범을 며칠 앞두고 나왔다. 샘 올트먼 오픈에이아이 최고경영자도 트럼프의 취임 기금에 약 백만 달러를 기부하며 다른 빅테크 경영진과 같이 트럼프와 관계 개선을 시도하고 있다. 오픈에이아이는 글로벌 펀드에는 에이아이 프로젝트에 투자될 약 천칠백오십억 달러 이백오십칠조원이 대기 중이라며 미국이 이를 끌어들이지 못한다면 중국이 지원하는 프로젝트로 흘러 들어가 중국의 글로벌 영향력을 강화할 것이라고 우려했다. 또 에이아이 모델에 대한 수출 통제안을 제시하며 기술 오용 가능성이 높은 적대국의 접근을 차단하는 한편 동맹국과 파트너에게 첨단 에이아이 모델을 제공해 중국이 아닌 미국 기술에 기반한 에이아이 생태계를 구축할 수 있도록 지원해야 한다고 강조했다. 아울러 공공적으로 이용할 수 있는 정보를 학습할 수 있는 에이아이의 능력을 보장하되 창작자가 무단 디지털 복제를 당하지 않도록 보호하고 미 전역에서 새로운 데이터 센터 건설을 간소화하고 확대해야 한다고 설명했다. 오픈에이아이는 각 주의 고유한 데이터를 활용해 에이아이 허브를 구축하고 예를 들어 캔자스는 농업 분야에서 에이아이 활용에 초점을 맞추는 방식으로 에이아이 일자리와 전문 지식이 모든 지역에 혜택을 주도록 해야 한다고 덧붙였다. 오픈에이아이는 이달 말에 워싱턴 디씨에서 행사를 개최해 이런 제안 안에 대해 논의할 계획인 것으로 알려졌다."
model = TTS(language='KR', device=device)
speaker_ids = model.hps.data.spk2id

output_path = 'kr.wav'
model.tts_to_file(text, speaker_ids['KR'], output_path, speed=speed)

 

 

위의 코드를 이용하면 CPU를 이용해서 추론을 진행합니다. 제목과는 약간 다르게 i7 CPU인데 실시간일까 싶게 시간이 오래 걸렸습니다. 그렇지만 실제 변환된 길이를 보니 실시간은 맞더군요. 원본 : 86초, 변환시간 : 76.847초이니 말입니다. 참고로 3090 GPU 상에서는 17초 가량 걸렸습니다. 아쉬운 것은 한국어 스피커가 하나라서 다른 음색을 선택할 수 없다는 것입니다. 

 

코드를 이용하지 않고 공개된 데모를 이용해도 결과는 동일합니다. 아래 이미지는 HuggingFace Demo (T4 GPU 이용)에서 음성으로 변환을 시도한 예시입니다. 문장의 길이가 있다보니 몇초 정도 걸린 것 같은데 이미 로딩되어 있어서인지 T4가 3090보다 더 빠르게 느껴졌습니다. 

그림 : HuggingFace에 공개된 모델을 이용해 테스트를 진행

 

 

결과 확인

최종 결과는 다음과 같습니다. 정속은 너무 느린 것 같아서 1.5배로 했더니 그제서야 괜찮게 들렸습니다. 우리나라 사람들이 유튜브를 1.5~2.0배속으로 본다는 글을 어디선가 본 적이 있는데 저도 그 부류에 속하거든요. ^^;

 

 


정리하며

이번 글에서는 MeloTTS를 이용해 한글 기사 내용을 음성으로 변환해 봤습니다. 전처리를 거친 텍스트에 대한 변환 결과물은 생각보다 쓸만하다는 평가를 주고 싶습니다. 다만, 화자 템플릿이 다양하지 않다는 점과 감정, 톤 등의 세부적인 조정 등이 어렵다는 점이 아쉽습니다.

 

하지만, 이 정도로 경량인 모델한테 너무 많은 것을 기대하는거 아니냐, 용도가 다른거 아니냐 하는 반박을 들을 수도 있을 것 같습니다. 말 그대로 MeloTTS는 딱 어울리는 용도가 확실히 있는 것 같습니다. 엣지나 임베디드에서 동작하는 Local TTS! 이런 가능성은 어플리케이션을 만들어 활용하는 사람들이 나타나면 그 진가를 발휘할 수 있을 겁니다. 흠... 내가 그 사람이 되어 볼까? 시간만 많다면 뭐든 재미난 장난감을 만들 수 있을 것 같은데... 괜한 욕심만 앞섭니다. ^^; 


참고자료

  • 코드) MeloTTS Docker API Server (Github)
    Docker API Server 인데 STream을 지원한다고 되어 있음
  • 데모) HuggingFace Demo (링크)
  • 블로그) Optimizing MeloTTS for AIPC Deployment with OpenVINO: A Lightweight Text-to-Speech Solution (링크)