Содержание-

  1. Постановка задачи
  2. Цель/ограничение реального мира
  3. Источник данных и обзор
  4. Показатели эффективности
  5. Существующее решение
  6. Подход к первому разрезу
  7. Исследовательский анализ данных
  8. Предварительная обработка и проектирование функций
  9. Моделирование
  10. Развертывание
  11. Будущая работа
  12. Ссылка

Давайте начнем

1. Постановка задачи-

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

2. Реальная цель/ограничение-

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

(ii) Задержка должна быть как можно меньше, мы должны стараться, чтобы прогнозирование не занимало более 1 секунды, потому что, если мы используем устройство в лесу, нам нужно, чтобы наше устройство определяло вид, как только оно будет услышано. .

(iii) Количество ложноотрицательных результатов должно быть как можно меньше, потому что если существует опасный вид, а наша модель его не предсказывает, то это может стоить кому-то жизни.

(iv) Модель будет обучаться с использованием аудиосигналов фиксированной длины, но в режиме реального времени звук будет непрерывно подаваться на устройство, поэтому нам нужно найти решение этой проблемы, мы обсудим это в разделе «Подход первого разреза».

3. Источник данных и обзор-

Нам предоставлено 4727 аудиофайлов, и каждый из аудиофайлов был записан в Тропическом лесу, данные были собраны с помощью устройства, которое наряду с записью звука также определяет, голос какого вида присутствует в аудио, позже эти данные были проверены экспертами вручную, а теперь примерно для 1100 из этих файлов нам дается, какие виды были обнаружены устройством, и эксперты также сочли это верным (train_tp.csv), а еще для 3600 файлов нам дается, какие виды были обнаружены устройством, но эксперты обнаружили, что это правда. быть ложным (train_fp.csv). В одном аудио может присутствовать несколько видов, наша задача состоит в том, чтобы предсказать вероятность каждого из видов примерно для 1900 тестовых файлов, которые нам даны.

4. Показатели производительности-

Поскольку нам нужно предсказывать вероятности, а не фактические метки классов, использование логарифмических потерь Multiclass было бы лучшим вариантом вместо использования точности. Он определяется как среднее значение журнала (вероятность фактической метки класса). Математически это определяется как

Где F — потеря, pij — вероятность, выдаваемая классификатором, yij — двоичная переменная (1, если ожидается метка, 0 в противном случае), N — количество выборок, M — количество классов.

На простом языке мы можем определить это как-

Где P - вероятность фактической метки класса, а n - количество выборок.

5. Существующие решения-

(i) https://arxiv.org/pdf/1804.07177v1.pdf

Эта статья основана на задаче идентификации 2018LifeCLEF. Эта задача очень похожа на нашу, за исключением того, что в ней нет ложноположительного результата. Работа разделена на 3 части. Сначала все аудио преобразуются в спектрограммы, а затем обучается нейронная сеть на основе свертки. Архитектура CNN, реализованная в статье, выглядит так:

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

Или, говоря простым языком, мы можем определить это как-

Где n - количество выборок

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

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

(ii) https://pypi.org/project/noisereduce/

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

(iii) https://arxiv.org/pdf/1608.04363v2.pdf

Этот документ основан на данных классификации звуков окружающей среды. В этой статье предлагается архитектура на основе CNN с увеличением данных и сравниваются ее результаты со Spherical K Means (SKM) и PiczakCNN для тех же данных. Ключевым выводом из этой статьи является то, как методы увеличения могут помочь в улучшении результатов. Сравнение модели с аугментацией и без нее выглядит следующим образом:

Это показывает нам, что результаты SKM имеют незначительное улучшение с увеличением, но результаты предлагаемой модели (SB-CNN) имеют значительное улучшение с увеличением. Методы, используемые для увеличения в этой статье:

* Растяжение по времени с коэффициентом: {0,81, 0,93, 1,07, 1,23}

* Сдвиг высоты тона с коэффициентом: {-3,5,-2,5,-2,-1, 1, 2,2,5,3,5}

* Сжатие динамического диапазона

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

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

(iv) https://arxiv.org/pdf/1902.10107v2.pdf

Эта статья основана на наборе данных voxceleb2, но также демонстрирует значительное улучшение набора данных voxceleb1. Эта статья основана на работе CNN и метода, основанного на словаре. В то время как CNN помогает извлекать шаблоны из входных данных, последняя помогает преобразовывать входные данные в длину фиксированного размера. С помощью этих методов в этой статье предлагается комплексная модель распознавания говорящего. Сначала используется экстрактор признаков для извлечения признаков из входных спектрограмм на уровнях кадров. Каждая спектрограмма сокращается с использованием 2,5-секундного скользящего окна и размера шага в 1 секунду, а затем также применяется нормализация. Ниже приведено изображение сетевой архитектуры, которая включает в себя извлечение функций и частичную агрегацию.

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

(v) https://arxiv.org/pdf/2002.04683v1.pdf

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

Dn — это набор данных, для которого точки могут быть неправильно помечены. Fa — классификатор, обученный с использованием Dc (набор данных, для которого правильно помечены точки). Прогноз делается с использованием этого классификатора для каждой точки в Dn и проверяется условие (надежность прогноза › порог и прогноз не совпадает с предыдущей меткой), затем точка перемаркируется, а затем эти данные также используются в дополнение к Dc для обучения конечного классификатора.

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

6. Подход к первому разрезу-

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

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

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

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

В режиме реального времени/продакшена в модель будут подаваться аудиоклипы продолжительностью 5 секунд каждый. Таким образом, после включения устройства для первого прогноза потребуется 5 секунд, после чего звук будет подаваться в модель с шагом 1 секунда, поэтому после первого прогноза новый прогноз будет делаться через каждую 1 секунду.

7. Исследовательский анализ данных-

7.1 Анализ нулевого значения

У нас нет нулевых значений.

7.2 Сбалансированы ли наши данные?

Из 24 классов только один класс имеет очень большое количество точек данных по сравнению с другими классами. Таким образом, мы можем сделать вывод, что наши данные практически сбалансированы.

7.3 Более 1 вида в одном аудиофайле?

Мы обсудили, что один аудиофайл может содержать несколько видов, поэтому теперь мы проверим, сколько аудио содержит несколько видов и как мы будем с ними справляться.

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

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

7.4 Зависит ли вид от минимальной частоты?

Мы видим, что некоторые классы легко отделимы.
Если f_min›10000, то видов=22
8000›f_min›6000, тогда видов=23
6000›f_min›5800, тогда видов=0
4000›f_min›5000, затем видов= 5 или 7
Аналогично, есть и некоторые другие группы классов, которые можно отличить от других классов.
Их тоже очень мало выбросы, и ни один из них не очень далеко.

7.5 Зависит ли вид от максимальной частоты?

На предыдущем графике мы не могли различить классы 5 и 7, но здесь их легко отличить.
Класс 19 можно легко отделить от классов 13,15, что было неясно на предыдущем графике. Но все еще есть некоторые классы, которые нельзя разделить, например, классы 8 и 9 почти похожи.
Только класс 17 имеет выброс, который очень далеко от других точек данных, выбросы всех других классов не очень велики.

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

7.6 Аудиофайлы имеют одинаковую продолжительность?

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

Это делает вещи более ясными, мы можем видеть, что 80% точек имеют продолжительность ‹ 3,44 секунды, но все еще есть 20% точек, которые имеют продолжительность> 3,44 секунды. Итак, мы будем рассматривать точку с максимальной продолжительностью.

8. Предварительная обработка и разработка функций-

Для предварительной обработки мы сначала загрузим наши файлы, а затем нарежем их в соответствии со временем, в которое слышен вид, но мы не хотим быть очень точными в отношении времени среза, поскольку это не поможет нашей модели в обобщении. Итак, в дополнение к нарезке аудиофайла по заданному времени мы также добавим 0,2 секунды в начале и начале.

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

Теперь, чтобы обобщить наши данные, давайте добавим увеличение к нашим обучающим данным.

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

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

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

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

9. Моделирование-

Мы начнем с нейронной сети на основе свертки, а затем перейдем к LSTM.

Модель на основе свертки-

Это наша первая модель архитектуры. Это очень простая архитектура последовательной свертки, основанная на слоях Conv1D. В дополнение к Conv1D мы также использовали слои объединения Maxpooling и GlobalAverage в нашей архитектуре модели.

Теперь давайте обучим это и посмотрим, как оно работает.

Наша модель работает довольно хорошо, мы получаем точность 95% на тестовых данных. Теперь давайте посмотрим, сможем ли мы это улучшить. Сейчас мы попробуем архитектуру на основе LSTM.

Модель на основе LSTM-

Производительность этой модели немного хуже, чем у нашей предыдущей модели. Давайте попробуем архитектуру на основе Conv + LSTM и посмотрим, сможем ли мы улучшить производительность.

Архитектура LSTM + Conv-

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

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

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

10. Развертывание-

Что хорошего в модели, если она не доходит до клиентов. Большинство блогов о тематических исследованиях пропускают эту часть, но мы не оставим камня на камне. Мы будем использовать flask для развертывания и Heroku для обслуживания.

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

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

Итак, теперь мы закончили с конвейером, и теперь пришло время использовать flask для развертывания, и нам также нужно создать HTML-страницы (я буду делать это очень просто).

Давайте разберемся, что на самом деле делает этот код.

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

Теперь давайте перейдем к Heroku. Итак, Heroku бесплатен и довольно прост в использовании, мы будем использовать Github для развертывания нашей модели на Heroku. Таким образом, мы создали два дополнительных файла: Procfile (без расширения) и Requirements.txt.

Procfile содержит имя файла, который необходимо запустить в первую очередь, а requirements.txt содержит имена всех модулей, которые необходимо установить. Теперь нам просто нужно выбрать «подключиться к github» на Heroku, выполнить поиск в нашем репозитории github и нажать «Развернуть». Если весь код правильный, модель будет развернута и для вашего приложения будет сгенерирована ссылка.

После выполнения всех вышеперечисленных действий вот наше приложение. Открытие ссылки может занять некоторое время, наберитесь терпения.

Вот одно видео, показывающее работающую демонстрацию нашего проекта.

11. Будущая работа-

  1. Вместо преобразования данных в спектрограмму мы можем попробовать что-то еще, например преобразование Фурье.
  2. Можно попробовать модели, основанные на механизме внимания, чтобы использовать информацию из далекого прошлого для улучшения результатов.
  3. Мы можем выполнить шумоподавление, чтобы улучшить результат.
  4. Мы также можем сначала пометить наши немаркированные точки данных, а затем использовать оба типа данных для обучения нашей модели.

12. Ссылки-

  1. https://arxiv.org/pdf/1804.07177v1.pdf
  2. https://pypi.org/project/noisereduce/
  3. https://arxiv.org/pdf/1608.04363v2.pdf
  4. https://arxiv.org/pdf/1902.10107v2.pdf
  5. https://arxiv.org/pdf/2002.04683v1.pdf
  6. https://www.appliedaicourse.com/course/11/Applied-Machine-learning-course

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