1. Прежде чем начать
В предыдущей кодовой лаборатории вы создали базовое приложение для классификации звука.
Что делать, если вы хотите настроить модель классификации аудио для распознавания аудио из разных классов, отсутствующих в предварительно обученной модели? Или что, если вы хотите настроить модель, используя свои собственные данные?
В этой Codelab вы настроите предварительно обученную модель классификации аудио для обнаружения звуков птиц. Тот же метод можно воспроизвести, используя ваши собственные данные.
Предпосылки
Эта лаборатория кода предназначена для опытных мобильных разработчиков, которые хотят получить опыт работы с машинным обучением. Вы должны быть знакомы с:
- Разработка под Android с использованием Kotlin и Android Studio.
- Базовый синтаксис Python
Что вы узнаете
- Как сделать перенос обучения для аудио домена
- Как создать свои данные
- Как развернуть собственную модель в приложении для Android
Что вам понадобится
- Последняя версия Android Studio (v4.1.2+)
- Физическое устройство Android с версией Android на API 23 (Android 6.0)
- Пример кода
- Базовые знания Android-разработки на Kotlin
2. Набор данных о птицах
Вы будете использовать набор данных Birdsong, который уже подготовлен, чтобы упростить его использование. Все аудиофайлы взяты с сайта Xeno-canto .
Этот набор данных содержит песни из:
Название : Домовый воробей | Код : houspa |
Название : Красный клест | Код : redcro |
Название : Белогрудый крапивник | Код : wbwwre1 |
Имя : Антпитта с каштановой короной | Код : chcant2 |
Название : Шипохвост Азары | Код : azaspi1 |
Этот набор данных находится в zip-файле, и его содержимое:
- Файл
metadata.csv
, в котором содержится вся информация о каждом аудиофайле, например, кто записал звук, где он был записан, лицензия на использование и имя птицы. - Папка для поездов и тестов.
- Внутри папок train/test есть папка для каждого кода птицы. Внутри каждого из них есть все файлы .wav для этой птицы на этом сплите.
Все аудиофайлы имеют формат wav и соответствуют этой спецификации:
- Частота дискретизации 16000 Гц
- 1 аудиоканал (моно)
- 16 -битная скорость
Эта спецификация важна, поскольку вы будете использовать базовую модель, которая ожидает данные в этом формате. Чтобы узнать больше об этом, вы можете прочитать дополнительную информацию в этом сообщении в блоге .
Чтобы упростить весь процесс, вам не нужно загружать набор данных на свой компьютер, вы будете использовать его в Google Colab (далее в этом руководстве).
Если вы хотите использовать свои собственные данные, все ваши аудиофайлы также должны быть в этом формате.
3. Получите пример кода
Скачать код
Щелкните следующую ссылку, чтобы загрузить весь код для этой лаборатории кода:
Или, если хотите, клонируйте репозиторий:
git clone https://github.com/googlecodelabs/odml-pathways.git
Распакуйте загруженный zip-файл. Это распакует корневую папку ( odml-pathways
) со всеми необходимыми ресурсами. Для этой лаборатории кода вам понадобятся только исходники в audio_classification/codelab2/android
.
Подкаталог android
в репозитории audio_classification/codelab2/android
содержит два каталога:
- starter — начальный код, на основе которого вы строите эту лабораторию кода.
- final — Завершенный код для готового примера приложения.
Импортировать стартовое приложение
Начните с импорта стартового приложения в Android Studio:
- Откройте Android Studio и выберите «Импорт проекта» (Gradle, Eclipse ADT и т. д.).
- Откройте начальную папку (
audio_classification/codelab2/android/starter
starter
из исходного кода, который вы скачали ранее.
Чтобы убедиться, что все зависимости доступны для вашего приложения, вы должны синхронизировать свой проект с файлами gradle после завершения процесса импорта.
- Выберите «Синхронизировать проект с файлами Gradle» ( ) на панели инструментов Android Studio.
4. Разберитесь со стартовым приложением
Это то же самое приложение, которое было создано в первой лаборатории кода для классификации аудио: Создайте базовое приложение для классификации аудио .
Чтобы лучше понять код в деталях, рекомендуется выполнить эту лабораторную работу, прежде чем продолжить.
Весь код находится в MainActivity
(чтобы быть максимально простым).
Таким образом, код выполняет следующие задачи:
- Загрузка модели
val classifier = AudioClassifier.createFromFile(this, modelPath)
- Создание аудиорекордера и начало записи
val tensor = classifier.createInputTensorAudio()
val format = classifier.requiredTensorAudioFormat
val recorderSpecs = "Number Of Channels: ${format.channels}\n" +
"Sample Rate: ${format.sampleRate}"
recorderSpecsTextView.text = recorderSpecs
val record = classifier.createAudioRecord()
record.startRecording()
- Создание потока таймера для запуска логического вывода. Параметры метода
scheduleAtFixedRate
— это время ожидания начала выполнения и время между последовательным выполнением задачи. В приведенном ниже коде он запустится через 1 миллисекунду и будет запускаться снова каждые 500 миллисекунд.
Timer().scheduleAtFixedRate(1, 500) {
...
}
- Выполнение вывода по захваченному звуку
val numberOfSamples = tensor.load(record)
val output = classifier.classify(tensor)
- Классификация фильтров по низким баллам
val filteredModelOutput = output[0].categories.filter {
it.score > probabilityThreshold
}
- Показать результаты на экране
val outputStr = filteredModelOutput.map { "${it.label} -> ${it.score} " }
.joinToString(separator = "\n")
runOnUiThread {
textView.text = outputStr
}
Теперь вы можете запустить приложение и поиграть с ним как есть, но помните, что оно использует более общую предварительно обученную модель.
5. Обучите пользовательскую модель аудиоклассификации с помощью Model Maker
На предыдущем шаге вы загрузили приложение, которое использует предварительно обученную модель для классификации аудиособытий. Но иногда вам нужно настроить эту модель для звуковых событий, которые вас интересуют, или сделать ее более специализированной версией.
Как упоминалось ранее, вы настроите модель на звуки птиц. Вот набор данных со звуками птиц , взятый с веб-сайта Xeno-canto .
Сотрудничество
Затем перейдем к Google Colab для обучения пользовательской модели.
Обучение пользовательской модели займет около 30 минут.
Если вы хотите пропустить этот шаг, вы можете загрузить модель, которую вы обучили в colab с предоставленным набором данных, и перейти к следующему шагу.
6. Добавьте пользовательскую модель TFLite в приложение для Android.
Теперь, когда вы обучили свою собственную модель классификации звука и сохранили ее локально, вам нужно поместить ее в папку ресурсов приложения для Android.
Первый шаг — переместить загруженную модель из предыдущего шага в папку ресурсов в вашем приложении.
- В Android Studio в представлении Android Project щелкните правой кнопкой мыши папку ресурсов.
- Вы увидите всплывающее окно со списком параметров. Одним из них будет открытие папки в вашей файловой системе. Найдите подходящий для вашей операционной системы и выберите его. На Mac это будет « Показать в Finder», в Windows — « Открыть в проводнике », а в Ubuntu — « Показать в файлах» .
- Скопируйте загруженную модель в папку.
Сделав это, вернитесь в Android Studio, и вы должны увидеть свой файл в папке с ресурсами.
7. Загрузите новую модель в базовое приложение.
Базовое приложение уже использует предварительно обученную модель. Вы замените его на тот, который вы только что обучили.
- TODO 1: Чтобы загрузить новую модель после добавления ее в папку с ресурсами , измените значение переменной
modelPath
:
var modelPath = "my_birds_model.tflite"
Новая модель имеет два выхода (головки):
- Оригинальный, более общий вывод базовой модели, которую вы использовали, в данном случае YAMNet.
- Вторичный результат, характерный для птиц, которых вы использовали при обучении.
Это необходимо, потому что YAMNet отлично справляется с распознаванием нескольких общих классов, таких как, например, Silence. При этом вам не нужно беспокоиться обо всех других классах, которые вы не добавили в свой набор данных.
Что вы сделаете сейчас, так это то, что если классификация YAMNet показывает высокий балл для класса птиц, то вы посмотрите, какая это птица, в другом выводе.
- TODO 2: Прочтите, если первый заголовок классификации имеет высокую степень уверенности в том, что это звук птицы. Здесь вы измените фильтрацию, чтобы также отфильтровать все, что не является птицей:
val filteredModelOuput = output[0].categories.filter {
it.label.contains("Bird") && it.score > .3
}
- TODO 3: Если базовая голова модели обнаружит, что в звуке была птица с хорошей вероятностью, вы получите, какая она на второй голове:
if (filteredModelOutput.isNotEmpty()) {
Log.i("Yamnet", "bird sound detected!")
filteredModelOutput = output[1].categories.filter {
it.score > probabilityThreshold
}
}
Вот и все. Изменить модель, чтобы использовать ту, которую вы только что обучили, очень просто.
Следующим шагом будет его тестирование.
8. Протестируйте приложение на новой модели.
Вы интегрировали модель классификации аудио в приложение, так что давайте ее протестируем.
- Подключите устройство Android и нажмите «Выполнить» ( ) на панели инструментов Android Studio.
Приложение должно уметь правильно предсказывать звуки птиц. Чтобы упростить тестирование, просто воспроизведите один из аудиофайлов со своего компьютера (из предыдущих шагов), и ваш телефон сможет его обнаружить. Когда это произойдет, на экране появится имя птицы и вероятность того, что оно правильное.
9. Поздравления
В этой лабораторной работе вы узнали, как создать собственную модель классификации звука с помощью Model Maker и развернуть ее в своем мобильном приложении с помощью TensorFlow Lite. Чтобы узнать больше о TFLite, взгляните на другие образцы TFLite.
Что мы рассмотрели
- Как подготовить собственный набор данных
- Как выполнить перенос обучения для классификации аудио с помощью Model Maker
- Как использовать свою модель в приложении для Android
Следующие шаги
- Попробуйте со своими данными
- Поделитесь с нами тем, что вы строите
Учить больше
- Ссылка на путь обучения
- Документация TensorFlow Lite
- Документация по созданию моделей
- Документация TensorFlow Hub
- Машинное обучение на устройстве с помощью технологий Google