Визуализация музыки с помощью нейросетей в реальном времени… В некотором смысле…

Друзья, с момента основания проекта прошло уже 20 лет и мы рады сообщать вам, что сайт, наконец, переехали на новую платформу.

Какое-то время продолжим трудится на общее благо по адресу https://n-n-n.ru.
На новой платформе мы уделили особое внимание удобству поиска материалов.
Особенно рекомендуем познакомиться с работой рубрикатора.

Спасибо, ждём вас на N-N-N.ru

Автор: Сергей Козинцев. В настоящий момент (обязательная оговорка, когда речь идеть про нейросети) для генерации одного изображения у AI уходит минимум секунда. В лучшем случае пол секунды. Для видео нам требуется как минимум 15 кадров в секунду (а лучше бы и все тридцать). Следовательно, создавать нейросетью видео в реальном времени и таким образом визуализировать музыку – невозможно. Теперь, когда мы это поняли, давайте подумаем, как же это сделать.

Кстати, эту статью я начал писать в ожидании начала концерта, на котором видеоинсталяция менялась от звуков музыки. Вот, как все прошло.

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

Чтобы визуализировать музыку ее нужно представить в виде некоторых параметров. Например, амплитуду волны на определенных частотах. Параметры могут быть самые разные и их может быть произвольное количество. Параметры меняются со временем, и каждому моменту времени должно соответствовать свое изображение. Зависимость генерируемого нейросетью изображения от параметра получить просто. Фактически мы задаем множество таких параметров при генерации. И есть такие параметры, при маленьком изменении которых картинка меняется тоже незначительно. На этом основаны многие скрипты для SD. Например, плагин shifting attention плавно меняет изображение при изменении веса того или иного токена в промпте. И именно такие параметры нам и нужны. Но, как мы помним, основная сложность заключается в том, что генерация этих кадров занимает гораздо больше времени, чем мы можем себе позволить. Выход из ситуации очевиден. Нужно сгенерировать возможные кадры заранее. Для каждого из возможных значений параметров. Например, Возьмем рисунок цветка. Один параметр будет заведовать его высотой, а другой – внешним видом. Например тем, насколько он похож на кляксу.

muzyka1.pngИзменение первого параметра

muzyka2.pngИзменение второго параметра

Так мы получаем набор изображений рассортированных по двум осям. Такой прямоугольник, каждая точка которого – это картинка. Картинки двумерные, поэтому в целом получается четырехмерный куб – тессеракт. Такой тессеракт и есть наша визуализация, потенциально содержащая все возможные варианты параметров. Во время звучания музыки, два параметра меняются, и эти два параметра в каждый момент времени задают конкретную картинку. Так музыка выделяет из тессеракта последовательность кадров, которая и выдает визуализацию. В реальном времени, заметим.

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

Можно заметить, что реализовал я все это с помощью TouchDesigner.

Конечно же, все это надо подстраивать под конкретные инструмменты.

Итак, для создания визуализации создается тессеракт, содержащий картинки для всех возможных значений параметров, которые мы берем из музыки. Параметров может быть сколько угодно, но надо понимать, что 2 параметра на 100 величин – это 10 000 картинок. А 3 – уже сразу 1 000 000. У меня на генерацию тессеракта 100×100 уходило полторы суток.

Тессеракты могут быть самые разные по содержанию

Создание их – настоящий полноценный творческий процесс. Сейчас, как и любому нейросетевому видео, такой графике не хватает плавности. Очень сложно добиться максимальной близости двух соседних кадров с близкими параметрами генерации. Так что сейчас я работаю именно над этим.

Пожалуйста, оцените статью:
Пока нет голосов
Источник(и):

Хабр