Repository navigation
Our own decoder, YuE2-VAE-RS x3: what the standard one gets wrong, what we changed, and the numbers (the default from 2.0.7) #6
igrbible
announced in
Announcements
Replies: 0 comments
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
YuE2 sings in latents, 64 numbers 25 times a second, and a decoder turns them into 48 kHz stereo. Until now the Studio's default was m-a-p's decoder, which we call Standard. From 2.0.7, the next release, it is our own: YuE2-VAE-RS x3. Here is why, what it is, and what it measures, including where it does worse.
What Standard gets wrong
Standard is a good decoder; to our knowledge nobody had fine-tuned it. Against the originals, though, it leaves two traces of its own structure. We measured them on eight 30-second clips our training never saw.
What we built
x3 is Standard's decoder grown three times over, from 66.37 M to 200.76 M stored values. We added residual units of Standard's own form, three at the latent rate and three more in each of its six upsampling blocks. Each new unit began at zero, so before training the grown decoder equalled Standard sample for sample. Then the whole decoder was trained on music against those traces.
The encoder and everything upstream are untouched: x3 reads the same latents as Standard, under any YuE2 backbone, m-a-p's or ours.
Two runs trained for about three and a half days each, on one RTX 3090 apiece. We released two checkpoints:
The numbers
Means over seven music clips against their originals, in dB: excess lower is better, energy loss closer to zero, SI-SDR higher.
x3 brings the ripple much nearer the originals: on the duduk from +6.5 to +2.0 (v1) and +0.4 (v2), and on the orchestra from +7.2 to +0.8 and +1.0. On the studio guitar the 6 kHz line falls from +20.6 to +1.8 and +0.3, below the recording's own +5.5: some of its real 6 kHz content goes with the seam.
On 40 generated songs (our benchmark's 20 cards at two seeds), decoded again from their own latents, x3 against Standard:
Where it is worse
Hear it yourself
Our page plays those 40 songs through Standard, x3 v1 and x3 v2, from the same latents and at the same loudness; switch while one plays and it goes on from the same second. The numbers say where to listen: on these generated songs the 100 Hz ripple is small in Standard already (+0.02 dB on average), so the differences measured there are the 25 Hz buzz, the stray tones, the slightly brighter tilt, and the seams at 6 and 12 kHz. Which decoder sounds better is for your ear to judge.
In the Studio
From 2.0.7, RS x3 v1 is the default decoder and comes with the install and the update. It runs in float32 only, since half precision would put its error where its gains are; on a card short of memory the Studio unloads the backbone before the decode instead.
Two documents
yue2_infer, ComfyUI, ggml engines, andverify.py.The weights (safetensors and F32 GGUF) are in
VAE-RS/of our fine-tunes' repository.Licence and thanks
The weights are under CC BY-NC 4.0, the licence of m-a-p's YuE2-Vae they are adapted from; the code in
VAE-RS/kit/is under Apache-2.0 with its NOTICE. Thank you, m-a-p, for YuE2, its VAE and its open weights: every number here begins from your decoder.Viktor Zhuromskyy and Claude (Anthropic), Ruach Studio
All reactions