https://github.com/myshell-ai/OpenVoice
요약
OpenVoice는 단기간 오디오 클립만을 사용하여 참조 발화자의 목소리를 복제하고 다양한 언어로 음성을 생성하는 새로운 즉각적인 음성 복제 모델이다. OpenVoice는 크게 두가지 진전을 이루어냈다:
- 유연한 음성 스타일 제어: OpenVoice는 참조 발화자의 톤색을 복제하는 것 외에도 감정, 억양, 리듬, 중단 및 억양과 같은 음성 스타일에 대한 세밀한 제어가 가능하다.
- Zero-shot Cross Lingual 음성 복제: OpenVoice는 대규모 화자 트레이닝 세트에 포함되지 않은 언어에 대한 음성 복제를가 가능하다. 이전 방식들은 모든 언어에 대해 대규모 다국어 화자 데이터셋이 필요했으나, OpenVoice는 해당 언어에 대한 대규모 화자 트레이닝 데이터 없이도 새로운 언어로 목소리를 복제할 수 있다. 또한 효율적인 모델로, 컴퓨팅 비용이 절감되었다
1. 개요
IVC (Instant Voice Cloning) 이란, TTS 모델이 추가적인 학습 없이, 짧은 오디오 샘플만으로 발화자의 목소리를 복제할 수 있는 모델을 의미한다. 이는 Zero-shot TTS라고도 한다.
IVC는 사용자들이 생성된 음성을 유연하게 커스터마이징 할 수 있게 함으로써 미디어 콘텐츠 제작, 맞춤형 챗봇, 인간과 컴퓨터 또는 LLM 간의 다중 모달 상호작용과 같은 다양한 Real World 애플리케이션 에서 높은 가치를 가지고 있다.
기존의 IVC 연구들은 주로 auto-regressive(자동회귀) 방식에 초점을 맞춰왔다. VALLE나 XTTS와 같은 방식들은 auto-regressive 모델을 위해 음향토큰과 화자 임베딩을 추출하여 사용한다.
이러한 방식은 tone-color를 복제할 수는 있으나, 감정, 억양, 리듬과 같은 다른 중요한 스타일 매개변수를 유연하게 조작할 수 없는 한계점이 있다. 또한 auto-regressive model은 계산량이 많고 추론속도 또한 느리다.
yourTTS나 Voicebox와 같은 non-autoregressive 접근법에서는 훨씬 빠른 추론 속도를 보이지만 여전히 tone-color 이외의 스타일 매개변수를 제어하는데 한계가 있다.
기존 방법들의 또다른 공통점은 cross-lingual(교차언어) 음성 복제를 위해 MSML(Massive Speaker Multi Lingual) 데이터셋이 필요하다는 것이었다.
OpenVoice는 다음과 같은 핵심 문제를 해결하고자 한다:
- tone color를 복제하는것 뿐만 아니라, 감정(emotion), 강세(accent), 리듬, 정지(pauses),억양(intonation)을 어떻게 유연하게 조절할 수 있는가?
- zero-shot cross-lingual 음성 복제를 어떻게 간단하게 할 수 있는가?
- 품질저하없이 초고속 실시간 추론을 실현할 수 있는가?
기존의 연구에서는 참조 발화자와 모델이 생성하는 언어 모두 MSML 데이터셋에 대량으로 포함되어있어야 했으나, OpenVoice는 MSML 데이터셋에 포함되지 않은 언어에 대해서도 일반화 할 수 있도록 설계되었다.
OpenVoice는 위의 문제들을 해결하기 위해 음성의 구성 요소들을 가능한 한 분리(decouple)하여 설계되었다.
언어, tone color, 그리고 다른 중요한 음성 요소들은 각각 독립적으로 생성된다.
이를 통해 개별 음성 스타일과 언어 유형에 대한 유연한 조작이 가능해진다.
이러한 구조는 모델 크기와 계산 복잡성을 감소시켜, 가벼운 모델과 빠른 추론속도를 가능하게 했다.
2. 접근
2.1 직관
- 어려운 점 : 어떤 발화자의 tone color 복제, 유연한 제어, 적은 노력으로 새로운 언어를 동시에 수행하는것은 매우 어려운 일이다. 이를 위해서는 서로 다른 매개변수가 결합된 대규모 데이터셋이 필요하며, 단일 속성에서만 차이가 나는 데이터 쌍이 잘 라벨링되어야 한다. 또한, 이러한 데이터셋에 맞게 큰 용량의 모델이 필요하다.
- 쉬운 점 : 또한 일반 단일-발화자 TTS에서는 음성 복제가 필요하지 않은 한, 다른 스타일 파라미터에 대한 컨트롤을 추가하고 새로운 언어를 추가하는 것은 비교적 쉽다. 예를들어, 감정과 억양이 라벨링된 10K개의 짧은 오디오 샘플로 구성된 단일 발화자 데이터셋은 감정과 억양을 제어할 수 있는 단일 발화자 TTS 모델을 훈련하기에 충분하다. 새로운 언어나 억양을 추가하는 것도 데이터셋에 다른 발화자를 포함함으로써 간단히 이루어질 수 있다.
OpenVoice의 기본 아이디어는 IVC 작업을 별개의 하위 작업으로 분리하는 것이다. 이 분리된 각 하위 작업은 결합된 작업에 비해 훨씬 쉽게 달성될 수 있다. tone-color의 복제는 모든 나머지 스타일 매개변수와 언어 제어에서 완전히 분리된다.
기본 발화자 TTS 모델을 사용하여 스타일 매개변수와 언어를 제어하고, tone-color 변환기를 사용하여 참조 tone-color를 생성된 음성에 통합하는 방식을 제안한다.
2.2 모델 구조
style과 언어를 제어하기 위해 base model을 사용하고, 발화자의 tone color를 구현하기 위해 converter를 사용한다
Base speaker TTS model은 단일-발화자 혹은 다중-발화자 모델이다. 이 모델은 스타일 매개변수들과 강세(accent), 언어를 조절 할 수 있게 한다.
이 모델을 통해 생성된 음성은 tone color converter를 지나게 되며, base speaker의 tone color를 발화자의 음성(reference speaker)로 변형된다.
Base Speaker TTS Model : base speaker model의 선택은 매우 자유롭다. VITS, Instruct TTS, Microsoft TTS와 같은 모델들을 사용할 수 있다. 논문에서는 VITS를 사용했다.
기본 모델(base model)의 출력은 X(LI, SI, CI)로 표시되며, 여기서 세 매개변수는 각각 언어(Language), 스타일(Style) 및 tone color를 나타낸다. 마찬가지로, 참조 스피커(reference speaker)의 음성 오디오는 X(LO, SO, CO)로 표시된다.
Tone Color Converter : tone color 변환기는 중간에 가역적인 정규화 흐름이 있는 Encoder-Decoder 모델이다.
(위 그림 참조, Normalizing flow paper)
인코더는 X(LI, SI, CI)의 고속 푸리에 변환된 스펙트럼을 입력으로 하는 1D 컨볼루션 신경망이다. 모든 컨볼루션은 단일 스트라이드이고, 인코더에 의해 출력되는 특징 맵(feature map)은 Y(LI, SI, CI)로 표시된다.
톤 컬러 추출기(Tone Color Extractor)는 입력 음성의 멜-스펙트로그램에서 작동하는 간단한 2D 컨볼루션 신경망으로, 톤 컬러 정보를 인코딩하는 단일 특징 벡터를 출력한다. 우리는 X(LI, SI, CI)에 이를 적용하여 벡터 v(CI)를 얻고, X(LO, SO, CO)에 적용하여 벡터 v(CO)를 얻는다.
정규화 흐름 층은 Y(LI, SI, CI)와 v(CI)를 입력으로 받아 톤 컬러 정보를 제거하면서 나머지 스타일 속성을 보존하는 특징 표현 Z(LI, SI)를 출력한다. 그런 다음 역방향으로 정규화 흐름 층을 적용하는데, 이는 Z(LI, SI)와 v(CO)를 입력으로 받아 Y(LI, SI, CO)를 출력한다. 이는 참조 스피커의 톤 컬러 CO가 특징 맵에 구현되는 중요한 단계이다.
그런 다음 Y(LI, SI, CO)는 HiFi-Gan에 의해 원시 파형 X(LI, SI, CO)으로 디코딩되는데, 이는 전치된 1D 컨볼루션의 스택을 포함한다.
OpenVoice 구현의 전체 모델은 자동 회귀 구성 요소 없는 순전파(feed-foward) 모델이다. tone color 변환기는 개념적으로 음성 변환과 유사하지만, 기능성, 모델 구조에 대한 유도 편향 및 훈련 목표에 대한 강조점이 다르다. tone color 변환기의 흐름 층은 구조적으로 흐름 기반 TTS 방법과 유사하지만 기능성과 훈련 목표가 다르다.
다른 방법과 단점들 : Z(LI, SI)를 추출하는 대안적인 방법들이 있지만, 위에서 제안된 접근 방식이 최고의 오디오 품질을 달성한다는 것을 실험적으로 발견했다.
HuBERT를 사용하여 이산 또는 연속 음향 단위를 추출하여 tone color 정보를 제거할 수 있지만, 이러한 방법이 입력 음성에서 감정과 억양도 제거한다는 것을 발견했다.
입력이 본 적 없는 언어일 때, 이 유형의 방법은 또한 음소의 자연스러운 발음을 보존하는 데 문제가 있다.
또한 신중하게 정보 병목을 구성하여 오직 음성 내용만을 보존하는 또 다른 접근 방식을 연구했지만, 이 방법은 톤 컬러를 완전히 제거하는 데 실패한다는 것을 관찰했다.
2.3 학습
기본 스피커 TTS 모델과 tone color 변환기를 각각 별도로 훈련시켰으며, 이를 통해 다양한 악센트, 언어, 감정으로 텍스트를 읽을 수 있는 모델을 개발했다.
tone color 변환기의 훈련 목적은 두가지가 있다.
첫째, Encoder-Decoder가 자연스러운 소리를 생성하도록 한다.
둘째, flow layer가 오디오 특성에서 최대한 많은 tone color 정보를 제거하도록 한다.
각각의 오디오 샘플에 대해, 텍스트가 IPA 음소 시퀀스로 변환되고, 각 음소는 학습 가능한 임베딩 벡터로 표현된다. 벡터 임베딩 시퀀스는 변환기 인코더에 전달되어 텍스트 내용의 특징을 생성한다.
이 특징을 L∈Rc x l로 표시하자. 여기서 c는 특징 채널의 수이고 I는 입력 텍스트의 음소 수이다.
오디오 파형은 Encoder와 flow layer에 의해 처리되어 시간 차원을 따라 특징의 길이 t인 특징표현 Z ∈ Rc x t 를 생성한다.
그런 다음 동적 시간 왜곡(dynamic time warping)을 사용하여 시간차원을 따라 L과 Z를 정렬하여, L¯ ∈ Rc x t를 생성하고, L¯와 Z 사이의 KL-divergence를 최소화한다.
L¯는 어떠한 tone color 정보도 포함하지 않기 때문에, flow layer가 출력 Z에서 tone color 정보를 제거하도록 해준다.
이를 통해 flow layer가 제거해 할 정보를 식별할 수 있게 된다. 또한, flow layer가 tone color 이외의 정보를 제거하지 않도록 하기 위해 스타일이나 언어 정보를 제공하지 않는다.
flow layer는 가역적이기 때문에, 새로운 tone color 정보에 따라 조건을 부여하고 역과정을 실행함으로써 새로운 tone color를 특징표현에 다시 추가할 수 있으며, 이는 새로운 tone color가 구현된 파형으로 Decoding된다.
3. 실험
voice cloning의 평가는 여러가지 이유로 객관적이기 때문에 어렵다.
첫째, 다른 연구들은 서로 다른 training-test 데이터셋을 가지고 있고, 이들을 단순히 수치적인 비교만 하는것은 공평하지 않을 수 있다.
평균 의견 점수(Mean Opinion Score)가 크라우드 소싱과 같은 방법에서 평가되더라도, 테스트셋의 다양성과 난이도는 평가에 상당한 영향을 미친다.
예를 들어, 테스트셋의 많은 샘플들이 사람의 음성분포의 평균에 집중하는 목소리라면, 대부분의 방법들이 좋은 voice cloning 결과를 달성하는것이 상대적으로 쉽다.
둘째, 다른 연구들은 다른 훈련 데이터셋을 가지고 있으며, 그 규모와 다양성은 결과에 많은 영향을 준다.
셋째, 다른 연구들은 그들만의 핵심 기능에 중점을 두고 진행된다.
OpenVoice는 주로 tone color복제, 스타일 매개변수에 대한 유연한 제어, 그리고 새로운 언어에 대한 대규모 스피커 데이터 없이도 교차 언어 음성 복제를 쉽게 하는 것을 목표로 한다.
이것들은 이전의 음성 복제나 Zero-Shot TTS에 대한 연구 목표와 다르다. 따라서, 기존 방법들과 숫자 점수를 비교하는 대신, 우리는 주로 OpenVoice 자체의 질적 성능을 분석하고, 관련 연구자들이 자유롭게 평가할 수 있도록 오디오 샘플을 공개적으로 제공하는 데 집중한다.
정확한 tone color 복제, 유연한 음성 스타일 제어, 용이한 다국어(Cross-Lingual) 음성복제, 낮은 비용과 빠른 추론, IPA의 중요성 발견 을 이루어냈다.
4. 고찰
OpenVoice는 주목할 만한 즉각 음성 복제 능력을 보여주며, 음성 스타일과 언어 측면에서 이전 접근 방식보다 더 유연하다.
이 접근법의 직관은 base speaker TTS 모델을 훈련시켜 음성 스타일과 언어를 제어하는 것이 상대적으로 쉽다는 것인데, 모델이 reference 스피커의 톤 컬러를 복제할 수 있는 능력을 가질 필요가 없다면 더욱 그렇다.
따라서, 우리는 톤 컬러 복제를 나머지 음성 스타일과 언어에서 분리할 것을 제안했으며, 이것이 OpenVoice의 기본 설계 원리라고 믿는다.
미래의 연구를 촉진하기 위해, 우리는 소스 코드와 모델 가중치를 공개적으로 이용할 수 있게 했다.