Машинное обучение для птиц: создание собственного классификатора вокализации птиц

Машинное обучение для птиц: создание собственного классификатора вокализации птиц

9 июня 2025 г.

Введение

Ученые используют автоматизированные системы для изучения больших экосистем. В случае с лесными и джунглиавтономные записи (Arus)используются для записи звука, которое можно использовать для выявления различных видов животных и насекомых. Эта информация может быть использована для лучшего понимания распределения видов в данной среде. В случае птиц, Google Research отмечает в своей статьеРазделение птиц в дикой природе для классификациичто «экологи используют птиц для понимания пищевых систем и здоровья лесов - например, если в лесу больше дятлов, это означает, что есть много мертвого дерева». Кроме того, они отмечают ценность идентификации на основе звука: «[поскольку] птицы общаются и отмечают территорию песнями и звонками, наиболее эффективно идентифицировать их на слух. Фактически, эксперты могут идентифицировать в 10 раз на слух, как у слух».

НедавноBirdClef+ 2025Конкурс началсяКэгглпод эгидойImageClefорганизация ImageClef поддерживает исследование аннотации кросс -языка и поиска изображений в различных областях. Цель конкуренции-прямая: разработать модель классификации, которая может точно предсказать виды птицы из аудиозаписи.

Сначала задача кажется тривиальной, учитывая доступностьGoogle Bird Vocalization (GBV) классификатор, также известный какОкуньПолем Классификатор GBV обучен почти 11 000 видов птиц и, следовательно, является очевидным выбором в качестве модели классификации.

Тем не менее, конкуренция включает в себя виды птиц, которые лежат за пределами обучения классификатора GBV. В результате классификатор GBV достигает только ~ 60% точности на набор данных конкуренции BirdClef+ 2025. В результате должна быть разработана пользовательская модель.

В этом руководстве подробно описывается подход для создания собственного классификатора вокализации птиц, который можно использовать в сочетании с классификатором GBV для классификации более широкого выбора видов птиц. В подходе используются те же основные методы, описанные в исследовании Googleстатьяупомянуто выше. Дизайн использует набор конкуренции BirdClef+ 2025 для обучения.

Данные обучения

АBirdClef+ 2025 Набор данных обучения, включающий в себя поддерживающие файлы, составляет приблизительно 12 ГБ. Основные каталоги и файлы, содержащие структуру набора данных:

birdclef_2025
|__ train_audio
|__ train_soundscapes
|__ test_soundscapes
recording_location.txt
taxonomy.csv
train.csv

train_audio

Аtrain_audioкаталог является крупнейшим компонентом набора данных, содержащего 28 564 учебных аудиозаписи в.oggАудио формат. Аудиозаписей сгруппированы в подзадачи, каждый из которых представляет конкретные виды птиц, например:

train_audio
|__amakin1
   |__ [AUDIO FILES]
|__amekes
   |__ [AUDIO FILES]
...

Аtaxonomy.csvФайл может использоваться для поиска фактических научных и общих названий видов птиц, представленных подканальными названиями, например:

SUB-DIRECTORY NAME          SCIENTIFIC NAME             COMMON NAME
amakin1                     Chloroceryle amazona        Amazon Kingfisher
amekes                      Falco sparverius            American Kestrel
...

Amazon Kingfisher

American Kestrel

Набор данных конкуренции включает в себя 206 уникальных видов птиц, то есть 206 классов. Как предполагалось вВведение, 63 из этих классовнетпокрытоGBV классификаторПолем ЭтиНе-GBVКлассы обычно помечаются с использованием числового идентификатора класса:

1139490, 1192948, 1194042, 126247, 1346504, 134933, 135045, 1462711, 1462737, 1564122, 21038, 21116, 21211, 22333, 22973, 22976, 24272, 24292, 24322, 41663, 41778, 41970, 42007, 42087, 42113, 46010, 47067, 476537, 476538, 48124, 50186, 517119, 523060, 528041, 52884, 548639, 555086, 555142, 566513, 64862, 65336, 65344, 65349, 65373, 65419, 65448, 65547, 65962, 66016, 66531, 66578, 66893, 67082, 67252, 714022, 715170, 787625, 81930, 868458, 963335, grasal4, verfly, y00678

