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 klassifikasieOnlangs 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 2025ImplikasieAanvanklik 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) klassifiserDie 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_audio
Die rekenaar is die grootste komponent van die dataset, wat 28,564 opnames in die.ogg
Audio-opnames word gegroepeer in subdirektore wat elkeen 'n spesifieke voëlsoort verteenwoordig, byvoorbeeld:
train_audio
|__amakin1
|__ [AUDIO FILES]
|__amekes
|__ [AUDIO FILES]
...
dietaxonomy.csv
Die 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
...
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:
- Limited training data.
- Class
1139490
, for example, only contains 2 audio recordings. By contrast, classamakin1
, which is a “known” GBV class, contains 89 recordings.
- Class
- Poor recording quality.
- Highlighting class
1139490
again, both training recordings are of poor quality with one being particularly difficult to discern.
- Highlighting class
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_soundscapes
Die 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_soundscapes
Die boek is leeg behalwe vir 'nreadme.txt
Hierdie 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:
- Verdeel die opname van klank in 5 sekondes.
- Konverteer audio-segmente na mel-spektrogramme.
- 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 B0Voordat 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.
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.
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:
- Ekstrasieer die klasse in die BirdCLEF+ 2025 kompetisie dataset wat nie deur die GBV klassifikator gedek word nie.
- Laai ruwe klank data via die load_training_audio metode.
- 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_FILES
Hierdie konstante spesifiseer die maksimum aantal klank lêers om van 'n gegewe klas te laai.1000
om 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 classes
Parameter, 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_classes
Dit word later oorgedra na dieload_training_audio
Die metode deur dieclasses
Parameters 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_audio
methode aanvaar 'n booleaanmake_copy
Wanneer die parameterTrue
Die logika skep 'nprocessed_audio
'n kopie van elke klankmonster as 'n.wav
Audio kopieë word bewaar in sub-direktore wat die klas weerspieël waaraan hulle behoort.processed_audio
Die 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_audio
methode 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:
- Optioneel streep stil segmente en sny klank om die meeste menslike aantekeninge uit die ruwe klank te verwyder.
- 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_silence
Die 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_FRAME
enSIL_HOP
constants can be modified to adjust how the method "slides" over the raw audio. Similarly, the SIL_THRESHOLD
waarde 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_silence
Verder 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_audio
Parameters, 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_class
methode 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_noise
enchange_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_augmentations
methode voer die verhogings met behulp van die uitvoer van dieget_augmentations_turns_per_class
Vir die klasse wat verhoog sal word, die logika:
- Selekteer ewekansig 'n verwerkte klankmonster (dws stille segmente wat reeds verwyder is) vir augmentasie.
- Randomly selects the augmentation to perform: (1) adding noise, (2) changing the tempo, or (3) adding noise and changing the tempo.
- 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:
- Splits processed audio data into training and validation lists.
- Splits audio into 5 second frames.
- Generates mel spectrograms for each 5 second audio frame.
- Herstel mel spektrogramme na 'n doelgrootte van (224, 224).
- Optionally loads pseudo-labeled data samples to augment training data.
- One-hot kodeer opleiding data en validering data etikette.
- Constructs TensorFlow
Dataset
objects from training and validation data lists. - 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_image
die 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_LABELS
Konstant 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_slices
die metode gebruik word om TensorFlow te skepDataset
objects from the training and validation data lists. The shuffle
method is called on the training Dataset
om die opleiding data te shuffle voor batching. diebatch
Die metode word op beideDataset
objects to batch the training and validation datasets. The BATCH_SIZE
Konstant 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_MIXUP
Konstant in dieConfigdie celTrue
.
Section 4 - Model Training
dieModel TrainingAfdeling van die Notebook:
- Initialiseer en konfigureer 'n WandB-projek om opleiding loop data te vang.
- Builds and compiles the EfficientNet B0 model.
- Trains the model.
- 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-classifier
na jou gewenste WandB-projeknaam.
Section 4.2 - Building and Compiling the EfficientNet B0 Model
diebuild_model
Die 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_LAYERS
In 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_ALPHA
enLOSS_GAMMA
constants in the Config cell are used with the loss function.
Afdeling 4.3 - Modelleer opleiding
The fit
Die 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-4
die leerperk verminder in 2 fases gebaseer op die tye van die tydperk.EPOCHS
constant in the Configdie cel.
Afdeling 4.4 - Model besparing
The save
Die metode word genoem op die gekompileerdemodel
na 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:
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_soundscapes
Elke 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_THRESHOLD
Die konstante word in dieConfigCelle vanSection 5Voorspellings is output na 2 lêers:
- A
preds.csv
file that captures the prediction and prediction probability for each 5-second soundscape slice. - '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_FILES
enLOAD_SLICE
konstante 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.