for improved scalability and efficiency in speech synthesis.
- speech autoencoder for continuous latent representation (Mel 사용 X, direct waveform)
- latent : 24 dim, 86.1 frame rate → LDM 내부에서는 dim을 높이고 rate를 줄여서 144 dim, 14.3 frame rate
단순히 width를 늘리고 rate를 줄인다고 잘 되는게 아닐텐데(많은 VAE 논문들에서) 어떻게 잘 되었다는게 신기하다.
- flow-matching DiT : 모델이 매우 작다. 44M. 어떻게 되는거지? 44M인데 voice cloning도 된다.
- text는 캐릭터 단위로 처리.
- 모든 모듈에서 ConvNeXt를 여기저기 활용한다.
- 따라서 10초 생성이 RTX 4090에서 0.23초 걸린다고 말함
- utterance-level duration predictor - script를 받아서 전체가 몇초가 되어야할지 예측 - DiT의 입력으로 들어갈 noise latent sequence 크기를 정해야하기 때문에
pre-trained를 안쓰면서도 모델이 44M으로 작다는게 매우 신기함. Kokoro를 보고 82M 밖에 안되는 이유가 1) phoneme 등 inductive bias를 최대한 활용했고 2) voice cloning이 불가능한, 특정 목소리와 말투만 최적화해서 학습했기 때문(물론 Kokoro는 매우 작은 데이터셋으로 학습해서)이라고 생각했는데.. 그거보다 더 작다. 내 생각이 틀렸나
아키텍처를 가볍게 만들기위해 low-dimensional latent space, temporal compression of latents, ConvNeXt block을 썼다고 함
raw 캐릭터 단위의 text를 cross-attention으로 넣는다. phoneme 사용 X
또, context-sharing batch expansion을 사용해서 학습 속도를 높이고 text-speech align의 수렴을 빠르게 하고 안정화했다.
그리고 speaker embedding을 뽑거나 이런 추가적인 모듈 다 뺐다. 근데 duration predictor는 있음.

44kHz인 것도 신기한데 44M인게
확장성과 효율성을 향상시키기 위한 여러 기법을 도입합니다.
1) latent space를 매우 낮은 차원으로 설계하고, 시간 축(temporal axis)을 따라 잠재 표현을 압축한다.
2) context-sharing batch expansion 기법을 도입하여 loss 수렴을 가속화한다. 이는 마치 배치 크기를 증가시키는 것과 유사한 이점을 제공하지만, 계산 비용은 더 낮다. 우리는 이 batch expansion 기법이 텍스트-음성 정렬(text-speech alignment) 학습을 효과적으로 돕는다는 경험적 증거를 제시했다.
3) 모든 모듈에 걸쳐 ConvNeXt block을 광범위하게 활용함으로써, 경량화되고 효율적인 아키텍처를 구현했다.
이러한 주요 기여 외에도, 우리는 cross-attention 메커니즘을 사용하여 텍스트-음성 정렬을 수행함으로써, 기존 파이프라인을 단순화함.
이는 [DiTTo, Simple-TTS]와 유사한 방식이며, 입력으로 원시 문자(raw characters) 를 사용한다.
이러한 설계 선택은 외부 aligner나 grapheme-to-phoneme 모델의 필요성을 제거하며, 이는 새로운 데이터 도메인이나 언어로 확장할 때 병목이 되는 요소를 제거한다.
또한, 우리는 외부 사전학습 모델을 통합하지 않음으로써, 아키텍처의 의존성과 복잡성을 줄였다.
Cross-attention은 레이어가 하나 추가되니까 그만큼 영향을 더 많이 끼친다. channel-wise concat이 직접적으로 영향을 주는 방식인 것 같긴한데 그래도 영향력 자체는 떨어짐.
Contribution
- high-fidelity speech 생성을 빠른 속도로 inference
- by context-batch sharing 수렴-학습 속도 및 text-speech alignment 향상 및 효율화
- 44M 만으로 좋은 성능

기존의 방식들에 대한 생각
- 모델이 Mel spectrogram을 처리/합성하고 마지막에 vocoder로 speech 만들기 (F5-tts)
rule-base로 변환하기 때문에 구현이 단순화 되지만 rule-base기 때문에 latent를 학습하는 만큼 다양/표현력이 없다. DiT 측면에서도 latent space에서 diffusion 하는게 더 성능이 나음
- VQ-VAE를 통한 Discrete token 사용
Language modeling 방식을 활용할 수 있다.
단점 : quantization error가 있고 이걸위해 RVQ를 쓰면 프레임당 여러 토큰 예측이 되어서 아키텍처가 복잡해진다.
- 임의의 조절(목소리, 말투 등)을 위해 disentangled latent를 활용
단점 : pre-trained model, 복잡한 loss 등이 필요. 그리고 구현도 좀 더 복잡
→ 이건 사용하는게 단점이라기보다 만들 때 시간이 걸린다는게 좀 비효율적이라는 느낌
그리고 최근에는 phoneme 안쓰고, phoneme duration 예측안하고, 캐릭터 T5 같은 것도 안쓰려고 많이 노력하고 있다. 전부 동의!
- Speech auto encoder
- raw audio 말고 mel spectrogram을 input으로 사용 - 수렴 속도가 mel이 빨라서
- neural vocoder라고 볼 수 있다. 근데 dim, temporal 압축률이 높은
- 최종 압축률
- 24 dimension
- 86.1 frame rate
근데 DiT에서 6배 압축해서 실제로 학습할 때는 14.3 frame rate, LDM이 처리하는 dim은 6배 되어서 144
아키텍처
- encoder
- decoder

ConvNeXt가 활용되는 Vocos 구조를 변형
마지막에 Fourier head 빼고 linear layer로 low-dim으로 만든다.
동일하게 Vocos 구조 활용
ConvNeXt에서 causal & dilated 1d conv를 써서 streaming 출력이 가능하게 했다.
Fourier head 없애고 non-linear 하게 레이어 추가했다.
원래는 모델의 출력은 주파수가 되도록 의도하고, 이걸 Fourier head, IFFT를 통해 time-domain waveform으로 만드는데 여기서는 출력이 waveform이 되게 의도하고, 마지막 frame들을 그냥 flatten한게 출력이 된다. 생각못해본 구조긴하다.
Optimization
GAN Loss(multi-period, multi-resolution), recon loss(
L1
in mel spectrogram), feature matching loss(of disc feature of real and generated samples - for stable training)LDM
- Optimal transport flow-matching
- Unlike most recent state-of-the-art TTS models, the text-to-latent module does not rely on external pretrained models, G2P modules, or text-to-speech aligners.
Specifically, it uses character-level
text as input and employs cross-attention mechanisms to align text and speech within a streamlined architecture.
To improve training efficiency and convergence, we also introduce two novel techniques: temporal compression of latents and context-sharing batch expansion.
여기서 temporal 6배 압축해서 86.1을 14.3으로 만든다.
2.1) temporal compression
compression factor .
그냥 시간축을 채널축으로 쌓는다.
그럼 시간축으로 K배 줄어들고, channel dim이 K배 늘어난다. 그럼 24*6하면 144인건데
의문
- 이걸 autoencoder 단에서 안하고 여기서하는 특별한 이유가 있나?
- temporal 압축되면 효율/text-speech-align 측면에서 좋은건 맞는데 channel dim이 늘어나면 DiT입장에서는 어려워진다. image에서는 이게 꽤 문제인데 speech는 또 괜찮은건가?
2.2) Context-sharing batch expansion for efficient training
요약 : 원래는 b개의 data sample을 배치로 가져오고 랜덤하게 t를 b개 샘플링, x_t, vf 계산해서 학습.
이 방법은 각 데이터 별로 t를 1개만 샘플링하지 않고 n개 샘플링해서 동일한 데이터 포인트를 n번 동시에 학습하는 효과
- 더 효율적이고 안정적이라는데 이유를 찾아봐야겠음. 컨디션을 여러번 계산하지 않고 복제해서 쓸 수 있기 때문에 효율적인 부분
2.3) architecture
- script : 캐릭터 단위로 처리, ConvNeXt + self attention layer 태운다.
- 그리고 reference voice의 output latent와 2개의 cross attention을 통해서 결합되어서 레퍼런스의 정보도 들어가게 한다.
time
,reference voice
,script
가 컨디션인데 time은 input에 더하고, 뒤에 두개는 cross attention으로 들어간다.

Duration predictor
전체 입력 문장이 몇초 정도될지 예측. reference audio, script를 활용한다.
- Training
dataset
autoencoder : 11_167시간, 14000명 목소리
LDM & duration predictor : LJSpeech, VCTK, Hi-Fi TTS, LibriTTS. 945시간, 2567명
Optimization
AE : RTX 4090 4대, bs 128, 1.5M iter
LDM : RTX 4090 4대, bs 64, 700k iter, p_uncond 0.05, = 10^-8
몇초로 잘라서 학습한건 아닌가?
duration predictor는 bs 128, 4090 1대, 3000 iter 만에 했다.
Evaluation


inference 32 step 사용

BS 64에 batch expansion 4가 bs 256인 것보다 오히려 좋다고 나왔다. 얼마나 효율적이지?

메모리는 약간 내려가고 iteration time은 꽤 많이 줄어든다. 아키텍처와 학습 방식에 따라 차이가 나겠지만 다른 학습에서도 참고할만한 것 같다.
zero shot TTS 성능

일단 성능이 크기/속도 대비 꽤 좋다. 근데 ablation이 없어서.. 논문을 끝까지 읽어도 아래 의문이 해소되지 못함. 추가되려나?
- 왜 하필 6배 압축했지 - latent dimension 144까지는 괜찮다고 본건지
- F5-TTS처럼 script가 channel-wise concat 되는 것보다 cross attention이 여러 측면에서 더 나은지(근데 큰 차이가 없을 것 같긴함)
- 모델이 44M으로 작아질 수 있는 이유 - LDM에서 효율말고 개선된건 잘 모르겠는데 구체적으로 어떤 이유로 모델이 작아질 수 있었는지 - cross attention, context-share batch expansion, ConvNeXt 등 각각 얼마나 영향을 줬나
Share article
Subscribe to our newsletter