FreyaTTS ArchitectureMimarisiarXiv:2607.09530
Project pageProje sayfası
arXiv:2607.09530

FreyaTTS

FreyaTTS is a 183.2M-parameter, non-autoregressive Diffusion Transformer. No weights are transferred from any external checkpoint: every trainable parameter is learned from scratch.

There is no phonemizer and no pronunciation rules inside. The model is trained end-to-end over a 92-symbol Turkish character vocabulary, and it is small enough to run in real time even on a phone.

We release the model weights, the training and inference code, and the Freya-TR-Eval benchmark as open source under Apache-2.0.

FreyaTTS, 183.2M parametrelik, non-autoregressive bir Diffusion Transformer mimarisidir. Hiçbir external checkpoint'ten weight aktarılmadan, eğitilebilir parametrelerin tamamı sıfırdan öğrenilmiştir.

Model, phonemizer veya telaffuz kuralı içermez. 92 sembollük Türkçe karakter kümesi üzerinden uçtan uca eğitilmiştir ve küçük boyutu sayesinde telefonda bile gerçek zamanlı çalışır.

Model weight'lerini, training ve inference koduyla birlikte Freya-TR-Eval benchmark'ını Apache-2.0 lisansıyla açık kaynak olarak yayınlıyoruz.

8.0% WER 3.0% CER 0.11 RTF, RTX 4090 Apache-2.0 Real-time on the phone
%8.0 WER %3.0 CER 0.11 RTF, RTX 4090 Apache-2.0 Telefonda gerçek zamanlı

This page walks the architecture step by step in 3D. Drag to orbit, scroll to zoom, Next to advance.

Bu sayfa mimariyi adım adım 3 boyutlu gezdirir. Sürükleyerek döndürün, kaydırarak yakınlaşın, İleri ile ilerleyin.

Read the paperMakaleyi okuyun
Step 1 / 10

Model overview

Modele genel bakış

This is the whole FreyaTTS network: a 183.2M-parameter conditional flow-matching Diffusion Transformer that turns raw Turkish characters into 48 kHz speech. (A thin inference wrapper around it handles chunking, a duration floor, and rare retries.)

FreyaTTS, ham Türkçe karakterlerden 48 kHz konuşma üreten 183.2M parametrelik koşullu bir flow-matching Diffusion Transformer'dır. Bu sahnede modelin tamamı görünüyor. Uzun metinlerin parçalanması, minimum süre sınırı ve nadir yeniden denemeler modelin dışında, ince bir inference katmanında ele alınır.

Data flows bottom to top. Characters enter at the base, a 16-layer DiT in the middle refines noise into AudioVAE2 latents, and the frozen decoder at the top emits the waveform. Drag to orbit, scroll to zoom, Next to walk the model.

Veri aşağıdan yukarıya akar: karakterler en alttan girer, ortadaki 16 katmanlı DiT gürültüyü AudioVAE2 latent'lerine dönüştürür, en üstteki dondurulmuş decoder dalga biçimini üretir. Sürükleyerek döndürebilir, kaydırarak yakınlaşabilir, İleri ile adım adım gezebilirsiniz.

Character input

Karakter girdisi

The input is plain text: "merhaba dünya". Each character is an index into a 92-symbol vocabulary: the 29-letter Turkish alphabet (ç, ğ, ı, ö, ş, ü included), digits, punctuation, whitespace.

Model girdi olarak metin alır, örneğin "merhaba dünya". Her karakter, 92 sembollük karakter kümesindeki bir indekse eşlenir. Bu küme 29 harfli Türk alfabesi (ç, ğ, ı, ö, ş, ü dahil), rakamlar, noktalama işaretleri ve boşluktan oluşur.

There is no BPE, no phonemizer, no grapheme-to-phoneme frontend. Digits are expanded to spoken form before this point, everything else enters raw.

Bu noktaya gelmeden yapılan tek işlem rakamların yazıya çevrilmesidir ("12" yerine "on iki"). BPE, phonemizer veya grapheme-to-phoneme kullanılmaz, metin modele ham haliyle ulaşır.

Embedding and ConvNeXt encoder

Embedding ve ConvNeXt encoder

Each index selects one row of the character embedding table. Then four ConvNeXt-1d blocks refine the embedded sequence into character features c, mixing local context along the text axis.

Her indeks, karakter embedding tablosundan bir satır seçer. Dört ConvNeXt-1d bloğu bu diziyi metin ekseni boyunca işleyerek karakter özellikleri c'ye dönüştürür. Böylece her karakterin temsili komşularından bağlam kazanır.

c is what the transformer conditions on later: it is the model's entire view of the text.

Modelin metne dair tüm bilgisi bu temsilde toplanır: sonraki aşamalarda transformer yalnızca c üzerinden koşullanır.

Duration predictor

Süre tahmincisi

How long should the speech be? The character features are mask-averaged into one mean vector, and a small MLP predicts log T̂, the log of the latent sequence length.

Konuşmanın uzunluğu üretimden önce belirlenir. Karakter özelliklerinin maske ortalaması alınarak tek bir vektör elde edilir ve küçük bir MLP, bu vektörden latent dizi uzunluğunun logaritması olan log T̂'yi tahmin eder.

That fixes T, the number of 40 ms latent frames (25 per second). Because denoising runs fully in parallel, the length has to be known up front, so one global prediction is made before anything else.

Bu tahmin T'yi, yani 40 ms'lik latent karelerin sayısını belirler (saniyede 25 kare). Gürültü giderme tamamen paralel çalıştığından uzunluğun baştan bilinmesi gerekir. Bu yüzden tahmin tek seferde, her şeyden önce yapılır.

Noise initialization (x0)