Некоторые изНе-GBVклассы характеризуются:

  1. Ограниченные данные обучения.
    • Сорт1139490, например, содержит только 2 аудиозаписи. Напротив, классamakin1, который является «известным»GBVКласс, содержит 89 записей.
  2. Плохое качество записи.
    • Выделение класса1139490Опять же, обе учебные записи имеют низкое качество, причем одна из них особенно трудно различить.

Эти 2 условия приводят к значительному дисбалансу между классами с точки зрения количества доступного качества аудио и аудио.

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

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

train_soundscapes

Аtrain_soundscapesкаталог содержит почти 10000немеченоАудиозаписи птиц. Как будет обсуждаться вСоздание классификатораРаздел, эти аудиозаписи могут быть включены в учебные данные черезПсевдо-маркировкаПолем

test_soundscapes

Аtest_soundscapesкаталог пуст, за исключениемreadme.txtфайл. Этот каталог заполняется скрытым набором тестового звука при представлении результатов прогнозирования в конкуренцию BirdClef+ 2025.

Создание классификатора

Основной подход и фон

Базовый подход, используемыйGoogle Researchобучить их классификатор вокализации птиц следующим образом:

  1. Разделил записанный звук на 5 секунды.
  2. Конвертировать аудио сегменты в спектрограммы MEL.
  3. Тренируйте классификатор изображения на спектрограммах MEL.

Тот же подход будет следовать в этом руководстве. Классификатор изображений, который будет обучен, - это GoogleEfficeNet B0модель. Если у вас есть знакомство сEfficeNetСемейство моделей, вы знаете, что они были разработаны для эффективной обработки изображений.

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

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

Эффективные модели

Google Research представила свою семьюEfficeNetмодели в 2019 году как наборсверточная нейронная сетьМодели, которые превзошли современные модели, в то время, в отношении как размера, так и производительности.

EfficientNet model family performance

EfficeNetV2Модели, выпущенные в 2021 году, предлагают еще лучшую производительность и эффективность параметров.

Хотя тренировалсяImageNetДанные, модели EffureNet продемонстрировали свою утилиту при передаче в другие наборы данных, что делает их привлекательным выбором в качестве технологии классификации для этого проекта.

Мел спектрограммы

Спектрограмма MEL является визуальным представлением аудиосигнала. Это может быть лучше всего аналогична тепловой карте для звука.

Sample mel spectrogram

Ось x спектрограммы MEL представляет размер времени аудиосигнала, а ось Y представляет частоты звуков внутри сигнала. Однако вместо того, чтобы отображать все частоты по непрерывной масштабе, частоты сгруппируются вМел группыПолем Эти полосы, в свою очередь, растянуты, используяМел шкалаПолем Шкала Мела - этологарифмическиймасштабировать, что приближается к человеческой слуховой системе и как люди воспринимают звук. Цвета спектрограммы MEL представляют амплитуду звуков внутри полос. Более яркие цвета представляют собой более высокие амплитуды, в то время как более темные цвета представляют собой более низкие амплитуды.

Дизайн

Моя цель в обсуждении дизайна состоит в том, чтобы обеспечить высокий уровень обзора подхода, не вдаваясь в слишком много деталей. Основная тренировочная (тонкая настройка) логика запечатлена в этомЗаписная книжка Kaggle(«Тренировочный ноутбук»), который состоит из 4 основных разделов:

  • Раздел 1: Аудиоданные загрузки.
  • Раздел 2: Обработка аудиоданных.
  • Раздел 3: Генерация спектрограммы MEL и подготовка ввода.
  • Раздел 4: Обучение модели.

Вы отметите, что первые 2 ячейки каждого основного сечения являются (1) импорт, используемый этим разделом, и (2) aКонфигурацияКонстанты определения ячейки, используемые в этом разделе, и в более поздних разделах.

Тренировочный блокнот фактически начинается сРаздел 0где импортируются базовые пакеты Python, используемые по всей ноутбуке. Этот раздел также включает в себя логику для входа вВес и предвзятость("Wandb") для отслеживания тренировок. Вам нужно будет прикрепить свой собственный WandbAPI -ключв тетрадь какКаггл секретиспользуя имяWANDB_API_KEYПолем

