182 lesings

Masjienleer vir die voëls: bou jou eie voëls vocalisering klassifikator

deur pictureint...20m2025/06/09
Read on Terminal Reader

Te lank; Om te lees

Die BirdCLEF+ 2025 kompetisie uitdag gebruikers om 'n klassifikasiemodel te ontwerp wat die spesies van voëls nauwkeurig kan voorspel uit 'n klankopname. Hierdie gids verduidelik 'n benadering tot die bou van jou eie voëls vocalisasie klassifikator wat in kombinasie met die GBV klassifikator gebruik kan word om 'n groter keuse van voëls spesies te klassifiseer. Die benadering gebruik dieselfde basiese tegnieke beskryf in die Google Research artikel Separating Birdsong in the Wild for Classification.
featured image - Masjienleer vir die voëls: bou jou eie voëls vocalisering klassifikator
Picture in the Noise HackerNoon profile picture
0-item

Inleiding

Wetenskaplikes gebruik outomatiese stelsels om groot ekosisteme te bestudeer.autonomous recording units (ARUs)word gebruik om klank op te neem wat gebruik kan word om te help om verskillende spesies van diere en insekte te identifiseer. Hierdie inligting kan gebruik word om 'n beter begrip van die verspreiding van spesies binne 'n gegewe omgewing te ontwikkel.Afskeiding van voëllied in die wild vir klassifikasieEkoloë gebruik voëls om voedselstelsels en bosgesondheid te verstaan - byvoorbeeld, as daar meer houtpeckers in 'n bos is, beteken dit dat daar baie dood hout is." Verder merk hulle op die waarde van audio-gebaseerde identifikasie: "[Aangesien] voëls kommunikeer en gebied met liedjies en oproepe merk, is dit die doeltreffendste om hulle deur oor te identifiseer.

Afskeiding van voëllied in die wild vir klassifikasie

Onlangs het dieBirdCLEF+ vir 2025Die kompetisie begin opKaggleOnder die paraplu van dieImplikasieImageCLEF ondersteun navorsing in kruis-taalkundige anotasie en afbeeldingsopname oor 'n verskeidenheid domeine. Die doel van die kompetisie is reguit: 'n klassifikasiemodel ontwerp wat die spesies van voëls nauwkeurig kan voorspel uit 'n klankopname.

BirdCLEF+ vir 2025Implikasie

Aanvanklik lyk die taak trivial gegewe die beskikbaarheid van dieGoogle Bird Vocalization (GBV) ClassifierOok bekend asPerchDie GBV klassifikator word op byna 11 000 voëlspesies opgelei en is dus 'n voor die hand liggende keuse as die klassifikasiemodel.

Google Bird Vocalization (GBV) klassifiser

Die kompetisie sluit egter voëlspesies in wat buite die GBV klassifikator opleidingsset lê.As gevolg hiervan bereik die GBV klassifikator slegs ~60% akkuraatheid op die BirdCLEF+ 2025 kompetisie toetsdataset.

Hierdie gids verduidelik 'n benadering tot die bou van jou eie voël vocalization klassifikator wat in kombinasie met die GBV klassifikator gebruik kan word om 'n breër keuse van voël spesies te klassifiseer.ArtikelsDie ontwerp maak gebruik van die BirdCLEF+ 2025 kompetisie dataset vir opleiding.

Opleiding data

dieBirdCLEF+ 2025 opleiding dataset, insluitend van ondersteunende lêers, is ongeveer 12 GB. Die belangrikste directories en lêers wat die datasetstruktuur bevat, is:

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

train_audio

dietrain_audioDie rekenaar is die grootste komponent van die dataset, wat 28,564 opnames in die.oggAudio-opnames word gegroepeer in subdirektore wat elkeen 'n spesifieke voëlsoort verteenwoordig, byvoorbeeld:

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

