- StyleTTS2는 style diffusion과 대형 speech language model(SLM) 기반 적대적 학습을 활용해 human-level TTS 합성을 목표로 하는 텍스트 음성 변환 모델임
- 스타일을 diffusion model의 잠재 확률 변수로 모델링해 reference speech 없이 텍스트에 적합한 스타일을 생성하고, diffusion model의 다양한 음성 합성을 활용하는 효율적 latent diffusion을 사용함
- WavLM 같은 대형 사전학습 SLM을 discriminator로 사용하고, 미분 가능한 duration modeling을 적용해 end-to-end 학습과 음성 자연스러움 개선을 수행함
- LJSpeech 단일 화자 데이터셋에서는 native English speaker 평가 기준으로 human recordings를 surpass했고, VCTK 다중 화자 데이터셋에서는 human recordings와 match했으며, LibriTTS 학습 모델은 zero-shot speaker adaptation에서 기존 publicly available models보다 높은 성능을 보임
- 학습과 추론 워크플로는 단일 화자 LJSpeech, 다중 화자 VCTK·LibriTTS, 사전학습 다중 화자 모델 기반 신규 화자 fine-tuning을 다룸
- 첫 단계 학습은
accelerate launch train_first.py --config_path ./Configs/config.yml, 두 번째 단계 학습은python train_second.py --config_path ./Configs/config.yml사용 train_second.py의 DDP 버전은 동작하지 않아 현재 DP를 사용하며, fine-tuning 스크립트도 DDP가 동작하지 않는 조건을 가짐
- 첫 단계 학습은
- 주요 실행 조건은 Python >= 3.7,
requirements.txt설치, 데모 실행 시phonemizer와espeak-ng설치, LJSpeech 데이터의 24 kHz 업샘플링임 - 사전학습 모듈은 텍스트 aligner용 ASR, pitch extractor용 JDC, PL-BERT로 구성됨
- ASR aligner는 English(LibriTTS), Japanese(JVS), Chinese(AiShell) corpus로 사전학습됨
- JDC pitch extractor는 English(LibriTTS) corpus로만 사전학습됨
- PL-BERT는 English(Wikipedia) corpus로만 사전학습되어 다른 언어에는 해당 언어용 PL-BERT가 필요하며, multilingual PL-BERT는 14개 언어를 지원함
- 추론은 단일 화자용
Inference_LJSpeech.ipynb와 다중 화자용Inference_LibriTTS.ipynb를 통해 제공되며, LJSpeech와 LibriTTS 사전학습 모델은 Hugging Face에서 다운로드 가능함 - 코드 라이선스는 MIT License이며, 사전학습 모델 사용 시 합성 음성임을 청자에게 알리거나 음성 사용 권한이 있는 화자 음성만 공개적으로 합성하는 조건을 따름
StyleTTS2 - style diffusion과 대형 SLM 적대적 학습 기반 텍스트 음성 변환
(github.com/yl4579)댓글과 토론
Hacker News 의견들
-
StyleTTS2, Whisper, OpenHermes2-Mistral-7B 같은 오픈소스 조각으로 100% 로컬 음성 챗봇을 만들었고, ChatGPT보다 훨씬 빠르게 응답함
다른 음성 비서처럼 딱딱한 Siri식 상호작용이 아니라 실제 대화에 가깝게 주고받을 수 있어 재미있음
12GB Nvidia GPU가 있는 Windows 게이밍 PC, 테스트 기준 3060 12GB에서는 Python이나 CUDA를 만질 필요 없이 한 번에 설치해 대화할 수 있음: https://apps.microsoft.com/detail/9NC624PBFGB7
데모는 헤드폰이 필요하고 콘솔 앱으로 실행되는 등 거친 부분이 있지만, 오픈소스 조합만으로 곧 일반 게이밍 PC에서 가능해질 일을 미리 보여주는 느낌이며, 아직 반영하지 못한 개선 모델도 여럿 있음- 챗봇이 자연스럽게 대화하게 만드는 일이 얼마나 어려워 보이는지 궁금함
특히 상대가 너무 오래 말하면 내가 끼어들어 중단시키거나, 내가 말하는 중 AI가 짧게 맞장구치는 말 끊기와 끼어들기가 일반 대화처럼 가능했으면 함
속도가 실시간보다 빨라지는 수준이면 이론적으로 그런 기능을 시작할 수 있을 듯하고, 완전히 자연스러운 대화에는 AI가 얼굴과 몸짓을 보고 길게 말하는지 판단하는 맥락 인식도 필요해 보임 - 실행해 봤지만 CUDA 11에서만 동작하는 듯하고, 이미 CUDA 12 환경이라 테스트하려고 CUDA 환경을 망칠 생각은 없음
- 테스트 결과가 엇갈렸음: C:\가 아닌 드라이브에 설치하면 오류가 났고, C:로 옮기니 정상 동작함
EVGA 3080Ti 12GB에서도 지연 시간이 상당히 컸고, 한 번만 말했는데 같은 입력을 여러 번 처리하면서 조금씩 다른 인식 결과를 반복하는 듯했음
결국 자기 목소리를 듣고 자기 자신에게 응답하는 문제도 보임 - 12GB가 최소 사양인지 궁금함. 8GB에서는 메모리 부족 오류가 났음
- Whisper는 입력 스트리밍을 지원하지 않으니, 전체 LLM 응답이 끝나야 전사를 트리거할 수 있는 것 아닌가 싶음
- 챗봇이 자연스럽게 대화하게 만드는 일이 얼마나 어려워 보이는지 궁금함
-
지난달 StyleTTS2를 테스트했고, 로컬 설치하는 사람에게 도움이 될 만한 단계별 메모를 정리해 뒀음: https://llm-tracker.info/books/howto-guides/page/styletts-2
LJSpeech 모델로 VITS, XTTS와 간단히 속도와 품질도 비교했는데, StyleTTS2는 꽤 좋고 매우 빨랐음: https://fediverse.randomfoo.net/notice/AaOgprU715gcT5GrZ2- 4090에서 실시간 대비 15~95배 추론이라니 엄청남
인필이나 아웃페인팅에 해당하는 기능도 가능한지 궁금하고, 이 품질의 초고속 음성 합성은 특히 인디·실험적 게임 개발에서 다양한 활용이 기대됨 - 안내를 따라 하는 중인데, 이미 쓰는 사람이 아니라면 mamba는 더 이상 권장되지 않음
링크의#mambaforge앵커도 동작하지 않았음
- 4090에서 실시간 대비 15~95배 추론이라니 엄청남
-
문서가 다소 듬성듬성해서 맞추는 과정이 조금 번거로웠지만, 약 20분 뒤 WSL Ubuntu 22.04에서 잘 동작함
음질은 매우 좋고, 봐 온 다른 오픈소스 음성 합성 프로젝트보다 훨씬 낫고, 4090 GPU 기준으로 엄청 빠름
ElevenLabs 품질까지는 아직 모르겠지만, ElevenLabs의 매력은 고품질 음성 라이브러리가 크고 쉽게 고를 수 있다는 데 있음. 이 라이브러리에서는 기본 여성 음성 외에 다른 음성을 고르는 방법을 아직 못 찾았음
ElevenLabs의 진짜 핵심은 5분 샘플 하나만으로 거의 즉시 되는 음성 복제인데, 놀랍고 약간 섬뜩할 정도로 잘 됨. 이 기능이 완전 오픈소스로 가능해지길 기대함. API 서비스들은 많은 용도에 너무 비싸고, 비교적 저렴한 OpenAI도 수천 단어 생성에 약 10센트가 듦- Ubuntu 22.04에서 테스트한 설치 절차임. Google Drive 다운로드 링크는 24시간 다운로드가 너무 많다고 막힐 수 있지만 조금 기다리면 다시 될 것임
이후git clone https://github.com/yl4579/StyleTTS2.git cd StyleTTS2 python3 -m venv venv source venv/bin/activate python3 -m pip install --upgrade pip python3 -m pip install wheel pip install -r requirements.txt pip install phonemizer sudo apt-get install -y espeak-ng pip install gdown gdown https://drive.google.com/uc?id=1K3jt1JEbtohBLUA0X75KLw36TW7U1yxq 7z x Models.zip rm Models.zip gdown https://drive.google.com/uc?id=1jK_VV3TnGM9dkrIMsdQ_upov8FrIymr7 7z x Models.zip rm Models.zip pip install ipykernel pickleshare nltk SoundFile python -c "import nltk; nltk.download('punkt')" pip install --upgrade jupyter ipywidgets librosa python -m ipykernel install --user --name=venv --display-name="Python (venv)" jupyter notebook/Demo로 가서Inference_LJSpeech.ipynb나Inference_LibriTTS.ipynb를 열면 동작할 것임 - 스타일 복제에는 고품질로 미세조정한 음성 합성 뒤에 RVC 파이프라인으로 출력을 “강화”하는 방식을 본 적이 있음
음성 합성이 억양과 발음을 맡고, RVC가 목소리 질감을 맡는 구조라서 StyleTTS와 이 파이프라인을 조합하면 ElevenLabs에 가까워질 수 있음 - LibriTTS 데모는 본 적 없는 화자의 목소리를 5초 정도 클립만으로 복제함
- ElevenLabs와 StyleTTS 양쪽에서 긴 발화를 테스트해 봤는지 궁금함
짧은 오디오 합성은 음성 합성 세계에서 거의 해결된 문제지만, 텍스트 음성 변환으로 오디오북을 만들려 하면 문제가 무너지기 시작함
- Ubuntu 22.04에서 테스트한 설치 절차임. Google Drive 다운로드 링크는 24시간 다운로드가 너무 많다고 막힐 수 있지만 조금 기다리면 다시 될 것임
-
재미있게도 TTS2 예제는 실제 정답 음성보다 더 좋게 들림 https://styletts2.github.io/
예를 들어 “Then leaving the corpse within the house [...]” 예제에서는 정답 음성이house를 이상하게, 톤이 올라가는 느낌으로 발음하는데 TTS2 버전이 더 자연스럽게 들림
오디오북이 없는 일본 라이트노벨 같은 여러 ePub 파일에 쓰고 싶음. 지금은 Android의 Moon+ Reader TTS를 쓰고 있는데 상당히 로봇 같음- 첫 아내가 전문 성우인데, 누군가 “명백히 AI”라며 나쁜 리뷰를 남긴 걸 봤음
2023년에는 이길 방법이 없음 - 속도감은 더 좋지만, 개인적으로는 여전히 꽤 뚜렷한 금속성 톤이 있어서 실제 음성보다 못하다고 느낌
그래도 결과는 인상적이고, 다른 모든 음성 합성보다 우수함 - ePub에 어떻게 붙여 쓸 계획인지 궁금함. 비슷한 상황이라 전자책에 이런 걸 활용하고 싶음
- 첫 아내가 전문 성우인데, 누군가 “명백히 AI”라며 나쁜 리뷰를 남긴 걸 봤음
-
현재 HN 제목은 “StyleTTS2 – open-source Eleven Labs quality Text To Speech”인데, 원문 제목은 특정 제품명을 넣지 않고 거기서 링크한 arXiv 논문도 ElevenLabs를 언급하지 않음
이런 식의 제목 편집은 지양되는 것으로 알고 있었음- ElevenLabs는 음성 합성의 기준점이고, 그보다 나은 건 아직 없음
오픈소스 시스템이 그 품질에 접근한다면 매우 주목할 만하고, 그래서 대부분은 비교를 고맙게 여길 것 같음. 실제로 그 비교 때문에 관심이 갔음 - 편집이 들어간 제목이고 과장이기도 함. 그래도 StyleTTS2를 직접 써 봤을 때 오픈소스 음성 합성 중 단연 최고라서 HN 상단에 한동안 있을 자격은 충분함
- 가이드라인 위반이 맞음. 제목을 보고 새 연구 논문이 아니라 임의의 GitHub 프로젝트라고 생각했음
- ElevenLabs는 음성 합성의 기준점이고, 그보다 나은 건 아직 없음
-
성공적으로 써 본 사람들에게 궁금한데, 이 음성 복제는 XTTSv2와도 전혀 다르고 ElevenLabs에는 더더욱 못 미침
억양에는 별로 신경 쓰지 않는 것 같고, 음높이와 박자는 꽤 잘 맞추는 정도임
alpha,beta,embedding scale,diffusion steps값을 여러 방식으로 바꿔 봤지만, 빠르고 음질이 괜찮다는 점은 인정해도 음성 복제는 전혀 제대로 되지 않았음- ElevenLabs는 Tortoise-TTS 기반이고 이미 수백만 시간 데이터로 사전 학습된 반면, 이 모델은 많아야 500시간짜리 LibriTTS로만 학습됐음
XTTS도 아마 20개가 넘는 언어와 수백만 화자로 학습됐을 것임
수백만 목소리를 봤다면 그중에는 당신과 비슷한 목소리가 반드시 있기 마련이라, 결국 학습 데이터의 문제임. 다만 그런 대규모 데이터를 모아 학습시키는 일은 매우 어려움 - 논문 결론 부분을 보면, 음성 복제는 아직 그리 좋지 않다고 인정하고 있음
alpha,beta를 많이 실험하고 여러 오디오 클립을 올려 봤지만 같은 결과를 겪었음
- ElevenLabs는 Tortoise-TTS 기반이고 이미 수백만 시간 데이터로 사전 학습된 반면, 이 모델은 많아야 500시간짜리 LibriTTS로만 학습됐음
-
품질이 정말 말도 안 되게 좋고, 2000년대 초반에는 거의 상상하기 어려운 수준임
LLM이 캐릭터를 맡고 이런 음성 합성이 NPC에게 목소리를 주는 식으로 게임에서 흥미로운 가능성이 있음- 관심 있는 분야인 골프 시뮬레이션에서 큰 의미가 있음
지금 골프 시뮬레이터는 새가 지저귀고 잔디가 흔들리고 플레이는 현실적인데, 사람이 하나도 없어 약간 포스트아포칼립스 분위기가 남
실제 라운드의 농담 섞인 견제나 큰 경기의 관중 소리와 너무 달라서, LLM 기반 잡담을 추가하기 딱 좋아 보임
- 관심 있는 분야인 골프 시뮬레이션에서 큰 의미가 있음
-
Colab 노트북을 막 써 봤는데 품질이 매우 좋아 보이고, 음성 복제도 지원함
- README를 훑어봤지만, 실행을 위한 최소 하드웨어 요구사항이 무엇인지 궁금함. CPU나 하드디스크를 터뜨리는 건 아닌지 모르겠음
- GitHub를 대충 봤지만 못 찾았는데, 특정 목소리에 미세조정하는 데 얼마나 걸리는지 궁금함
-
써 보고 싶지만 torch 의존성을 설치하려고 매번
venv만드는 일이 이제 좀 지겨워짐
다른 사람들은 어떻게 처리하는지 궁금함. 여러venv가 공통 torch 환경을 공유하게 하는 쉬운 방법이 있는지, 수동으로는 할 수 있지만 이를 도와주는 도구가 있는지 알고 싶음- Python 환경 구성에는 nix를 쓰고, Python 버전과 poetry, 때로는 poetry로 설치하기 어려운 패키지를 잡은 뒤 나머지는 poetry로 처리함
작업 흐름은nix flake init -t github:dialohq/flake-templates#python,nix develop -c $SHELL로 들어가고, nix 개발 환경의 셸 훅에서poetry install과poetry activate를 실행하는 방식임 - 이런 건 보통 Docker를 쓰려고 하지만, 의존성 파악이 너무 어려워서 이런 프로젝트를 넘기게 되는 주된 이유이기도 함
- 같은 문제를 많이 느낌. Docker 개발 컨테이너를 쓰고 공통 의존성용 기반 이미지를 만든 뒤, 새 프로젝트마다 Dockerfile로 커스터마이즈하는 방식을 고민했지만 더 나은 대안이 있는지는 모르겠음
- 나도 비슷함. conda를 쓰고 있고, 아예 기본 conda 환경에 PyTorch를 설치하는 쪽을 보고 있음
- 정말 지겨워지기 시작했다면 Copilot 같은 LLM이 대신 처리할 수 있어야 하는 것 아닌가 싶음
- Python 환경 구성에는 nix를 쓰고, Python 버전과 poetry, 때로는 poetry로 설치하기 어려운 패키지를 잡은 뒤 나머지는 poetry로 처리함
-
텍스트 음성 변환 모델용으로 Civitai 같은 LoRA 마켓플레이스가 생길지 궁금함
https://github.com/microsoft/LoRA