Многие уже слышали, а может и пробовали модель Stable Diffusion для генерации картинок из текста.

Теперь ту же модель можно использовать для генерации музыки! Модель была дообучена на задаче генерации спектрограмм по входной строке и теперь появилась возможность делать следующее:

Вся фишка в том, что полученную спектрограмму можно легко конвертировать в аудио клип.

????????????????

Вау! А что так можно было? Да!

Это V1.5 версия модели Stable Diffusion, по входной строке получаем спектрограмму, а далее уже в коде преобразуем спектрограмму в звук. Более того, можно генерировать бесконечные вариации звука меняя random seed. И да, работают все те же техники, что в Stable Diffusion: inpainting, nagative prompt, img2img

Про спектрограммы

Аудио спектрограмма — это визуальный способ представления частотного содержания звукового клипа. Ось X представляет время, а ось Y представляет частоту. Цвет каждого пикселя определяет амплитуду звука в зависимости от частоты и времени.

Спектрограмма может быть получена из звука с использованием преобразования Фурье (STFT), которое аппроксимирует звук, как комбинацию синусоидальных волн различной амплитуды и фазы.

Алгоритм STFT обратим, поэтому исходный звук можно восстановить по спектрограмме. Однако изображения спектрограмм из модели Riffusion содержат только амплитуду синусоидальных волн, а не фазы, потому что фазы хаотичны и их трудно предсказать. Вместо этого используется алгоритм Гриффина-Лима для аппроксимации фазы при реконструкции аудио.

Внизу для интуитивного понимания представлено изображение нарисованное от руки, которые можно конвертировать в аудио.

Для процессинга аудио используется torchaudio, так как обладает отличными возможностями для процессинга на GPU. Код для препроцессинга аудио можно найти тут

Image-to-Image

С diffusion моделями можно генерировать результат не только на основе текста, но и на основе изображений. Это невероятно полезно для изменения звуков при сохранении структуры оригинального клипа, который вам нравится. Вы можете контролировать, насколько сильно отклоняться от исходного клипа в сторону нового результата, используя denoising параметр.

Вот пример конвертации rock and roll соло в скрипку.

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 есть отличный раздел посвященный Diffusion моделям для img2img и интерполяции между строками. Но авторами был предоставлен свой код для задачи генерации аудио, который поддерживаем masking - возможность генерировать и изменять только часть спектрограммы. Код

Тестируем модель

Авторы сделали удобный веб интерфейс на ThreeJS, React и Tailwind, где каждый может попробовать сгенерировать что-то свое.

Ссылка на веб приложение

Если хочется попробовать сгенерировать что-то более сложное, то авторы предоставляют весь исходный код, а модель может быть запущена даже на Google Colab

Еще больше примеров для модели Riffusion можно посмотреть в моем телеграм канале. Я пишу про ML, стартапы и релокацию в UK для IT специалистов.

Комментарии (13)


  1. Alexrook
    18.12.2022 10:32
    +2

    Авторы сделали удобный веб интерфейс на ThreeJS, React и Tailwind, где каждый может попробовать сгенерировать что-то свое.

    Не получилось сгенерировать что-либо похожее на запрос. Пробовал несколько раз. Проигрывается что-то одно и то же с минимальными вариациями и даже отдаленно не напоминающее, что запрашивается.


    1. artkulakov Автор
      18.12.2022 10:34

      Советую попробовать Google Colab, там больше опций генерации


  1. mbait
    18.12.2022 11:00
    +8

    По-мойму, музыка это отличный показатель того, что сети генерируют всякий бред. Но дисгармонию на изображениях гораздо сложнее заметить в силу различий того, как человек воспринимает визуальную и аудиальную информацию.


    1. artkulakov Автор
      18.12.2022 11:22
      +2

      А почему бред?


      1. mbait
        18.12.2022 13:27
        +2

        Потому что в приведённых примерах (как и в других статьях про герацию музыки с помощью ИИ) нет музыкальной гармонии.


        1. artkulakov Автор
          18.12.2022 13:30
          -1

          Что такое музыкальная гармония? И почему из этого следует, что нейронки в целом генерируют бред?


          1. mbait
            19.12.2022 01:21

            https://ru.wikipedia.org/wiki/Гармония_(музыка)

            Я не говорил, что из этого следует. Я сказал, что это хороший пример. Изображения - не очень хороший пример, потому что мозг натренирован вылавливать их хаоса визуальной информации какие-то образы, в то время как слух наоборот - остро реагирует на любые отклонения.


        1. cartonworld
          18.12.2022 13:42
          -1

          В Википедии статья, например, про Атональность


    1. armature_current
      18.12.2022 11:58
      +1

      Можно так же охарактеризовать творчество многих "натуральных" музыкантов, так что аргумент так себе


    1. dxq3
      18.12.2022 22:32

      А еще хорошо видна слабость в смысловой информации. Помните фильм, снятый без правок по сценарию от нейронки?)


  1. Vsevo10d
    18.12.2022 14:34
    +3

    Сколько ни выбирал, ни писал, все время получается какая-то далекая от желаемого дисгармоничная чушь.

    Лучше бы они откалибровали сеть на отдельных жанрах и выпустили бы онлайн-потоковое радио какого-нибудь безвокального транса/синтипопа/этериалвейва для воркинг и стадиинг.


  1. savostin
    18.12.2022 21:50

    Чушь же получается.

    Пока что.

    Но мы верим и ждем ;)


  1. axe_chita
    19.12.2022 04:49
    +2

    Так вроде MubertAI порождает, по заданному текстовому описанию, занимательные треки?