Резюме: я получил ~ 79% успеха, используя resnet50 для классификации различных звуков транспортных средств из архива звуковых эффектов BBC на основе 1-й недели курса глубокого обучения fast.ai.

Я начал курс глубокого обучения fast.ai. Домашнее задание на первую неделю — попытаться создать для себя классификатор изображений на основе блокнота и шагов, описанных в лекции. В курсовой лекции Джереми упомянул, что люди использовали CNN для классификации звуков, преобразовывая звуки в спектрограммы и классифицируя полученные изображения. На высоком уровне этот процесс научит компьютер определять разницу между тем, как звучит автомобиль, и тем, как звучит лодка. Звучит достаточно просто — давайте попробуем. Я подумал, что попробую классифицировать звуки из Архива звуковых эффектов BBC.

(Ответьте на информационный бюллетень Джереми Сингера-Вайна Data is Plural — я подписан на него уже много лет, и хотя я не читаю его религиозно, невероятно полезно иметь сотни интересных, структурированных, публично- доступные наборы данных находятся на расстоянии поиска в Gmail.)

Подготовка данных была простой, но непростой. В то время как домашняя страница проекта предоставляет интерактивный способ поиска и прослушивания звуков, который позволяет вам открывать такие жемчужины, как Полдюжины оборотней и Казнь осуществляется плахой и мечом (в отличие от Казнь осуществляется с помощью блока и большого топора), мне пришлось массово загружать WAV-файлы, классифицировать их и конвертировать в изображения. В итоге я получил кучу изображений спектрограмм WAV-записей различных транспортных средств или вещей, связанных с транспортными средствами. Изображения, которые мы будем классифицировать, выглядят так:

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

Я придумал, как читать файлы моего диска Google из colab и создавать fastai ImageDataBunch из моей структуры каталогов, которая выглядела как data/Cars/07076115.wav.png, data/Trains/07073234.wav.png и т. д. Это было довольно просто, я сделал это следующим образом:

import os.path
root_dir = "/content/gdrive/My Drive/"
root_path = Path(root_dir)
data_path = root_path/"data"
data = ImageDataBunch.from_folder(data_path,
                                  train=".",
                                  valid_pct=0.2,
                                  ds_tfms=get_transforms(),
                                  size=224,
                                  bs=bs).normalize(imagenet_stats)

Затем я просто пробежал оставшуюся часть рабочей тетради недели 1 так, как она была представлена ​​на лекции. Во-первых, это сработало, так что для первого раза неплохо! Однако результаты не были удивительными. Я получил довольно плохие результаты из урока 1 по умолчанию resnet34: частота ошибок ~ 42%. Довольно уродливо и лишь немногим лучше, чем случайность. Тем не менее, это многообещающе; кажется, что спектрограммы выглядят более отчетливо для нейронной сети, чем для меня! Выбор уровня потерь привел к ошибке ~ 35%; все еще довольно ужасно, но улучшение.

Затем я чрезвычайно немного продвинулся вперед и обучил его на resnet50 с большими изображениями (512 пикселей) и настраиваемой скоростью потерь. Это привело к частоте ошибок ~ 21%, что, безусловно, является улучшением, но все же не является чем-то особенным…

…По крайней мере, так я думал, пока не начал лекцию на второй неделе! Выяснилось, что предыдущий студент также решил классифицировать аудио таким же образом и добился 20% ошибок. И Джереми был в восторге от этого, потому что это превосходит ранее опубликованный современный результат — ~ 21%! Так что вдруг мне не так уж и плохо всего лишь поставить предыдущий известный мировой рекорд с первой попытки :)

Я не уверен, есть ли у этого проекта какие-то основания и буду ли я продолжать его дальше. Меня интересует идея анализа окружающего звука, поскольку она кажется естественным подходом для отключенных маломощных датчиков IoT в качестве мониторов, а выявление неточного окружающего звука — проблема, которую очень сложно решить с помощью жестко запрограммированных эвристик, основанных на правилах. Конечно, я еще не знаю, что обнаруживаю… Я полагаю, вы могли бы слушать самолеты возле аэропорта или лягушек в определенной среде обитания. На самом деле, это может быть полезным проектом — научить нейронную сеть распознавать различные крики лягушек, оставить маломощное устройство в исследуемой области, чтобы регистрировать, какие крики лягушки она слышит в течение некоторого времени, затем извлечь устройство и узнать, что оно услышало. … Хм. Я почти уверен, что слышал подкаст об этом, интересно, могу ли я найти их…

Теперь на 2 неделе!