dietaxonomy.csvDie lêer kan gebruik word om die werklike wetenskaplike en algemene name van die voëlspesies te soek wat deur die subdirektiewe name verteenwoordig word, byvoorbeeld:

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


Amazon Kingfisher


American Kestrel

Die kompetisie dataset betrekking het op 206 unieke voël spesies, dit wil sê 206 klasse.Introduction63 van hierdie klasse isnieGedek deur dieGBV ClassifierHierdieNon-GBVKlasse word gewoonlik met behulp van 'n nommerklasse-identifikaat gemerk:


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

Sommige van dieNon-GBVKlasse word gekenmerk deur:

  1. Limited training data.
    • Class 1139490, for example, only contains 2 audio recordings. By contrast, class amakin1, which is a “known” GBV class, contains 89 recordings.
  2. Poor recording quality.
    • Highlighting class 1139490 again, both training recordings are of poor quality with one being particularly difficult to discern.

Hierdie 2 toestande lei tot 'n beduidende onbalans tussen klasse in terme van die hoeveelheid beskikbaar klank en klank kwaliteit.

Baie van die opleiding audio-opnames oor beideGBVenNon-GBVKlasse sluit ook menslike spraak in, met die spreker wat die opname annoteer met besonderhede soos die soort voël wat opgespoor is en die plek van die opname.Maar nie almal- gevalle, die aantekeninge volg die geregistreerde voëls.

Taktieke wat gebruik word om die klasse-onbalans en die teenwoordigheid van menslike spraakannotasies aan te spreek, word in dieBuilding the Classifierdie afdeling.

train_soundscapes

dietrain_soundscapesDie rekenaar bevat byna 10 000unlabeledoorsig van die voëls, soos in dieBuilding the Classifierin die afdeling, kan hierdie klankopnames in die opleiding data ingesluit word deurpseudo-labeling.

test_soundscapes

dietest_soundscapesDie boek is leeg behalwe vir 'nreadme.txtHierdie directory is gevul met 'n verborge stel toets-audio wanneer voorspelling resultate aan die BirdCLEF+ 2025 kompetisie te stuur.

Die bou van die klassifikasie

Basiese benadering en agtergrond

Die basiese benadering wat gebruik word deurGoogle navorsingom hul voël vocalization klassifikator te oefen, is soos volg:

  1. Verdeel die opname van klank in 5 sekondes.
  2. Konverteer audio-segmente na mel-spektrogramme.
  3. Train 'n beeld klassifikator op die mel spektrogramme.

Dieselfde benadering sal in hierdie gids gevolg word. Die beeldklassifiser wat opgelei sal word, is Google seEffektiewe B0As jy vertroud is met dieEfficientNetfamilie van modelle, jy weet dat hulle ontwerp is vir doeltreffende beeldverwerking.

Effektiewe B0

Voordat klankmonsters verdeel kan word en omskep in melspektrogramme, moet ons egter die klasse-onbalans en menslike annotasie-probleme wat in dieTraining DataOor die algemeen sal hierdie probleme respectievelik aangespreek word deur data-uitbreiding en die sny van die klankmonsters.

Voordat jy in die werklike ontwerp duik, bied die volgende sub-afdelings 'n paar kort agtergrond inligting.

Effektiewe modelle

Google Research het sy familie vanEfficientNetmodelle in 2019 as 'n stel vanconvolutional neural networkmodelle wat state-of-the-art modelle, op daardie tyd, in terme van beide grootte en prestasie oorskry.


EfficientNet model family performance

Effektiwiteit2modelle, wat in 2021 vrygestel word, bied selfs beter prestasie en parameter doeltreffendheid.

Alhoewel jy opgelei isImagineerEfficientNet-modelle het hul nut bewys wanneer hulle na ander datasette oorgedra word, wat hulle 'n aantreklike keuse as die klassifikasie tegnologie vir hierdie projek maak.

Mel Spektrografie

'N Mel spektrogram is 'n visuele verteenwoordiging van 'n klanksignaal.


