182 aflæsninger

Maskinindlæring for fuglene: Byg din egen fugle vokalisering klassifikator

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

For langt; At læse

Konkurrencen BirdCLEF+ 2025 udfordrer brugerne til at designe en klassificeringsmodel, der præcist kan forudsige fuglearter fra en lydoptagelse. Denne vejledning beskriver en tilgang til at opbygge din egen fugle vocalization klassificering, som kan bruges i forbindelse med GBV klassificering til at klassificere et bredere udvalg af fuglearter. Metoden anvender de samme grundlæggende teknikker beskrevet i Google Research artikel Separating Birdsong in the Wild for Klassificering.
featured image - Maskinindlæring for fuglene: Byg din egen fugle vokalisering klassifikator
Picture in the Noise HackerNoon profile picture
0-item

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 klassificering

For 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 2025Imagerer

I 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) Klassifikator

Konkurrencen 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_audiokatalog er den største komponent i datasættet, der indeholder 28.564 trænings-lydoptagelser i.oggLydoptagelser er grupperet i underdialoger, som hver repræsenterer en bestemt fugleart, f.eks.:

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

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


Amazon Kingfisher


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:

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

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_soundscapesBogen indeholder næsten 10.000unlabeledFuglesang, som det vil blive diskuteret iBuilding the ClassifierDisse lydoptagelser kan indarbejdes i træningsdataene viapseudo-labeling.

test_soundscapes

Dentest_soundscapesVærket er tomt med undtagelse af areadme.txtDenne 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:

  1. Opdel den optagede lyd i 5 sekunders segmenter.
  2. Konverter lydsegmenter til mel spektrogrammer.
  3. 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 B0

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


EfficientNet model family performance

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.


Sample mel spectrogram

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:

  1. Udtrækker de klasser i BirdCLEF+ 2025 konkurrencedataset, der ikke er omfattet af GBV-klassifikatoren.
  2. Indlæser rå lyddata via load_training_audio-metoden.
  3. 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_FILESDenne konstante angiver det maksimale antal lydfiler, der skal indlæses fra en given klasse.1000for 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_audioMetoden kan kaldes enclassesparameter, som er en liste over klasser, hvis lyd vil blive indlæst.non-GBVklasser gemmes som en liste og tildeles variablenmissing_classessom senere blev overført tilload_training_audio method via the classesaf 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 somclassesaf 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_audioMetoden accepterer også en valgfri booleanuse_sliceparameter. Denne parameter fungerer medLOAD_SLICEKonstant defineret iConfig cell. The use_sliceParametre ogLOAD_SLICEKonstant 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_SLICETo af160000som er beregnet som5times den sampling rate af32000og passereTruetil denuse_sliceaf parametre.

Denload_training_audioMetoden accepterer en booleanmake_copyNår denne parameter erTrueLogikken skaber enprocessed_audiokatalog og gemmer en kopi af hver enkelt lydprøve som en.wavLydkopier gemmes i underkataloger, der afspejler den klasse, de tilhører.processed_audiokatalog bruges i næste afsnit til at gemme modificerede lydprøver på disk uden at påvirke BirdCLEF+ 2025 datasætkataloger.


Denload_training_audiometoden 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:

  1. Optionelt striber stille segmenter og striber lyd for at fjerne de fleste menneskelige annotationer fra rå lyd.
  2. Optionally augments audio for minority classes to help address the class imbalance. Audio augmentation consists of (1) adding a randomly generated noise signal, (2) changing the tempo of the raw audio, or (3) adding a randomly generated noise signal and changing the tempo of the raw audio.
Section 2.1 - Detecting Silent Segments

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_ANNOTKonstant 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_BREAKPOINTkonstant 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 TrueMetoden 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_statsMetoden anvendes som følgerremove_silence_and_human_annotFor 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_statsMetode: Klasser med samlede sekunder af behandlet lydNedenfor the average are augmented. The get_augmentation_turns_per_classmetoden 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_noiseogchange_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_augmentationsmetoden kører augmentationerne ved hjælp af output fraget_augmentations_turns_per_class method. For those classes that will be augmented, the logic:

  1. Randomly selects a processed audio sample (i.e. silent segments already removed) for augmentation.
  2. Randomly selects the augmentation to perform: (1) adding noise, (2) changing the tempo, or (3) adding noise and changing the tempo.
  3. 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:

  1. Opdel de behandlede lyddata i trænings- og valideringslister.
  2. Splits audio into 5 second frames.
  3. Generates mel spectrograms for each 5 second audio frame.
  4. Redimensionerer melspektrogrammer til en målstørrelse på (224, 224).
  5. Valgfrit indlæser pseudo-mærkede dataprøver for at øge træningsdata.
  6. One-hot koder træningsdata og valideringsdata etiketter.
  7. Constructs TensorFlow Dataset objects from training and validation data lists.
  8. 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.framemetode 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_imagemetoden anvendes til at konvertere hvert mel spektrogram til enpillow ImageObjekter – hverImageObjektet 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_LABELSkonstant i denConfigCelle 2False to skip the use of pseudo-labeled data.

Afsnit 3.6 - Kodning af etiketter

Denprocess_labelsEn-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 TensorFlowDatasetgenstande
Datasæt

Om TensorFlowdata.Dataset.from_tensor_slicesmetoden bruges til at oprette TensorFlowDataset objects from the training and validation data lists. The shuffleMetoden kaldes træningDatasettil at shuffle træningsdata før batching.batchMetoden kaldes beggeDatasettil at indsamle uddannelses- og valideringsdatasæt.BATCH_SIZEkonstant 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_MIXUPkonstant i denConfig cell to True.

Section 4 - Model Training

The Model Trainingafsnit af notesbogen:

  1. Initializes and configures a WandB project to capture training run data.
  2. Builds and compiles the EfficientNet B0 model.
  3. Træning af modellen.
  4. 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-classifiertil dit ønskede WandB projektnavn.

Sektion 4.2 - Opbygning og udarbejdelse af EfficientNet B0-modellen

Denbuild_modelmetoden 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_LAYERSI denConfig cell specifies the number of layers to unfreeze.

Toppen af modellen er genopbygget med en endeligDenseFugleklasse 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_ALPHAogLOSS_GAMMAKonstant i denConfigcellen bruges med tabsfunktionen.

Afsnit 4.3 - Modeluddannelse

DenfitMetoden kaldes den samledemodelfraSection 4.2for at træne. bemærke, at alearning rate schedulerTilbage til Callbacklr_scheduler, anvendes i stedet for en konstant læringsfrekvens.4.0e-4Læringsfrekvensen falder i 2 faser baseret på epokens tælling.EPOCHS constant in the Configaf cellen.

Section 4.4 - Model Saving

DensaveMetoden kaldes den samledemodelefter 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 :

Training results

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_soundscapesHver soundcapes lydfil er opdelt i 5 sekunders rammer.MAX_FILESKonstant 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_THRESHOLDKonstant er defineret iConfig cell of Section 5Forudsigelser er output til 2 filer:

  1. En preds.csv-fil, der indfanger forudsigelse og forudsigelse sandsynlighed for hver 5-sekunders soundscape skive.
  2. 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_audioMetoden vil indlæse lyddata fra alle klasser.MAX_FILESogLOAD_SLICEKonstanter 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.

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks