eigenhand commited on
Commit
db0bf1b
Β·
verified Β·
1 Parent(s): f22fd98

Remove the 4-bit files (measurably worse sound in the evaluation)

Browse files
Files changed (4) hide show
  1. README.md +12 -30
  2. SHA256SUMS +0 -2
  3. articulino-iq4_nl.gguf +0 -3
  4. articulino-q4_0.gguf +0 -3
README.md CHANGED
@@ -23,7 +23,7 @@ tags:
23
 
24
  **GGUF files of [Articulino-DE-EN-Realtime-Stream-TTS](https://huggingface.co/eigenhand/Articulino-DE-EN-Realtime-Stream-TTS)
25
  for [articulino.cpp](https://github.com/eigenhand/articulino.cpp): German and English text to speech with zero-shot voice cloning, in C++, without
26
- Python: 33 times faster than real time on 12 CPU threads with the recommended 8-bit file, 52 times with 4 bit.**
27
 
28
  Each file holds the complete model in one piece: text encoder, duration predictor, voice encoder, the 4-step DMD2
29
  student DiT, the latent encoder for the voice reference, and the decoder (Vocos-style, inverse STFT), with all settings
@@ -31,29 +31,25 @@ as GGUF metadata. The weights are the same as in the main repository; only their
31
 
32
  | File | Size | Weights | Speed, 12 CPU threadsΒΉ | Notes |
33
  |---|---|---|---|---|
34
- | `articulino-iq4_nl.gguf` | 104 MB | 4 bit (IQ4_NL) | 52Γ— | fastest on CPUs; slightly lower quality (UTMOS βˆ’0.05, see Quality) |
35
- | `articulino-q4_0.gguf` | 104 MB | 4 bit (Q4_0) | 52Γ— | not recommended: lower quality and speaker similarity than IQ4_NL at the same speed |
36
  | `articulino-q8_0.gguf` | 137 MB | 8 bit (Q8_0) | 33Γ— | **recommended**: equivalent to F32 in every measure, a third of the size |
37
  | `articulino-f16.gguf` | 220 MB | 16 bit float | 26Γ— | half the download of F32, computed in F32 after loading |
38
  | `articulino-f32.gguf` | 438 MB | 32 bit float | 26Γ— | reference; matches PyTorch to float rounding |
39
 
40
  ΒΉ Times real time for the whole pipeline per sentence, on 12 efficiency cores of an Intel Core i9-14900K (in a VM).
41
- The PyTorch release reaches 24.9Γ— on the same cores. With 2 threads: IQ4_NL 11.2Γ—, Q8_0 6.9Γ—, F32 6.0Γ—
42
- (PyTorch 8.3Γ—).
 
43
 
44
  | File | 12 threads | 8 threads | 4 threads | 2 threads | First sentence (12 threads) |
45
  |---|---|---|---|---|---|
46
  | F32 | 25.9Γ— | 20.7Γ— | 11.5Γ— | 6.0Γ— | 0.18 s |
47
  | F16 | 25.7Γ— | 20.3Γ— | 11.5Γ— | 6.0Γ— | 0.18 s |
48
  | Q8_0 | 32.7Γ— | 24.8Γ— | 13.3Γ— | 6.9Γ— | 0.14 s |
49
- | Q4_0 | 52.0Γ— | 38.9Γ— | 21.5Γ— | 11.4Γ— | 0.08 s |
50
- | IQ4_NL | 52.4Γ— | 39.3Γ— | 21.6Γ— | 11.2Γ— | 0.09 s |
51
  | PyTorch F32, for comparison | 24.9Γ— | 20.6Γ— | 12.9Γ— | 8.3Γ— | 0.20 s |
52
  | Any file, Vulkan on an AMD Radeon AI PRO R9700 | 135–138Γ— | | | | 0.03 s |
53
 
54
- In the quantized files, norms, biases, embeddings and the voice encoder (which runs once per voice) keep 16 or 32 bits;
55
- in the 4-bit files the latent encoder, the DiT output layer and the decoder head keep 8 bits. Everything that runs per
56
- sentence uses the file's type.
57
 
58
  ## Quickstart
59
 
@@ -93,10 +89,7 @@ CER, ECAPA cosine to the voice prompt for similarity, UTMOS for quality; 95 % bo
93
  | F32 | 4.72 % [3.90, 5.59] | 1.84 % [1.46, 2.24] | 0.659 [0.649, 0.669] | 3.30 [3.27, 3.34] |
94
  | F16 | 4.70 % [3.87, 5.56] | 1.83 % [1.45, 2.24] | 0.659 [0.649, 0.669] | 3.30 [3.27, 3.34] |
95
  | **Q8_0** | **4.67 %** [3.85, 5.50] | **1.79 %** [1.42, 2.19] | **0.659** [0.649, 0.669] | **3.30** [3.26, 3.33] |
96
- | Q4_0 | 4.93 % [4.08, 5.81] | 1.88 % [1.50, 2.29] | 0.653 [0.643, 0.664] | 3.24 [3.20, 3.27] |
97
- | IQ4_NL | 5.10 % [4.18, 6.03] | 1.98 % [1.55, 2.46] | 0.657 [0.646, 0.667] | 3.25 [3.22, 3.29] |
98
  | F32, Vulkan (R9700) | 4.75 % [3.92, 5.60] | 1.81 % [1.44, 2.21] | 0.659 [0.649, 0.670] | 3.30 [3.27, 3.34] |
99
- | IQ4_NL, Vulkan (R9700) | 4.97 % [4.09, 5.89] | 1.95 % [1.53, 2.41] | 0.657 [0.646, 0.667] | 3.25 [3.22, 3.29] |
100
 
101
  | English (107) | WER | CER | Similarity | UTMOS |
102
  |---|---|---|---|---|
@@ -104,16 +97,12 @@ CER, ECAPA cosine to the voice prompt for similarity, UTMOS for quality; 95 % bo
104
  | F32 | 2.13 % [1.42, 2.94] | 0.85 % [0.55, 1.19] | 0.590 [0.577, 0.603] | 4.28 [4.26, 4.30] |
105
  | F16 | 2.09 % [1.38, 2.89] | 0.85 % [0.54, 1.20] | 0.590 [0.577, 0.603] | 4.28 [4.26, 4.30] |
106
  | **Q8_0** | **2.25 %** [1.52, 3.08] | **0.91 %** [0.58, 1.27] | **0.591** [0.578, 0.604] | **4.27** [4.25, 4.29] |
107
- | Q4_0 | 2.43 % [1.70, 3.26] | 1.01 % [0.66, 1.40] | 0.581 [0.567, 0.595] | 4.25 [4.23, 4.27] |
108
- | IQ4_NL | 2.24 % [1.50, 3.10] | 0.97 % [0.59, 1.42] | 0.594 [0.581, 0.607] | 4.26 [4.24, 4.28] |
109
 
110
  | Pronunciation suite (129) | CER, Whisper, 3 seeds | Correct in all seeds | Parakeet (seed 0): correct |
111
  |---|---|---|---|
112
  | PyTorch reference | 1.41 % | 116 | 122 |
113
  | F32 / F16 | 1.41 % / 1.41 % | 116 / 116 | 122 / 123 |
114
  | Q8_0 | 1.27 % | 118 | 121 |
115
- | Q4_0 | 1.54 % | 116 | 118 |
116
- | IQ4_NL | 1.39 % | 116 | 122 |
117
 
118
  **Equivalence to the reference.** A file counts as equivalent when the 90 % interval of every paired difference lies
119
  inside the margins fixed before the measurement (Β±1.0 point WER, Β±0.5 point CER, Β±0.01 similarity, Β±0.05 UTMOS);
@@ -124,16 +113,12 @@ inside the margins fixed before the measurement (Β±1.0 point WER, Β±0.5 point CE
124
  | F32 | 0.00 [0.00, 0.00] | 0.000 | 0.000 | equivalent | equivalent | equivalent |
125
  | F16 | βˆ’0.02 [βˆ’0.08, 0.02] | 0.000 | βˆ’0.002 | equivalent | equivalent | equivalent |
126
  | **Q8_0** | βˆ’0.06 [βˆ’0.26, 0.15] | 0.000 | βˆ’0.004 | **equivalent** | **equivalent** | **equivalent** |
127
- | Q4_0 | +0.20 [βˆ’0.12, 0.53] | βˆ’0.006 [βˆ’0.008, βˆ’0.003] | βˆ’0.066 [βˆ’0.079, βˆ’0.052] | **different**: similarity, UTMOS | not equivalent: similarity βˆ’0.009 | **different**: similarity βˆ’0.014, UTMOS βˆ’0.05 |
128
- | IQ4_NL | +0.37 [βˆ’0.02, 0.79] | βˆ’0.002 | βˆ’0.050 [βˆ’0.064, βˆ’0.036] | **different**: UTMOS | equivalent | not equivalent: similarity +0.006 (higher) |
129
  | F32, Vulkan | +0.02 [βˆ’0.08, 0.13] | 0.000 | βˆ’0.000 | equivalent | equivalent | equivalent |
130
- | IQ4_NL, Vulkan | +0.24 [βˆ’0.10, 0.62] | βˆ’0.002 | βˆ’0.052 [βˆ’0.066, βˆ’0.039] | **different**: UTMOS | not equivalent: similarity +0.007 (higher) | not equivalent: similarity +0.006 (higher) |
131
 
132
- **What this means.** F16, Q8_0 and the Vulkan path speak like F32. The 4-bit files are understood as well as F32
133
- (no significant change in WER or CER, and the pronunciation suite stays as correct), but they sound measurably
134
- worse: German UTMOS drops by 0.05 (IQ4_NL) to 0.07 (Q4_0), consistently and significantly, and Q4_0 also loses speaker
135
- similarity. The change is small next to the difference between voices, but it is real; we therefore recommend
136
- **Q8_0**, and IQ4_NL only where the extra speed matters. Q4_0 is dominated by IQ4_NL.
137
 
138
  **Fidelity.** Median log-mel distance to the reference output; another seed of the reference itself differs by
139
  5.9 dB (German), 5.5 dB (English) and 5.5 dB (suite).
@@ -143,13 +128,10 @@ similarity. The change is small next to the difference between voices, but it is
143
  | F32 | 0.00 / 0.00 / 0.00 dB | 100 % |
144
  | F16 | 0.07 / 0.10 / 0.06 dB | 100 % |
145
  | Q8_0 | 1.34 / 1.42 / 1.24 dB | 81 % |
146
- | Q4_0 | 4.10 / 3.93 / 3.94 dB | 24 % |
147
- | IQ4_NL | 4.03 / 4.12 / 3.78 dB | 28 % |
148
  | F32, Vulkan (R9700) | 0.40 / 0.48 / 0.35 dB | 94 % |
149
- | IQ4_NL, Vulkan (R9700) | 4.04 / 4.04 / 3.80 dB | 23 % |
150
 
151
- **Building blocks.** Same inputs, signal-to-noise ratio of one DiT step against float32: F16 69 dB, Q8_0 36 dB,
152
- Q4_0 18 dB, IQ4_NL 19 dB; the decoder's spectrum deviates by 0.002 / 0.13 / 0.60 / 0.53 dB on average. The full tables
153
  are in the engine's README.
154
 
155
  The F32 file reproduces the PyTorch reference: every building block within 1e-5 relative error, and the whole chain
 
23
 
24
  **GGUF files of [Articulino-DE-EN-Realtime-Stream-TTS](https://huggingface.co/eigenhand/Articulino-DE-EN-Realtime-Stream-TTS)
25
  for [articulino.cpp](https://github.com/eigenhand/articulino.cpp): German and English text to speech with zero-shot voice cloning, in C++, without
26
+ Python: 33 times faster than real time on 12 CPU threads with the recommended 8-bit file, 135 times with Vulkan.**
27
 
28
  Each file holds the complete model in one piece: text encoder, duration predictor, voice encoder, the 4-step DMD2
29
  student DiT, the latent encoder for the voice reference, and the decoder (Vocos-style, inverse STFT), with all settings
 
31
 
32
  | File | Size | Weights | Speed, 12 CPU threadsΒΉ | Notes |
33
  |---|---|---|---|---|
 
 
34
  | `articulino-q8_0.gguf` | 137 MB | 8 bit (Q8_0) | 33Γ— | **recommended**: equivalent to F32 in every measure, a third of the size |
35
  | `articulino-f16.gguf` | 220 MB | 16 bit float | 26Γ— | half the download of F32, computed in F32 after loading |
36
  | `articulino-f32.gguf` | 438 MB | 32 bit float | 26Γ— | reference; matches PyTorch to float rounding |
37
 
38
  ΒΉ Times real time for the whole pipeline per sentence, on 12 efficiency cores of an Intel Core i9-14900K (in a VM).
39
+ The PyTorch release reaches 24.9Γ— on the same cores. With 2 threads: Q8_0 6.9Γ—, F32 6.0Γ—
40
+ (PyTorch 8.3Γ—). There are no 4-bit files: they were understood as well as F32 but sounded measurably worse
41
+ (UTMOS 0.05–0.07 lower), so 8 bits is the smallest precision released.
42
 
43
  | File | 12 threads | 8 threads | 4 threads | 2 threads | First sentence (12 threads) |
44
  |---|---|---|---|---|---|
45
  | F32 | 25.9Γ— | 20.7Γ— | 11.5Γ— | 6.0Γ— | 0.18 s |
46
  | F16 | 25.7Γ— | 20.3Γ— | 11.5Γ— | 6.0Γ— | 0.18 s |
47
  | Q8_0 | 32.7Γ— | 24.8Γ— | 13.3Γ— | 6.9Γ— | 0.14 s |
 
 
48
  | PyTorch F32, for comparison | 24.9Γ— | 20.6Γ— | 12.9Γ— | 8.3Γ— | 0.20 s |
49
  | Any file, Vulkan on an AMD Radeon AI PRO R9700 | 135–138Γ— | | | | 0.03 s |
50
 
51
+ In the Q8_0 file, norms, biases, embeddings and the voice encoder (which runs once per voice) keep 16 or 32 bits.
52
+ Everything that runs per sentence uses the file's type.
 
53
 
54
  ## Quickstart
55
 
 
89
  | F32 | 4.72 % [3.90, 5.59] | 1.84 % [1.46, 2.24] | 0.659 [0.649, 0.669] | 3.30 [3.27, 3.34] |
90
  | F16 | 4.70 % [3.87, 5.56] | 1.83 % [1.45, 2.24] | 0.659 [0.649, 0.669] | 3.30 [3.27, 3.34] |
91
  | **Q8_0** | **4.67 %** [3.85, 5.50] | **1.79 %** [1.42, 2.19] | **0.659** [0.649, 0.669] | **3.30** [3.26, 3.33] |
 
 
92
  | F32, Vulkan (R9700) | 4.75 % [3.92, 5.60] | 1.81 % [1.44, 2.21] | 0.659 [0.649, 0.670] | 3.30 [3.27, 3.34] |
 
93
 
94
  | English (107) | WER | CER | Similarity | UTMOS |
95
  |---|---|---|---|---|
 
97
  | F32 | 2.13 % [1.42, 2.94] | 0.85 % [0.55, 1.19] | 0.590 [0.577, 0.603] | 4.28 [4.26, 4.30] |
98
  | F16 | 2.09 % [1.38, 2.89] | 0.85 % [0.54, 1.20] | 0.590 [0.577, 0.603] | 4.28 [4.26, 4.30] |
99
  | **Q8_0** | **2.25 %** [1.52, 3.08] | **0.91 %** [0.58, 1.27] | **0.591** [0.578, 0.604] | **4.27** [4.25, 4.29] |
 
 
100
 
101
  | Pronunciation suite (129) | CER, Whisper, 3 seeds | Correct in all seeds | Parakeet (seed 0): correct |
102
  |---|---|---|---|
103
  | PyTorch reference | 1.41 % | 116 | 122 |
104
  | F32 / F16 | 1.41 % / 1.41 % | 116 / 116 | 122 / 123 |
105
  | Q8_0 | 1.27 % | 118 | 121 |
 
 
106
 
107
  **Equivalence to the reference.** A file counts as equivalent when the 90 % interval of every paired difference lies
108
  inside the margins fixed before the measurement (Β±1.0 point WER, Β±0.5 point CER, Β±0.01 similarity, Β±0.05 UTMOS);
 
113
  | F32 | 0.00 [0.00, 0.00] | 0.000 | 0.000 | equivalent | equivalent | equivalent |
114
  | F16 | βˆ’0.02 [βˆ’0.08, 0.02] | 0.000 | βˆ’0.002 | equivalent | equivalent | equivalent |
115
  | **Q8_0** | βˆ’0.06 [βˆ’0.26, 0.15] | 0.000 | βˆ’0.004 | **equivalent** | **equivalent** | **equivalent** |
 
 
116
  | F32, Vulkan | +0.02 [βˆ’0.08, 0.13] | 0.000 | βˆ’0.000 | equivalent | equivalent | equivalent |
 
117
 
118
+ **What this means.** F16, Q8_0 and the Vulkan path speak like F32 on every set and every measure, so Q8_0 is the
119
+ recommended file. 4-bit versions (Q4_0, IQ4_NL) went through the same evaluation and were dropped: they were
120
+ understood as well as F32, but German UTMOS was 0.05–0.07 lower (significant after Holm correction), and Q4_0 also lost
121
+ some speaker similarity.
 
122
 
123
  **Fidelity.** Median log-mel distance to the reference output; another seed of the reference itself differs by
124
  5.9 dB (German), 5.5 dB (English) and 5.5 dB (suite).
 
128
  | F32 | 0.00 / 0.00 / 0.00 dB | 100 % |
129
  | F16 | 0.07 / 0.10 / 0.06 dB | 100 % |
130
  | Q8_0 | 1.34 / 1.42 / 1.24 dB | 81 % |
 
 
131
  | F32, Vulkan (R9700) | 0.40 / 0.48 / 0.35 dB | 94 % |
 
132
 
133
+ **Building blocks.** Same inputs, signal-to-noise ratio of one DiT step against float32: F16 69 dB, Q8_0 36 dB; the
134
+ decoder's spectrum deviates by 0.002 / 0.13 dB on average. The full tables
135
  are in the engine's README.
136
 
137
  The F32 file reproduces the PyTorch reference: every building block within 1e-5 relative error, and the whole chain
SHA256SUMS CHANGED
@@ -1,7 +1,5 @@
1
  c2020e5d5bd1a9679353c83e9476c691716a6854d02517be326db7266ac56cea articulino-f16.gguf
2
  acfa0c6019f7bd558a355b6c12e2eb5cb39cb2151e7e55dd1cde5d07fb0cb0e4 articulino-f32.gguf
3
- 1c2fc743d8057caf14448c51a811e7848b6351cbfb3d39beb3ff5103db2f8fed articulino-iq4_nl.gguf
4
- e124f05c27291b5dc361b67ffc6a193e1498d642a3a8b5ab0c4411f3fa1eefd3 articulino-q4_0.gguf
5
  443dd67b08a6165e6e881432acae9e241e4662e8c00f464204b17260b9b2828b articulino-q8_0.gguf
6
  cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE
7
  ab6b0eea89750bed940a4d278cd2906235323cb563bb49adf0388361815d5a60 NOTICE
 
1
  c2020e5d5bd1a9679353c83e9476c691716a6854d02517be326db7266ac56cea articulino-f16.gguf
2
  acfa0c6019f7bd558a355b6c12e2eb5cb39cb2151e7e55dd1cde5d07fb0cb0e4 articulino-f32.gguf
 
 
3
  443dd67b08a6165e6e881432acae9e241e4662e8c00f464204b17260b9b2828b articulino-q8_0.gguf
4
  cfc7749b96f63bd31c3c42b5c471bf756814053e847c10f3eb003417bc523d30 LICENSE
5
  ab6b0eea89750bed940a4d278cd2906235323cb563bb49adf0388361815d5a60 NOTICE
articulino-iq4_nl.gguf DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:1c2fc743d8057caf14448c51a811e7848b6351cbfb3d39beb3ff5103db2f8fed
3
- size 103653632
 
 
 
 
articulino-q4_0.gguf DELETED
@@ -1,3 +0,0 @@
1
- version https://git-lfs.github.com/spec/v1
2
- oid sha256:e124f05c27291b5dc361b67ffc6a193e1498d642a3a8b5ab0c4411f3fa1eefd3
3
- size 103653632