👀 DiffRhythm: Blazingly Fast and Embarrassingly Simple End-to-End Full Length Song Generation with Latent Diffusion
[paper] |
[code] |
[hf_demo]
Опенсурс для генерации музыки развивается 👍
Теперь, в отличие о
т YuE у нас первая модель для генерации полного трека на латентной диффузии — DiffRhythm. Можно генерить треки длительностью до 4 минут 45 секунд с вокалом и аккомпанементом значительно быстрее всяких авторегрессионок, очевидно) Также можно указать тайминги для лирики, крутая фича. Модель основана на двух последовательно обученных компонентах: VAE и DiT (рис. 1).
VAE основан на Stable Audio 2 и отличается полностью сверточной архитектурой, чтобы обрабатывать аудио произвольной длины. Учится на реконструкцию качественных треков и для лучшей устойчивости делают аугментацию имитирующую MP3-сжатие. Входные данные случайно сжимаются с переменным битрейтом, а на выходе мы также хотим качественное аудио. Также накинули 2 лосса: multi-resolution STFT и adversarial, дискриминатор сделали в 4 раза больше, чем в Stable Audio, чтобы моделька видела больше деталей и реконструкция была лучше.
DiT в DiffRhythm отвечает за генерацию латентных представлений и адаптирован для работы с длинными музыкальными последовательностями. Принимает 3 кондишна:
*️⃣ Стиль. Короткий аудиофрагмент обрабатывается через LSTM, где финальное скрытое состояние используется как глобальная информация о стиле.
*️⃣ Временной шаг. Embedding текущего шага диффузии суммируется со стилевым признаком, формируя глобальное условие.
*️⃣ Текст песни. Преобразуется в фонемы через grapheme-to-phoneme (G2P) конверсию, затем встраивается в непрерывные эмбеддинги через слой embedding. Эти признаки конкатенируются с зашумлённым латентным представлением и подаются в DiT.
DiT состоит из 16 слоёв декодера LLaMA с 2048-мерным скрытым размером и 32 головами внимания (64 измерения на голову), что составляет 1.1 миллиарда параметров. Для оптимизации используются FlashAttention2, дабы ускорить вычисления внимания для длинных последовательностях и gradient checkpointing, дабы снизить потребление памяти при обучении. Также применяется 20% dropout к стилю и тексту для поддержки classifier-free guidance (CFG) с масштабом 4 на инференсе. Учится это все дело с conditional flow matching, где моделька учится преобразовывать шум в данные через ODE. Музыка генерится за 32 шага с Euler ODE солвером и на протяжении всего трека музыка остается цельной, то есть мы получаем не набор случайных звуков))
Но, пожалуй, самое главное в этой работе — это алаймент текста и латентных представлений. Вокальные сегменты часто прерываются длительными инструментальными частями, что создаёт разрывы в временной последовательности. Также одни и те же слова могут звучать по-разному из-за различного аккомпанемента, что усложняет выравнивание. Авторы сказали, что всякий кросс-аттеншн или прямая конкатенация фичей не позволяют генерить разборчивые песни. Поэтому авторы предлагают выравнивание на уровне предложений, требующее только аннотаций начала предложений t_i_start (рис. 2) и делают его так:
*️⃣ Преобразуют текст в последовательность фонем через G2P преобразование
*️⃣ Инициализуют последовательность для алаймента P_i длиной L_max (4м45с), которая полностью заполнена падингами
*️⃣ Размещение фонем p_i в P_i на позициях, соответствующих временным меткам (𝑓_𝑖_start=[𝑡_𝑖_start * 𝐹_𝑠], где 𝐹_𝑠=21.5Гц)
Такой алаймент уменьшает потребность в детальных аннотациях, расходы на подготовку датасета и разборчивость вокала становится лучше. Бьютифул.
А теперь мои мысли: делать ллама подобные сетки с кучей аудио токенов, каким то ризонингом на лирику здорово, но можно делать как DiffRhythm. Авторегрессия, к слову, хороша тем, что с ней можно учить все, этот подход универсален. Foundation моделей на диффузии я пока не ви
дел (upd: видел). Ну и наверное авторегрессия хорошая для бизнеса, который может дать деняк, взять авторегрессию и поскейлить модельки, чтобы решить большинство возникающих задач. Что думаете?
#music #papers