Подготовка данных и обучение модели в Create ML

Анонсированная в этом году на WWDC 2019 и новинка iOS 13 и macOS 10.15, возможность анализировать и классифицировать звук с помощью машинного обучения в Core ML 3!

Недавно, ища наборы звуковых данных с открытым исходным кодом, я наткнулся на интересный вопрос: Bird Audio Detection Challenge, предоставленный лабораторией машинного прослушивания Лондонского университета королевы Марии.

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

  1. Эффективная модель, обученная распознавать звуки птиц в любой среде, поможет автоматизировать службы мониторинга дикой природы и внесет вклад в работу, выполняемую службами охраны дикой природы во всем мире.
  2. Набор данных может помочь нам лучше понять, как построить надежную модель классификации, которую мы могли бы также распространить на другие варианты использования.
  3. Набор данных позволит нам продемонстрировать создание звукового классификатора с помощью Create ML и его развертывание в простом приложении для iOS с помощью Skafos.

В оставшейся части этой статьи я рассмотрю этапы подготовки набора данных и обучения модели с помощью Create ML.

Сбор обучающих данных

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

  • Аудио файлы: ff1010bird_wav.zip
  • Ярлыки данных: ff1010bird_metadata.csv

После распаковки аудиофайлов у вас должна получиться одна папка, содержащая ~ 7690 отдельных записей в формате WAV.

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

Подготовка данных для создания машинного обучения

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

  • Вместо одной большой папки, содержащей все аудиоклипы, нам нужно разделить набор данных на группы обучения и тестирования.
  • Используя данные в ff1010bird_metadata.csv, нам нужно переместить аудиоклипы в папки, сгруппированные по их соответствующему «классу»: hasbird & nobird. Таким образом, Create ML может вывести имена классов набора данных.

Ниже представлена ​​небольшая программа Python data_prep.py для перемещения аудиофайлов. Запустите этот сценарий из того же каталога, в котором хранится папка аудио и метаданные csv.

$ python data_prep.py

Вы также можете сделать все это вручную, если у вас много свободного времени!

## data_prep.py ##
import os
import pandas as pd
# Setup Audio File Paths
path = 'wav/'
hasbird = 'hasbird/'
nobird = 'nobird/'

def make_path(r):
    if r['train']:
        new_path = 'train/'
    else:
        new_path = 'test/'
    if not os.path.exists(path + new_path):
        os.mkdir(path + new_path)
    if r['hasbird']:
        new_path += hasbird
    else:
        new_path += nobird
    if not os.path.exists(path + new_path):
        os.mkdir(path + new_path)
    return new_path + r['audio_fn']
# Load Meta Data CSV into a Pandas DF
birds = pd.read_csv('ff1010bird_metadata.csv')
# Assign to train/test and create new path
train_ix = birds.sample(frac=0.8, random_state=42).index
birds['train'] = [i in train_ix for i in birds.index]
birds['audio_fn'] = birds['itemid'].apply(lambda x: str(x) + '.wav')
birds['new_path'] = birds.apply(lambda r: make_path(r), axis=1)
# Move audio files
for i, r, in birds.iterrows():
    os.rename(path + r['audio_fn'], path + r['new_path'])
print('Done!')

Обучение с помощью Create ML

А теперь самое интересное!

Откройте приложение Create ML и выберите Sound Classifier в меню шаблонов. Введите название проекта, автора, лицензию и описание по своему усмотрению.

После нажатия кнопки «Далее» вам будет представлен интерфейс с несколькими различными панелями и параметрами. Сначала настройте входные данные. Выберите файлы как для данных обучения, так и для данных тестирования. Откроется окно Finder, в котором вы можете выбрать папку train/ и test/ с аудиоклипами соответственно.

Оставьте для поля данных проверки значение «автоматический». На момент написания этого поста это был единственный вариант, доступный в бета-версии приложения Create ML.

Create ML автоматически определяет 2 имеющихся класса (hasbirds и nobirds) на основе выбранных данных.

Теперь мы готовы обучать модель звукового классификатора! Нажмите кнопку воспроизведения Train в левом верхнем углу приложения.

Затем подождите несколько минут, пока Create ML обучит модель. Вы должны увидеть прогресс, отображаемый в раскрывающейся панели Активность. Узнайте больше от наших друзей в Turi Create о том, что здесь происходит.

  • Шаг 1. Извлечение функций. Создание ML сканирует все аудиофайлы, выполняет обработку сигналов и автоматически извлекает функции для использования во время обучения.
  • Шаг 2. Обучение. Создание машинного обучения итеративно обучает слои нейронной сети классификатора звука, находящиеся под капотом.

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

Тестирование модели

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

По данным тестирования удержания, модель имела точность 85% со следующей разбивкой по точности и отзыву:

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

Оценка модели на внешних данных

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

Выход

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

Это все, что касается части 1! В следующем посте мы поделимся образцом приложения для iOS, которое вы можете использовать для интеграции вашего нового артефакта Core ML и настройки с Skafos для доставки модели и управления ею.