Sample mel spectrogram

Die x-as van 'n mel-spektrogram verteenwoordig die tyddimensie van die klanksignaal, en die y-as verteenwoordig die frekwensie van die klanke binne die signaal.mel bandsHierdie bands word op sy beurt uitgesaai met behulp van diemel scaleDie mel skala is 'nlogarithmicDie kleure van die mel spektrogram verteenwoordig die amplitude van die klanke binne bands. helderer kleure verteenwoordig hoër amplitudes terwyl donkerer kleure laer amplitudes verteenwoordig.

Ontwerp

My doel in die bespreking van die ontwerp is om 'n hoë-vlak beoordeling van die benadering te verskaf sonder om te veel besonderhede in te gaan.Geskryf Notebook("training notebook") wat bestaan uit 4 hoof afdelings:

  • Afdeling 1: Audio data laai.
  • Afdeling 2: Audio data verwerking.
  • Afdeling 3: Mel spektrogram generasie en input voorbereiding.
  • Afdeling 4: Model opleiding.

U sal daarop let dat die eerste 2 selle van elke hoofafdeling (1) invoer wat deur daardie afdeling gebruik word en (2) 'nConfigSel wat konstante definieer wat in daardie afdeling en daaropvolgende afdelings gebruik word.

Die oefenboek begin eintlik metSection 0waar basiese Python-pakkette wat deur die notisie gebruik word, geïmporteer word. Hierdie afdeling sluit ook die logika in om in te logWeights & Biases("WandB") vir die opsporing van opleiding loop. Jy moet jou eie WandB byvoegAPI keyIn die notasie as aKaggle SecretGebruik die naamWANDB_API_KEY.

Soos bespreek in dieTraining Datain die afdeling, kan die ongemerkte opvoedkundige klanke in die opvoedkundige data ingesluit word deur middel van pseudo-etikettering.Section 3.5 - Pseudo-LabelingHou in gedagte dat Kaggle nie-GPU omgewings beperk is tot 30 GiB van geheue.

'N opgeleide model na die eksperimentele opstel wat in die volgende sub-afdelings beskryf is, is hier by Kaggle geplaas.As jy wil, kan jy hierdie model gebruik sonder om jou eie te oefen en direk na die Running Inference-afdeling te spring om inferensie op voëllied-audio uit te voer.

'N opgeleide model na die eksperimentele opstel wat in die volgende sub-afdelings beskryf is, is by Kaggle geplaashierIndien gewensaam, kan jy hierdie model gebruik sonder om jou eie te oefen en direk na dieRunning Inference'n afdeling om inferensie op birdsong-audio te hardloop.

Afdeling 1 - Audio data laai

dieAudio Data LoadingAfdeling van die Notebook:

  1. Ekstrasieer die klasse in die BirdCLEF+ 2025 kompetisie dataset wat nie deur die GBV klassifikator gedek word nie.
  2. Laai ruwe klank data via die load_training_audio metode.
  3. Skep 'n verwerkte_audio directory en bewaar 'n kopie van laai audio data as .wav-lêers in daardie directory.

dieConfigDie sel van hierdie afdeling bevat 'nMAX_FILESHierdie konstante spesifiseer die maksimum aantal klank lêers om van 'n gegewe klas te laai.1000om te verseker dat al die klank lêers geladen word vir dienon-GBVJy moet hierdie konstante vir jou eie eksperimentele instelling aanpas. Byvoorbeeld, as jy klankdata vanallIn hierdie klasse moet u hierdie konstante op 'n laer waarde stel om die beskikbare geheue te vernietig.

dieload_training_audio method can be called with a classesParameter, wat 'n lys van klasse is waarvan die klank geladen sal word.non-GBVKlasse word as 'n lys gestoor en aan die veranderlike toegewys.missing_classesDit word later oorgedra na dieload_training_audioDie metode deur dieclassesParameters van.

# `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']

