Introduktion
Forskere bruger automatiserede systemer til at studere store økosystemer.autonomous recording units (ARUs)bruges til at optage lyd, som kan bruges til at hjælpe med at identificere forskellige arter af dyr og insekter. Denne information kan bruges til at udvikle en bedre forståelse af fordelingen af arter inden for et givet miljø.Adskille Birdsong i det vilde for klassificering"Økologer bruger fugle til at forstå fødevaresystemer og skovens sundhed - for eksempel, hvis der er flere træpeckere i en skov, betyder det, at der er meget dødt træ."
Adskille Birdsong i det vilde for klassificeringFor nylig, denBirdCLEF+ fra 2025Konkurrencen blev lanceretKaggleUnder paraplyen påImageCLEFImageCLEF understøtter undersøgelser af tværsprogede annotationer og indhentning af billeder på tværs af forskellige domæner. Konkurrencens mål er ligefrem: at designe en klassificeringsmodel, der præcist kan forudsige fuglearter fra en lydoptagelse.
BirdCLEF+ fra 2025ImagererI første omgang virker opgaven triviel i betragtning af tilgængeligheden afGoogle Bird Vocalization (GBV) KlassifikatorOgså kendt somPerchGBV-klassifikatoren er uddannet på næsten 11.000 fuglearter og er derfor et indlysende valg som klassifikationsmodel.
Google Bird Vocalization (GBV) KlassifikatorKonkurrencen omfatter dog fuglearter, der ligger uden for GBV-klassifikatortræningssættet. Som et resultat opnår GBV-klassifikatoren kun ~60% nøjagtighed på BirdCLEF+ 2025-konkurrenceprøvesættet.
Denne vejledning beskriver en tilgang til at opbygge din egen fugle vokalisering klassificering, som kan bruges i forbindelse med GBV klassificering til at klassificere et bredere udvalg af fugle arter.ArtiklerDesignet udnytter BirdCLEF+ 2025 konkurrencedataset til træning.
Træningsdata
DenBirdCLEF+ 2025 uddannelsesdatasæt, herunder understøttende filer, er ca. 12 GB. De vigtigste mapper og filer, der består af datasætstrukturen, er:
birdclef_2025
|__ train_audio
|__ train_soundscapes
|__ test_soundscapes
recording_location.txt
taxonomy.csv
train.csv
train_audio
Dentrain_audio
katalog er den største komponent i datasættet, der indeholder 28.564 trænings-lydoptagelser i.ogg
Lydoptagelser er grupperet i underdialoger, som hver repræsenterer en bestemt fugleart, f.eks.:
train_audio
|__amakin1
|__ [AUDIO FILES]
|__amekes
|__ [AUDIO FILES]
...
Dentaxonomy.csv
Filen kan bruges til at søge efter de faktiske videnskabelige og almindelige navne på de fuglearter, der repræsenteres af underdialognavne, f.eks.:
SUB-DIRECTORY NAME SCIENTIFIC NAME COMMON NAME
amakin1 Chloroceryle amazona Amazon Kingfisher
amekes Falco sparverius American Kestrel
...
Konkurrencedataset omfatter 206 unikke fuglearter, dvs. 206 klasser.Introduction63 af disse klasser erIkkeDækket af denGBV ClassifierDisseNon-GBVKlasser er generelt mærket ved hjælp af en numerisk klasseidentifikator:
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
Nogle af deNon-GBVKlasser er karakteriseret ved:
- 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
Disse to betingelser fører til en betydelig ubalance mellem klasser med hensyn til mængden af tilgængelig lyd og lydkvalitet.
Mange af de uddannelsesmæssige lydoptagelser i beggeGBVogNon-GBVklasser også omfatte menneskelig tale, med højttaleren annotere optagelsen med detaljer såsom arten af fugl, der blev optaget og placeringen af optagelsen.Men ikke alle- tilfælde følger annotationerne de optagede fugle vokaliseringer.
Taktik, der anvendes til at tackle klasse ubalance og tilstedeværelsen af menneskelige tale annotationer diskuteres iBuilding the Classifierafdeling .
train_soundscapes
Dentrain_soundscapes
Bogen indeholder næsten 10.000unlabeledFuglesang, som det vil blive diskuteret iBuilding the ClassifierDisse lydoptagelser kan indarbejdes i træningsdataene viapseudo-labeling.
test_soundscapes
Dentest_soundscapes
Værket er tomt med undtagelse af areadme.txt
Denne mappe er fyldt med et skjult sæt af testlyd, når du indsender forudsigelsesresultater til konkurrencen BirdCLEF+ 2025.
Opbygning af klassikeren
Grundlæggende tilgang og baggrund
Den grundlæggende tilgang, der anvendes afGoogle Forskningat træne deres fugle vocalization klassificering er som følger:
- Opdel den optagede lyd i 5 sekunders segmenter.
- Konverter lydsegmenter til mel spektrogrammer.
- Træn en billedklassificering på melspektrogrammerne.
Den samme tilgang vil blive fulgt i denne vejledning. Den billedklassificering, der vil blive trænet, er GooglesEffektivitet B0Hvis du er bekendt med denEfficientNetfamilie af modeller, du ved, at de blev designet til effektiv billedbehandling.
Effektivitet B0Men før lydprøver kan opdeles og konverteres til melspektrogrammer, skal vi beskæftige os med klasse ubalance og menneskelige annotation problemer nævnt iTraining DataGenerelt vil disse problemer blive løst henholdsvis via dataforstørrelse og skæring af lydprøver.
Før du dykker ind i det faktiske design, giver følgende underafsnit nogle korte baggrundsoplysninger.
Effektive modeller
Google Research præsenterede sin familie afEfficientNetmodeller i 2019 som et sæt afconvolutional neural networkmodeller, der overgik state-of-the-art modeller, på det tidspunkt, hvad angår både størrelse og ydeevne.
Effektivitet2modeller, der udgives i 2021, tilbyder endnu bedre ydeevne og parameter effektivitet.
Selvom man er uddannetImageretEfficientNet-modeller har vist deres anvendelighed, når de overføres til andre datasæt, hvilket gør dem til et attraktivt valg som klassificeringsteknologi til dette projekt.
Mel Spektrogrammer
Et mel spektrogram er en visuel repræsentation af et lydsignal. Det kan bedst være analogiseret til et heatmap for lyd.
X-aksen i et mel-spektrogram repræsenterer tidsdimensionen af lydsignalet, og y-aksen repræsenterer frekvenserne af lyde i signalet.mel bandsDisse bånd er til gengæld spredt ud ved hjælp afmel scaleMel skalaen er enlogarithmicFarverne i melspektrogrammet repræsenterer amplituden af lydene inden for båndene. lysere farver repræsenterer højere amplituder, mens mørkere farver repræsenterer lavere amplituder.
Design af
Mit mål i diskussionen om designet er at give en højt niveau gennemgang af fremgangsmåden uden at komme ind i for mange detaljer.Læser Notebook("træningsseddel") som består af 4 hovedafsnit:
- Afsnit 1: Indlæsning af lyddata.
- Afsnit 2: Behandling af lyddata.
- Afsnit 3: Mel spektrogram generation og input forberedelse.
- Afsnit 4: Model træning.
Du vil bemærke, at de første 2 celler i hver hovedsektion er (1) import, der anvendes af den pågældende sektion, og (2) enConfigcellen definerer de konstanter, der anvendes i det pågældende afsnit og efterfølgende afsnit.
Træningsbogen begynder faktisk medSection 0hvor de grundlæggende Python-pakker, der bruges i hele notesbogen, importeres. Denne sektion indeholder også logikken til at logge ind påWeights & Biases("WandB") til sporing af træningsløb. Du skal vedhæfte din egen WandBAPI keytil bogen som aKaggle SecretBrug af navnetWANDB_API_KEY
.
Som nævnt i denTraining Dataafsnit, kan de ubemærkede træningssoundcapes indarbejdes i træningsdataene via pseudo-labeling.Section 3.5 - Pseudo-LabelingHusk, at Kaggle ikke-GPU-miljøer er begrænset til 30 GiB hukommelse.
En uddannet model efter den eksperimentelle opsætning beskrevet i følgende underafsnit er blevet sendt til Kaggle her. Hvis det ønskes, kan du bruge denne model uden at træne din egen og hoppe direkte til Running Inference-sektionen for at køre inference på birdsong-lyd.
En uddannet model efter den eksperimentelle opsætning beskrevet i følgende underafsnit er blevet sendt til Kaggle her. Hvis det ønskes, kan du bruge denne model uden at træne din egen og hoppe direkte til Running Inference-sektionen for at køre inference på birdsong-lyd.
Afsnit 1 - Lading af lyddata
DenAudio Data Loadingafsnit af notesbogen:
- Udtrækker de klasser i BirdCLEF+ 2025 konkurrencedataset, der ikke er omfattet af GBV-klassifikatoren.
- Indlæser rå lyddata via load_training_audio-metoden.
- Opret en processed_audio-katalog og gemmer en kopi af indlæst lyddata som .wav-filer i den pågældende katalog.
DenConfigCellen i denne sektion indeholder enMAX_FILES
Denne konstante angiver det maksimale antal lydfiler, der skal indlæses fra en given klasse.1000
for at sikre, at alle lydfiler indlæses tilnon-GBVDu skal muligvis justere denne konstante for din egen eksperimentelle opsætning. For eksempel, hvis du indlæser lyddata fraallDu skal muligvis indstille denne konstante til en lavere værdi for at undgå at udtømme den tilgængelige hukommelse.
Denload_training_audio
Metoden kan kaldes enclasses
parameter, som er en liste over klasser, hvis lyd vil blive indlæst.non-GBVklasser gemmes som en liste og tildeles variablenmissing_classes
som senere blev overført tilload_training_audio
method via the classes
af parametre.
# `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']
Du kan indlæse alle 206 BirdCLEF+ 2025 klasser ved at passere en tom liste som klasseparameteren.
Du kan indlæse alle 206 BirdCLEF+ 2025 klasser ved at sende en tom liste somclasses
af parametre.
load_training_audio-metoden accepterer også en valgfri booleansk use_slice-parameter. Denne parameter fungerer med LOAD_SLICE-konstant, der er defineret i Config-cellen. use_slice-parameteret og LOAD_SLICE-konstant bruges ikke med denne implementering. De kan dog bruges til at indlæse en bestemt mængde lyd fra hver fil. For eksempel, for kun at indlæse 5 sekunder lyd fra hver lydfil, indstille LOAD_SLICE til 160000, hvilket beregnes som 5 gange samplingraten på 32000; og passere True til use_slice-parameteret.
Denload_training_audio
Metoden accepterer også en valgfri booleanuse_slice
parameter. Denne parameter fungerer medLOAD_SLICE
Konstant defineret iConfig cell. The use_slice
Parametre ogLOAD_SLICE
Konstant ernotanvendes med denne implementering. Men de kan bruges til at indlæse en bestemt mængde lyd fra hver fil. For eksempel, for kun at indlæse 5 sekunder af lyd fra hver lydfil, sætLOAD_SLICE
To af160000
som er beregnet som5
times den sampling rate af32000
og passereTrue
til denuse_slice
af parametre.
Denload_training_audio
Metoden accepterer en booleanmake_copy
Når denne parameter erTrue
Logikken skaber enprocessed_audio
katalog og gemmer en kopi af hver enkelt lydprøve som en.wav
Lydkopier gemmes i underkataloger, der afspejler den klasse, de tilhører.processed_audio
katalog bruges i næste afsnit til at gemme modificerede lydprøver på disk uden at påvirke BirdCLEF+ 2025 datasætkataloger.
Denload_training_audio
metoden returnerer en ordbog med indlæst lyddata ved hjælp af klassens navne som nøgler. Hver værdi i ordbogen er en liste over tupler af formularen(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]]))] ...}
Metoden returnerer også grundlæggende statistikker, der beskriver de data, der er indlæst for hver klasse, som en værdistreng, der er adskilt fra kommandoer.
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
...
Afsnit 2 - Behandling af lyddata
DenAudio Data Processingafsnit af notesbogen:
- Optionelt striber stille segmenter og striber lyd for at fjerne de fleste menneskelige annotationer fra rå lyd.
- 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
The detect_silence
method is used to "slide" over each raw audio sample and identify silent segments by comparing the root-mean square (RMS) value of a given segment to a specified threshold. If the RMS is below the threshold, the segment is identified as a silent segment. The following constants specified in the Configcellen i denne sektion styrer opførslen afdetect_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
DenSIL_FRAME
and SIL_HOP
constants can be modified to adjust how the method "slides" over the raw audio. Similarly, the SIL_THRESHOLD
value can be modified to make the method more aggressive or conservative with respect to identification of silent segments.
The method outputs a dictionary of silent segment markers for each file in each class. Audio files with no detected silent segments are identified by empty lists.
{'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
Konstant defineret iConfig cell of this section specifies if audio should be stripped of silent segments andSlet til fjernelsemost 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
method. Further, it implements logic to handle human annotations based on a simple observation: many audio samples, namely those with human annotations, tendat have følgende struktur:
| < 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
konstant i denConfig cell to check if a silent segment marker lies outside the window specified by ANNOT_BREAKPOINT
, expressed in number of seconds. If it does, the logic slices the raw audio at that marker and only retains the data that occurs before it. A manual inspection of processed audio during experimentation revealed this approach to be satisfactory. However, as mentioned in the Training DataSektion, der ersomelydoptagelser, hvor den menneskelige annotationTidligere the birdsong recording. The logic described here does not 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.
En anden konstant,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.
The remove_silence_and_human_annot
method saves processed audio to disk under the directory processed_audio
via the save_audio
parameter, which is passed as True
Metoden returnerer en ordbog aftotalsekunders lydbehandling for hver klasse.
{'1139490': 14, '1192948': 29, '1194042': 24, '126247': 48, '1346504': 40, '134933': 32, '135045': 77, ...}
The get_audio_stats
Metoden anvendes som følgerremove_silence_and_human_annot
For at få det gennemsnitlige antal sekunder af lyd i alle klasser.
Afsnit 2.3 - Beregning af stigningsomdrejninger for mindretalsklasser
Som nævnt i denTraining DataAugmentation bruges i denne notebook-sektion til at hjælpe med at løse ubalancen ved at udnytte det gennemsnitlige antal sekunder af lyd på tværs af alle klasser, som angivet iget_audio_stats
Metode: Klasser med samlede sekunder af behandlet lydNedenfor the average are augmented. The get_augmentation_turns_per_class
metoden bestemmer antallet af forstørrelser for hver mindretalsklasse ved hjælp af det gennemsnitlige antal sekunder pr. behandlet lydprøve.
TURNS = (AVG_SECS_AUDIO_ACROSS_CLASSES - TOTAL_SECS_AUDIO_FOR_CLASS)/AVG_SECS_PER_AUDIO_SAMPLE
Minority classes further below the average will have more augmentation turns versus minority classes nearer the average which will have fewer augmentation turns.
Denget_augmentation_turns_per_class
includes a AVG_SECS_FACTOR
constant which can be used to adjust the value for
Den konstante kan bruges til at gøre logikken mere konservativ eller aggressiv, når man beregner antallet af forstørrelsesdrejninger.
Denget_augmentation_turns_per_class
includes a AVG_SECS_FACTOR
constant which can be used to adjust the value for
Den konstante kan bruges til at gøre logikken mere konservativ eller aggressiv, når man beregner antallet af forstørrelsesdrejninger.
Section 2.4 - Running Augmentations
The USE_AUGMENTATIONS
constant defined in the Configcellen i denne sektion angiver, om lyd skal forstørres.
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
ogchange_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 Config cell:
NOISE_RNG_LOW = 0.0001
NOISE_RNG_HIGH = 0.0009
TEMPO_RNG_LOW = 0.5
TEMPO_RNG_HIGH = 1.5
Denrun_augmentations
metoden kører augmentationerne ved hjælp af output fraget_augmentations_turns_per_class
method. For those classes that will be augmented, the logic:
- Randomly selects a processed audio sample (i.e. silent segments already removed) for augmentation.
- Randomly selects the augmentation to perform: (1) adding noise, (2) changing the tempo, or (3) adding noise and changing the tempo.
- Saves the augmented audio to disk under the appropriate class within the
processed_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.
Section 3 - Mel Spectrogram Generation and Input Preparation
The Mel Spectrogram Generation and Input Preparation section of the notebook:
- Opdel de behandlede lyddata i trænings- og valideringslister.
- Splits audio into 5 second frames.
- Generates mel spectrograms for each 5 second audio frame.
- Redimensionerer melspektrogrammer til en målstørrelse på (224, 224).
- Valgfrit indlæser pseudo-mærkede dataprøver for at øge træningsdata.
- One-hot koder træningsdata og valideringsdata etiketter.
- Constructs TensorFlow
Dataset
objects from training and validation data lists. - Optionally uses MixUp logic to augment training data.
Section 3.1 - Splitting Processed Audio Data
De behandlede lyddata indlæses fraprocessed_audio
folder. The data is split into 4 lists:
training_audio
training_labels
validation_audio
validation_labels
Etiketter er naturligvis klassens navne forbundet med lydeksemplerne.SPLIT
constant defined in the Configcellen styrer splittelsesforholdet mellem uddannelses- og valideringsdatalisterne.
Afsnit 3.2 - Opdeling af lyd i rammer
Lyd er opdelt i 5 sekunders segmenter ved hjælp afframe_audio
method, which itself uses the TensorFlow signal.frame
metode til at opdele hvert lydeksempel. De følgende konstanter iConfig cell control the split operation:
FRAME_LENGTH = 5
FRAME_STEP = 5
Afsnit 3.3 - Generering af Mel Spectrogrammer
Mel spectrograms are generated for each 5 second audio frame generated in Section 3.2 via the audio2melspec
method. The following constants in the Configcellen angiver de parametre, der anvendes ved generering af mel spektrogrammer, såsom antallet af mel bånd, mindste frekvens og maksimal frekvens:
# Mel spectrogram parameters
N_FFT = 1024 # FFT size
HOP_SIZE = 256
N_MELS = 256
FMIN = 50 # minimum frequency
FMAX = 14000 # maximum frequency
The frequency band was chosen to reflect the potentialDe fleste fugle kan vokalisere uden for dette område.
Section 3.4 - Resizing Mel Spectrograms
The to_melspectrogram_image
metoden anvendes til at konvertere hvert mel spektrogram til enpillow
Image
Objekter – hverImage
Objektet er derefter genindstillet til(224, 224)
som er den input dimension, der forventes af EfficientNet B0 model.
Afsnit 3.5 - Indlæsning af pseudo-mærkede data
Som nævnt i denTraining Dataafdeling, dentrain_soundscapes
directory contains nearly 10,000 unlabeled audio recordings of birdsong. These audio recordings can be incorporated into the training data via pseudo-labeling. A simple process to create pseudo-labeled data is as follows:
- Træn en klassificer uden pseudo-mærkede data.
- Lade træning soundcape audio filer.
- Segmenter hver lydscape i 5 sekunders rammer.
- Generate mel spectrograms for each 5 second frame and resize to
(224, 224)
. - Kør forudsigelser på hvert omformet melspektrogram ved hjælp af den klassificering, du uddannede i det første trin.
- Keep the predictions above a desired confidence level and save the mel spectrograms for those predictions to disk under the predicted class label.
- Træn din klassificering igen ved hjælp af de psuedo-mærkede data.
Pseudo-labeled data kan forbedre ydeevnen af din klassificering. Hvis du vil generere dine egne pseudo-labeled data, skal du fortsætte med de resterende sektioner for at træne en klassificeringUdenBrug derefter din klassificer til at oprette dit eget sæt pseudo-labelede data ved hjælp af den ovenfor beskrevne proces. Endelig skal du træne din klassificer igen ved hjælp af dine pseudo-labelede data.
Denne implementering bruger ikke pseudo-labelede data. Du kan dog ændre den inference notebook, der henvises til iRunning InferenceDet betyder, at der kan genereres pseudo-labelede data.
Set the USE_PSEUDO_LABELS
konstant i denConfigCelle 2False
to skip the use of pseudo-labeled data.
Afsnit 3.6 - Kodning af etiketter
Denprocess_labels
En-hot kodede etiketter returneres som NumPy-arrayer og tilføjes til træningsetiketten og valideringslisterne.
Afsnit 3.7 - Konvertering af trænings- og valideringsdata lister til TensorFlowDataset
genstande
Datasæt
Om TensorFlowdata.Dataset.from_tensor_slices
metoden bruges til at oprette TensorFlowDataset
objects from the training and validation data lists. The shuffle
Metoden kaldes træningDataset
til at shuffle træningsdata før batching.batch
Metoden kaldes beggeDataset
til at indsamle uddannelses- og valideringsdatasæt.BATCH_SIZE
konstant i denConfigcellen styrer batchstørrelsen.
Afsnit 3.8 - Brug af MixUp til at øge træningsdata
Som du måske allerede ved, er MixUp en data augmentation teknik, der effektivt blander to billeder sammen for at skabe en ny data prøve.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 i denConfig cell to True
.
Section 4 - Model Training
The Model Trainingafsnit af notesbogen:
- Initializes and configures a WandB project to capture training run data.
- Builds and compiles the EfficientNet B0 model.
- Træning af modellen.
- Gemmer den uddannede model til disk.
Section 4.1 - Initializing and Configuring WandB Project
Sørg for, at du har vedhæftet din egen WandB API-nøgle som en Kaggle Secret til notesbogen, og at WandB-login-metoden i afsnit 0 af notesbogen har returneret True.
Sørg for, at du har vedhæftet din egen WandB API-nøgle som en Kaggle Secret til notesbogen, og at WandB-login-metoden i afsnit 0 af notesbogen har returneret True.
DenConfigcellen i denne sektion indeholder logik til at initialisere og konfigurere et nyt WandB-projekt (hvis projektet ikke allerede eksisterer), som vil indfange træningsdata:
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)
Obviously, you can change the project name my-bird-vocalization-classifier
til dit ønskede WandB projektnavn.
Sektion 4.2 - Opbygning og udarbejdelse af EfficientNet B0-modellen
Denbuild_model
metoden anvendes til at indlæse den forududdannede EfficientNet B0 model med ImageNet vægte og uden det øverste lag:
model = EfficientNetB0(include_top=False, input_tensor=inputs, weights="imagenet")
Modellen er frosset for at udnytte de forududdannede ImageNet-vægte med det formål kun atUfrysning(dvs. tog) lag i den sidste fase af modellen:
# 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)
Den konstanteUNFREEZE_LAYERS
I denConfig cell specifies the number of layers to unfreeze.
Toppen af modellen er genopbygget med en endeligDense
Fugleklasse er en klasse, der afspejler antal fuglearter.Categorical focal cross-entropyer valgt som tabsfunktionen for at hjælpe med at løse klasse ubalance.LOSS_ALPHA
ogLOSS_GAMMA
Konstant i denConfigcellen bruges med tabsfunktionen.
Afsnit 4.3 - Modeluddannelse
Denfit
Metoden kaldes den samledemodel
fraSection 4.2for at træne. bemærke, at alearning rate schedulerTilbage til Callbacklr_scheduler
, anvendes i stedet for en konstant læringsfrekvens.4.0e-4
Læringsfrekvensen falder i 2 faser baseret på epokens tælling.EPOCHS
constant in the Configaf cellen.
Section 4.4 - Model Saving
Densave
Metoden kaldes den samledemodel
efter træning for at gemme modellen til disk.
model.save("bird-vocalization-classifier.keras")
Training Results
Kørsel af notesbogen skal producere følgende træningsresultater, forudsat at du brugte den eksperimentelle opsætning, der blev beskrevet iBuilding the Classifierafdeling :
Som det ses, er nøjagtigheden lige over 90% og validering nøjagtighed er omkring 70% efter træning i 30 epoker. Men som det ses, validering nøjagtighed svinger betydeligt. Denne variation er delvist tilskrives klasse ubalance med tilgængelig hukommelse begrænser brugen af yderligere økninger til fuldt ud at løse ubalance. Resultaterne tyder på, at modellen lider af overfitting på træningsdata og ikke generaliserer så godt som ville være håbet for.
Løber indsigt
DenneLæser Notebook("inference notebook") kan bruges til at køre inference. inference notebook logikken bruger både GBV klassificeringsmodellen og modellen, som du har trænet i det foregående afsnit.train_soundscapes
Hver soundcapes lydfil er opdelt i 5 sekunders rammer.MAX_FILES
Konstant defineret iConfigCelle afSection 0Notebook of the Notebook styrer antallet af soundcapes lydfiler, der er indlæst til konklusion.
Den indledende notesbog genererer først forudsigelser ved hjælp af GBV-klassifikatoren. Forudsigelserne for de 143 BirdCLEF+ 2025-konkurrencesætklasser, der er kendt for GBV-klassifikatoren, isoleres, hvis den maksimale sandsynlighed blandt de 143 "kendte" klasser er over eller lig medGBV_CLASSIFIER_THRESHOLD
, then the GBV predicted class is selected as the true class. If the maximum probability among the 143 "known" classes is below GBV_CLASSIFIER_THRESHOLD
, antages det, at den sande klasse er blandt de 63 klasser "ukendte" til GBV-klassificatoren - dvs. de klasser, der anvendes til at træne modellen i det foregående afsnit.
The GBV_CLASSIFIER_THRESHOLD
Konstant er defineret iConfig cell of Section 5Forudsigelser er output til 2 filer:
- En preds.csv-fil, der indfanger forudsigelse og forudsigelse sandsynlighed for hver 5-sekunders soundscape skive.
- En submission.csv-fil, der indfanger alle klassers sandsynligheder i formatet til konkurrencen BirdCLEF+ 2025.
Angiv stien til din finjusterede model i den første celle i afsnit 4 i inference notesbogen.
Set the path to your finetuned model in the first cell of Section 4 of the inference notebook.
Fremtidens arbejde
Træningsnotaten kan bruges til at træne en model på alle 206 BirdCLEF+ 2025-klasser, hvilket eliminerer behovet for GBV-klassificering, i det mindste med hensyn til konkurrencedataset.[]
Til denload_training_audio
Metoden vil indlæse lyddata fra alle klasser.MAX_FILES
ogLOAD_SLICE
Konstanter kan anvendes til at begrænse mængden af indlæst lyd for at arbejde inden for rammerne af et Kaggle-notebook-miljø.
Selvfølgelig kan en mere præcis model trænes ved hjælp af en større mængde træningsdata. Ideelt set ville et større antal augmentationer blive brugt til at løse klasse ubalancen. Desuden kunne andre augmentationsteknikker, såsom CutMix, implementeres for yderligere at øge træningsdataene.