203 रीडिंग

पक्षियों के लिए मशीन सीखना: अपने स्वयं के पक्षी Vocalization Classifier का निर्माण

द्वारा Picture in the Noise20m2025/06/09
Read on Terminal Reader

बहुत लंबा; पढ़ने के लिए

BirdCLEF+ 2025 प्रतियोगिता उपयोगकर्ताओं को एक वर्गीकरण मॉडल डिजाइन करने के लिए चुनौती देता है जो ऑडियो रिकॉर्डिंग से पक्षियों की प्रजातियों को सटीक रूप से भविष्यवाणी कर सकता है। यह गाइड अपने स्वयं के पक्षियों की आवाज वर्गीकरण वर्गीकरण बनाने के लिए एक दृष्टिकोण का विवरण देता है जिसे GBV वर्गीकरण के साथ संयुक्त रूप से उपयोग किया जा सकता है पक्षियों की प्रजातियों के एक व्यापक चयन को वर्गीकृत करने के लिए।
featured image - पक्षियों के लिए मशीन सीखना: अपने स्वयं के पक्षी Vocalization Classifier का निर्माण
Picture in the Noise HackerNoon profile picture
0-item

परिचय

वैज्ञानिक बड़े पारिस्थितिकी तंत्रों का अध्ययन करने के लिए स्वचालित सिस्टम का उपयोग करते हैं. जंगल और जंगल क्षेत्रों के मामले में,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
...


Amazon Kingfisher


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कक्षाओं की विशेषताएं हैं:

  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.

ये 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 को प्रशिक्षित करने के लिए यह निम्नलिखित है:

  1. रिकॉर्ड ऑडियो को 5 सेकंड सेकंड में विभाजित करें।
  2. ऑडियो सेगमेंट को mel spectrograms में परिवर्तित करें।
  3. 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.


EfficientNet model family performance

प्रभावी 2मॉडल, जो 2021 में लॉन्च किए गए हैं, अभी भी बेहतर प्रदर्शन और पैरामीटर दक्षता प्रदान करते हैं।

हालांकि प्रशिक्षितइमेजडेटा, EfficientNet मॉडल ने अन्य डेटा सेट पर स्थानांतरित होने पर अपने उपयोगिता का प्रदर्शन किया है, जो उन्हें इस परियोजना के लिए वर्गीकरण प्रौद्योगिकी के रूप में एक आकर्षक विकल्प बनाता है।

Mel Spectrograms के बारे में

एक मल स्पेक्ट्रोग्राम एक ऑडियो सिग्नल का एक दृश्य प्रतिनिधित्व है. यह ध्वनि के लिए एक हीटमैप के लिए सबसे अच्छा हो सकता है।


Sample mel spectrogram

एक मल स्पेक्ट्रोग्राम की एक्स-एक्स ऑडियो सिग्नल के समय आयाम का प्रतिनिधित्व करती है, और 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नोटबुक का हिस्सा:

  1. BirdCLEF+ 2025 प्रतियोगिता डेटासेट में उन कक्षाओं को निकालता है जो GBV वर्गीकरण द्वारा कवर नहीं किए जाते हैं।
  2. load_training_audio विधि के माध्यम से कच्चे ऑडियो डेटा लोड करता है।
  3. एक 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नोटबुक का हिस्सा:

  1. 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.
  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.
अनुभाग 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:

  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. संसाधित ऑडियो डेटा को प्रशिक्षण और सत्यापन सूची में विभाजित करता है।
  2. Splits audio into 5 second frames.
  3. Generates mel spectrograms for each 5 second audio frame.
  4. Resizes mel spectrograms to a target size of (224, 224).
  5. वैकल्पिक रूप से, प्रशिक्षण डेटा को बढ़ाने के लिए pseudo-labeled डेटा नमूने लोड करता है।
  6. प्रशिक्षण डेटा और सत्यापन डेटा लेबल को एक गर्म कोड करता है।
  7. Constructs TensorFlow Dataset objects from training and validation data lists.
  8. 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_slicesTensorFlow बनाने के लिए उपयोग किया जाता है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नोटबुक का हिस्सा:

  1. प्रशिक्षण चलाने के डेटा को कब्जा करने के लिए एक WandB परियोजना को प्रारंभ और कॉन्फ़िगर करता है।
  2. EfficientNet B0 मॉडल का निर्माण और संकलित करता है।
  3. मॉडल को प्रशिक्षित करें।
  4. प्रशिक्षित मॉडल को डिस्क पर सहेजें।
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सेक्शन :

Training results

जैसा कि देखा गया है, सटीकता लगभग 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 फ़ाइलों के लिए आउटपुट हैं:

  1. एक preds.csv फ़ाइल जो हर 5 सेकंड की ध्वनि दृश्य टुकड़े के लिए पूर्वानुमान और पूर्वानुमान संभावना को कैप्चर करती है।
  2. एक 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, प्रशिक्षण डेटा को आगे बढ़ाने के लिए लागू किया जा सकता है. हालांकि, इन रणनीतियों को एक अधिक मजबूत विकास वातावरण की आवश्यकता होती है।

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks