Как перевести картинку в звук
Нейросеть научили превращать картины в музыку
Винсент ван Гог / «Фермерский дом на пшеничном поле» / Музей ван Гога, Амстердам
Нидерландские разработчики создали нейросеть, способную проявлять искусственный аналог визуально-звуковой синестезии — способности соотносить визуальные ощущения со звуками. Алгоритм состоит из двух частей, одна из которых кодирует изображение в высокоуровневое представление, а вторая декодирует это представление в музыку. Особенность алгоритма заключается в том, что он обучался самостоятельно без пар типа изображение-музыка. Разработчики описали алгоритм в статье на arXiv.org, а также расскажут о нем на конференции ICCVW 2019.
В широком смысле художники, фотографы и дизайнеры используют картины и другие визуальные произведения как способ передачи информации другим людям. Однако такой способ донесения информации не работает в случае, если человек, смотрящий на картину, имеет проблемы со зрением. При этом визуальные произведения передают информацию различным способом, например, с помощью сюжета, формы, цвета и других особенностей, то есть их можно описать аналитически. Это означает, что не существует фундаментальной проблемы для того, чтобы передавать ту же информацию другим способом так же, как люди могут доносить информацию до иностранцев, используя свое знание другого языка или программу-перводчик.
Максимилиан Мюллер-Эберштайн (Maximilian Müller-Eberstein) и Нанне ван Ноорд (Nanne van Noord) из Амстердамского университета разработали алгоритм, способный проводить преобразование между изображениями и музыкой, причем при обучении он не требует соотносить изображения с музыкой, а учится этому самостоятельно, применяя метод обучения без учителя.
Алгоритм построен на архитектуре автокодировщика. Такой алгоритм производит преобразование из исходных данных в скрытое представление, которое несет в себе основную информацию об исходных данных и позволяет восстановить их в достаточно похожем виде. Автокодировщики состоят из кодировщика и декодировщика. Особенность таких алгоритмов заключается в том, что, как правило, кодировщик и декодировщик работают с разными данными. К примеру, недавно исследователи из Google использовали такую архитектуру для преобразования музыкальной последовательности на любом инструменте в партию на барабанах.
Схема работы алгоритма
Maximilian Müller-Eberstein, Nanne van Noord / arXiv.org, 2019
Разработчики обучали алгоритм на популярном датасете MNIST, содержащем 60 тысяч рукописных символов, а также на датасете Behance Artistic Media, из которого они использовали около 180 тысяч картин маслом и акварелью. В качестве музыкального декодировщика они использовали обученную нейросетевую модель MusicVAE.
После обучения авторы проверили точность работы алгоритма количественно, с помощью нескольких метрик, в том числе расстояния Кульбака — Лейблера, а также качественно. Для второй оценки они попросили добровольцев описать свои эмоции при просмотре изображений из датасета с картинами. Эксперимент показал, что после обратного автокодирования эмоции совпадали с эмоциями при оценке исходного изображения со средней точностью 71 процент. Оценить работу алгоритма можно самостоятельно на сайте авторов.
Ранее архитектуру автокодировщика неоднократно использовали в других работах, связанных с музыкой. Например, в прошлом году исследователи из Facebook создали нейросеть, способную превращать одну музыкальную запись в другую, в которой используются другие инструменты и жанр.
Преобразуем изображение в звук — что можно услышать?
В недавней публикации здесь на сайте описывалось устройство, позволяющее незрячим людям «видеть» изображение, преобразуя его с помощью звуковых волн. С технической точки зрения, в той статье не было никаких деталей вообще (а вдруг украдут идею за миллион), но сама концепция показалась интересной. Имея некоторый опыт обработки сигналов, я решил поэкспериментировать самостоятельно.
Что из этого получилось, подробности и примеры файлов под катом.
Преобразуем 2D в 1D
Первая очевидная задача, которая нас ожидает — это преобразовать двухмерное «плоское» изображение в «одномерную» звуковую волну. Как подсказали в комментариях к той статье, для этого удобно воспользоваться кривой Гильберта.
Она по своей сути похожа на фрактал, и идея в том, что при увеличении разрешения изображения, относительное расположение объектов не меняется (если объект был в верхнем левом углу картинки, то он останется там же). Различные размерности кривых Гильберта могут дать нам разные изображения: 32×32 для N=5, 64×64 для N=6, и так далее. «Обходя» изображение по этой кривой, мы получаем линию, одномерный объект.
Следующий вопрос это размер картинки. Интуитивно хочется взять изображение побольше, но тут есть большое «но»: даже картинка 512х512, это 262144 точек. Если преобразовать каждую точку в звуковой импульс, то при частоте дискретизации 44100, мы получим последовательность длиной в целых 6 секунд, а это слишком долго — изображения должны обновляться быстро, например с использованием web-камеры. Делать частоту дискретизации выше бесмысленно, мы получим ультразвуковые частоты, неслышимые ухом (хотя для совы или летучей мыши может и пойдет). В итоге методом научного тыка было выбрано разрешение 128х128, которое даст импульсы длиной 0.37c — с одной стороны, это достаточно быстро чтобы ориентироваться в реальном времени, с другой вполне достаточно, чтобы уловить на слух какие-то изменения в форме сигнала.
Обработка изображения
Первым шагом мы загружаем изображение, преобразуем его в ч/б и масштабируем до нужного размера. Размер изображения зависит от размерности кривой Гильберта.
Следующим шагом формируем звуковую волну. Тут разумеется, может быть великое множество алгоритмов и ноухау, для теста я просто взял яркостную составляющую. Разумеется, наверняка есть способы лучше.
Из кода, надеюсь, все понятно. Функция coordinates_from_distance делает за нас всю работу по преобразованию координат (х, у) в расстояние на кривой Гильберта, значение яркости L мы инвертируем и преобразуем в цвет.
Это еще не все. Т.к. на изображении могут быть большие блоки одного цвета, это может привести к появлению в звуке «dc-компоненты» — длинного ряда отличных от нуля значений, например [100,100,100. ]. Чтобы их убрать, применим к нашему массиву high-pass filter (фильтр Баттерворта) с частотой среза 50Гц (совпадение с частотой сети случайно). Синтез фильтров есть в библиотеке scipy, которым мы и воспользуемся.
Последним шагом сохраним изображение. Т.к. длина одного импульса короткая, мы повторяем его 10 раз, это будет на слух более приближено к реальному повторяющемуся изображению, например с веб-камеры.
Результаты
Вышеприведенный алгоритм, разумеется, совсем примитивный. Я хотел проверить три момента — насколько можно различать разные несложные фигуры, и насколько можно оценить расстояние до фигур.
Изображению соответствует такой звуковой сигнал:
Идея этого теста — сравнить «звучание» объекта другой формы. Звуковой сигнал:
Можно заметить, что звучание действительно другое, и на слух разница есть.
Идея теста — проверить объект меньшего размера. Звуковой сигнал:
В принципе, чем меньше размеры объекта, тем меньше будет «всплесков» в звуке, так что зависимость тут вполне прямая.
Как подсказали в комментариях, можно использовать преобразование Фурье для непосредственной конвертации картинки в звук. Сделанный по-быстрому тест показывает такие результаты (картинки те же):
Тест-1: cloud.mail.ru/public/2C5Z/5MEQ8Swjo
Тест-2: cloud.mail.ru/public/2dxp/3sz8mjAib
Тест-3: cloud.mail.ru/public/3NjJ/ZYrfdTYrk
Тесты звучат интересно, по крайней мере, для маленького и большого квадратов (файлы 1 и 3) разница на слух хорошо ощутима. А вот форма фигур (1 и 2) практически не различается, так что тут тоже есть над чем подумать. Но в целом, звучание полученное с помощью FFT, на слух мне нравится больше.
Заключение
Данный тест, разумеется, не диссертация, а просто proof of concept, сделанный за несколько часов свободного времени. Но даже так, оно в принципе работает, и разницу ощущать на слух вполне реально. Я не знаю, можно ли научиться ориентироваться в пространстве по таким звукам, гипотетически наверно можно после некоторой тренировки. Хотя тут огромное поле для улучшений и экспериментов, например, можно использовать стереозвук, что позволит лучше разделять объекты с разных сторон, можно экспериментировать с другими способами конвертации изображения в звук, например, кодировать цвет разными частотами, и пр. И наконец, перспективным тут является использование 3d-камер, способных воспринимать глубину (увы, такой камеры в наличии нет). Кстати, с помощью несложного кода на OpenCV, вышеприведенный алгоритм можно адаптировать к использованию web-камеры, что позволит экспериментировать с динамическими изображениями.
Ну и как обычно, всем удачных экспериментов.
Как преобразовать аудиоданные в изображения
Относитесь к обработке звука, как к компьютерному зрению, и используйте аудиоданные в моделях глубокого обучения.
Закройте глаза и прислушайтесь к звукам вокруг вас. Независимо от того, находитесь ли вы в переполненном офисе, уютном доме или на открытом пространстве, на природе, вы можете понять, где находитесь, по звукам вокруг вас. Слух — одно из пяти основных чувств человека. Звук играет важную роль в нашей жизни. Это значит, что организация и использование значений аудиоданных с помощью глубокого обучения — важный для ИИ процесс в понимании нашего мира. Кроме того, ключевая задача обработки звука — дать компьютерам возможность отличать один звук от другого. Эта возможность позволит вычислительным машинам выполнять самые разные задачи: от обнаружения износа металла на электростанциях до мониторинга и оптимизации топливной экономии автомобилей.
Сегодня, специально к старту нового потока курса по машинному обучению делюсь с вами статьей, в которой авторы, в качестве примера определяют вид птиц по их пению. Они находят в записях, сделанных в естественных условиях, фрагменты с пением птиц, и классифицируют виды. Преобразовав аудиоданные в данные изображений и применив модели компьютерного зрения, авторы этой статьи получили серебряную медаль (как лучшие 2 %) на соревновании Kaggle Cornell Birdcall Identification.
Обработка аудио как изображений
Когда врач диагностирует болезни сердца, он либо напрямую слушает сердцебиение пациента, либо смотрит на ЭКГ — описывающую сердцебиение пациента схему. Первое обычно занимает больше времени — время нужно, чтобы прослушать сердце, а на запоминание услышанного тратится больше усилий. Напротив, визуальная ЭКГ позволяет врачу мгновенно усваивать пространственную информацию, она ускоряет выполнение задач.
Те же рассуждения применимы к задачам обнаружения звука. Есть спектрограммы четырёх видов птиц. Прослушать оригинальные отрезки звука можно здесь. Глазами человек тем более мгновенно увидит различия видов по цвету и форме.
Перемещение звуковых волн во времени требует больше вычислительных ресурсов, и мы можем получить больше информации из двумерных данных изображений, чем из одномерных волн. Кроме того, недавнее быстрое развитие компьютерного зрения, особенно с помощью свёрточных нейронной сетей, может значительно улучшить результаты, если рассматривать аудио как изображения, так мы (и почти все остальные участники) и поступили на соревнованиях.
Понимание спектрограммы
Используемое нами специфическое представление изображения называется спектрограммой — это изменяющееся во времени визуальное представление спектра частот сигнала. Звуки могут быть представлены в форме волн, и волны имеют два важных свойства: частоту и амплитуду, как показано на рисунке. Частота определяет высоту звука, амплитуда — его громкость.
Объяснение параметров звуковых волн
На спектрограмме аудиоклипа горизонтальное направление представляет время, а вертикальное направление представляет частоты. Наконец, амплитуда звуков определённой частоты, существующих в определённый момент, представлена цветом точки, который обозначается соответствующими координатами x-y.
Чтобы понять, как частоты отражаются в спектрограммах, посмотрите на трёхмерную визуализацию, которая демонстрирует амплитуду с помощью дополнительного измерения. По оси X отложено время, а по оси Y — значения частот. Ось z — это амплитуда звуков частоты координаты y в момент координаты x. По мере увеличения значения z цвет меняется с синего на красный, получается цвет, который мы видели в предыдущем примере 2D-спектрограммы.
Визуализация трёхмерной спектрограммы
Спектрограммы полезны, потому что они показывают именно ту информацию, которая нам нужна: частоты, особенности, которые формируют форму слышимого нами звука. Разные виды птиц и все издающие звуки объекты имеют свой собственный уникальный частотный диапазон, поэтому звуки кажутся разными. Наша модель просто должна научиться различать частоты, чтобы достичь идеальных результатов классификации.
Шкала мел и её спектрограмма
Мел — психофизическая единица высоты звука, применяемая главным образом в музыкальной акустике. Название происходит от слова «мелодия». Количественная оценка звука по высоте основана на статистической обработке большого числа данных о субъективном восприятии высоты звуковых тонов.
Спектрограмма на мел-шкале — это просто спектрограмма с частотами, измеренными в мел.
Как мы используем спектрограмму?
Для создания мел-спектрограммы из звуковых волн мы воспользуемся библиотекой librosa.
Где y обозначает необработанные данные волны, sr обозначает частоту дискретизации аудио-сэмпла, а n_mels определяет количество полос мел в сгенерированной спектрограмме. При использовании метода melspectrogram вы также можете установить параметры метода f_min и f_max. Можно установить Then и преобразовать спектрограмму в спектрограмму мел, выражающую амплитуду на прямоугольной шкале, к децибелам с помощью метода power_to_db.
Чтобы визуализировать сгенерированную спектрограмму, запустите код:
В качестве альтернативы: если вы используете графический процессор, то можете ускорить процесс генерации спектрограммы с помощью библиотеки torchlibrosa.
Резюме
В заключение скажу, что мы можем воспользоваться преимуществами последних достижений компьютерного зрения в задачах, связанных со звуком, путём преобразования данных аудиоклипов в данные изображения. Мы достигаем этого с помощью спектрограмм, показывающих сведения о частоте, амплитуде и времени аудиоданных в изображении. Использование шкалы мел и спектрограммы шкалы мел помогает компьютерам имитировать человеческий слух, чтобы различать звуки разных частот. Для генерации спектрограмм мы могли бы воспользоваться библиотекой librosa или torchlibrosa для ускорения GPU на Python. Рассматривая таким образом задачи, связанные со звуком, мы можем создавать эффективные модели глубокого обучения для выявления и классификации звуков, так же, как, например, врачи диагностируют сердечные заболевания с помощью ЭКГ.
Передача звука через картинки в соцсетях
В свете недавних событый, в частности, российским законом о копирайте в интернете (и последующим рейдом музыкальных лейблов на ВКонтакте, к примеру), появляется необходимость любителям музыки в какой-то степени «шифроваться» от посягательств на их музыкальные сокровищницы. Первым делом, люди начали подменивать названия исполнителей и песен, но в перспективе это не спасет от вероятности проверки каждого трека по контрольной сумме (что, впрочем, тоже пока вполне обходимо).
Сейчас информация, которая хранится на обычном компьютере обычного человека, имеет разные разновидности: текст, звук, рисунки, видео. Казалось бы, разные вещи: для того, чтобы почерпнуть для себя что-то полезное, ту же книгу надо читать, звук — слушать, рисунки и видео — смотреть. Однако люди, в наше время, где компьютер или телефон — уже повсеместная вещь, мало кто задумывается, что вся информация в компьютерной системе представлена в цифровой форме, и все четыре разновидности медиа-контента объединены именно этой особенностью. В случае чего (если в России настанет та же ситуация, что и в Германии, например, касаемо копирастии), можно будет придумать альтернативные передачи контента путем представления его в других форматах. Один из таких способов я и хочу описать.
Принцип такой: что картинка, что звук, на компьютере представлены в цифровой форме. Следовательно, звук можно представить в файловой системе и в форме текста (переименовав, допустим, тот же «giveitaway.wav» в «giveitaway.txt»), и в форме RAW-картинки, при этом оставив возможность восстановить возможность проигрывания этого звука в обычном медиапроигрывателе.
Что я использовал: Audacity 2.0.3 и Adobe Photoshop CS2
1. Возьмём запись репетиции моей группы. Вырежем из неё какой-нибудь наглядный 15-секундный отрывок. Вставим в audacity.
2. Экспортируем данный отрывок в raw-звук для открытия в Photoshop. Учитывая ограничения ВКонтакта на размер картинок в 5мб, (в Документах ограничение 200мб) придется ужимать аудио, которое получилось слишком большим. У меня получилось 1,26mb (44,1khz @ 16bit mono, формат источника), поэтому можно смело импортировать его в фоторедактор без предварительного сжатия.
Так как картинка должна быть квадратной, придется подгонять числа пикселей так, чтобы как можно больше битов уместилось на картинку.
где Dimensions — ширина/высота картинки, Channels — количество каналов и depth — глубина цвета. В силу сжатия jpeg, которое добавляет артефакты на картинку, загруженное ВК, не советую делать картинку цветной (2 и более каналов). Хотя это и сократит картинку в разрешении, сжатие jpeg добавит на картинку цветные шумы, что исказит значения цвета в каждом канале от оригинала и приведет к сильнейшим шумам на аудиозаписи, которую вы хотите получить от картинки из ВК. Следует стараться делать картинку моноцветной и с как можно меньшей глубиной цвета, чтобы сэмпл звука занимал 1-2 пикселя на картинке. Получаем результат:
3.Теперь сохраняем картинку в PNG non-interlaced, чтобы с нашей стороны не страдало лишний раз качество, ведь PNG тут имеет lossless-сжатие, благо, ВК поддерживает этот формат. Тут уже можно открывать PNG в Photoshop и экспортировать RAW с идентичными свойствами, но это мы сделаем уже с картинкой из вконтакта.
4. Загружаем успешно картинку, видим результат (тут она уменьшена)
Все, звук в картинку мы закодировали и отправили на сервис, где она сконвертировалась в JPEG. Теперь, я полагаю, нам нужно эту картинку перевести обратно в звук.
5. Загружаем картинку с сервиса (поделиться/загрузить оригинал на диск) и открываем её в Photoshop, затем сохраняем в RAW-формат.
Header нам не нужен, оставляем на 0. Выскочит диалоговое окно о невозможности сохранения exif-тэгов — нажимаем OK.
6. Теперь вставляем RAW-файл в audacity. Очень важно, чтобы битность звука в настройках Audacity стояла 16-bit (в нашем случае, по крайней мере), иначе вместо звука импортируется каша. Моя запись после конвертации в jpeg прибавила не так много шумов, слушать можно. Изменения в амплитуде вообще малозаметны на глаз.
7. Конвертируем в удобный для вас аудиоформат.
Вообще, по правде говоря, много аудиоинформации в CD-моно качестве такой картинкой не передашь — но 15-30 секундный отрывок переслать реально. Нужно больше — уменьшайте частоту дискретизации и битность звука. Но я надеюсь, что с ростом мощностей ВК ограничения будут постепенно ослабляться, что даст возможность пересылать таким образом все больше и больше звука.
Самое интересное — тут совмещается цифровое качество оригинала и шумы, характерные для виниловых пластинок (попробуйте, порисуйте на такой аудиозаписи в фоторедакторе и затем воспроизведите). Но самое главное — технических средств предотовращения такого файлообмена еще никто не придумал, что делает его перспективным способом передачи звука в случае тотального поглощения интернета копирастами даже там, где они не смогут догадаться.
Sound Art — Приложение для конвертации изображений в звуки (x32, x64)
Sound Art — это абсолютно бесплатное приложение для преобразования изображения в звук для Windows. Разработано Василием Макаровым из студии Stone Voices. Он известен нам по работе над виртуальными синтезаторами PolyGAS и Brandulator. На этот раз выпущенное программное обеспечение это не плагин VST, а отдельная компьютерная программа. Её цель — конвертировать картинки в звуки и наоборот.
Так как же работает Sound Art и что она делает? Приложение использует принцип Фурье для анализа любого фото, предоставленного пользователем, и преобразования его в сэмпл. Аналогично, часть звука может преобразовываться в фотографию, подобно любому другому фото на вашем компьютере. Можете сохранить аудиозапись как фотоснимок, обработать в стороннем фоторедакторе, таком как Photoshop, а затем преобразовать его обратно в аудио для прослушивания изменений. Sound Art экспортирует аудиофайлы в формате WAV и изображения PNG, JPEG, BMP или TGA.
Получающиеся в результате звуковые файлы часто звучат как что-то среднее между звуковым пейзажем и записью модема. Иногда из получившегося изображения можно извлечь интересную петлю или ритмическую последовательность. Мы совсем немного протестировали этот софт, прежде чем писать эту статью, но первые впечатления очень положительные. Sound Art можно применить в качестве отправной точки для специальных музыкальных проектов. Попробуйте его как секретный инструмент обработки синтезируемых битов и риффов. Отличная вещь для сумасшедших экспериментов и синтеза нового, необычного аудио материала.