Как обсуждалось вДанные обученияРаздел, немеченые обучающие звуковые ландшафты могут быть включены в учебные данные через псевдо-маркировку. Использование псевдо-меченных данных обсуждается вРаздел 3.5 - псевдо -маркировкаПодраздел ниже. Имейте в виду, что среда не-GPU Kaggle ограничена 30-гиб памяти.

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

Раздел 1 - Загрузка аудиоданных данных

ААудиоданные загрузкиРаздел ноутбука:

  1. Извлекает эти классы в наборе данных конкуренции BirdClef+ 2025нетпокрытоGBVклассификатор.
  2. Загружает необработанные аудиоданные черезload_training_audioметод
  3. Создаетprocessed_audioкаталог и сохраняет копию загруженных аудиодантеров как.wavФайлы в этом каталоге.

АКонфигурацияячейка этого раздела включаетMAX_FILESпостоянный. Эта константа определяет максимальное количество аудиофайлов для загрузки из данного класса. Эта константа произвольно устанавливается на большое значение1000чтобы гарантировать, что все аудиофайлы загружены дляне-GBVклассы Возможно, вам придется отрегулировать эту константу для собственной экспериментальной настройки. Например, если вы загружаете аудиоданные извсеКлассы, возможно, вам потребуется установить эту константу на более низкое значение, чтобы избежать исчерпающей доступной памяти.

Аload_training_audioметод может быть вызван с помощьюclassesПараметр, который является списком классов, чей звук будет загружен. Для этого проектане-GBVклассы хранятся в виде списка и присваиваются переменнойmissing_classesкоторый впоследствии передается вload_training_audioМетод черезclassesпараметр.

# `missing_classes` list
['1139490', '1192948', '1194042', '126247', '1346504', '134933', '135045', '1462711', '1462737', '1564122', '21038', '21116', '21211', '22333', '22973', '22976', '24272', '24292', '24322', '41663', '41778', '41970', '42007', '42087', '42113', '46010', '47067', '476537', '476538', '48124', '50186', '517119', '523060', '528041', '52884', '548639', '555086', '555142', '566513', '64862', '65336', '65344', '65349', '65373', '65419', '65448', '65547', '65962', '66016', '66531', '66578', '66893', '67082', '67252', '714022', '715170', '787625', '81930', '868458', '963335', 'grasal4', 'verfly', 'y00678']

Вы можете загрузить все классы 206 BirdClef+ 2025, передав пустой список в качествеclassesпараметр.

Аload_training_audioМетод также принимает необязательный логическийuse_sliceпараметр. Этот параметр работает сLOAD_SLICEпостоянный определяется вКонфигурацияклетка. Аuse_sliceпараметр иLOAD_SLICEпостоянные естьнетиспользуется с этой реализацией. Однако их можно использовать для загрузки определенного количества аудио из каждого файла. Например, чтобы загрузить только 5 секунд аудио из каждого аудио -файла, установитеLOAD_SLICEк160000, который рассчитывается как5раз скорость отбора проб32000; и пройтиTrueвuse_sliceпараметр.

Аload_training_audioМетод принимает логическийmake_copyпараметр. Когда этот параметрTrue, логика создаетprocessed_audioкаталог и сохраняет копию каждого образца аудио в качестве.wavфайл в каталог. Аудио копии сохраняются в подзадачи, отражающих класс, к которому они принадлежат. Аprocessed_audioКаталог используется в следующем разделе для сохранения модифицированных образцов аудио для диска, не влияя на каталоги наборов данных BirdClef+ 2025.

Аload_training_audioМетод возвращает словарь загруженных аудиоданных, используя имена классов в качестве ключей. Каждое значение в словаре представляет собой список кортежей формы(AUDIO_FILENAME, AUDIO_DATA):

{'1139490': [('CSA36389.ogg', tensor([[-7.3379e-06,  1.0008e-05, -8.9483e-06,  ...,  2.9978e-06,
3.4201e-06,  3.8700e-06]])), ('CSA36385.ogg', tensor([[-2.9545e-06,  2.9259e-05,  2.8138e-05,  ..., -5.8680e-09, -2.3467e-09, -2.6546e-10]]))], '1192948': [('CSA36388.ogg', tensor([[ 3.7417e-06, -5.4138e-06, -3.3517e-07,  ..., -2.4159e-05, -1.6547e-05, -1.8537e-05]])), ('CSA36366.ogg', tensor([[ 2.6916e-06, -1.5655e-06, -2.1533e-05,  ..., -2.0132e-05, -1.9063e-05, -2.4438e-05]])), ('CSA36373.ogg', tensor([[ 3.4144e-05, -8.0636e-06,  1.4903e-06,  ..., -3.8835e-05, -4.1840e-05, -4.0731e-05]])), ('CSA36358.ogg', tensor([[-1.6201e-06,  2.8240e-05,  2.9543e-05,  ..., -2.9203e-04, -3.1059e-04, -2.8100e-04]]))], '1194042': [('CSA18794.ogg', tensor([[ 3.0655e-05,  4.8817e-05,  6.2794e-05,  ..., -5.1450e-05,
-4.8535e-05, -4.2476e-05]])), ('CSA18802.ogg', tensor([[ 6.6640e-05,  8.8530e-05,  6.4143e-05,  ...,  5.3802e-07, -1.7509e-05, -4.8914e-06]])), ('CSA18783.ogg', tensor([[-8.6866e-06, -6.3421e-06, -3.1125e-05,  ..., -1.7946e-04, -1.6407e-04, -1.5334e-04]]))] ...}

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

class,sampling_rate,num_files,num_secs_loaded,num_files_loaded
1139490,32000,2,194,2
1192948,32000,4,420,4
1194042,32000,3,91,3
...

Раздел 2 - Обработка аудиоданных

АОбработка аудиоданныхРаздел ноутбука:

  1. При желании лишит молчаливых сегментов и срезает звук, чтобы устранить большинство человеческих аннотаций из необработанного аудио. Снижение безмолвных сегментов устраняет нерелевантные части аудиосигнала.
  2. При желании дополняет аудио для классов меньшинства, чтобы помочь решить проблему дисбаланса класса. Увеличение звука состоит из (1) добавления случайно сгенерированного шумового сигнала, (2) изменения темпа необработанного звука или (3) добавления случайно сгенерированного шумового сигнала и изменения темпа необработанного аудио.
Раздел 2.1 - Обнаружение молчаливых сегментов

Аdetect_silenceМетод используется для «скольжения» по каждому сырую аудио -образец и идентификации молчаливых сегментов, сравниваяквадрат корневой среды (RMS)значение данного сегмента к указанному порогу. Если RMS находится ниже порога, сегмент идентифицируется как молчаливый сегмент. Следующие постоянные, указанные вКонфигурацияячейка этого раздела контролирует поведениеdetect_silenceМетод:

SIL_FRAME_PCT_OF_SR = 0.25
SIL_FRAME = int(SR * SIL_FRAME_PCT_OF_SR)
SIL_HOP = int(1.0 * SIL_FRAME)
SIL_THRESHOLD = 5e-5
SIL_REPLACE_VAL = -1000 # Value used to replace audio signal values within silent segments

АSIL_FRAMEиSIL_HOPКонстанты могут быть изменены, чтобы настроить, как метод «скользит» над сырым аудио. Точно так жеSIL_THRESHOLDЗначение может быть изменено, чтобы сделать метод более агрессивным или консервативным в отношении идентификации молчаливых сегментов.

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

{'1139490': {'CSA36389.ogg': [0, 8000, 16000, 272000, 280000, 288000, 296000, 304000], 'CSA36385.ogg': [0, 8000, 16000, 24000, 240000, 248000, 256000]}, '1192948': {'CSA36388.ogg': [0, 8000, 16000, 24000, 256000, 264000, 272000, 288000], 'CSA36366.ogg': [0, 8000, 16000, 24000, 256000, 264000, 272000, 280000, 288000], 'CSA36373.ogg': [0, 8000, 16000, 24000, 256000, 264000, 272000, 288000], 'CSA36358.ogg': [8000]}, '1194042': {'CSA18794.ogg': [], 'CSA18802.ogg': [], 'CSA18783.ogg': [0, 8000, 16000, 24000, 600000, 608000, 616000]}, '126247': {'XC941297.ogg': [], 'iNat1109254.ogg': [], 'iNat888527.ogg': [], 'iNat320679.ogg': [0], 'iNat888729.ogg': [], 'iNat146584.ogg': []}, '1346504': {'CSA18803.ogg': [0, 8000, 16000, 24000, 3000000, 3008000, 3016000], 'CSA18791.ogg': [], 'CSA18792.ogg': [], 'CSA18784.ogg': [0, 8000, 16000, 1232000, 1240000, 1248000], 'CSA18793.ogg': [0, 8000, 16000, 24000, 888000]} ...}
Раздел 2.2 - Удаление безмолвных сегментов и устранение человеческих аннотаций

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

USE_REMOVE_SILENCE_AND_HUMAN_ANNOT = True

Аremove_silence_and_human_annotМетод снимает молчаливые сегменты из аудио -выборок, используя выход изdetect_silenceметод Кроме того, он реализует логику для обработки человеческих аннотаций, основанных на простом наблюдении: множество образцов аудио, а именно те с человеческими аннотациями,иметь тенденциюиметь следующую структуру:

|  < 10s   |   ~1s   |                  |
| BIRDSONG | SILENCE | HUMAN ANNOTATION |

Сами участки птичков и человеческих аннотаций могут содержать молчаливые сегменты. Однако, как видно на диаграмме выше, записи вокализации птиц часто встречаются в течение первых нескольких секунд звука. Следовательно, простой, хотя и несовершенный, подход к борьбе с человеческими аннотациями - это вырезать образцы аудио на первом маркере молчаливого сегмента, который происходит за пределами указанного окна, при предположении, что человеческая аннотация следует за молчаливым сегментом. Аremove_silence_and_human_annotЛогика используетANNOT_BREAKPOINTпостоянная вКонфигурацияячейка, чтобы проверить, лежит ли маркер молчаливого сегмента за пределами окна, указанногоANNOT_BREAKPOINT, выражено за количество секунд. Если это так, логика нарезает необработанное звук на этом маркере и сохраняет только данные, которые возникают перед ним. Ручная проверка обработанного звука во время экспериментов показало, что этот подход является удовлетворительным. Однако, как упоминалось вДанные обученияРаздел, естьнекоторыйаудиозаписи, где человеческая аннотацияпредшествуетПтичья запись. Логика, описанная здесьнетрассмотреть эти случаи. В некоторых образцах аудио представлены длинные последовательности зарегистрированных птиц, и эти образцы часто не имеют молчаливых сегментов. Такие образцы не зависят от ранее описанной логики и сохраняются полностью.

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

Аremove_silence_and_human_annotМетод сохраняет обработанную аудио на диск в рамках каталогаprocessed_audioчерезsave_audioпараметр, который передается какTrueПолем Метод возвращает словарьобщийСекунды обработанного звука для каждого класса.

{'1139490': 14, '1192948': 29, '1194042': 24, '126247': 48, '1346504': 40, '134933': 32, '135045': 77, ...}

Аget_audio_statsметод используется следующим образомremove_silence_and_human_annotЧтобы получить среднее количество секунд звука во всех классах.

Раздел 2.3 - Расчет поворотов увеличения для занятий меньшинства

Как упомянуто вДанные обученияРаздел, классы не сбалансированы. Увеличение используется в этом разделе ноутбуков, чтобы помочь устранить дисбаланс, используя среднее количество секунд звука во всех классах, как это предусмотреноget_audio_statsметод Классы с общей секундой обработанного звуканижеСреднее увеличено. Аget_augmentation_turns_per_classМетод определяет количество поворотов увеличения для каждого класса меньшинства, используя среднее количество секунд на обработанную аудио выборку.

TURNS = (AVG_SECS_AUDIO_ACROSS_CLASSES - TOTAL_SECS_AUDIO_FOR_CLASS)/AVG_SECS_PER_AUDIO_SAMPLE

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

Аget_augmentation_turns_per_classВключает в себяAVG_SECS_FACTORпостоянная, которая может быть использована для регулировки значения для

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

Раздел 2.4 - Запуск увеличения

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

USE_AUGMENTATIONS = True

Как упоминалось ранее, аудио увеличение состоит из (1) добавления случайно сгенерированного шумового сигнала, (2) изменения темпа необработанного звука или (3) добавления случайно сгенерированного сигнала шума и изменения темпа необработанного звука. Аadd_noiseиchange_tempoМетоды инкапсулируют логику для добавления сигнала шума и изменения темпа соответственно. Диапазон сигналов шума и диапазон изменения темпа могут быть отрегулированы через следующие константы вКонфигурацияклетка:

NOISE_RNG_LOW = 0.0001
NOISE_RNG_HIGH = 0.0009
TEMPO_RNG_LOW = 0.5
TEMPO_RNG_HIGH = 1.5

Аrun_augmentationsМетод запускает дополнения, используя выход изget_augmentations_turns_per_classметод Для тех классов, которые будут дополнены, логика:

  1. Случайно выбирает обработанную образец аудио (то есть молчаливые сегменты уже удалены) для увеличения.
  2. Случайно выбирает увеличение для выполнения: (1) добавление шума, (2) изменение темпа или (3) добавление шума и изменение темпа.
  3. Спасает дополненный звук на диск в соответствии с соответствующим классом в рамкахprocessed_audioкаталог.

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

Раздел 3 - генерация спектрограммы MEL и подготовка ввода

АMEL Spectrogram Generation и подготовка вводаРаздел ноутбука:

  1. Разделяет обработанные аудиоданные в списки обучения и валидации.
  2. Разделяет аудио на 5 секундных кадров.
  3. Генерирует спектрограммы MEL для каждой 5 -секундной аудио кадра.
  4. Сбросит размеры спектрограмм MEL до целевого размера(224, 224)Полем
  5. Опционально загружает псевдо-меченные образцы данных, чтобы дополнить данные обучения.
  6. Однопользовый кодирует учебные данные и этикетки данных.
  7. Конструкции TensorFlowDatasetОбъекты из списков данных обучения и проверки.
  8. При желании используется логика микширования для дополнения данных обучения.
Раздел 3.1 - Разделение обработанных аудиоданте

Обработанные аудиоданные загружаются изprocessed_audioпапка. Данные разделены на 4 списка:

training_audio
training_labels
validation_audio
validation_labels

Метки, конечно, имена классов, связанные с примерами аудио. АSPLITпостоянный определяется вКонфигурацияЯчейка контролирует коэффициент разделения между списками данных обучения и валидации. Обработанные аудиоданные перетасовываются перед разделением.

Раздел 3.2 - Разделение звука на рамки

Аудио разделен на 5 сегментов с использованиемframe_audioМетод, который сам использует TensorFlowsignal.frameМетод для разделения каждого примера звука. Следующие постоянные вКонфигурацияКонтроль ячейки Операция разделения:

FRAME_LENGTH = 5
FRAME_STEP = 5
Раздел 3.3 - генерирование спектрограмм MEL

MEL -спектрограммы генерируются для каждой 5 -секундной аудио кадра, генерируемой вРаздел 3.2черезaudio2melspecметод Следующие постоянные вКонфигурацияЯчейка указывает параметры, используемые при генерации спектрограмм MEL, таких как количество полос MEL, минимальная частота и максимальная частота:

# Mel spectrogram parameters
N_FFT = 1024  # FFT size
HOP_SIZE = 256
N_MELS = 256
FMIN = 50  # minimum frequency
FMAX = 14000 # maximum frequency

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

Раздел 3.4 - Изменение размера спектрограмм MEL

Аto_melspectrogram_imageметод используется для преобразования каждой спектрограммы MEL вpillowImageобъект. КаждыйImageвпоследствии объект изменяется(224, 224)который является входным измерением, ожидаемой моделью EffureNTENT B0.

Раздел 3.5 - Загрузка псевдо -меченных данных

