परिचय
वैज्ञानिक बड़े पारिस्थितिकी तंत्रों का अध्ययन करने के लिए स्वचालित सिस्टम का उपयोग करते हैं. जंगल और जंगल क्षेत्रों के मामले में,autonomous recording units (ARUs)ऑडियो रिकॉर्डिंग के लिए उपयोग किया जाता है जिसे विभिन्न जानवरों और कीड़े की प्रजातियों की पहचान करने में मदद करने के लिए इस्तेमाल किया जा सकता है. यह जानकारी एक निश्चित वातावरण के भीतर प्रजातियों के वितरण का बेहतर समझ विकसित करने के लिए इस्तेमाल किया जा सकता है. पक्षियों के मामले में, Google अनुसंधान अपने लेख में नोट करता हैवर्गीकरण के लिए जंगली में पक्षियों के गीत अलग करनाइसके अलावा, वे ऑडियो आधारित पहचान के मूल्य पर नोट करते हैं: "[क्योंकि] पक्षी संवाद करते हैं और गाने और कॉल के साथ क्षेत्र को चिह्नित करते हैं, इसलिए उन्हें कान से पहचानना सबसे प्रभावी है।
वर्गीकरण के लिए जंगली में पक्षियों के गीत अलग करनाहाल ही में, TheBirdCLEF+ 2025प्रतियोगिता शुरू हुईKaggleइसके तलवार के नीचेचित्रकलाImageCLEF विभिन्न डोमेनों पर क्रॉस-भाषी नोटिंग और छवियों की खोज में अनुसंधान का समर्थन करता है। प्रतियोगिता का लक्ष्य सीधा है: एक वर्गीकरण मॉडल डिजाइन करना जो ऑडियो रिकॉर्डिंग से पक्षियों के प्रजातियों को सटीक रूप से भविष्यवाणी कर सकता है।
BirdCLEF+ 2025 के बारे मेंचित्रकलाशुरुआत में, कार्य उपलब्धता को देखते हुए ट्रिबियन लगता हैGoogle Bird Vocalization (GBV) के बारे में जानकारीके रूप में भी जाना जाताPerchजीबीवी वर्गीकरण लगभग 11,000 पक्षी प्रजातियों पर प्रशिक्षित किया गया है और इसलिए वर्गीकरण मॉडल के रूप में एक स्पष्ट विकल्प है।
Google Bird Vocalization (GBV) के बारे में जानकारीहालांकि, प्रतियोगिता में GBV वर्गीकरण प्रशिक्षण सेट के बाहर स्थित पक्षी प्रजातियों को शामिल किया गया है. नतीजतन, GBV वर्गीकरण केवल BirdCLEF+ 2025 प्रतियोगिता परीक्षण डेटासेट पर ~60% सटीकता प्राप्त करता है. नतीजतन, एक कस्टम मॉडल विकसित किया जाना चाहिए.
यह गाइड अपने स्वयं के पक्षी vocalization क्लासिकर का निर्माण करने के लिए एक दृष्टिकोण का विस्तार करता है जिसे GBV क्लासिकर के साथ संयुक्त रूप से उपयोग किया जा सकता है पक्षी प्रजातियों के एक व्यापक चयन को वर्गीकृत करने के लिए।लेखनडिजाइन प्रशिक्षण के लिए BirdCLEF+ 2025 प्रतियोगिता डेटासेट का लाभ उठाता है।
प्रशिक्षण डेटा
केBirdCLEF+ 2025 प्रशिक्षण डेटासेट, जिसमें समर्थित फ़ाइल शामिल हैं, लगभग 12 जीबी है. मुख्य निर्देशिकाओं और फ़ाइलों जो डेटासेट संरचना को बनाते हैं वे हैं:
birdclef_2025
|__ train_audio
|__ train_soundscapes
|__ test_soundscapes
recording_location.txt
taxonomy.csv
train.csv
train_audio
केtrain_audio
निर्देशिका डेटासेट का सबसे बड़ा घटक है, जिसमें 28,564 प्रशिक्षण ऑडियो रिकॉर्डिंग शामिल हैं।.ogg
ऑडियो रिकॉर्डिंग को उप-डिएक्टरों में समूह किया जाता है, जिनमें से प्रत्येक एक विशिष्ट पक्षी प्रजाति का प्रतिनिधित्व करता है, उदाहरण के लिए:
train_audio
|__amakin1
|__ [AUDIO FILES]
|__amekes
|__ [AUDIO FILES]
...
केtaxonomy.csv
फ़ाइल का उपयोग पक्षियों के प्रजातियों के वास्तविक वैज्ञानिक और सामान्य नामों को खोजने के लिए किया जा सकता है जिन्हें उप-डिलाइस नामों द्वारा प्रतिनिधित्व किया जाता है, उदाहरण के लिए:
SUB-DIRECTORY NAME SCIENTIFIC NAME COMMON NAME
amakin1 Chloroceryle amazona Amazon Kingfisher
amekes Falco sparverius American Kestrel
...
प्रतियोगिता में 206 अद्वितीय पक्षी प्रजातियों, यानी 206 वर्गों को शामिल किया गया है।Introductionइनमें से 63 वर्ग हैं।नहींके द्वारा कवर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
उनमें से कुछNon-GBVकक्षाओं की विशेषताएं हैं:
- 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
ये 2 शर्तें उपलब्ध ऑडियो और ऑडियो गुणवत्ता की मात्रा के संदर्भ में वर्गों के बीच एक महत्वपूर्ण असंतुलन का कारण बनती हैं।
दोनों के बीच कई ऑडियो रिकॉर्डिंगGBVऔरNon-GBVकक्षाओं में मानव भाषण भी शामिल है, जबकि वक्ता रिकॉर्डिंग को विवरण के साथ नोटिस करता है जैसे कि रिकॉर्ड किया गया पक्षी का प्रजाति और रिकॉर्डिंग की जगह।लेकिन सभी नहीं- मामलों में, नोट्स रिकॉर्ड किए गए पक्षी vocalizations का पालन करते हैं।
वर्ग असंतुलन और मानव भाषण नोटों की उपस्थिति को संबोधित करने के लिए उपयोग की जाने वाली रणनीतियों में चर्चा की जाती है।Building the Classifierसेक्शन
train_soundscapes
केtrain_soundscapes
सूची में लगभग 10,000unlabeledमछलीघरों के बारे में जानकारी. जैसा कि चर्चा में किया जाएगा.Building the Classifierइन ऑडियो रिकॉर्डिंग को प्रशिक्षण डेटा में शामिल किया जा सकता हैpseudo-labeling.
test_soundscapes
केtest_soundscapes
रजिस्ट्रेशन खाली है, सिवाय एकreadme.txt
यह निर्देशिका BirdCLEF+ 2025 प्रतियोगिता के लिए पूर्वानुमान परिणाम प्रस्तुत करते समय परीक्षण ऑडियो के एक छिपे हुए सेट से भरी हुई है।
क्लासिक बनाएं
मूल दृष्टिकोण और पृष्ठभूमि
उपयोग की जाने वाली मूल पद्धतिGoogle अनुसंधानअपने पक्षी vocalization classifier को प्रशिक्षित करने के लिए यह निम्नलिखित है:
- रिकॉर्ड ऑडियो को 5 सेकंड सेकंड में विभाजित करें।
- ऑडियो सेगमेंट को mel spectrograms में परिवर्तित करें।
- Mel Spectrograms पर एक छवि वर्गीकरण को प्रशिक्षित करें।
इस गाइड में एक ही दृष्टिकोण का पालन किया जाएगा. छवि वर्गीकरण जो प्रशिक्षित किया जाएगा वह Google का हैप्रभावी B0उदाहरण के लिए, यदि आप इसके बारे में परिचित हैंEfficientNetमॉडल के परिवार, आप जानते हैं कि वे कुशल छवि प्रसंस्करण के लिए डिज़ाइन किए गए थे।
प्रभावी B0हालांकि, इससे पहले कि ऑडियो नमूने को विभाजित किया जा सके और मल स्पेक्ट्रोग्राम में परिवर्तित किया जा सके, हमें कक्षा असंतुलन और मानव नोटिंग समस्याओं को संबोधित करना होगा।Training Dataसामान्य तौर पर, इन समस्याओं को डेटा वृद्धि और ऑडियो नमूने का काटने के माध्यम से संबंधित रूप से संबोधित किया जाएगा।
वास्तविक डिजाइन में डूबने से पहले, निम्नलिखित उप-भाग कुछ संक्षिप्त पृष्ठभूमि जानकारी प्रदान करते हैं।
प्रभावी मॉडल
Google अनुसंधान ने अपना परिवार पेश कियाEfficientNetमॉडल 2019 में एक सेट के रूप मेंconvolutional neural network models that surpassed state-of-the-art models, at that time, with respect to both size and performance.
प्रभावी 2मॉडल, जो 2021 में लॉन्च किए गए हैं, अभी भी बेहतर प्रदर्शन और पैरामीटर दक्षता प्रदान करते हैं।
हालांकि प्रशिक्षितइमेजडेटा, EfficientNet मॉडल ने अन्य डेटा सेट पर स्थानांतरित होने पर अपने उपयोगिता का प्रदर्शन किया है, जो उन्हें इस परियोजना के लिए वर्गीकरण प्रौद्योगिकी के रूप में एक आकर्षक विकल्प बनाता है।
Mel Spectrograms के बारे में
एक मल स्पेक्ट्रोग्राम एक ऑडियो सिग्नल का एक दृश्य प्रतिनिधित्व है. यह ध्वनि के लिए एक हीटमैप के लिए सबसे अच्छा हो सकता है।
एक मल स्पेक्ट्रोग्राम की एक्स-एक्स ऑडियो सिग्नल के समय आयाम का प्रतिनिधित्व करती है, और y-एक्स सिग्नल के भीतर ध्वनि की आवृत्तियों का प्रतिनिधित्व करती है।mel bandsइन बांडों को, बदले में, का उपयोग करके अंतराल किया जाता हैmel scaleMel Scale एक हैlogarithmicयह एक स्केल है जो मानव सुनवाई प्रणाली को और मनुष्यों को ध्वनि को कैसा महसूस करता है के अनुरूप करता है. मल स्पेक्ट्रोग्राम का रंग बैंडों के भीतर ध्वनिों की चौड़ाई का प्रतिनिधित्व करता है. उज्ज्वल रंग उच्च चौड़ाई का प्रतिनिधित्व करते हैं जबकि अंधेरे रंग कम चौड़ाई का प्रतिनिधित्व करते हैं.
डिजाइन
डिजाइन पर चर्चा करने का मेरा लक्ष्य दृष्टिकोण की एक उच्च स्तर की समीक्षा प्रदान करना है, बिना बहुत अधिक विवरण में जाने के।नोटबुक कागज("शिक्षा नोटबुक") जो 4 मुख्य खंडों से बना है:
- भाग 1: ऑडियो डेटा लोड।
- अनुभाग 2: ऑडियो डेटा प्रसंस्करण।
- अनुभाग 3: Mel स्पेक्ट्रोग्राम उत्पत्ति और इनपुट तैयारी।
- अनुभाग 4: मॉडल प्रशिक्षण।
आप ध्यान देंगे कि प्रत्येक मुख्य अनुभाग के पहले 2 कोशिकाएं (1) उस अनुभाग द्वारा उपयोग किए गए आयात हैं और (2) एकConfig cell defining constants used in that section and later sections.
प्रशिक्षण नोटबुक वास्तव में शुरू होता हैSection 0जहां पूरे नोटबुक में उपयोग किए जाने वाले बुनियादी पियथन पैकेज आयात किए जाते हैं. इस अनुभाग में लॉग इन करने के लिए तर्क भी शामिल हैWeights & Biases ("WandB") for tracking training runs. You will need to attach your own WandB API keyनोटबुक के रूप में AKaggle Secretनाम का उपयोगWANDB_API_KEY
.
जैसा कि चर्चा में कहा गया हैTraining Dataअनुभाग में, अनलाइन प्रशिक्षण ध्वनिक्षेत्रों को pseudo-labeling के माध्यम से प्रशिक्षण डेटा में शामिल किया जा सकता है।Section 3.5 - Pseudo-Labelingध्यान रखें कि Kaggle गैर-GPU वातावरण 30 GiB की स्मृति तक सीमित हैं।
निम्नलिखित उप-भागों में वर्णित प्रयोगशाला सेटअप के बाद एक प्रशिक्षित मॉडल को यहां Kaggle पर पोस्ट किया गया है. यदि वांछित है, तो आप इस मॉडल का उपयोग अपने स्वयं के प्रशिक्षण के बिना कर सकते हैं और पक्षी गीत ऑडियो पर निष्कर्ष चलाने के लिए सीधे Running Inference अनुभाग पर कूद सकते हैं.
निम्नलिखित उप-भागों में वर्णित प्रयोगशाला सेटिंग के बाद एक प्रशिक्षित मॉडल को Kaggle में पोस्ट किया गया हैयहांयदि वांछित है, तो आप अपने स्वयं के प्रशिक्षण के बिना इस मॉडल का उपयोग कर सकते हैं और सीधे कूद सकते हैंRunning InferenceBirdSong Audio पर Inference चलाने के लिए।
अध्याय 1 - ऑडियो डेटा लोड
केAudio Data Loadingनोटबुक का हिस्सा:
- BirdCLEF+ 2025 प्रतियोगिता डेटासेट में उन कक्षाओं को निकालता है जो GBV वर्गीकरण द्वारा कवर नहीं किए जाते हैं।
- load_training_audio विधि के माध्यम से कच्चे ऑडियो डेटा लोड करता है।
- एक processed_audio निर्देशिका बनाता है और उस निर्देशिका में लोड किए गए ऑडियो डेटा के एक प्रति को .wav फ़ाइलें के रूप में सहेजता है।
केConfigइस खंड में शामिल है AMAX_FILES
यह निरंतर एक निश्चित वर्ग से लोड करने के लिए ऑडियो फ़ाइलों की अधिकतम संख्या निर्दिष्ट करता है।1000
यह सुनिश्चित करने के लिए कि सभी ऑडियो फ़ाइलों को लोड किया जाता हैnon-GBVआप अपने स्वयं के प्रयोग सेटिंग के लिए इस निरंतर को समायोजित करने की आवश्यकता हो सकती है. उदाहरण के लिए, यदि आप ऑडियो डेटा लोड कर रहे हैंallकक्षाओं, आपको उपलब्ध स्मृति को खराब करने से बचने के लिए इस निरंतर को एक कम मूल्य पर सेट करने की आवश्यकता हो सकती है।
के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']
आप सभी 206 BirdCLEF+ 2025 कक्षाओं को कक्षा पैरामीटर के रूप में एक खाली सूची पारित करके लोड कर सकते हैं।
आप सभी 206 BirdCLEF+ 2025 कक्षाओं को कक्षा पैरामीटर के रूप में एक खाली सूची पारित करके लोड कर सकते हैं।
load_training_audio विधि एक वैकल्पिक boolean use_slice पैरामीटर भी स्वीकार करती है. यह पैरामीटर कॉन्फ़िग सेल में परिभाषित LOAD_SLICE स्थिर के साथ काम करता है. use_slice पैरामीटर और LOAD_SLICE स्थिर इस कार्यान्वयन के साथ उपयोग नहीं किए जाते हैं. हालांकि, उन्हें प्रत्येक फ़ाइल से एक विशिष्ट मात्रा में ऑडियो लोड करने के लिए इस्तेमाल किया जा सकता है. उदाहरण के लिए, प्रत्येक ऑडियो फ़ाइल से केवल 5 सेकंड ऑडियो लोड करने के लिए, LOAD_SLICE को 160000 सेट करें, जो 32000 के नमूना दर के 5 गुना के रूप में गणना की जाती है; और use_slice पैरामीटर को true पारित करें.
केload_training_audio
विधि भी एक वैकल्पिक बूलेन स्वीकार करता हैuse_slice
इस पैरामीटर के साथ काम करता हैLOAD_SLICE
निरंतर में परिभाषितConfigकोलकाता - Theuse_slice
पैरामीटर औरLOAD_SLICE
निरंतर हैnotइस कार्यान्वयन के साथ उपयोग किया जाता है. हालांकि, उन्हें प्रत्येक फ़ाइल से विशिष्ट मात्रा में ऑडियो लोड करने के लिए इस्तेमाल किया जा सकता है. उदाहरण के लिए, प्रत्येक ऑडियो फ़ाइल से केवल 5 सेकंड ऑडियो लोड करने के लिए, सेटLOAD_SLICE
दो160000
जिसकी गणना की जाती है कि5
टाइम नमूने की दर32000
और पासTrue
के लिएuse_slice
पैरामीटर
केload_training_audio
एक boolean को स्वीकार करता हैmake_copy
जब यह पैरामीटरTrue
तर्क पैदा करता है aprocessed_audio
संदर्भ और प्रत्येक ऑडियो नमूने का एक प्रति सहेजता है.wav
फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइल फ़ाइलprocessed_audio
निर्देशिका का उपयोग अगले अनुभाग में किए गए ऑडियो नमूने को डिस्क पर सहेजने के लिए किया जाता है, बिना BirdCLEF+ 2025 डेटासेट निर्देशिकाओं को प्रभावित करने के लिए।
The 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]]))] ...}
विधि भी प्रत्येक वर्ग के लिए लोड किए गए डेटा का वर्णन करने वाले बुनियादी सांख्यिकी को एक कॉम-अनुकूलित-मूल्य श्रृंखला के रूप में वापस देता है. 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
...
अनुभाग 2 - ऑडियो डेटा प्रसंस्करण
The Audio Data Processingनोटबुक का हिस्सा:
- Optionally strips silent segments and slices audio to eliminate most human annotations from raw audio. Stripping silent segments eliminates irrelevant parts of the audio signal.
- 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.
अनुभाग 2.1 - चुपके सेगमेंट का पता लगाना
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 Configइस अनुभाग की सेल इस अनुभाग के व्यवहार को नियंत्रितdetect_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
केSIL_FRAME
औरSIL_HOP
निरंतरताओं को यह समायोजित करने के लिए संशोधित किया जा सकता है कि विधि कच्चे ऑडियो पर "स्लाइड" कैसे करती है।SIL_THRESHOLD
value can be modified to make the method more aggressive or conservative with respect to identification of silent segments.
विधि प्रत्येक वर्ग में प्रत्येक फ़ाइल के लिए चुपके सेगमेंट मार्करों के एक शब्दकोश का उत्पादन करती है. 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]} ...}
अनुभाग 2.2 - चुपके सेगमेंट्स को हटाना और मानव नोटों को हटाना
The USE_REMOVE_SILENCE_AND_HUMAN_ANNOT
constant defined in the Configइस अनुभाग की सेल निर्दिष्ट करती है कि क्या ऑडियो को चुपके सेगमेंट से हटा दिया जाना चाहिएऔर sliced to remove सबसे 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, टेंडर to have the following structure:
| < 10s | ~1s | |
| BIRDSONG | SILENCE | HUMAN ANNOTATION |
पक्षियों के गीत और मानव नोटिस अनुभागों में चुपके सेगमेंट शामिल हो सकते हैं. हालांकि, जैसा कि ऊपर दिए गए चार्ट में देखा गया है, पक्षियों की आवाज रिकॉर्डिंग अक्सर ऑडियो के पहले कुछ सेकंड के भीतर होती है. इसलिए, मानव नोटिस के साथ निपटने के लिए एक सरल, यदि अपर्याप्त, दृष्टिकोण यह है कि पहले चुपके सेगमेंट मार्कर पर ऑडियो नमूने काटना है जो एक निर्दिष्ट विंडो के बाहर होता है, यह मानते हुए कि एक मानव नोटिस उस चुपके सेगमेंट का अनुसरण करता है.remove_silence_and_human_annot
तर्क का उपयोग करेंANNOT_BREAKPOINT
constant in the Config 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 Dataअनुभाग, वहाँ हैsomeऑडियो रिकॉर्डिंग जहां मानव एनाटेशनपूर्वाग्रहपंडित सिंह ने कहा कि यहां लिखे गए शब्दों का अर्थनहींउन मामलों को संबोधित करें. कुछ ऑडियो नमूने में रिकॉर्ड किए गए पक्षी गीतों के लंबे अनुक्रम हैं और इन नमूने में अक्सर चुपके सेगमेंट नहीं होते हैं. ऐसे नमूने पहले वर्णित तर्क से प्रभावित नहीं होते हैं और पूरी तरह से रखा जाता है।
दूसरी निरंतरता,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.
केremove_silence_and_human_annot
विधि संसाधित ऑडियो डायरेक्टर के तहत डिस्क पर सहेजती हैprocessed_audio
via the save_audio
parameter, which is passed as True
. The method returns a dictionary of the कुलप्रत्येक कक्षा के लिए प्रोसेसिंग ऑडियो सेकंड।
{'1139490': 14, '1192948': 29, '1194042': 24, '126247': 48, '1346504': 40, '134933': 32, '135045': 77, ...}
The get_audio_stats
method is used following remove_silence_and_human_annot
सभी वर्गों में ऑडियो सेकंड की औसत संख्या प्राप्त करने के लिए।
अनुच्छेद 2.3 - अल्पसंख्यक वर्गों के लिए वृद्धि दरों की गणना
As mentioned in the Training Dataइस नोटबुक सेक्शन में, कक्षाओं को संतुलित नहीं किया जाता है। Augmentation इस नोटबुक सेक्शन में उपयोग किया जाता है ताकि यह असंतुलन को संबोधित करने में मदद करता है जो सभी कक्षाओं में ऑडियो के औसत सेकंड का लाभ उठाता है, जैसा कि नोटबुक द्वारा प्रदान किया गया है।get_audio_stats
विधि: संसाधित ऑडियो के कुल सेकंड के साथ कक्षाएंbelowऔसत बढ़ जाता है।get_augmentation_turns_per_class
method determines the number of augmentation turns for each minority class using the average number of seconds per processed audio sample.
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.
The get_augmentation_turns_per_class
includes a AVG_SECS_FACTOR
constant which can be used to adjust the value for
average number of seconds of audio across all classes. The constant can be used to make the logic more conservative or aggressive when calculating the number of augmentation turns.
The get_augmentation_turns_per_class
इसमें AAVG_SECS_FACTOR
constant which can be used to adjust the value for
average number of seconds of audio across all classes. The constant can be used to make the logic more conservative or aggressive when calculating the number of augmentation turns.
अनुभाग 2.4 - चलने वाले वृद्धि
The USE_AUGMENTATIONS
निरंतर में परिभाषितConfig cell of this section specifies if audio should be augmented.
USE_AUGMENTATIONS = True
As mentioned earlier, audio augmentation consists of (1) adding a randomly generated noise signal, (2) changing the tempo of the raw audio, or (3) adding a randomly generated noise signal and changing the tempo of the raw audio. The add_noise
and change_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सेल :
NOISE_RNG_LOW = 0.0001
NOISE_RNG_HIGH = 0.0009
TEMPO_RNG_LOW = 0.5
TEMPO_RNG_HIGH = 1.5
The run_augmentations
method runs the augmentations using the output from the get_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:
- संसाधित ऑडियो डेटा को प्रशिक्षण और सत्यापन सूची में विभाजित करता है।
- Splits audio into 5 second frames.
- Generates mel spectrograms for each 5 second audio frame.
- Resizes mel spectrograms to a target size of
(224, 224)
. - वैकल्पिक रूप से, प्रशिक्षण डेटा को बढ़ाने के लिए pseudo-labeled डेटा नमूने लोड करता है।
- प्रशिक्षण डेटा और सत्यापन डेटा लेबल को एक गर्म कोड करता है।
- Constructs TensorFlow
Dataset
objects from training and validation data lists. - Optionally uses MixUp logic to augment training data.
अनुभाग 3.1 - संसाधित ऑडियो डेटा को विभाजित करना
प्रसंस्करण किए गए ऑडियो डेटा को डाउनलोड किया जाता हैprocessed_audio
folder. The data is split into 4 lists:
training_audio
training_labels
validation_audio
validation_labels
लेबल, निश्चित रूप से, ऑडियो उदाहरणों से जुड़े वर्गों के नाम हैं।SPLIT
constant defined in the Config cell controls the split ratio between the training and validation data lists. Processed audio data is shuffled before splitting.
अनुभाग 3.2 - ऑडियो को फ्रेम में विभाजित करना
Audio is split into 5 second segments using the frame_audio
method, which itself uses the TensorFlow signal.frame
method to split each audio example. The following constants in the Config cell control the split operation:
FRAME_LENGTH = 5
FRAME_STEP = 5
Section 3.3 - Generating Mel Spectrograms
Mel spectrograms are generated for each 5 second audio frame generated in Section 3.2 via the audio2melspec
निम्नलिखित स्थिरताओं मेंConfig cell specify the parameters used when generating the mel spectrograms, such as the number of mel bands, minimum frequency, and maximum frequency:
# Mel spectrogram parameters
N_FFT = 1024 # FFT size
HOP_SIZE = 256
N_MELS = 256
FMIN = 50 # minimum frequency
FMAX = 14000 # maximum frequency
The frequency band was chosen to reflect the potentialहालांकि, कुछ पक्षी प्रजातियां इस रेंज के बाहर आवाज कर सकती हैं।
अनुभाग 3.4 - Mel Spectrograms को पुनर्स्थापित करना
The to_melspectrogram_image
method is used to convert each mel spectrogram to a pillow
Image
उद्देश्य - प्रत्येकImage
वस्तुओं को बाद में बदल दिया जाता है(224, 224)
which is the input dimension expected by the EfficientNet B0 model.
अनुच्छेद 3.5 - Pseudo-labeled डेटा लोड
As mentioned in the Training Dataअनुच्छेद, Thetrain_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:
- pseudo-labelled डेटा के बिना एक वर्गीकरण को प्रशिक्षित करें।
- Soundcape Audio फ़ाइलों को लोड करें।
- प्रत्येक ऑडियो ध्वनि क्षेत्र को 5 सेकंड फ्रेम में विभाजित करें।
- Generate mel spectrograms for each 5 second frame and resize to
(224, 224)
. - प्रत्येक रीमेज मल स्पेक्ट्रोग्राम पर पूर्वानुमान चलाएं, जिसका उपयोग आप पहले चरण में प्रशिक्षित कर चुके हैं।
- एक वांछित भरोसेमंदता स्तर से ऊपर पूर्वानुमान रखें और पूर्वानुमानित वर्ग लेबल के तहत उन पूर्वानुमानों के लिए मल स्पेक्ट्रोग्राम को डिस्क करने के लिए सहेजें।
- Train your classifier again using the psuedo-labeled data.
Pseudo-labelled डेटा आपके वर्गीकरण के प्रदर्शन में सुधार कर सकता है. यदि आप अपने स्वयं के pseudo-labelled डेटा उत्पन्न करना चाहते हैं, तो आपको वर्गीकरण को प्रशिक्षित करने के लिए बाकी अनुभागों के साथ जारी रखना चाहिएबिनाpseudo-labelled डेटा. फिर, अपने स्वयं के pseudo-labelled डेटा सेट का उपयोग करने के लिए अपने वर्गीकरण का उपयोग करें. अंत में, अपने pseudo-labelled डेटा का उपयोग करके अपने वर्गीकरण को फिर से प्रशिक्षित करें.
इस कार्यान्वयन में pseudo-labeled डेटा का उपयोग नहीं किया जाता है. हालांकि, आप संदर्भित निष्कर्ष नोटबुक को संशोधित कर सकते हैंRunning Inferencepseudo-labeled data को generate करने के लिए।
सेट करेंUSE_PSEUDO_LABELS
में निरंतरConfigसेलFalse
to skip the use of pseudo-labeled data.
अनुच्छेद 3.6 - कोडिंग लेबल
केprocess_labels
एक-हॉट-कोडिंग लेबलों के लिए विधि का उपयोग किया जाता है. एक-हॉट-कोडिंग लेबलों को NumPy रेंज के रूप में वापस किया जाता है और प्रशिक्षण लेबल और सत्यापन लेबल सूची में जोड़ा जाता है।
अनुभाग 3.7 - प्रशिक्षण और सत्यापन डेटा सूचीों को TensorFlow में परिवर्तित करनाDataset
वस्तुओं
डेटा
TensorFlow के बारे मेंdata.Dataset.from_tensor_slices
TensorFlow बनाने के लिए उपयोग किया जाता हैDataset
प्रशिक्षण और सत्यापन डेटा सूची से वस्तुओं।shuffle
प्रशिक्षण में कहा जाता हैDataset
बैटचिंग से पहले प्रशिक्षण डेटा shuffle करने के लिए object।batch
दोनों ही तरीकों से कहा जाता हैDataset
प्रशिक्षण और सत्यापन डेटा सेट को बैच करने के लिए ऑब्जेक्ट।BATCH_SIZE
में निरंतरConfigसेल बैच आकार को नियंत्रित करता है।
अनुभाग 3.8 - प्रशिक्षण डेटा को बढ़ाने के लिए MixUp का उपयोग करना
जैसा कि आप पहले से ही जानते हैं, मिक्सअप एक डेटा वृद्धि तकनीक है जो दो छवियों को एक साथ एक नए डेटा नमूने बनाने के लिए प्रभावी ढंग से मिश्रण करती है. मिश्रित छवि के लिए वर्ग मूल 2 छवियों से जुड़े वर्गों का मिश्रण है.mix_up
method, along with the sample_beta_distribution
विधि, वैकल्पिक MixUp तर्क को कैप्सूल करता है।
इस कार्यान्वयन में प्रशिक्षण डेटा को बढ़ाने के लिए MixUp का उपयोग किया जाता है. To use MixUp, set theUSE_MIXUP
में निरंतरConfigसेलTrue
.
अनुभाग 4 - मॉडल प्रशिक्षण
केModel Trainingनोटबुक का हिस्सा:
- प्रशिक्षण चलाने के डेटा को कब्जा करने के लिए एक WandB परियोजना को प्रारंभ और कॉन्फ़िगर करता है।
- EfficientNet B0 मॉडल का निर्माण और संकलित करता है।
- मॉडल को प्रशिक्षित करें।
- प्रशिक्षित मॉडल को डिस्क पर सहेजें।
Section 4.1 - Initializing and Configuring WandB Project
सुनिश्चित करें कि आपने नोटबुक में अपने स्वयं के WandB एपीआई कुंजी को Kaggle Secret के रूप में जोड़ा है और नोटबुक के अनुभाग 0 में WandB लॉगिन विधि ने True वापस किया है।
सुनिश्चित करें कि आपने नोटबुक में अपने स्वयं के WandB एपीआई कुंजी को Kaggle Secret के रूप में जोड़ा है और नोटबुक के अनुभाग 0 में WandB लॉगिन विधि ने True वापस किया है।
The Configइस अनुभाग में सेल में एक नया WandB परियोजना (यदि परियोजना पहले से ही मौजूद नहीं है) को प्रारंभ करने और कॉन्फ़िगर करने के लिए तार्किक शामिल है जो प्रशिक्षण चलाने के डेटा को कैप्चर करेगा:
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)
आप प्रोजेक्ट का नाम बदल सकते हैंmy-bird-vocalization-classifier
to your desired WandB project name.
अनुभाग 4.2 - EfficientNet B0 मॉडल का निर्माण और संग्रह
केbuild_model
इस विधि का उपयोग पहले प्रशिक्षित EfficientNet B0 मॉडल को ImageNet वजनों के साथ और शीर्ष परत के बिना लोड करने के लिए किया जाता है:
model = EfficientNetB0(include_top=False, input_tensor=inputs, weights="imagenet")
मॉडल को पहले से प्रशिक्षित ImageNet वजनों का लाभ उठाने के लिए फ्रीज किया जाता है, जिसका उद्देश्य केवलunfreeze(यानी, ट्रेन) मॉडल के अंतिम चरण में परतें:
# 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)
निरंतरUNFREEZE_LAYERS
मेंConfigसेल निर्दिष्ट करता है कि अनफ्रीज़ करने के लिए परतों की संख्या है।
मॉडल के शीर्ष को एक अंतिम के साथ पुनर्निर्माण किया गया हैDense
layer reflecting the number bird species classes. Categorical focal cross-entropyकक्षा असंतुलन को हल करने में मदद करने के लिए नुकसान फ़ंक्शन के रूप में चुना जाता है।LOSS_ALPHA
औरLOSS_GAMMA
में निरंतरताConfig cell are used with the loss function.
अनुभाग 4.3 - मॉडल प्रशिक्षण
The fit
method is called on the compiled model
सेSection 4.2प्रशिक्षण के लिए, ध्यान दें कि Alearning rate schedulerकॉलबैकlr_scheduler
, एक निरंतर सीखने की दर के बजाय उपयोग किया जाता है. एक प्रारंभिक सीखने की दर4.0e-4
सीखने की दर को युग गिनती के आधार पर 2 चरणों में कम किया जाता है प्रशिक्षण युगों की संख्या को नियंत्रित करता हैEPOCHS
में निरंतरConfigसेल
Section 4.4 - Model Saving
केsave
विधि को संकलित किया जाता हैmodel
डिस्क पर मॉडल को सहेजने के लिए प्रशिक्षण के बाद।
model.save("bird-vocalization-classifier.keras")
प्रशिक्षण परिणाम
नोटबुक को चलाना निम्नलिखित प्रशिक्षण परिणामों को उत्पन्न करना चाहिए, मानते हुए कि आपने प्रयोगशाला सेटअप का उपयोग किया है जो सूची में वर्णित थाBuilding the Classifierसेक्शन :
जैसा कि देखा गया है, सटीकता लगभग 90% से ऊपर है और सत्यापन सटीकता 30 युगों के लिए प्रशिक्षण के बाद लगभग 70% है। हालांकि, जैसा कि देखा गया है, सत्यापन सटीकता काफी भिन्न होती है। यह बदलाव आंशिक रूप से उपलब्ध स्मृति के साथ वर्ग असंतुलन के लिए जिम्मेदार है जो असंतुलन को पूरी तरह से संबोधित करने के लिए अतिरिक्त वृद्धिओं का उपयोग सीमित करता है। परिणाम बताते हैं कि मॉडल प्रशिक्षण डेटा पर अधिग्रहण से पीड़ित है और सामान्य नहीं होता है और उम्मीद की जा सकती है।
निष्कर्ष निकालना
इसनोटबुक कागज("Inference Notebook") निष्कर्ष निकालने के लिए इस्तेमाल किया जा सकता है। निष्कर्ष नोटबुक तर्क GBV वर्गीकरण मॉडल और पिछले अनुभाग में प्रशिक्षित मॉडल दोनों का उपयोग करता है।train_soundscapes
प्रत्येक soundcapes ऑडियो फ़ाइल 5 सेकंड फ्रेम में विभाजित है।MAX_FILES
निरंतर में परिभाषितConfigसेलSection 0नोटबुक से ऑडियो फ़ाइलों की संख्या को नियंत्रित करता है जो निष्कर्ष निकालने के लिए लोड किए जाते हैं।
The inference notebook first generates predictions using the GBV classifier. The predictions for the 143 BirdCLEF+ 2025 competition dataset classes known to the GBV classifier are isolated. If the maximum probability among the 143 "known" classes is above or equal to GBV_CLASSIFIER_THRESHOLD
, तो GBV पूर्वानुमान वर्ग सच्चा वर्ग के रूप में चुना जाता है. यदि 143 " ज्ञात" वर्गों में से अधिकतम संभावना नीचे हैGBV_CLASSIFIER_THRESHOLD
, यह माना जाता है कि सच्चा वर्ग GBV वर्गीकरण के लिए "अज्ञात" 63 वर्गों में से एक है - अर्थात् पिछले अनुभाग में मॉडल को प्रशिक्षित करने के लिए उपयोग किए गए वर्गों।
केGBV_CLASSIFIER_THRESHOLD
निरंतर में परिभाषित किया जाता हैConfigसेलSection 5अनुमान लगाने का नोटबुक। पूर्वानुमान 2 फ़ाइलों के लिए आउटपुट हैं:
- एक preds.csv फ़ाइल जो हर 5 सेकंड की ध्वनि दृश्य टुकड़े के लिए पूर्वानुमान और पूर्वानुमान संभावना को कैप्चर करती है।
- एक submission.csv फ़ाइल जो BirdCLEF+ 2025 प्रतियोगिता के लिए प्रारूप में सभी वर्ग संभावनाओं को कैप्चर करती है।
निष्कर्ष नोटबुक के अनुभाग 4 के पहले कोशिका में अपने परिष्कृत मॉडल के लिए मार्ग निर्धारित करें.Set the path to your finetuned model in the first cell of Section 4 of the inference notebook.
अपने परिष्कृत मॉडल के लिए रास्ता सेट करें पहले सेल मेंSection 4Inference Notebook के बारे में
भविष्य के काम
प्रशिक्षण नोटबुक का उपयोग सभी 206 BirdCLEF+ 2025 कक्षाओं पर एक मॉडल को प्रशिक्षित करने के लिए किया जा सकता है, कम से कम प्रतियोगिता डेटासेट के संबंध में जीबीवी वर्गीकरण की आवश्यकता को समाप्त करने के लिए।[]
के लिएload_training_audio
विधि सभी वर्गों से ऑडियो डेटा लोड करेगी।MAX_FILES
औरLOAD_SLICE
निरंतरों का उपयोग चार्ज किए गए ऑडियो की मात्रा को सीमित करने के लिए किया जा सकता है ताकि एक Kaggle नोटबुक वातावरण की सीमाओं के भीतर काम किया जा सके।
बेशक, अधिक सटीक मॉडल प्रशिक्षण डेटा की एक बड़ी मात्रा का उपयोग करके प्रशिक्षित किया जा सकता है। आदर्श रूप से, कक्षा असंतुलन को हल करने के लिए अधिक वृद्धिओं की संख्या का उपयोग किया जाएगा। इसके अलावा, अन्य वृद्धि तकनीकों, जैसे CutMix, प्रशिक्षण डेटा को आगे बढ़ाने के लिए लागू किया जा सकता है. हालांकि, इन रणनीतियों को एक अधिक मजबूत विकास वातावरण की आवश्यकता होती है।