U kan al die 206 BirdCLEF+ 2025-klasse laai deur 'n leë lys as die klasparameter te stuur.

U kan al die 206 BirdCLEF+ 2025-klasse laai deur 'n leë lys as die klasparameter te stuur.


Die load_training_audio-metode aanvaar ook 'n optionele booleaanse use_slice-parameter. Hierdie parameter werk met die LOAD_SLICE-konstante wat in die Config-cel gedefinieer is. Die use_slice-parameter en LOAD_SLICE-konstante word nie met hierdie implementasie gebruik nie. Maar hulle kan gebruik word om 'n spesifieke hoeveelheid klank uit elke lêer te laai. Byvoorbeeld, om slegs 5 sekondes klank van elke klank lêer te laai, stel LOAD_SLICE na 160000, wat bereken word as 5 keer die samplingskoers van 32000; en oorgedra True na die use_slice-parameter.

Die load_training_audio-metode aanvaar ook 'n optionele booleaanse use_slice-parameter. Hierdie parameter werk met die LOAD_SLICE-konstante wat in die Config-cel gedefinieer is. Die use_slice-parameter en LOAD_SLICE-konstante word nie met hierdie implementasie gebruik nie. Maar hulle kan gebruik word om 'n spesifieke hoeveelheid klank uit elke lêer te laai. Byvoorbeeld, om slegs 5 sekondes klank van elke klank lêer te laai, stel LOAD_SLICE na 160000, wat bereken word as 5 keer die samplingskoers van 32000; en oorgedra True na die use_slice-parameter.

dieload_training_audiomethode aanvaar 'n booleaanmake_copyWanneer die parameterTrueDie logika skep 'nprocessed_audio'n kopie van elke klankmonster as 'n.wavAudio kopieë word bewaar in sub-direktore wat die klas weerspieël waaraan hulle behoort.processed_audioDie direktoraat word in die volgende afdeling gebruik om gemodifiseerde klankmonsters op die skyf te bewaar sonder om die BirdCLEF+ 2025 dataset direktore te beïnvloed.


dieload_training_audiomethode gee 'n woordeboek van laai audio data met behulp van die klas name as sleutels. Elke waarde in die woordeboek is 'n lys van tuples van die vorm(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]]))] ...}

The method also returns basic statistics describing the data loaded for each class as a comma-separated-value string. You can optionally export these statistics to inspect the data.

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
...

Section 2 - Audio Data Processing

dieAudio Data Processing section of the notebook:

  1. Optioneel streep stil segmente en sny klank om die meeste menslike aantekeninge uit die ruwe klank te verwyder.
  2. Optionally augments audio for minority classes to help address the class imbalance. Audio augmentation consists of (1) adding a randomly generated noise signal, (2) changing the tempo of the raw audio, or (3) adding a randomly generated noise signal and changing the tempo of the raw audio.
Section 2.1 - Detecting Silent Segments

diedetect_silenceDie metode word gebruik om oor elke ruwe klankmonster te "slide" en stille segmente te identifiseer deur dieroot-mean square (RMS)die waarde van 'n bepaalde segment tot 'n spesifieke drempel. As die RMS onder die drempel is, word die segment geïdentifiseer as 'n stille segment.Configdie sel van hierdie afdeling beheer die gedrag van diedetect_silence method:

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

The SIL_FRAMEenSIL_HOP constants can be modified to adjust how the method "slides" over the raw audio. Similarly, the SIL_THRESHOLDwaarde kan verander word om die metode meer aggressief of konserwatief te maak met betrekking tot die identifisering van stil segmente.

Die metode produseer 'n woordeboek van stil segment markers vir elke lêer in elke klas.

