Как использовать классификацию звука с помощью TensorFlow на платформе IoT

1656665298 kak ispolzovat klassifikacziyu zvuka s pomoshhyu tensorflow na platforme iot

Николая Хабарова

yN3Ti0j9jdofEhxZUrj-vE2SxuesexJddWZZ

Введение

Существует множество различных проектов и сервисов для распознавания человеческого языка, таких как Pocketsphinx, Google Speech API и многие другие. Такие программы и сервисы распознают вещание и превращают его в текст с достаточно хорошей точностью. Но ни один из них не может определить разные звуки, которые улавливает микрофон. Что было записано: человеческий язык, звуки животных или музыка?

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

В этой статье описано, какие инструменты мы выбрали, с какими проблемами мы столкнулись, как мы научили нашу модель TensorFlow и как запустить наш проект с открытым кодом.

Мы также можем предоставить результаты распознавания в DeviceHive (платформу IoT), чтобы использовать их в облачных службах для программ сторонних разработчиков.

Выбор инструментов и классификации моделей

Во-первых, нам нужно было выбрать программное обеспечение, которое лучше всего будет работать с нейронными сетями. Первым подходящим решением, которое мы нашли, был Python Audio Analysis.

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

После некоторого тестирования мы столкнулись со следующими проблемами:

  • pyAudioAnalysis недостаточно гибок. Он не требует различных параметров, и некоторые из них вычисляются на ходу (например, количество обучающих экспериментов на основе количества образцов — и вы не можете это изменить).
  • Набор данных содержит всего 10 классов, и все они «городские».

Следующим решением, которое мы обнаружили, был Google AudioSet. Он базируется на отмеченных сегментах видео YouTube и может быть загружен в двух форматах:

  1. CSV-файлы, описывающие для каждого сегмента идентификатор видео YouTube, время начала, время завершения и одну или несколько меток.
  2. Извлечены аудиофункции, которые хранятся как файлы TensorFlow Record.

Эти функции совместимы с моделями YouTube-8M. Это решение также использует модель TensorFlow VGGish в качестве экстрактора функций. Он отвечал многим нашим требованиям и потому был наилучшим выбором для нас.

Обучение модели

Следующей задачей было узнать, как работает интерфейс YouTube-8M. Он разработан для работы с видео, но, к счастью, также может работать с аудио. Эта библиотека достаточно гибкая, но она имеет жестко закодированное количество образцов классов. Поэтому мы изменили это немного, чтобы передать количество классов как параметр.

YouTube-8M может работать с данными двух типов: агрегированными и фреймовыми признаками. Google AudioSet может предоставлять данные как функции, как мы отмечали ранее. Проведя немного больше исследований, мы обнаружили, что функции есть в формате фрейма. Затем нам нужно было выбрать модель для учебы.

Ресурсы, время и точность

Графические процессоры являются более подходящим выбором для машинного обучения, чем центральные процессоры. Вы можете найти больше информации об этом. Поэтому мы пропустим этот пункт и перейдем непосредственно к настройке. Для наших экспериментов мы использовали ПК с одной NVIDIA GTX 970 4GB.

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

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

Выбор модели

Полный список моделей YouTube-8M с описанием доступен здесь. Поскольку наши обучающие данные были в формате кадра, пришлось использовать модели на уровне кадра. Google AudioSet предоставил нам набор данных, разделенный на три части: сбалансированное влечение, несбалансированное влечение и оценка. Вы можете получить больше информации о них здесь.

Для обучения и оценки использовалась модифицированная версия YouTube-8M. Он доступен здесь.

Сбалансированный поезд

Учебная команда выглядит так:

python train.py –train_data_pattern =/path_to_data/audioset_v1_embeddings/bal_train/*. =Название модели

Для LstmModel мы поменяли базовую скорость обучения на 0,001, как предложено в документации. Также мы изменили значение по умолчанию lstm_cells на 256, поскольку у нас не хватило оперативной памяти для большего.

Смотрим результаты тренировок:

XCOCdLc0cQI-idVQaMZJPkD4yVVu4xNeg68X
K4emt0fRmPgqfvId9FUajvtqX8LRinBsMsW-

Название модели Время обученияПоследний шаг обучения Оценка среднее попадание

Как видите, мы получили хорошие результаты на этапе обучения, но это не означает, что мы получим хорошие результаты при полной оценке.

Несбалансированный поезд

Затем мы попытались несбалансированный набор данных поезда. В нем гораздо больше образцов, поэтому мы изменили количество эпох обучения на 10 (должно быть изменено по крайней мере на 5, поскольку обучение занимало много времени).

8nZvatG0k1S5CEcwdyqdBgZ-UZjPBjugckO2
FyRyG3cgEDLLBERsYFLVuCdzIs7nx3CNHj-z

Название модели Время обученияПоследний шаг обучения Оценка среднего попаданияLogistic2h 4мин 14с0,87500,5125Dbof4ч 39мин 29с0,88480,5605Lstm9ч 42мин 52с0,86910,5396

Журналы поездов

Если вы хотите просмотреть наши журналы обучения, вы можете загрузить и распаковать train_logs.tar.gz. Тогда беги tensorboard –logdir /path_to_train_logs/ и перейдите к http://127.0.0.1:6006

Подробнее об обучении

YouTube-8M принимает многие параметры, и многие из них влияют на тренировочный процесс.

К примеру: вы можете настроить скорость обучения и количество эпох, что значительно изменит процесс обучения. Есть также три различных функции для расчета ущерба и много других полезных переменных, которые можно настроить и изменить для улучшения результатов.

Использование обученной модели с устройствами захвата звука

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

Захват микрофон

Нам нужно было как-то захватить аудиодан с микрофона. Мы использовали PyAudio. Он обеспечивает обычный интерфейс и может работать на большинстве платформ.

Звуковая подготовка

Как мы упоминали ранее, мы использовали модель TensorFlow VGGish в качестве экстрактора функций. Вот краткое объяснение процесса трансформации:

Для визуализации использован пример «собачий лай» из набора данных UrbanSound.

Повторите выборку аудио до 16 кГц моно.

dlg4HMB3eWMKr2pOHhb1iCOHSSZPAp8O6OqT

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

yYd5JZ-tJpT2ZCal8zGAT-4uvY1JRUQMXfTS

Вычислите mel-спектрограмму, отразив спектрограмму на 64 mel-бины.

6SmF-OY1w8zyZBnjCUCa5lrTGXmXF4Br138I

Вычислите стабилизированную спектрограмму log mel, применив log(mel-спектр + 0,01), где используется смещение во избежание логарифмирования нуля.

y8K9mWTFdh3HcvfPwCbKrLlALa28FjNypSQG

Затем эти функции были оформлены в неперекрывающиеся примеры длительностью 0,96 секунды, где каждый пример охватывает 64 полосы мел и 96 кадров по 10 мс каждый.

Затем эти примеры были введены в модель VGGish для извлечения встроек.

Классификация

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

Мы использовали интерфейс YouTube-8M в качестве примера, но изменили его, чтобы удалить шаг сериализации/десериализации.

Здесь вы можете увидеть результаты нашей работы. Давайте рассмотрим поближе.

монтаж

PyAudio использует libportaudio2 и portaudio19-dev, поэтому вам нужно установить их, чтобы он работал.

Нужны некоторые библиотеки Python. Вы можете установить их с помощью pip.

pip install -r requirements.txt

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

Бег

Наш проект предоставляет три интерфейса для использования.

1. Обработать предварительно записанный аудиофайл

Просто бегите python parse_file.py путь_к_вашему_файлу.wav и вы увидите в терминале что-то вроде Язык: 0,75, Музыка: 0,12, Внутри, в большой комнате или зале: 0,03

Результат зависит от входящего файла. Эти значения представляют собой предсказания, сделанные нейронной сетью. Большее значение означает более высокую вероятность принадлежности входного файла к этому классу.

2. Захват и обработка данных с микрофона

python capture.py запускает процесс бесконечного сбора данных с вашего микрофона. Он будет передавать данные в интерфейс классификации каждые 5–7 секунд (по умолчанию). Вы можете увидеть результаты в предыдущем примере.

Вы можете запустить его с помощью –save_path=/path_to_samples_dir/ и в этом случае все полученные данные будут храниться в предоставленном каталоге wav файлы. Эта функция полезна, если вы хотите попробовать разные модели с теми же примерами. Использовать – помощь параметр, чтобы получить больше информации.

3. Веб-интерфейс

python daemon.py реализует простой веб-интерфейс, доступный по умолчанию. Мы использовали тот же код, что и в предыдущем примере. Вы можете посмотреть последние десять прогнозов на странице событий (/events).

8JLrA632a9pYZmgLBazB8yBU25LytjqBIpO9

Интеграция услуг IoT

И последнее, но не менее важное – интеграция с инфраструктурой IoT. Если вы запустите веб-интерфейс, который мы упоминали в предыдущем разделе, вы сможете найти состояние и конфигурацию клиента DeviceHive на странице индекса. Пока клиент подключен, прогнозы будут отправляться на указанное устройство в качестве уведомления.

4GtwB2dk8FuGPKSd-xMmFLGj-vxb5-SMWdan

Вывод

TensorFlow – это очень гибкий инструмент, как вы видите, и может быть полезен во многих программах машинного обучения, таких как распознавание изображений и звука. Наличие такого решения вместе с платформой IoT позволяет создавать разумное решение на широкой территории.

Умные города могут использовать это в целях безопасности, постоянно выслушивая разбитые стекла, выстрелы и другие звуки, связанные с преступлениями. Даже в тропических лесах это решение можно использовать для отслеживания диких животных или птиц путем анализа их голосов.

Платформа IoT может доставлять все уведомления. Это решение можно установить на локальных устройствах (хотя его все еще можно развернуть как облачный сервис), чтобы минимизировать трафик и расходы на облако. Его можно настроить для доставки только уведомлений вместо включения необработанного аудио. Не забывайте, что это проект с открытым исходным кодом, поэтому, пожалуйста, используйте его смело.

Написал Николай Хабаров, соучредитель DeviceHive.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *