- PVSM.RU - https://www.pvsm.ru -
Многие уже слышали, а может и пробовали модель Stable Diffusion для генерации картинок из текста.
Теперь ту же модель можно использовать для генерации музыки! Модель была дообучена на задаче генерации спектрограмм по входной строке и теперь появилась возможность делать следующее:
Вся фишка в том, что полученную спектрограмму можно легко конвертировать в аудио клип.
Вау! А что так можно было? Да!
Это V1.5 версия модели Stable Diffusion, по входной строке получаем спектрограмму, а далее уже в коде преобразуем спектрограмму в звук. Более того, можно генерировать бесконечные вариации звука меняя random seed. И да, работают все те же техники, что в Stable Diffusion: inpainting, nagative prompt, img2img
Аудио спектрограмма — это визуальный способ представления частотного содержания звукового клипа. Ось X представляет время, а ось Y представляет частоту. Цвет каждого пикселя определяет амплитуду звука в зависимости от частоты и времени.
Спектрограмма может быть получена из звука с использованием преобразования Фурье (STFT), которое аппроксимирует звук, как комбинацию синусоидальных волн различной амплитуды и фазы.
Алгоритм STFT обратим, поэтому исходный звук можно восстановить по спектрограмме. Однако изображения спектрограмм из модели Riffusion содержат только амплитуду синусоидальных волн, а не фазы, потому что фазы хаотичны и их трудно предсказать. Вместо этого используется алгоритм Гриффина-Лима [1] для аппроксимации фазы при реконструкции аудио.
Внизу для интуитивного понимания представлено изображение нарисованное от руки, которые можно конвертировать в аудио.
Для процессинга аудио используется torchaudio, так как обладает отличными возможностями для процессинга на GPU. Код для препроцессинга аудио можно найти тут [2]
С diffusion моделями можно генерировать результат не только на основе текста, но и на основе изображений. Это невероятно полезно для изменения звуков при сохранении структуры оригинального клипа, который вам нравится. Вы можете контролировать, насколько сильно отклоняться от исходного клипа в сторону нового результата, используя denoising параметр.
rock and roll electric guitar solo
acoustic folk fiddle solo
Создание коротких клипов — это круто, но еще хотелось бы иметь возможность генерировать бесконечные аудио похожим способом.
Допустим, мы создали 100 клипов с разными random seed по одной входной строке. Мы не можем объединить получившиеся клипы, потому что они различаются тональностью и темпом.
Стратегия состоит в том, чтобы по одному начальному изображению создать большое число его вариаций используя img2img с разными random seed и входными строками. Это сохраняет основные свойства аудио.
Однако даже при таком подходе переход между клипами будет слишком резким. Даже у одной строки с разным random seed будет различаться мотив и атмосфера мелодии.
Для решения этой проблемы можно плавно интерполироваться между входными строками и random seed в пространстве модели (latent space). В Diffusion моделях скрытое пространство — это вектор признаков, включающий все вариации того, что может генерировать модель. Элементы, которые похожи друг на друга, находятся рядом в скрытом пространстве, и каждое значение вектора скрытого пространства может быть декодировано в какой-то понятный человеку результат модели.
Фишка заключается в том, что можно получить скрытое пространство между входной строкой с двумя разными random seed или даже двумя разными входными строками с одним и тем же начальным radom seed. Вот пример с моделью генерации изображений:
То же самое можно делать и с аудио, даже между, на первый взгляд, разными аудио можно получать очень плавные переходы.
На картинке ниже показана интерполяция в пространстве между двумя random seed одной и той же входной строки. Таким образом мы добиваемся намного более плавного воспроизведения последовательности звуков. Все клипы которые мы генерируем могут иметь свою атмосферу и свой мотив, однако результат интерполяции впечатляет:
Интерполяция между печатью и джазом это что-то!
В библиотеке huggingface есть отличный раздел [3] посвященный Diffusion моделям для img2img и интерполяции между строками. Но авторами был предоставлен свой код для задачи генерации аудио, который поддерживаем masking - возможность генерировать и изменять только часть спектрограммы. Код [4]
Авторы сделали удобный веб интерфейс на ThreeJS, React и Tailwind, где каждый может попробовать сгенерировать что-то свое.
Если хочется попробовать сгенерировать что-то более сложное, то авторы предоставляют весь исходный код, а модель может быть запущена даже на Google Colab [6]
Web app: https://github.com/hmartiro/ riffusion-app [7]
Inference server: https://github.com/hmartiro/ riffusion-inference [8]
Model checkpoint: https://huggingface.co/ riffusion/riffusion-model-v1 [9]
Еще больше примеров для модели Riffusion можно посмотреть в моем телеграм канале [10]. Я пишу про ML, стартапы и релокацию в UK для IT специалистов.
Автор: Art Kulakov
Источник [11]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/381406
Ссылки в тексте:
[1] Гриффина-Лима: https://ieeexplore.ieee.org/document/1164317
[2] тут: https://github.com/hmartiro/riffusion-inference/blob/main/riffusion/audio.py
[3] раздел: https://github.com/huggingface/diffusers
[4] Код: https://github.com/hmartiro/riffusion-inference/blob/main/riffusion/riffusion_pipeline.py
[5] Ссылка на веб приложение: https://www.riffusion.com/
[6] даже на Google Colab: https://colab.research.google.com/drive/1FhH3HlN8Ps_Pr9OR6Qcfbfz7utDvICl0?usp=sharing#scrollTo=eDuHbPEo1hgp
[7] https://github.com/hmartiro/ riffusion-app: https://github.com/hmartiro/riffusion-app
[8] https://github.com/hmartiro/ riffusion-inference: https://github.com/hmartiro/riffusion-inference
[9] https://huggingface.co/ riffusion/riffusion-model-v1: https://huggingface.co/riffusion/riffusion-model-v1
[10] моем телеграм канале: https://t.me/dat2art
[11] Источник: https://habr.com/ru/post/706168/?utm_source=habrahabr&utm_medium=rss&utm_campaign=706168
Нажмите здесь для печати.