Inleiding Wetenskaplikes gebruik outomatiese stelsels om groot ekosisteme te bestudeer. 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. Ekoloë 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. autonomous recording units (ARUs) Afskeiding van voëllied in die wild vir klassifikasie Afskeiding van voëllied in die wild vir klassifikasie Onlangs het die Die kompetisie begin op Onder die paraplu van die ImageCLEF 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 2025 Kaggle Implikasie BirdCLEF+ vir 2025 Implikasie Aanvanklik lyk die taak trivial gegewe die beskikbaarheid van die Ook bekend as Die 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) Classifier Perch 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. Die ontwerp maak gebruik van die BirdCLEF+ 2025 kompetisie dataset vir opleiding. Artikels Opleiding data die , insluitend van ondersteunende lêers, is ongeveer 12 GB. Die belangrikste directories en lêers wat die datasetstruktuur bevat, is: BirdCLEF+ 2025 opleiding dataset birdclef_2025 |__ train_audio |__ train_soundscapes |__ test_soundscapes recording_location.txt taxonomy.csv train.csv train_audio die Die rekenaar is die grootste komponent van die dataset, wat 28,564 opnames in die Audio-opnames word gegroepeer in subdirektore wat elkeen 'n spesifieke voëlsoort verteenwoordig, byvoorbeeld: train_audio .ogg train_audio |__amakin1 |__ [AUDIO FILES] |__amekes |__ [AUDIO FILES] ... die 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: taxonomy.csv 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. 63 van hierdie klasse is Gedek deur die Hierdie Klasse word gewoonlik met behulp van 'n nommerklasse-identifikaat gemerk: Introduction nie GBV Classifier Non-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 Sommige van die Klasse word gekenmerk deur: Non-GBV Limited training data. Class , for example, only contains 2 audio recordings. By contrast, class , which is a “known” class, contains 89 recordings. 1139490 amakin1 GBV Poor recording quality. Highlighting class again, both training recordings are of poor quality with one being particularly difficult to discern. 1139490 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 beide en Klasse 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. - gevalle, die aantekeninge volg die geregistreerde voëls. GBV Non-GBV Maar nie almal Taktieke wat gebruik word om die klasse-onbalans en die teenwoordigheid van menslike spraakannotasies aan te spreek, word in die die afdeling. Building the Classifier train_soundscapes die Die rekenaar bevat byna 10 000 oorsig van die voëls, soos in die in die afdeling, kan hierdie klankopnames in die opleiding data ingesluit word deur . train_soundscapes unlabeled Building the Classifier pseudo-labeling test_soundscapes die Die boek is leeg behalwe vir 'n Hierdie directory is gevul met 'n verborge stel toets-audio wanneer voorspelling resultate aan die BirdCLEF+ 2025 kompetisie te stuur. test_soundscapes readme.txt Die bou van die klassifikasie Basiese benadering en agtergrond Die basiese benadering wat gebruik word deur om hul voël vocalization klassifikator te oefen, is soos volg: Google navorsing 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 se As jy vertroud is met die familie van modelle, jy weet dat hulle ontwerp is vir doeltreffende beeldverwerking. Effektiewe B0 EfficientNet Effektiewe B0 Voordat klankmonsters verdeel kan word en omskep in melspektrogramme, moet ons egter die klasse-onbalans en menslike annotasie-probleme wat in die Oor die algemeen sal hierdie probleme respectievelik aangespreek word deur data-uitbreiding en die sny van die klankmonsters. Training Data Voordat jy in die werklike ontwerp duik, bied die volgende sub-afdelings 'n paar kort agtergrond inligting. Effektiewe modelle Google Research het sy familie van modelle in 2019 as 'n stel van modelle wat state-of-the-art modelle, op daardie tyd, in terme van beide grootte en prestasie oorskry. EfficientNet convolutional neural network modelle, wat in 2021 vrygestel word, bied selfs beter prestasie en parameter doeltreffendheid. Effektiwiteit2 Alhoewel jy opgelei is EfficientNet-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. Imagineer 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. Hierdie bands word op sy beurt uitgesaai met behulp van die Die mel skala is 'n Die 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. mel bands mel scale logarithmic 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. ("training notebook") wat bestaan uit 4 hoof afdelings: Geskryf Notebook 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) 'n Sel wat konstante definieer wat in daardie afdeling en daaropvolgende afdelings gebruik word. Config Die oefenboek begin eintlik met waar basiese Python-pakkette wat deur die notisie gebruik word, geïmporteer word. Hierdie afdeling sluit ook die logika in om in te log ("WandB") vir die opsporing van opleiding loop. Jy moet jou eie WandB byvoeg In die notasie as a Gebruik die naam . Section 0 Weights & Biases API key Kaggle Secret WANDB_API_KEY Soos bespreek in die in die afdeling, kan die ongemerkte opvoedkundige klanke in die opvoedkundige data ingesluit word deur middel van pseudo-etikettering. Hou in gedagte dat Kaggle nie-GPU omgewings beperk is tot 30 GiB van geheue. Training Data Section 3.5 - Pseudo-Labeling '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 geplaas Indien gewensaam, kan jy hierdie model gebruik sonder om jou eie te oefen en direk na die 'n afdeling om inferensie op birdsong-audio te hardloop. hier Running Inference Afdeling 1 - Audio data laai die Afdeling van die Notebook: Audio Data Loading 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. die Die sel van hierdie afdeling bevat 'n Hierdie konstante spesifiseer die maksimum aantal klank lêers om van 'n gegewe klas te laai. om te verseker dat al die klank lêers geladen word vir die Jy moet hierdie konstante vir jou eie eksperimentele instelling aanpas. Byvoorbeeld, as jy klankdata van In hierdie klasse moet u hierdie konstante op 'n laer waarde stel om die beskikbare geheue te vernietig. Config MAX_FILES 1000 non-GBV all die method can be called with a Parameter, wat 'n lys van klasse is waarvan die klank geladen sal word. Klasse word as 'n lys gestoor en aan die veranderlike toegewys. Dit word later oorgedra na die Die metode deur die Parameters van. load_training_audio classes non-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'] 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. die methode aanvaar 'n booleaan Wanneer die parameter Die logika skep 'n 'n kopie van elke klankmonster as 'n Audio kopieë word bewaar in sub-direktore wat die klas weerspieël waaraan hulle behoort. 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. load_training_audio make_copy True processed_audio .wav processed_audio die 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 : 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]]))] ...} 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 die section of the notebook: Audio Data Processing 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 die Die metode word gebruik om oor elke ruwe klankmonster te "slide" en stille segmente te identifiseer deur die 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. die sel van hierdie afdeling beheer die gedrag van die method: detect_silence root-mean square (RMS) Config 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 The en constants can be modified to adjust how the method "slides" over the raw audio. Similarly, the waarde kan verander word om die metode meer aggressief of konserwatief te maak met betrekking tot die identifisering van stil segmente. SIL_FRAME SIL_HOP SIL_THRESHOLD 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 constant defined in the die sel van hierdie afdeling spesifiseer of klank moet ontneem word van stil segmente sliced to remove human annotations. USE_REMOVE_SILENCE_AND_HUMAN_ANNOT Config and Die meeste USE_REMOVE_SILENCE_AND_HUMAN_ANNOT = True The method strips silent segments from audio samples using the output from the Verder implementeer dit logika om menslike aantekeninge te hanteer wat gebaseer is op 'n eenvoudige waarneming: baie klankmonsters, naamlik dié met menslike aantekeninge, to have the following structure: remove_silence_and_human_annot detect_silence tend | < 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 logic uses the constant in the cell to check if a silent segment marker lies outside the window specified by , 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. Die afdeling, daar is audio recordings where the human annotation the birdsong recording. The logic described here does 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. remove_silence_and_human_annot ANNOT_BREAKPOINT Config ANNOT_BREAKPOINT Training Data some precedes nie A second constant, , can be optionally used in a final processing step to return an even more refined slice of the processed audio. Set to the number of seconds of processed audio that you want to retain. SLICE_FRAME SLICE_FRAME die method saves processed audio to disk under the directory via the Parameters, wat as . The method returns a dictionary of the seconds of processed audio for each class. remove_silence_and_human_annot processed_audio save_audio True total {'1139490': 14, '1192948': 29, '1194042': 24, '126247': 48, '1346504': 40, '134933': 32, '135045': 77, ...} The method is used following to get the average number of seconds of audio across all classes. get_audio_stats remove_silence_and_human_annot Section 2.3 - Calculating Augmentation Turns for Minority Classes Soos in die Augmentasie 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 die method. Classes with total seconds of processed audio the average are augmented. The methode bepaal die aantal verhoogingsdreine vir elke minderheidsklasse met behulp van die gemiddelde aantal sekondes per verwerkte klankmonster. Training Data get_audio_stats below get_augmentation_turns_per_class 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 includes a constant which can be used to adjust the value for get_augmentation_turns_per_class AVG_SECS_FACTOR 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 includes a 'n constante wat gebruik kan word om die waarde van get_augmentation_turns_per_class AVG_SECS_FACTOR 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 die constant defined in the cell of this section specifies if audio should be augmented. USE_AUGMENTATIONS Config 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 en 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 Die cel: add_noise change_tempo Config NOISE_RNG_LOW = 0.0001 NOISE_RNG_HIGH = 0.0009 TEMPO_RNG_LOW = 0.5 TEMPO_RNG_HIGH = 1.5 die methode voer die verhogings met behulp van die uitvoer van die Vir die klasse wat verhoog sal word, die logika: run_augmentations get_augmentations_turns_per_class 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 Afdeling van die Notebook: Mel Spectrogram Generation and Input Preparation 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 objects from training and validation data lists. Dataset Optioneel gebruik MixUp logika om opleiding data te vergroot. Section 3.1 - Splitting Processed Audio Data Die verwerkte audio data word geleë van die folder. The data is split into 4 lists: processed_audio training_audio training_labels validation_audio validation_labels Labels are, of course, the class names associated with the audio examples. The constant defined in the die sel beheer die splitsingsverhouding tussen die opleiding en valideringsdata lyste. Verwerkte klank data word voor die splitsing gesweef. SPLIT Config Section 3.2 - Splitting Audio into Frames Audio is split into 5 second segments using the method, which itself uses the TensorFlow method to split each audio example. The following constants in the Celle beheer die splitsingsoperasie: frame_audio signal.frame Config FRAME_LENGTH = 5 FRAME_STEP = 5 Afdeling 3.3 - Die genereer van Mel Spectrograms Mel-spektrogramme word gegenereer vir elke 5 sekondes klankframe wat via the method. The following constants in the cell specify the parameters used when generating the mel spectrograms, such as the number of mel bands, minimum frequency, and maximum frequency: Section 3.2 audio2melspec Config # 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 die Sommige voëlspesies kan egter buite hierdie bereik vocaliseer. potential Afdeling 3.4 - Herstel Mel Spectrogramme The die metode gebruik word om elke mel spektrogram te omskep in 'n object. Each object is subsequently resized to which is the input dimension expected by the EfficientNet B0 model. to_melspectrogram_image pillow Image Image (224, 224) Section 3.5 - Loading Pseudo-Labeled Data As mentioned in the section, the directory contains nearly 10,000 audio recordings of birdsong. These audio recordings can be incorporated into the training data via 'N eenvoudige proses om pseudo-etiketteerde data te skep, is soos volg: Training Data train_soundscapes unlabeled pseudo-labeling Train a classifier pseudo-labeled data. without 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 opleiding pseudo-label data. Gebruik dan jou klassifikator om jou eie stel pseudo-label data te skep met behulp van die proses wat hierbo uiteengesit is. without Hierdie implementasie gebruik nie pseudo-etiketteerde data nie. U kan egter die gevolgtrekkingsnote wat in die 'n afdeling om pseudo-etiketteerde data te genereer. Running Inference Set the Konstant in die die cel to skip the use of pseudo-labeled data. USE_PSEUDO_LABELS Config False Afdeling 3.6 - Kodering van etikette die 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. process_labels Afdeling 3.7 - Konvertering van opleiding en validering data lyste na TensorFlow Objects Dataset Dataset Die TensorFlow die metode gebruik word om TensorFlow te skep objects from the training and validation data lists. The method is called on the training om die opleiding data te shuffle voor batching. die Die metode word op beide objects to batch the training and validation datasets. The Konstant in die die batch grootte beheer. data.Dataset.from_tensor_slices Dataset shuffle Dataset batch Dataset BATCH_SIZE Config 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 method, along with the method, encapsulates the optional MixUp logic. mix_up sample_beta_distribution This implementation uses MixUp to augment the training data. To use MixUp, set the Konstant in die die cel . USE_MIXUP Config True Section 4 - Model Training die Afdeling van die Notebook: Model Training 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. die cel 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: Config 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 verander na jou gewenste WandB-projeknaam. my-bird-vocalization-classifier Section 4.2 - Building and Compiling the EfficientNet B0 Model die Die metode word gebruik om die vooraf opgeleide EfficientNet B0 model met ImageNet gewigte en sonder die boonste laag te laai: build_model 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 slegs (dws trein) lae in die finale fase van die model: Onbevrore # 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 konstante In die Celle bepaal die aantal lae om nie te bevrie. UNFREEZE_LAYERS Config Die top van die model word herbou met 'n finale 'n laag wat die aantal voël spesies klasse weerspieël. is chosen as the loss function to help address the class imbalance. The en constants in the cell are used with the loss function. Dense Categorical focal cross-entropy LOSS_ALPHA LOSS_GAMMA Config Afdeling 4.3 - Modelleer opleiding The Die metode word genoem op die gekompileerde from om te oefen. let daarop dat a die oproep, , word gebruik in plaas van 'n konstante leerkoers. 'N Aanvanklike leerkoers van die leerperk verminder in 2 fases gebaseer op die tye van die tydperk. constant in the die cel. fit model Section 4.2 learning rate scheduler lr_scheduler 4.0e-4 EPOCHS Config Afdeling 4.4 - Model besparing The Die metode word genoem op die gekompileerde na die opleiding om die model op die skyf te red. save model 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 die section: Building the Classifier 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 Hierdie ("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. Elke soundcapes audio lêer word verdeel in 5 sekondes frames. constant defined in the Celle van van die notebook beheer die aantal soundcapes-audio-lêers wat vir inferensie gelê word. Geskryf Notebook train_soundscapes MAX_FILES Config Section 0 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. , dan word die GBV voorspel klas gekies as die ware klas. As die maksimum waarskynlikheid onder die 143 "bekende" klasse onder die , 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. GBV_CLASSIFIER_THRESHOLD GBV_CLASSIFIER_THRESHOLD die Die konstante word in die Celle van Voorspellings is output na 2 lêers: GBV_CLASSIFIER_THRESHOLD Config Section 5 A file that captures the prediction and prediction probability for each 5-second soundscape slice. preds.csv '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 of the inference notebook. Section 4 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 method will load audio data from all classes. The en konstante kan gebruik word om die hoeveelheid geladen klank te beperk om binne die grense van 'n Kaggle-notebook-omgewing te werk. [] load_training_audio MAX_FILES LOAD_SLICE 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.