Как упомянуто вДанные обученияраздел,train_soundscapesкаталог содержит почти 10000немеченоАудиозаписи птиц. Эти аудиозаписи могут быть включены в учебные данные черезПсевдо-маркировкаПолем Простой процесс создания псевдо-меченных данных заключается в следующем:

  • Тренировать классификаторбезПсевдо-меченные данные.
  • Загрузите обучение звуковых звуковых файлов Soundscape.
  • Сегментируйте каждый аудио -звуковой пейзаж на 5 секундных кадров.
  • Генерировать спектрограммы MEL для каждого 5 -секундного кадра и изменить размер до(224, 224)Полем
  • Запустите прогнозы на каждой измененной спектрограмме MEL, используя классификатор, который вы обучали на первом этапе.
  • Держите прогнозы выше желаемого уровня доверия и сохраните спектрограммы MEL для этих прогнозов на диск под предсказанным меткой класса.
  • Обучите свой классификатор снова, используя меченные PSUedo данные.

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

В этой реализации не используются меченные псевдо. Тем не менее, вы можете изменить записную книжку с выводом, упомянутая вБегущий выводРаздел для создания псевдо-меченных данных.

УстановитьUSE_PSEUDO_LABELSпостоянная вКонфигурацияячейкаFalseЧтобы пропустить использование псевдо-меченных данных.

Раздел 3.6 - Кодирование метки

Аprocess_labelsМетод используется для однократного кодирования метки. Однократные кодируемые этикетки возвращаются в виде массивов Numpy и добавляются в учебную метку и списки валидационных этикетков.

Раздел 3.7 - Преобразование списков данных обучения и валидации в TensorFlowDatasetОбъекты

Тензорфлоуdata.Dataset.from_tensor_slicesМетод используется для создания тензораDatasetОбъекты из списков данных обучения и проверки. АshuffleМетод вызывается на обучениеDatasetобъект для перетасовки данных обучения перед пакетом. Аbatchметод вызывается на обоихDatasetОбъекты для оценки наборов данных обучения и проверки. АBATCH_SIZEпостоянная вКонфигурацияЯчейка контролирует размер партии.

Раздел 3.8 - Использование Mixup для увеличения данных обучения

Как вы уже знаете, Mixup - это метод увеличения данных, которая эффективно смешивает два изображения вместе для создания нового образца данных. Класс для смешанного изображения представляет собой смесь классов, связанных с оригинальными 2 изображениями. Аmix_upметод вместе сsample_beta_distributionМетод, инкапсулирует дополнительную логику микширования.

Эта реализация использует Mixup для увеличения данных обучения. Чтобы использовать Mixup, установитеUSE_MIXUPпостоянная вКонфигурацияячейкаTrueПолем

Раздел 4 - Обучение модели

АОбучение моделиРаздел ноутбука:

  1. Инициализирует и настраивает проект WANDB для сбора данных об обучении.
  2. Создает и компилирует модель EffureNet B0.
  3. Обучает модель.
  4. Сохраняет обученную модель на диск.
Раздел 4.1 - Инициализация и настройка проекта WANDB

Убедитесь, что вы прикрепили свой собственный ключ Wandb API в качествеКаггл секретв тетрадь и что WandbloginМетод вРаздел 0ноутбука вернулсяTrueПолем

АКонфигурацияЯчейка в этом разделе включает в себя логику для инициализации и настройки нового проекта Wandb (если проект уже не существует), который собирает данные об обучении запуска:

wandb.init(project="my-bird-vocalization-classifier")
config = wandb.config
config.batch_size = BATCH_SIZE
config.epochs = 30
config.image_size = IMG_SIZE
config.num_classes = len(LABELS)

Очевидно, вы можете изменить название проектаmy-bird-vocalization-classifierк вашему желаемому названию проекта Wandb.

Раздел 4.2 - Создание и составление модели EffureTintNet B0

Аbuild_modelМетод используется для загрузки предварительно обученной модели EfficiptNet B0 с весами ImageNet и без верхнего слоя:

model = EfficientNetB0(include_top=False, input_tensor=inputs, weights="imagenet")

Модель заморожена, чтобы использовать предварительно обученные веса ImageNet с целью толькоразмороженный(то есть поезда) Слои на последней стадии модели:

# Unfreeze last `unfreeze_layers` layers and add regularization
for layer in model.layers[-unfreeze_layers:]:
   if not isinstance(layer, layers.BatchNormalization):
      layer.trainable = True
      layer.kernel_regularizer = tf.keras.regularizers.l2(L2_RATE)

ПостояннаяUNFREEZE_LAYERSвКонфигурацияCell указывает количество слоев, чтобы разморозить.

Верхняя часть модели перестраивается с финаломDenseслой отражает число классов видов птиц.Категорическая фокусная перекрестная энтропиявыбирается в качестве функции потери, чтобы помочь решить проблему дисбаланса класса. АLOSS_ALPHAиLOSS_GAMMAпостоянные вКонфигурацияЯчейка используется с функцией потерь.

Раздел 4.3 - Обучение модели

Аfitметод вызывается на скомпилированномmodelотРаздел 4.2Для проведения обучения. Обратите внимание, чтоПланировщик курса обученияперезвонить,lr_schedulerиспользуется вместо постоянной скорости обучения. Начальная скорость обучения4.0e-4жестко кодируется в обратный вызов. Уровень обучения снижается в 2 этапах на основе количества эпохи. Количество тренировочных эпох контролируетсяEPOCHSпостоянная вКонфигурацияклетка.

Раздел 4.4 - Сохранение модели

Аsaveметод вызывается на скомпилированномmodelПосле обучения, чтобы сохранить модель на диск.

model.save("bird-vocalization-classifier.keras")

Результаты обучения

Запуск ноутбука должен получить следующие результаты обучения, предполагая, что вы использовали экспериментальную установку, которая была описана вСоздание классификаторараздел:

Training results

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

Бегущий вывод

ЭтотЗаписная книжка Kaggle(«Записная книжка по выводу») может использоваться для выполнения вывода. Логика ноутбука «Логика» использует как модель классификатора GBV, так и модель, которую вы обучали в предыдущем разделе. Он выполняет вывод на немеченых файлах Soundscapes вtrain_soundscapesкаталог. Каждый аудиофайл Soundscapes разделен на 5 секундных кадров. АMAX_FILESпостоянный определяется вКонфигурацияячейкаРаздел 0ноутбука управляет количеством аудиофайлов Soundscapes, которые загружаются для вывода.

Записная книжка по выводу сначала генерирует прогнозы с использованием классификатора GBV. Прогнозы для классов конкуренции 143 BirdClef+ 2025, известных классификатору GBV, изолированы. Если максимальная вероятность между 143 известными »классами выше или равнаGBV_CLASSIFIER_THRESHOLD, тогда прогнозируемый класс GBV выбирается в качестве истинного класса. Если максимальная вероятность между 143 известными »классами нижеGBV_CLASSIFIER_THRESHOLDПредполагается, что истинный класс входит в число 63 классов, «неизвестных» для классификатора GBV - то есть классов, используемых для обучения модели в предыдущем разделе. Затем логика запускает прогнозы с использованием производной модели. Предсказанный класс из этого набора прогнозирования впоследствии выбран в качестве истинного класса.

АGBV_CLASSIFIER_THRESHOLDпостоянная определяется вКонфигурацияячейкаРаздел 5записной книжки по выводу. Прогнозы выводятся до 2 файлов:

  1. Аpreds.csvФайл, который отражает вероятность прогнозирования и прогнозирования для каждого 5-секундного звукового среза.
  2. Аsubmission.csvФайл, который фиксирует все вероятности класса в формате для конкуренции BirdClef+ 2025.

Установите путь к вашей современной модели в первой ячейкеРаздел 4записной книжки по выводу.

Будущая работа

Тренировочный ноутбук можно использовать для обучения модели на всех классах BirdClef+ 2025, устраняя необходимость в классификаторе GBV, по крайней мере, в отношении набора данных конкуренции. Как упоминалось ранее, передавая пустой список,[], вload_training_audioМетод будет загружать аудиоданные из всех классов. АMAX_FILESиLOAD_SLICEКонстанты могут использоваться для ограничения количества загруженного звука для работы в рамках среды ноутбука Kaggle.

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


Оригинал
PREVIOUS ARTICLE
NEXT ARTICLE