{'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]} ...}
Section 2.2 - Removing Silent Segments and Eliminating Human Annotations

The USE_REMOVE_SILENCE_AND_HUMAN_ANNOT constant defined in the Configdie sel van hierdie afdeling spesifiseer of klank moet ontneem word van stil segmenteand sliced to remove Die meeste human annotations.

USE_REMOVE_SILENCE_AND_HUMAN_ANNOT = True

The remove_silence_and_human_annot method strips silent segments from audio samples using the output from the detect_silenceVerder implementeer dit logika om menslike aantekeninge te hanteer wat gebaseer is op 'n eenvoudige waarneming: baie klankmonsters, naamlik dié met menslike aantekeninge,tend to have the following structure:

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

The birdsong and human annotation sections themselves may contain silent segments. However, as seen in the diagram above, the bird vocalization recordings often occur within the first few seconds of audio. Therefore, a simple, if imperfect, approach to deal with human annotations is to slice audio samples at the first silent segment marker that occurs outside of a specified window, under the assumption that a human annotation follows that silent segment. The remove_silence_and_human_annot logic uses the ANNOT_BREAKPOINT constant in the Config cell to check if a silent segment marker lies outside the window specified by ANNOT_BREAKPOINT, uitgedruk in 'n aantal sekondes. As dit gebeur, sny die logika die ruwe klank by daardie marker en hou slegs die data wat daarvoor voorkom. 'N Handmatige inspeksie van verwerkte klank tydens eksperimente het hierdie benadering bevestig om bevredigend te wees.Training DataDie afdeling, daar issome audio recordings where the human annotation precedes the birdsong recording. The logic described here does nie address those cases. Some audio samples feature long sequences of recorded birdsong and these samples often do not have silent segments. Such samples are unaffected by the previously described logic and kept in their entirety.

A second constant, SLICE_FRAME, can be optionally used in a final processing step to return an even more refined slice of the processed audio. Set SLICE_FRAME to the number of seconds of processed audio that you want to retain.

dieremove_silence_and_human_annot method saves processed audio to disk under the directory processed_audio via the save_audioParameters, wat asTrue. The method returns a dictionary of the total seconds of processed audio for each class.

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

The get_audio_stats method is used following remove_silence_and_human_annot to get the average number of seconds of audio across all classes.

Section 2.3 - Calculating Augmentation Turns for Minority Classes

Soos in dieTraining DataAugmentasie word in hierdie notebook-afdeling gebruik om te help om die onbalans te hanteer deur die gemiddelde aantal sekondes van klank in alle klasse te benut, soos deur dieget_audio_stats method. Classes with total seconds of processed audio below the average are augmented. The get_augmentation_turns_per_classmethode bepaal die aantal verhoogingsdreine vir elke minderheidsklasse met behulp van die gemiddelde aantal sekondes per verwerkte klankmonster.

TURNS = (AVG_SECS_AUDIO_ACROSS_CLASSES - TOTAL_SECS_AUDIO_FOR_CLASS)/AVG_SECS_PER_AUDIO_SAMPLE

Minderheidsklasse wat verder onder die gemiddelde is, sal meer verhogingsdrae teenoor minderheidsklasse wat nader aan die gemiddelde is, wat minder verhogingsdrae sal hê.

The get_augmentation_turns_per_class includes a AVG_SECS_FACTOR constant which can be used to adjust the value for

average number of seconds of audio across all classes. The constant can be used to make the logic more conservative or aggressive when calculating the number of augmentation turns.

The get_augmentation_turns_per_class includes a AVG_SECS_FACTOR'n constante wat gebruik kan word om die waarde van

Die konstante kan gebruik word om die logika meer konservatief of aggressief te maak by die berekening van die aantal toenemende draaie.

Section 2.4 - Running Augmentations

dieUSE_AUGMENTATIONS constant defined in the Config cell of this section specifies if audio should be augmented.

USE_AUGMENTATIONS = True

As mentioned earlier, audio augmentation consists of (1) adding a randomly generated noise signal, (2) changing the tempo of the raw audio, or (3) adding a randomly generated noise signal and changing the tempo of the raw audio. The add_noiseenchange_tempo methods encapsulate the logic for adding a noise signal and changing the tempo respectively. The noise signal range and tempo change range can be adjusted via the following constants in the ConfigDie cel:

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

dierun_augmentationsmethode voer die verhogings met behulp van die uitvoer van dieget_augmentations_turns_per_classVir die klasse wat verhoog sal word, die logika:

  1. Selekteer ewekansig 'n verwerkte klankmonster (dws stille segmente wat reeds verwyder is) vir augmentasie.
  2. Randomly selects the augmentation to perform: (1) adding noise, (2) changing the tempo, or (3) adding noise and changing the tempo.
  3. Bespaar die verhoogde klank op die skyf onder die toepaslike klas in die verwerkte_audio directory.

While the notebook logic augments minority classes with total seconds of audio below the average, it ignores those classes with total seconds of audio above the average. This approach was taken to manage available memory and with the understanding that the class imbalance is further addressed through choice of the loss function.

Afdeling 3 - Mel Spectrogram Generering en Input Voorbereiding

The Mel Spectrogram Generation and Input PreparationAfdeling van die Notebook:

  1. Splits processed audio data into training and validation lists.
  2. Splits audio into 5 second frames.
  3. Generates mel spectrograms for each 5 second audio frame.
  4. Herstel mel spektrogramme na 'n doelgrootte van (224, 224).
  5. Optionally loads pseudo-labeled data samples to augment training data.
  6. One-hot kodeer opleiding data en validering data etikette.
  7. Constructs TensorFlow Dataset objects from training and validation data lists.
  8. Optioneel gebruik MixUp logika om opleiding data te vergroot.
Section 3.1 - Splitting Processed Audio Data

Die verwerkte audio data word geleë van dieprocessed_audio folder. The data is split into 4 lists:

training_audio
training_labels
validation_audio
validation_labels

Labels are, of course, the class names associated with the audio examples. The SPLIT constant defined in the Configdie sel beheer die splitsingsverhouding tussen die opleiding en valideringsdata lyste. Verwerkte klank data word voor die splitsing gesweef.

Section 3.2 - Splitting Audio into Frames

Audio is split into 5 second segments using the frame_audio method, which itself uses the TensorFlow signal.frame method to split each audio example. The following constants in the ConfigCelle beheer die splitsingsoperasie:

FRAME_LENGTH = 5
FRAME_STEP = 5
Afdeling 3.3 - Die genereer van Mel Spectrograms

Mel-spektrogramme word gegenereer vir elke 5 sekondes klankframe watSection 3.2 via the audio2melspec method. The following constants in the Config cell specify the parameters used when generating the mel spectrograms, such as the number of mel bands, minimum frequency, and maximum frequency:

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

Die frekwensie band is gekies om diepotentialSommige voëlspesies kan egter buite hierdie bereik vocaliseer.

Afdeling 3.4 - Herstel Mel Spectrogramme

The to_melspectrogram_imagedie metode gebruik word om elke mel spektrogram te omskep in 'npillow Image object. Each Image object is subsequently resized to (224, 224) which is the input dimension expected by the EfficientNet B0 model.

Section 3.5 - Loading Pseudo-Labeled Data

As mentioned in the Training Data section, the train_soundscapes directory contains nearly 10,000 unlabeled audio recordings of birdsong. These audio recordings can be incorporated into the training data via pseudo-labeling'N eenvoudige proses om pseudo-etiketteerde data te skep, is soos volg:

  • Train a classifier without pseudo-labeled data.
  • Load training soundscape audio files.
  • Segmenteer elke klank skerm in 5 sekondes frames.
  • Genereer mel spektrogramme vir elke 5 sekondes frame en verander grootte tot (224, 224).
  • Voer voorspellings op elke hergroot mel-spektrogram met behulp van die klassifikator wat jy in die eerste stap opgelei het.
  • Keep the predictions above a desired confidence level and save the mel spectrograms for those predictions to disk under the predicted class label.
  • Train jou klassifikator weer met behulp van die psuedo-gelabelleerde data.

Pseudo-label data kan die prestasie van jou klassifikator verbeter. As jy jou eie pseudo-label data wil genereer, moet jy voortgaan met die oorblywende afdelings om 'n klassifikator te opleidingwithoutpseudo-label data. Gebruik dan jou klassifikator om jou eie stel pseudo-label data te skep met behulp van die proses wat hierbo uiteengesit is.

Hierdie implementasie gebruik nie pseudo-etiketteerde data nie. U kan egter die gevolgtrekkingsnote wat in dieRunning Inference'n afdeling om pseudo-etiketteerde data te genereer.

Set the USE_PSEUDO_LABELSKonstant in dieConfigdie celFalse to skip the use of pseudo-labeled data.

Afdeling 3.6 - Kodering van etikette

dieprocess_labels method is used to one-hot encode labels. One-hot encoded labels are returned as NumPy arrays and added to the training label and validation label lists.

Afdeling 3.7 - Konvertering van opleiding en validering data lyste na TensorFlowDataset Objects
Dataset

Die TensorFlowdata.Dataset.from_tensor_slicesdie metode gebruik word om TensorFlow te skepDataset objects from the training and validation data lists. The shuffle method is called on the training Datasetom die opleiding data te shuffle voor batching. diebatchDie metode word op beideDataset objects to batch the training and validation datasets. The BATCH_SIZEKonstant in dieConfigdie batch grootte beheer.

Afdeling 3.8 - Die gebruik van MixUp om opleiding data te verhoog

As you may already know, MixUp is a data augmentation technique that effectively mixes two images together to create a new data sample. The class for the blended image is a blend of the classes associated with the original 2 images. The mix_up method, along with the sample_beta_distribution method, encapsulates the optional MixUp logic.

This implementation uses MixUp to augment the training data. To use MixUp, set the USE_MIXUPKonstant in dieConfigdie celTrue.

Section 4 - Model Training

dieModel TrainingAfdeling van die Notebook:

  1. Initialiseer en konfigureer 'n WandB-projek om opleiding loop data te vang.
  2. Builds and compiles the EfficientNet B0 model.
  3. Trains the model.
  4. Bespaar die opgeleide model op die disk.
Afdeling 4.1 - Initialisering en Konfigurering van die WandB-projek

Maak seker dat u u eie WandB API-sleutel as 'n Kaggle Secret aan die notisie gekoppel het en dat die WandB-inlogmetode in Afdeling 0 van die notisie True teruggekeer het.

Maak seker dat u u eie WandB API-sleutel as 'n Kaggle Secret aan die notisie gekoppel het en dat die WandB-inlogmetode in Afdeling 0 van die notisie True teruggekeer het.

dieConfigcel in hierdie afdeling sluit logika in om 'n nuwe WandB-projek te inisialiseer en te konfigurer (as die projek nie reeds bestaan nie) wat opleidingloopdata sal vang:

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)