Başlangıç gürültüsü (x0)

Generation starts from nothing: x0 ~ N(0, I), a T×64 grid of Gaussian noise in AudioVAE2's continuous latent space. No discrete codes anywhere.

Üretim saf gürültüden başlar: x0 ~ N(0, I), AudioVAE2'nin sürekli latent uzayında T×64 boyutunda bir Gauss gürültüsü ızgarasıdır. Sürecin hiçbir yerinde ayrık kod kullanılmaz.

Training taught the model a straight-line path xt = (1-t)·x0 + t·x1 between this noise and real speech latents, with padding frames masked out of the loss.

Eğitim sırasında model, bu gürültü ile gerçek konuşma latent'leri arasında doğrusal bir yol öğrenir: xt = (1-t)·x0 + t·x1. Dolgu kareleri kayıp hesabına katılmaz.

DiT block structure

DiT bloğunun yapısı

Three residual sub-layers: self-attention over the frame axis with RoPE (10 heads, hidden size 640), cross-attention where frame queries read the character features c, and a SwiGLU feed-forward expanding 640 to 2048 and back.

Her blok, residual bağlantılı üç alt katmandan oluşur: kare ekseni üzerinde RoPE kullanan self-attention (10 head, gizli boyut 640), kare sorgularının karakter özellikleri c'yi okuduğu cross-attention ve 640 boyutu 2048'e açıp geri kapatan SwiGLU feed-forward.

The ODE time t enters through adaLN-zero: a 9-way modulation, a shift, a scale, and a gate for each of the three sub-layers, initialized so every block starts as the identity.

ODE zamanı t bloğa adaLN-zero üzerinden girer ve her alt katman için birer shift, scale ve gate olmak üzere 9 kanallı bir modülasyon üretir. Başlangıç değerleri sıfır olduğundan her blok eğitime özdeşlik dönüşümü olarak başlar.

The 16-layer DiT stack

16 katmanlı DiT stack

Sixteen of these blocks, stacked, hidden size 640 throughout. Together with the text encoder and duration head they add up to 183.2M trainable parameters (the AudioVAE2 stays frozen).

Bu bloklardan 16 tanesi üst üste dizilir, gizli boyut baştan sona 640'tır. Metin encoder'ı ve süre başlığıyla birlikte toplam 183.2M eğitilebilir parametre eder. AudioVAE2 bu sayının dışındadır ve dondurulmuş kalır.

Watch the residual stream climb: one pass through all 16 layers produces a single velocity estimate, the direction the latent frames should move in this ODE step.

16 katmandan tek bir geçiş, tek bir hız kestirimi üretir: latent karelerin bu ODE adımında hangi yönde hareket edeceğini söyler.

32-step Euler ODE

32 adımlı Euler ODE

Inference integrates the learned velocity field with a plain 32-step deterministic Euler ODE: x advances by v·Δt while t ticks 0 to 1 in 1/32 increments, the whole T×64 canvas passing through the stack once per step.

Inference sırasında öğrenilmiş hız alanı, 32 adımlı deterministik bir Euler ODE ile entegre edilir. t, 0'dan 1'e 1/32'lik artışlarla ilerler ve her adımda x, v·Δt kadar güncellenir. T×64'lük tuvalin tamamı her adımda stack'ten bir kez geçer.

No classifier-free guidance, no sway sampling. 32 deterministic steps are sufficient, with a thin wrapper re-drawing x0 only on the rare voicing-check failure.

Classifier-free guidance veya sway sampling kullanılmaz. 32 deterministik adım yeterlidir. Modelin dışındaki ince inference katmanı yalnızca nadir seslilik kontrolü hatasında x0'ı yeniden örnekler.

AudioVAE2 decoding

AudioVAE2 ile decode

The finished latents never become tokens. AudioVAE2's decoder, frozen throughout training, maps the T×64 grid straight to a 48 kHz waveform (its encoder side reads 16 kHz).

Üretilen latent'ler hiçbir aşamada token'a dönüşmez. Eğitim boyunca dondurulmuş kalan AudioVAE2 decoder'ı, T×64 ızgarayı doğrudan 48 kHz dalga biçimine çevirir. Encoder tarafı ise 16 kHz ses ile çalışır.

One honest caveat from the paper: the 48 kHz output fixes the sample rate, not the bandwidth. The shipped voice keeps a telephony-band fidelity ceiling inherited from its 16 kHz training audio.

Makalenin de belirttiği bir sınır: 48 kHz çıkış örnekleme hızını belirler, bant genişliğini değil. Yayınlanan ses, 16 kHz eğitim verisinden gelen telefon bandı kalite üst sınırını korur.

End-to-end summary

Uçtan uca özet

92-symbol characters, 4 ConvNeXt blocks, one duration MLP, 16 DiT layers at d = 640, 32 Euler steps, one frozen decoder.

92 sembollük karakter kümesi, 4 ConvNeXt bloğu, bir süre MLP'si, d = 640'ta 16 DiT katmanı, 32 Euler adımı ve dondurulmuş bir decoder.

183.2M params 1.5 GB VRAM 0.11 RTF, RTX 4090 median ~0.14 RTF, H100 benchmark mean Real-time on Apple M3 CPU
183.2M parametre 1.5 GB VRAM 0.11 RTF, RTX 4090 medyan ~0.14 RTF, H100 kıyaslama ortalaması Apple M3 CPU'da gerçek zamanlı

Back to the project page or the paper: arXiv:2607.09530.

Proje sayfasına dönün veya makaleyi açın: arXiv:2607.09530.

Drag to orbit. Scroll to zoom. Space for next step. Sürükleyerek döndürün. Kaydırarak yakınlaşın. Sonraki adım için Space'e basın.