Сверточные нейронные сети (CNN) являются одной из наиболее эффективных сетевых моделей, используемых для классификации изображений, учитывая способность алгоритма обрабатывать входные нейроны окнами, улучшая время обучения и точность. Эти преимущества можно использовать для разработки надежной модели классификации с надлежащей предварительной обработкой данных.
Проделанная здесь работа сильно повлияла на следующий алгоритм:
https://www.youtube.com/watch?v=Z7YM-HAz-IY&list=PLhA3b2k8R3t2Ng1WW_7MiXeh1pfQJQi_P
В этом примере мы построим модель, которая попытается классифицировать двухсекундный звуковой фрагмент как одну из трех категорий:
- Шум в микрофоне
- Помехи ветра
- Тишина
Во-первых, нам нужно собрать набор данных. Используя библиотеку python pyaudio, мы создадим короткий скрипт для захвата звукового фрагмента, который будет использоваться для обучающего набора.
pip install pyaudio
Собрав каждую категорию отдельно и начав с ветровойклассификации, следующий скрипт возьмет двухсекундный фрагмент, назначит имя файла, а затем сохранит его в аудиокаталоге. Когда скрипт запущен, для ветра попробуйте подуть на микрофон компьютера. В случае шума проведите пальцем по микрофону, чтобы создать шумный отклик. Для эмбиента просто позвольте сценарию работать без вмешательства микрофона.
Измените переменную cat_str для каждого условия категории, запустив всего три раза, чтобы получить набор данных.
После того, как все файлы .wav будут собраны, необходимо создать CSV-файл метаданных. Конфигурацию можно найти ниже:
index,slice_file_name,class_name 1 ,noise_0.wav ,noise ... 25 ,wind_0.wav ,wind ... 50 ,ambient_0.wav ,ambient
Конечно, существует питонический способ создания этого файла, однако, поскольку мой набор данных невелик, я просто использовал Excel.
Теперь рабочий каталог должен быть настроен, как показано ниже:
Sound classification: |_ audio_capture.py |_ office_sounds.csv |_ audio |_ wind_0.wav ... |_ wind_25.wav |_ ambient_0.wav ... |_ ambient_25.wav |_ noise_0.wav ... |_ noise_25.wav
Давайте немного изучим данные.
Обратите внимание на импорт. Наиболее важной используемой библиотекой является python_speech_features.
pip install python_speech_features
https://github.com/jameslyons/python_speech_features
Это преобразует звуковые данные из временной области в частотную область с акцентом на низкочастотную слышимую полосу.
Изображение, которое мы будем подавать в классификатор CNN, генерируется из Мел частотных кепстровых коэффициентов (MFCC) сигнала.
Давайте очистим данные, удалив мертвое пространство (см.: конверт) и сбросим их в чистый каталог файлов.
Новая структура каталогов:
Sound classification: |_ clean.py |_ explore.py |_ audio_capture.py |_ office_sounds.csv |_ audio |_ wind_0.wav ... |_ wind_25.wav |_ ambient_0.wav ... |_ ambient_25.wav |_ noise_0.wav ... |_ noise_25.wav |_ clean |_ wind_0.wav ... |_ wind_25.wav |_ ambient_0.wav ... |_ ambient_25.wav |_ noise_0.wav ... |_ noise_25.wav
Чтобы построить модель, создайте два новых файла Python: cfg.py и model_implement.py.
cfg.py будет хранить основную информацию о модели. Это разделение станет полезным, если мы захотим поэкспериментировать с дополнительными нейронными сетями.
model_implement.py вызывает cfg для создания CNN с четырьмя слоями, три из которых скрыты.
build_rand_feat()выполнит черновую работу для каждого файла. Это более или менее повторяет то, что было выполнено в explore.py, однако теперь мы строим случайные функции на основе скользящего окна через наш звуковой фрагмент.
Это сохранит обученную модель в каталоге «models», а данные конфигурации — в каталоге «pickles». Обновленный каталог показан здесь:
Sound classification: |_ clean.py |_ explore.py |_ audio_capture.py |_ office_sounds.csv |_ models |_ conv.model |_ pickels |_ conv.model |_ audio |_ conv.p ... |_ wind_25.wav |_ ambient_0.wav ... |_ ambient_25.wav |_ noise_0.wav ... |_ noise_25.wav |_ clean |_ wind_0.wav ... |_ wind_25.wav |_ ambient_0.wav ... |_ ambient_25.wav |_ noise_0.wav ... |_ noise_25.wav
Наконец, добавьте скрипт predict.py, чтобы проверить производительность нашей модели.
Следует отметить, что это чисто экспериментальные данные с довольно небольшим набором данных. Такой высокой точности не следует ожидать в реальном сценарии.
Это пример использования сверточной нейронной сети для классификации фрагментов звуковых данных. Ключевым компонентом успешного внедрения CNN в звуковую классификацию является способность преобразовывать данные из временной области в частотную область с использованием коэффициентов частотного кепстра Мела. В explore.py ясно, что сгенерированные MFCC уникальны для каждой классификации, в то время как отображение сигнала во временной области поддерживает уровень неоднозначности, который в противном случае мог бы помешать алгоритму.