Natuurlik kan jy die projeknaam verandermy-bird-vocalization-classifierna jou gewenste WandB-projeknaam.

Section 4.2 - Building and Compiling the EfficientNet B0 Model

diebuild_modelDie metode word gebruik om die vooraf opgeleide EfficientNet B0 model met ImageNet gewigte en sonder die boonste laag te laai:

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

Die model word bevrore om die vooropleide ImageNet gewigte te benut met die doel om slegsOnbevrore(dws trein) lae in die finale fase van die model:

# 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)

Die konstanteUNFREEZE_LAYERSIn dieConfigCelle bepaal die aantal lae om nie te bevrie.

Die top van die model word herbou met 'n finaleDense'n laag wat die aantal voël spesies klasse weerspieël.Categorical focal cross-entropy is chosen as the loss function to help address the class imbalance. The LOSS_ALPHAenLOSS_GAMMA constants in the Config cell are used with the loss function.

Afdeling 4.3 - Modelleer opleiding

The fitDie metode word genoem op die gekompileerdemodel from Section 4.2om te oefen. let daarop dat alearning rate schedulerdie oproep,lr_scheduler, word gebruik in plaas van 'n konstante leerkoers. 'N Aanvanklike leerkoers van4.0e-4die leerperk verminder in 2 fases gebaseer op die tye van die tydperk.EPOCHS constant in the Configdie cel.

