
Машинное обучение для птиц: создание собственного классификатора вокализации птиц
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
...
Набор данных конкуренции включает в себя 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классы характеризуются:
- Ограниченные данные обучения.
- Сорт
1139490
, например, содержит только 2 аудиозаписи. Напротив, классamakin1
, который является «известным»GBVКласс, содержит 89 записей.
- Сорт
- Плохое качество записи.
- Выделение класса
1139490
Опять же, обе учебные записи имеют низкое качество, причем одна из них особенно трудно различить.
- Выделение класса
Эти 2 условия приводят к значительному дисбалансу между классами с точки зрения количества доступного качества аудио и аудио.
Многие из учебных аудиозаписей в обоихGBVиНе-GBVКлассы также включают человеческую речь, а говорящий аннотирует запись с деталями, такими как виды птицы, который был записан и расположение записи. В большинстве -но не все- Случаи, аннотации следуют за записанным вокализациями птиц.
Тактика, используемая для борьбы с дисбалансом класса и присутствия аннотаций человеческой речи обсуждается вСоздание классификаторараздел.
train_soundscapes
Аtrain_soundscapes
каталог содержит почти 10000немеченоАудиозаписи птиц. Как будет обсуждаться вСоздание классификатораРаздел, эти аудиозаписи могут быть включены в учебные данные черезПсевдо-маркировкаПолем
test_soundscapes
Аtest_soundscapes
каталог пуст, за исключениемreadme.txt
файл. Этот каталог заполняется скрытым набором тестового звука при представлении результатов прогнозирования в конкуренцию BirdClef+ 2025.
Создание классификатора
Основной подход и фон
Базовый подход, используемыйGoogle Researchобучить их классификатор вокализации птиц следующим образом:
- Разделил записанный звук на 5 секунды.
- Конвертировать аудио сегменты в спектрограммы MEL.
- Тренируйте классификатор изображения на спектрограммах MEL.
Тот же подход будет следовать в этом руководстве. Классификатор изображений, который будет обучен, - это GoogleEfficeNet B0модель. Если у вас есть знакомство сEfficeNetСемейство моделей, вы знаете, что они были разработаны для эффективной обработки изображений.
Однако, прежде чем аудиоэлементы могут быть разделены и преобразованы в спектрограммы MEL, мы должны иметь дело с проблемами дисбаланса класса и аннотации человека, упомянутых вДанные обученияраздел. В целом, эти проблемы будут решены соответственно посредством увеличения данных и нарезки аудио -образцов.
Прежде чем погрузиться в фактический дизайн, следующие подразделы предоставляют некоторую краткую справочную информацию.
Эффективные модели
Google Research представила свою семьюEfficeNetмодели в 2019 году как наборсверточная нейронная сетьМодели, которые превзошли современные модели, в то время, в отношении как размера, так и производительности.
EfficeNetV2Модели, выпущенные в 2021 году, предлагают еще лучшую производительность и эффективность параметров.
Хотя тренировалсяImageNetДанные, модели EffureNet продемонстрировали свою утилиту при передаче в другие наборы данных, что делает их привлекательным выбором в качестве технологии классификации для этого проекта.
Мел спектрограммы
Спектрограмма MEL является визуальным представлением аудиосигнала. Это может быть лучше всего аналогична тепловой карте для звука.
Ось 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 - Загрузка аудиоданных данных
ААудиоданные загрузкиРаздел ноутбука:
- Извлекает эти классы в наборе данных конкуренции BirdClef+ 2025нетпокрытоGBVклассификатор.
- Загружает необработанные аудиоданные через
load_training_audio
метод - Создает
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) изменения темпа необработанного звука или (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) изменение темпа или (3) добавление шума и изменение темпа.
- Спасает дополненный звук на диск в соответствии с соответствующим классом в рамках
processed_audio
каталог.
В то время как логика ноутбуков дополняет классы меньшинства с общим количеством секунд звука ниже среднего, она игнорирует эти классы с общим количеством секунд звука выше среднего. Этот подход был принят для управления доступной памятью и с пониманием того, что класс дисбаланс дополнительно рассматривается посредством выбора функции потери.
Раздел 3 - генерация спектрограммы MEL и подготовка ввода
АMEL Spectrogram Generation и подготовка вводаРаздел ноутбука:
- Разделяет обработанные аудиоданные в списки обучения и валидации.
- Разделяет аудио на 5 секундных кадров.
- Генерирует спектрограммы MEL для каждой 5 -секундной аудио кадра.
- Сбросит размеры спектрограмм MEL до целевого размера
(224, 224)
Полем - Опционально загружает псевдо-меченные образцы данных, чтобы дополнить данные обучения.
- Однопользовый кодирует учебные данные и этикетки данных.
- Конструкции TensorFlow
Dataset
Объекты из списков данных обучения и проверки. - При желании используется логика микширования для дополнения данных обучения.
Раздел 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 вpillow
Image
объект. Каждый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 - Обучение модели
АОбучение моделиРаздел ноутбука:
- Инициализирует и настраивает проект WANDB для сбора данных об обучении.
- Создает и компилирует модель EffureNet B0.
- Обучает модель.
- Сохраняет обученную модель на диск.
Раздел 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")
Результаты обучения
Запуск ноутбука должен получить следующие результаты обучения, предполагая, что вы использовали экспериментальную установку, которая была описана вСоздание классификаторараздел:
Как видно, точность чуть выше 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 файлов:
- А
preds.csv
Файл, который отражает вероятность прогнозирования и прогнозирования для каждого 5-секундного звукового среза. - А
submission.csv
Файл, который фиксирует все вероятности класса в формате для конкуренции BirdClef+ 2025.
Установите путь к вашей современной модели в первой ячейкеРаздел 4записной книжки по выводу.
Будущая работа
Тренировочный ноутбук можно использовать для обучения модели на всех классах BirdClef+ 2025, устраняя необходимость в классификаторе GBV, по крайней мере, в отношении набора данных конкуренции. Как упоминалось ранее, передавая пустой список,[]
, вload_training_audio
Метод будет загружать аудиоданные из всех классов. АMAX_FILES
иLOAD_SLICE
Константы могут использоваться для ограничения количества загруженного звука для работы в рамках среды ноутбука Kaggle.
Конечно, более точная модель может быть обучена с использованием большего количества учебных данных. В идеале, большее количество увеличений будет использовано для устранения дисбаланса класса. Кроме того, другие методы увеличения, такие как Cutmix, могут быть реализованы для дальнейшего увеличения учебных данных. Однако эти стратегии требуют более надежной среды развития.
Оригинал