Afdeling 4.4 - Model besparing

The saveDie metode word genoem op die gekompileerdemodelna die opleiding om die model op die skyf te red.

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

Opvoedkundige resultate

Die hardloop van die rekenaar moet die volgende opvoedkundige resultate lewer, as jy die eksperimentele opstel gebruik het wat in dieBuilding the Classifier section:

Training results

Soos gesien, is akkuraatheid net bo 90% en validering akkuraatheid is ongeveer 70% na opleiding vir 30 epoeke. Maar, soos gesien, validering akkuraatheid wissel aansienlik. Hierdie variasie word gedeeltelik toegeskryf aan die klas onbalans met beskikbare geheue beperk die gebruik van bykomende verhogings om ten volle die onbalans te hanteer. Resultate dui daarop dat die model ly aan oorvulling op opleiding data en nie algemeneer as wat gehoop sou word nie.

Running Inference

HierdieGeskryf Notebook("inference notebook") kan gebruik word om inferensie uit te voer. Die inference notebook logika gebruik beide die GBV klassifikasie model en die model wat jy in die vorige afdeling opgelei het.train_soundscapesElke soundcapes audio lêer word verdeel in 5 sekondes frames.MAX_FILES constant defined in the ConfigCelle vanSection 0van die notebook beheer die aantal soundcapes-audio-lêers wat vir inferensie gelê word.

Die inferensie-noteboek genereer eers voorspellings met behulp van die GBV-klassifikator. Die voorspellings vir die 143 BirdCLEF+ 2025-wedstrydatasetklasse wat bekend is aan die GBV-klassifikator word geïsoleer.GBV_CLASSIFIER_THRESHOLD, dan word die GBV voorspel klas gekies as die ware klas. As die maksimum waarskynlikheid onder die 143 "bekende" klasse onder dieGBV_CLASSIFIER_THRESHOLD, word aangenomen dat die ware klasse onder die 63 klasse is "onbekend" aan die GBV klassifikator - dit wil sê die klasse wat gebruik word om die model in die vorige afdeling te train.

dieGBV_CLASSIFIER_THRESHOLDDie konstante word in dieConfigCelle vanSection 5Voorspellings is output na 2 lêers:

  1. A preds.csv file that captures the prediction and prediction probability for each 5-second soundscape slice.
  2. 'N submission.csv lêer wat alle klas waarskynlikheid in die formaat vir die BirdCLEF+ 2025 kompetisie vang.

Stel die pad na jou finetuned model in die eerste sel van Afdeling 4 van die gevolgtrekkingsboek.

Set the path to your finetuned model in the first cell of Section 4 of the inference notebook.

Future Work

Die opleidingskoolboek kan gebruik word om 'n model op alle 206 BirdCLEF+ 2025-klasse te train, wat die behoefte aan die GBV klassifikator elimineer, ten minste met betrekking tot die kompetisie-dataset.[], to the load_training_audio method will load audio data from all classes. The MAX_FILESenLOAD_SLICEkonstante kan gebruik word om die hoeveelheid geladen klank te beperk om binne die grense van 'n Kaggle-notebook-omgewing te werk.

Of course, a more accurate model can be trained using a larger amount of training data. Ideally, a greater number of augmentations would be used to address the class imbalance. Additionally, other augmentation techniques, such as CutMix, could be implemented to further augment the training data. However, these strategies demand a more robust development environment.

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks