การแนะนํา นักวิทยาศาสตร์ใช้ระบบอัตโนมัติเพื่อศึกษาระบบนิเวศขนาดใหญ่ ในกรณีของพื้นที่ป่าและป่า ใช้เพื่อบันทึกเสียงซึ่งสามารถใช้เพื่อช่วยระบุสายพันธุ์สัตว์และแมลงที่แตกต่างกัน ข้อมูลนี้สามารถใช้เพื่อพัฒนาความเข้าใจที่ดีขึ้นเกี่ยวกับการกระจายของสายพันธุ์ภายในสภาพแวดล้อมที่กําหนด ในกรณีของนก Google Research ระบุในบทความของพวกเขา ที่ "นักนิเวศวิทยาใช้นกเพื่อทําความเข้าใจระบบอาหารและสุขภาพป่า - ตัวอย่างเช่นถ้ามีไม้ก๊อกไม้มากขึ้นในป่าซึ่งหมายความว่ามีไม้ตายมาก" นอกจากนี้พวกเขายังสังเกตเห็นมูลค่าของการระบุด้วยเสียง: "[เนื่องจาก] นกสื่อสารและทําเครื่องหมายภูมิภาคด้วยเพลงและโทรเป็นสิ่งที่มีประสิทธิภาพมากที่สุดในการระบุพวกเขาด้วยหู ในความเป็นจริงผู้เชี่ยวชาญสามารถระบุนกได้ถึง 10 เท่าด้วยหูกว่าด้วยสายตา" autonomous recording units (ARUs) การแยกเพลงนกในป่าเพื่อการจัดอันดับ การแยกเพลงนกในป่าเพื่อการจัดอันดับ เมื่อเร็ว ๆ นี้, the การแข่งขันที่เปิดตัวใน ภายใต้ฝาครอบของ ImageCLEF สนับสนุนการวิจัยเกี่ยวกับการอ้างอิงข้ามภาษาและการค้นหาภาพในหลายโดเมน วัตถุประสงค์ของการแข่งขันคือตรงไปข้างหน้า: ออกแบบรูปแบบการจัดอันดับที่สามารถคาดการณ์ชนิดของนกได้อย่างแม่นยําจากบันทึกเสียง BirdCLEF+ 2025 Kaggle รูปภาพ BirdCLEF+ 2025 รูปภาพ ในตอนแรกงานดูเหมือนเป็นเรื่องธรรมเนียมเนื่องจากความพร้อมใช้งานของ นอกจากนี้ยังเป็นที่รู้จักกันในฐานะ คลาสสิก GBV ได้รับการฝึกอบรมเกี่ยวกับเกือบ 11,000 ชนิดของนกและดังนั้นจึงเป็นตัวเลือกที่ชัดเจนเป็นรูปแบบการจัดอันดับ Google Bird Vocalization (GBV) คลาสสิฟิก Perch Google Bird Vocalization (GBV) คลาสสิฟิก อย่างไรก็ตามการแข่งขันรวมถึงสายพันธุ์นกที่อยู่ภายนอกชุดการฝึกอบรม GBV Classifier เป็นผลให้ GBV Classifier มีความแม่นยํา ~60% ในชุดข้อมูลการทดสอบการแข่งขัน BirdCLEF+ 2025 เป็นผลให้ต้องพัฒนารูปแบบที่กําหนดเอง คู่มือนี้จะอธิบายวิธีการสร้างเครื่องจําลองเสียงนกของคุณเองซึ่งสามารถใช้ร่วมกับเครื่องจําลอง GBV เพื่อจัดประเภทสายพันธุ์นกที่หลากหลาย วิธีนี้ใช้เทคนิคพื้นฐานเดียวกันที่อธิบายไว้ใน Google Research การออกแบบใช้ชุดข้อมูลการแข่งขัน BirdCLEF+ 2025 สําหรับการฝึกอบรม บทความ ข้อมูลการฝึกอบรม โซ รวมถึงไฟล์ที่สนับสนุนเป็นประมาณ 12 GB แคตตาล็อกหลักและไฟล์ที่ประกอบด้วยโครงสร้างชุดข้อมูลคือ: ชุดข้อมูลการฝึกอบรม BirdCLEF+ 2025 birdclef_2025 |__ train_audio |__ train_soundscapes |__ test_soundscapes recording_location.txt taxonomy.csv train.csv train_audio โซ ไดเรกทอรีเป็นส่วนประกอบที่ใหญ่ที่สุดของชุดข้อมูลที่มี 28,564 บันทึกเสียงการฝึกอบรม รูปแบบเสียง การบันทึกเสียงจะถูกกลุ่มเป็นไดเรกทอรีย่อยซึ่งแต่ละตัวเป็นตัวแทนของสายพันธุ์นกที่เฉพาะเจาะจงเช่น: train_audio .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 ชั้นตามที่แนะนําในบทความนี้ 63 ของชั้นเรียนเหล่านี้คือ ครอบคลุมโดย the นี่ คลาสโดยทั่วไปจะติดฉลากโดยใช้ตัวระบุคลาสหมายเลข: Introduction ไม่ 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 , for example, only contains 2 audio recordings. By contrast, class , which is a “known” class, contains 89 recordings. 1139490 amakin1 GBV Poor recording quality. Highlighting class again, both training recordings are of poor quality with one being particularly difficult to discern. 1139490 สองเงื่อนไขเหล่านี้นําไปสู่ความไม่สมดุลที่สําคัญระหว่างชั้นในแง่ของปริมาณเสียงและคุณภาพเสียงที่มีอยู่ จํานวนมากของการฝึกอบรมบันทึกเสียงทั้งสอง และ ชั้นเรียนยังรวมถึงการพูดของมนุษย์ด้วยผู้พูดที่อธิบายการบันทึกด้วยรายละเอียดเช่นชนิดของนกที่บันทึกและสถานที่ของบันทึก ในส่วนใหญ่ - -กรณีที่บันทึกตามเสียงนกที่บันทึกไว้ GBV Non-GBV แต่ไม่ทั้งหมด กลยุทธ์ที่ใช้ในการแก้ไขความไม่สมดุลของชั้นเรียนและการปรากฏตัวของคําอธิบายการพูดของมนุษย์จะถูกกล่าวถึงใน ส่วน Building the Classifier train_soundscapes โซ ไดเรกทอรีมีเกือบ 10,000 การบันทึกเสียงของ birdsong. ในขณะที่จะถูกกล่าวถึงใน ส่วนบันทึกเสียงเหล่านี้สามารถรวมเข้ากับข้อมูลการฝึกอบรมผ่านทาง . train_soundscapes unlabeled Building the Classifier pseudo-labeling test_soundscapes โซ ไดเรกทอรีที่ว่างเปล่ายกเว้น a ไดเรกทอรีนี้เต็มไปด้วยชุดเสียงทดสอบที่ซ่อนอยู่เมื่อส่งผลการคาดการณ์ไปยังการแข่งขัน BirdCLEF+ 2025 test_soundscapes readme.txt สร้างคลาสสิฟิก วิธีการพื้นฐานและพื้นหลัง วิธีการพื้นฐานที่ใช้โดย สําหรับการฝึกอบรมการจําแนกเสียงนกของพวกเขาคือดังต่อไปนี้: Google การวิจัย แบ่งเสียงที่บันทึกไว้เป็นช่วง 5 วินาที แปลงส่วนเสียงเป็น spectrograms mel การฝึกอบรมเครื่องจําลองภาพบน spectrograms mel วิธีการเดียวกันจะปฏิบัติตามในคู่มือนี้ เครื่องจําลองภาพที่จะได้รับการฝึกอบรมคือ Google's แบบ. หากคุณมีความคุ้นเคยกับ ครอบครัวของรุ่นคุณรู้ว่าพวกเขาถูกออกแบบมาเพื่อการประมวลผลภาพที่มีประสิทธิภาพ ประสิทธิภาพการทํางาน B0 EfficientNet ประสิทธิภาพการทํางาน B0 อย่างไรก็ตามก่อนที่ตัวอย่างเสียงสามารถแบ่งออกและแปลงเป็น spectrograms mel เราต้องจัดการกับความไม่สมดุลของชั้นและปัญหาการบันทึกของมนุษย์ที่กล่าวถึงใน ส่วนใหญ่ปัญหาเหล่านี้จะได้รับการแก้ไขโดยการเพิ่มข้อมูลและตัดตัวอย่างเสียง Training Data ก่อนที่จะเจาะเข้าไปในการออกแบบที่แท้จริงส่วนประกอบต่อไปนี้ให้ข้อมูลพื้นหลังสั้น ๆ รูปแบบที่มีประสิทธิภาพ Google Research นําเสนอครอบครัวของมัน รูปแบบในปี 2019 เป็นชุดของ รุ่นที่เหนือกว่ารุ่นทันสมัยในเวลานั้นในแง่ทั้งขนาดและประสิทธิภาพ EfficientNet convolutional neural network รุ่นที่เปิดตัวในปี 2021 ให้ประสิทธิภาพและประสิทธิภาพพารามิเตอร์ที่ดีขึ้น ประสิทธิภาพNetV2 แม้ว่าการฝึกอบรมใน รุ่น EfficientNet ได้แสดงให้เห็นถึงประโยชน์ของพวกเขาเมื่อถ่ายโอนไปยังชุดข้อมูลอื่น ๆ ทําให้เป็นทางเลือกที่น่าสนใจเป็นเทคโนโลยีการจัดประเภทสําหรับโครงการนี้ รูปภาพ เมล Spectrograms Spectrogram mel เป็นตัวแทนภาพของสัญญาณเสียง มันอาจจะดีที่สุด analogized กับ heatmap สําหรับเสียง แกน x ของสเปกตรัม mel แสดงให้เห็นถึงมิติเวลาของสัญญาณเสียงและแกน y แสดงให้เห็นถึงความถี่ของเสียงภายในสัญญาณ อย่างไรก็ตามแทนที่จะแสดงความถี่ทั้งหมดตามสแควร์อย่างต่อเนื่องความถี่จะถูกกลุ่มเป็น แถบเหล่านี้ในทางกลับกันจะถูกแยกออกโดยใช้ ระดับน้ําผึ้งคือ a ตารางที่เข้าถึงระบบฟังของมนุษย์และวิธีการที่มนุษย์รับรู้เสียง สีของสเปกตรัมผึ้งแสดงให้เห็นถึงความกว้างของเสียงภายในแถบ สีสดใสแสดงให้เห็นถึงความกว้างที่สูงขึ้นในขณะที่สีเข้มแสดงให้เห็นถึงความกว้างที่ต่ํากว่า mel bands mel scale logarithmic การออกแบบ วัตถุประสงค์ของฉันในการพูดคุยเกี่ยวกับการออกแบบคือการให้การตรวจสอบระดับสูงของวิธีการโดยไม่ต้องเข้าสู่รายละเอียดมากเกินไป โลกการฝึกอบรมหลัก (การปรับความละเอียด) จะถูกจับในเรื่องนี้ (“บันทึกการฝึกอบรม”) ซึ่งประกอบด้วย 4 ส่วนหลัก: กระดาษแข็ง ส่วนที่ 1: การโหลดข้อมูลเสียง ส่วนที่ 2: การประมวลผลข้อมูลเสียง ส่วนที่ 3: การสร้างสเปกตรัม Mel และการเตรียมการป้อนข้อมูล ส่วนที่ 4: การฝึกอบรมแบบจําลอง คุณจะสังเกตเห็นว่า 2 เซลล์แรกของแต่ละส่วนหลักคือ (1) การนําเข้าที่ใช้โดยส่วนนั้นและ (2) a ตัวกําหนดเสถียรของเซลล์ที่ใช้ในส่วนนี้และส่วนต่อไปนี้ Config บันทึกการฝึกอบรมจริง ๆ เริ่มต้นด้วย ที่แพคเกจ Python ฐานที่ใช้ในบันทึกทั้งหมดจะถูกนําเข้า ส่วนนี้ยังรวมถึงกลยุทธ์ในการเข้าสู่ระบบ ("WandB") สําหรับการติดตามการออกกําลังกาย คุณจะต้องแนบ WandB ของคุณเอง ไปที่บันทึกเป็น a ใช้ชื่อ . Section 0 Weights & Biases API key Kaggle Secret WANDB_API_KEY ตามที่กล่าวถึงใน ส่วนเสียงการฝึกอบรมที่ไม่ติดฉลากสามารถรวมเข้ากับข้อมูลการฝึกอบรมผ่านทาง pseudo-labeling การใช้ข้อมูลที่ติดฉลากฉลากฉลากฉลากฉลากฉลากฉลาก โปรดจําไว้ว่าสภาพแวดล้อมที่ไม่ใช่ GPU ของ Kaggle ถูก จํากัด ถึง 30 GiB ของหน่วยความจํา Training Data Section 3.5 - Pseudo-Labeling โมเดลที่ได้รับการฝึกอบรมตามการตั้งค่าการทดลองที่อธิบายไว้ในส่วนใต้ต่อไปนี้ได้รับการโพสต์ใน Kaggle ที่นี่ หากต้องการคุณสามารถใช้รุ่นนี้โดยไม่ต้องฝึกอบรมของคุณเองและกระโดดโดยตรงไปยังส่วน Running Inference เพื่อเรียกใช้การสรุปเกี่ยวกับเสียงเพลงนก โมเดลที่ได้รับการฝึกอบรมตามการตั้งค่าการทดลองที่อธิบายไว้ในส่วนใต้ต่อไปนี้ได้รับการโพสต์ใน Kaggle ที่นี่ หากต้องการคุณสามารถใช้รุ่นนี้โดยไม่ต้องฝึกอบรมของคุณเองและกระโดดโดยตรงไปยังส่วน Running Inference เพื่อเรียกใช้การสรุปเกี่ยวกับเสียงเพลงนก ส่วนที่ 1 - การโหลดข้อมูลเสียง โซ ส่วนของบันทึก: Audio Data Loading สกัดชั้นในชุดข้อมูลการแข่งขัน BirdCLEF+ 2025 ที่ไม่ได้ครอบคลุมโดยตัวจัดอันดับ GBV โหลดข้อมูลเสียงดิบผ่านวิธีการ load_training_audio สร้างไดเรกทอรี processed_audio และบันทึกสําเนาข้อมูลเสียงที่โหลดเป็นไฟล์ .wav ในไดเรกทอรี โซ เซลล์ของส่วนนี้รวมถึง a ค่าคงที่นี้ระบุจํานวนไฟล์เสียงสูงสุดที่จะโหลดจากคลาสที่ระบุ ค่าคงที่นี้ถูกตั้งค่าเป็นค่าขนาดใหญ่ของ เพื่อให้แน่ใจว่าไฟล์เสียงทั้งหมดจะถูกโหลดสําหรับ คุณอาจจําเป็นต้องปรับเสถียรภาพนี้สําหรับการตั้งค่าทดลองของคุณเอง ตัวอย่างเช่นถ้าคุณโหลดข้อมูลเสียงจาก คุณอาจจําเป็นต้องตั้งค่าคงที่นี้ให้ต่ํากว่าเพื่อหลีกเลี่ยงการใช้หน่วยความจําที่มีอยู่ Config MAX_FILES 1000 non-GBV all โซ วิธีการที่สามารถเรียกได้ด้วย a พารามิเตอร์ซึ่งเป็นรายการของชั้นที่มีเสียงที่จะโหลด สําหรับโครงการนี้ คลาสถูกจัดเก็บเป็นรายการและกําหนดให้ตัวแปร ซึ่งต่อมาจะถูกส่งไปยัง วิธีการผ่าน the พารามิเตอร์ 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 ที่กําหนดไว้ในเซลล์ Config พารามิเตอร์ use_slice และคงที่ LOAD_SLICE ไม่ใช้กับการใช้งานนี้ อย่างไรก็ตามสามารถใช้เพื่อโหลดปริมาณเสียงเฉพาะจากไฟล์แต่ละไฟล์ ตัวอย่างเช่นเพื่อโหลดเสียงเพียง 5 วินาทีจากไฟล์เสียงแต่ละไฟล์ให้ตั้งค่า LOAD_SLICE เป็น 160000 ซึ่งคํานวณเป็น 5 ครั้งอัตราการสุ่มตัวอย่างของ 32000 และผ่าน True ไปยังพารามิเตอร์ use_slice โซ วิธีการยังยอมรับ boolean ที่เลือก พารามิเตอร์นี้ทํางานร่วมกับ อย่างต่อเนื่องที่กําหนดไว้ใน เซลล์ พารามิเตอร์และ ปัจจุบัน ใช้กับการประยุกต์ใช้นี้ อย่างไรก็ตามพวกเขาสามารถใช้เพื่อโหลดปริมาณเสียงเฉพาะจากไฟล์แต่ละไฟล์ ตัวอย่างเช่นเพื่อโหลดเสียงเพียง 5 วินาทีจากไฟล์เสียงแต่ละไฟล์ สอง ซึ่งจะคํานวณเป็น times อัตราตัวอย่างของ ; และผ่าน สอง พารามิเตอร์ load_training_audio use_slice LOAD_SLICE Config use_slice LOAD_SLICE not LOAD_SLICE 160000 5 32000 True use_slice โซ วิธีการยอมรับ Boolean พารามิเตอร์ เมื่อพารามิเตอร์นี้ โจริยธรรมสร้าง a ไดเรกทอรีและบันทึกสําเนาของแต่ละตัวอย่างเสียงเป็น ไฟล์ไปยังไดเรกทอรี คัดลอกเสียงจะถูกบันทึกไว้ในไดเรกทอรีย่อยซึ่งสะท้อนให้เห็นถึงชั้นที่พวกเขา принадлежит ไดเรกทอรีจะถูกใช้ในส่วนถัดไปเพื่อบันทึกตัวอย่างเสียงที่แก้ไขไว้ในไดรฟ์โดยไม่ส่งผลกระทบต่อไดเรกทอรีชุดข้อมูล BirdCLEF+ 2025 load_training_audio make_copy True processed_audio .wav processed_audio โซ Method returns a dictionary of loaded audio data using the class names as keys. Each value in the dictionary is a list of tuples of the form. method returns a dictionary of loaded audio data using the class names as keys. Each value in the dictionary is a list of tuples of the form. : 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]]))] ...} วิธีนี้ยังส่งกลับสถิติพื้นฐานที่อธิบายข้อมูลที่โหลดสําหรับแต่ละคลาสเป็นคอลัมน์ค่าแยกคอลัมน์ คุณสามารถส่งออกสถิติเหล่านี้เพื่อตรวจสอบข้อมูลได้ 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 section of the notebook: Audio Data Processing ตัวเลือกแถบส่วนที่เงียบสงบและแถบเสียงเพื่อกําจัดคําอธิบายของมนุษย์ส่วนใหญ่จากเสียงดิบ การแถบส่วนที่เงียบสงบกําจัดส่วนที่ไม่เกี่ยวข้องของสัญญาณเสียง การเพิ่มเสียงประกอบด้วย (1) เพิ่มสัญญาณเสียงที่สร้างขึ้นโดยสุ่ม (2) เปลี่ยนความเร็วของเสียงดิบหรือ (3) เพิ่มสัญญาณเสียงที่สร้างขึ้นโดยสุ่มและเปลี่ยนความเร็วของเสียงดิบ ส่วน 2.1 - การตรวจจับส่วนที่เงียบสงบ The method is used to "slide" over each raw audio sample and identify silent segments by comparing the 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 เซลล์ของส่วนนี้ควบคุมพฤติกรรมของ วิธีการ : detect_silence root-mean square (RMS) Config detect_silence SIL_FRAME_PCT_OF_SR = 0.25 SIL_FRAME = int(SR * SIL_FRAME_PCT_OF_SR) SIL_HOP = int(1.0 * SIL_FRAME) SIL_THRESHOLD = 5e-5 SIL_REPLACE_VAL = -1000 # Value used to replace audio signal values within silent segments The และ constants can be modified to adjust how the method "slides" over the raw audio. Similarly, the value can be modified to make the method more aggressive or conservative with respect to identification of silent segments. SIL_FRAME SIL_HOP SIL_THRESHOLD วิธีการส่งออกคําอธิบายของเครื่องหมายส่วนเงียบสําหรับแต่ละไฟล์ในแต่ละชั้น ไฟล์เสียงที่ไม่มีส่วนเงียบที่ตรวจพบจะถูกระบุโดยรายการว่างเปล่า {'1139490': {'CSA36389.ogg': [0, 8000, 16000, 272000, 280000, 288000, 296000, 304000], 'CSA36385.ogg': [0, 8000, 16000, 24000, 240000, 248000, 256000]}, '1192948': {'CSA36388.ogg': [0, 8000, 16000, 24000, 256000, 264000, 272000, 288000], 'CSA36366.ogg': [0, 8000, 16000, 24000, 256000, 264000, 272000, 280000, 288000], 'CSA36373.ogg': [0, 8000, 16000, 24000, 256000, 264000, 272000, 288000], 'CSA36358.ogg': [8000]}, '1194042': {'CSA18794.ogg': [], 'CSA18802.ogg': [], 'CSA18783.ogg': [0, 8000, 16000, 24000, 600000, 608000, 616000]}, '126247': {'XC941297.ogg': [], 'iNat1109254.ogg': [], 'iNat888527.ogg': [], 'iNat320679.ogg': [0], 'iNat888729.ogg': [], 'iNat146584.ogg': []}, '1346504': {'CSA18803.ogg': [0, 8000, 16000, 24000, 3000000, 3008000, 3016000], 'CSA18791.ogg': [], 'CSA18792.ogg': [], 'CSA18784.ogg': [0, 8000, 16000, 1232000, 1240000, 1248000], 'CSA18793.ogg': [0, 8000, 16000, 24000, 888000]} ...} Section 2.2 - Removing Silent Segments and Eliminating Human Annotations The constant defined in the cell of this section specifies if audio should be stripped of silent segments sliced to remove human annotations. USE_REMOVE_SILENCE_AND_HUMAN_ANNOT Config และ มากที่สุด USE_REMOVE_SILENCE_AND_HUMAN_ANNOT = True The วิธีการ strips ชิ้นส่วนเงียบจากตัวอย่างเสียงโดยใช้การส่งออกจาก 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: remove_silence_and_human_annot detect_silence เติม | < 10s | ~1s | | | BIRDSONG | SILENCE | HUMAN ANNOTATION | The birdsong and human annotation sections themselves may contain silent segments. However, as seen in the diagram above, the bird vocalization recordings often occur within the first few seconds of audio. Therefore, a simple, if imperfect, approach to deal with human annotations is to slice audio samples at the first silent segment marker that occurs outside of a specified window, under the assumption that a human annotation follows that silent segment. The logic uses the ปัจจุบันใน cell to check if a silent segment marker lies outside the window specified by , แสดงให้เห็นในจํานวนวินาที หากทําเช่นนั้นกลยุทธ์จะตัดเสียงดิบที่เครื่องหมายและเก็บข้อมูลเฉพาะที่เกิดขึ้นก่อนมัน การตรวจสอบด้วยตนเองของเสียงที่ประมวลผลในระหว่างการทดลองแสดงให้เห็นว่าวิธีการนี้มีความพึงพอใจ อย่างไรก็ตามตามที่กล่าวถึงใน section, there are การบันทึกเสียงที่บันทึกของมนุษย์ the birdsong recording. The logic described here does address those cases. Some audio samples feature long sequences of recorded birdsong and these samples often do not have silent segments. Such samples are unaffected by the previously described logic and kept in their entirety. remove_silence_and_human_annot ANNOT_BREAKPOINT Config ANNOT_BREAKPOINT Training Data บางคน precedes ไม่ A second constant, , สามารถนํามาใช้ในขั้นตอนการประมวลผลขั้นสุดท้ายเพื่อคืนชิ้นส่วนเสียงที่ได้รับการประมวลผลมากขึ้น จํานวนวินาทีของการประมวลผลเสียงที่คุณต้องการเก็บ SLICE_FRAME SLICE_FRAME โซ วิธีการบันทึกเสียงที่ประมวลผลลงในดิสก์ภายใต้ไดเรกทอรี via the พารามิเตอร์ซึ่งผ่านเป็น . The method returns a dictionary of the seconds of processed audio for each class. remove_silence_and_human_annot processed_audio save_audio True ทั้งหมด {'1139490': 14, '1192948': 29, '1194042': 24, '126247': 48, '1346504': 40, '134933': 32, '135045': 77, ...} โซ วิธีการใช้ดังต่อไปนี้ เพื่อให้ได้จํานวนวินาทีเฉลี่ยของเสียงในทุกชั้นเรียน get_audio_stats remove_silence_and_human_annot Section 2.3 - Calculating Augmentation Turns for Minority Classes ตามที่กล่าวไว้ใน section, the classes are not balanced. Augmentation is used in this notebook section to help address the imbalance leveraging the average number of seconds of audio across all classes, as provided by the method. Classes with total seconds of processed audio the average are augmented. The method determines the number of augmentation turns for each minority class using the average number of seconds per processed audio sample. Training Data get_audio_stats ด้านล่าง get_augmentation_turns_per_class 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 includes a ค่าคงที่ซึ่งสามารถใช้เพื่อปรับค่าสําหรับ get_augmentation_turns_per_class AVG_SECS_FACTOR จํานวนวินาทีโดยเฉลี่ยของเสียงในทุกชั้น ค่าคงที่สามารถใช้เพื่อทําให้กลยุทธ์บํารุงรักษาหรือก้าวร้าวมากขึ้นเมื่อคํานวณจํานวนการเพิ่มการหมุน The includes a ค่าคงที่ซึ่งสามารถใช้เพื่อปรับค่าสําหรับ get_augmentation_turns_per_class AVG_SECS_FACTOR จํานวนวินาทีโดยเฉลี่ยของเสียงในทุกชั้น ค่าคงที่สามารถใช้เพื่อทําให้กลยุทธ์บํารุงรักษาหรือก้าวร้าวมากขึ้นเมื่อคํานวณจํานวนการเพิ่มการหมุน Section 2.4 - Running Augmentations โซ constant defined in the เซลล์ของส่วนนี้ระบุว่าควรเพิ่มเสียงหรือไม่ USE_AUGMENTATIONS Config USE_AUGMENTATIONS = True ตามที่กล่าวไว้ก่อนหน้านี้การเพิ่มเสียงประกอบด้วย (1) เพิ่มสัญญาณเสียงที่สร้างขึ้นแบบสุ่ม (2) เปลี่ยนความเร็วของเสียงดิบหรือ (3) เพิ่มสัญญาณเสียงที่สร้างขึ้นแบบสุ่มและเปลี่ยนความเร็วของเสียงดิบ and วิธีการ encapsulate the logic for adding a noise signal and changing the tempo respectively. ช่วงสัญญาณเสียงและช่วงการเปลี่ยนแปลงความเร็วสามารถปรับได้โดยใช้เสถียรภาพต่อไปนี้ใน cell: add_noise change_tempo Config NOISE_RNG_LOW = 0.0001 NOISE_RNG_HIGH = 0.0009 TEMPO_RNG_LOW = 0.5 TEMPO_RNG_HIGH = 1.5 โซ วิธีการเรียกใช้การเพิ่มโดยใช้การส่งออกจาก method. For those classes that will be augmented, the logic: run_augmentations get_augmentations_turns_per_class 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 directory. processed_audio ในขณะที่กลยุทธ์โน้ตบุ๊คเพิ่มชั้นประชากรโดยรวมของวินาทีเสียงต่ํากว่าเฉลี่ยก็ลืมชั้นที่มีทั้งหมดของวินาทีเสียงสูงกว่าเฉลี่ย วิธีการนี้ถูกนํามาใช้เพื่อจัดการหน่วยความจําที่มีอยู่และด้วยความเข้าใจว่าความไม่สมดุลของชั้นจะได้รับการแก้ไขต่อไปโดยการเลือกฟังก์ชั่นการสูญเสีย Section 3 - Mel Spectrogram Generation and Input Preparation โซ ส่วนของบันทึก: Mel Spectrogram Generation and Input Preparation แบ่งข้อมูลเสียงที่ได้รับการประมวลผลเป็นรายการการฝึกอบรมและการยืนยัน 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) Optionally loads pseudo-labeled data samples to augment training data. One-hot รหัสข้อมูลการฝึกอบรมและฉลากข้อมูลการยืนยัน สร้างวัตถุ TensorFlow Dataset จากรายการข้อมูลการฝึกอบรมและการยืนยัน Optionally uses MixUp logic to augment training data. Section 3.1 - Splitting Processed Audio Data ข้อมูลเสียงที่ประมวลผลจะถูกโหลดจาก โฟลเดอร์ ข้อมูลจะแบ่งออกเป็น 4 รายการ: processed_audio training_audio training_labels validation_audio validation_labels Labels are, of course, the class names associated with the audio examples. The constant defined in the เซลล์ควบคุมอัตราส่วนแบ่งระหว่างรายการข้อมูลการฝึกอบรมและข้อมูลการยืนยัน ข้อมูลเสียงที่ประมวลผลจะถูก shuffled ก่อนที่จะแบ่ง SPLIT Config ส่วน 3.2 - การแบ่งเสียงเป็นกรอบ เสียงจะถูกแบ่งออกเป็น 5 วินาทีส่วนโดยใช้ method, which itself uses the TensorFlow วิธีการแบ่งแต่ละตัวอย่างเสียง ตัวคงที่ต่อไปนี้ใน cell control the split operation: frame_audio signal.frame Config FRAME_LENGTH = 5 FRAME_STEP = 5 ส่วนที่ 3.3 - การสร้าง Mel Spectrograms เมลสเปกตรัมจะถูกสร้างขึ้นสําหรับแต่ละกรอบเสียง 5 วินาทีที่สร้างขึ้นใน ผ่าน method. The following constants in the เซลล์ระบุพารามิเตอร์ที่ใช้ในการสร้างสเปกตรัมเมล็ดเช่นจํานวนแถบเมล็ดความถี่ขั้นต่ําและความถี่สูงสุด: Section 3.2 audio2melspec Config # Mel spectrogram parameters N_FFT = 1024 # FFT size HOP_SIZE = 256 N_MELS = 256 FMIN = 50 # minimum frequency FMAX = 14000 # maximum frequency The frequency band was chosen to reflect the range of most bird vocalizations. However, some bird species can vocalize outside this range. potential Section 3.4 - Resizing Mel Spectrograms The method is used to convert each mel spectrogram to a Object. แต่ละ วัตถุจะถูกเปลี่ยนเป็น which is the input dimension expected by the EfficientNet B0 model. to_melspectrogram_image pillow Image Image (224, 224) ส่วน 3.5 - การโหลดข้อมูลที่ติดฉลาก Pseudo-Labeled As mentioned in the section, the directory contains nearly 10,000 audio recordings of birdsong. These audio recordings can be incorporated into the training data via . A simple process to create pseudo-labeled data is as follows: Training Data train_soundscapes unlabeled pseudo-labeling การฝึกอบรมเครื่องจําลองโดยไม่มีข้อมูล pseudo-labeled Load training soundscape ไฟล์เสียง Segment each audio soundscape into 5 second frames. สร้างสเปกตรัมเมล็ดสําหรับแต่ละกรอบ 5 วินาทีและปรับขนาดให้ (224, 224) ดําเนินการคาดการณ์บนแต่ละสเปกตรัมเมล็ดรีไซเคิลโดยใช้เครื่องจําลองที่คุณได้ฝึกอบรมในขั้นตอนแรก เก็บการคาดการณ์เหนือระดับความมั่นใจที่ต้องการและบันทึกสเปกตรัมผึ้งสําหรับการคาดการณ์เหล่านี้เพื่อดิสก์ภายใต้ฉลากชั้นคาดการณ์ ฝึก classifier ของคุณอีกครั้งโดยใช้ข้อมูลที่ติดฉลาก psuedo Pseudo-labeled data can improve the performance of your classifier. If you want to generate your own pseudo-labeled data, you should continue with the remaining sections to train a classifier pseudo-labeled data. Then, use your classifier to create your own set of pseudo-labeled data using the process outlined above. Finally, re-train your classifier using your pseudo-labeled data. ไม่ได้ การประยุกต์ใช้นี้ไม่ได้ใช้ข้อมูลที่มีการติดฉลากแบบสุ่ม อย่างไรก็ตามคุณสามารถแก้ไขบันทึกข้อสรุปที่อ้างถึงใน ส่วนเพื่อสร้างข้อมูลที่ติดฉลาก pseudo Running Inference Set the ปัจจุบันใน cell to to skip the use of pseudo-labeled data. USE_PSEUDO_LABELS Config False ส่วน 3.6 - การเข้ารหัสฉลาก The วิธีนี้ใช้สําหรับฉลากการเข้ารหัสแบบฮอตเดียว แท็กที่เข้ารหัสแบบฮอตเดียวจะกลับเป็นแถบ NumPy และเพิ่มลงในรายการฉลากการฝึกอบรมและฉลากการยืนยัน process_labels ส่วน 3.7 - แปลงรายการข้อมูลการฝึกอบรมและการยืนยันเป็น TensorFlow วัตถุ ฐานข้อมูล ฐานข้อมูล TensorFlow วิธีการสร้าง TensorFlow objects from the training and validation data lists. The วิธีการเรียกร้องในการฝึกอบรม object to shuffle training data before batching. The วิธีการที่เรียกว่าทั้งสอง Objects to batch the training and validation data sets. ชุดข้อมูลการฝึกอบรมและการยืนยัน ปัจจุบันใน เซลล์ควบคุมขนาดแบทช์ data.Dataset.from_tensor_slices Dataset shuffle Dataset batch Dataset BATCH_SIZE Config Section 3.8 - Using MixUp to Augment Training Data ดังที่คุณอาจรู้แล้ว MixUp เป็นเทคนิคการเพิ่มข้อมูลที่ผสมผสานภาพสองภาพร่วมกันอย่างมีประสิทธิภาพเพื่อสร้างตัวอย่างข้อมูลใหม่ คลาสสําหรับภาพผสมคือการผสมผสานของคลาสที่เกี่ยวข้องกับภาพเดิม 2 รูป method, along with the วิธีการ encapsulates โลก MixUp แบบเลือก mix_up sample_beta_distribution การประยุกต์ใช้นี้ใช้ MixUp เพื่อเพิ่มข้อมูลการฝึกอบรม เพื่อใช้ MixUp ให้ตั้งค่า ปัจจุบันใน เซลล์ . USE_MIXUP Config True ส่วนที่ 4 - รูปแบบการฝึกอบรม The ส่วนของบันทึก: Model Training เริ่มต้นและกําหนดค่าโครงการ WandB เพื่อจับข้อมูลการทํางานของการฝึกอบรม Builds and compiles the EfficientNet B0 model. Trains the model. บันทึกรุ่นที่ได้รับการฝึกอบรมลงในดิสก์ ส่วน 4.1 - การเริ่มต้นและการกําหนดค่าโครงการ WandB ตรวจสอบให้แน่ใจว่าคุณได้แนบคีย์ API WandB ของคุณเองเป็น Kaggle Secret ไปยังบันทึกและว่าวิธีการเข้าสู่ระบบ WandB ในส่วน 0 ของบันทึกได้กลับ True ตรวจสอบให้แน่ใจว่าคุณได้แนบคีย์ API WandB ของคุณเองเป็น Kaggle Secret ไปยังบันทึกและว่าวิธีการเข้าสู่ระบบ WandB ในส่วน 0 ของบันทึกได้กลับ True โซ เซลล์ในส่วนนี้รวมถึงกลยุทธ์ในการเริ่มต้นและกําหนดค่าโครงการ WandB ใหม่ (หากโครงการไม่ได้มีอยู่แล้ว) ที่จะจับข้อมูลการทํางานของการฝึกอบรม: Config wandb.init(project="my-bird-vocalization-classifier") config = wandb.config config.batch_size = BATCH_SIZE config.epochs = 30 config.image_size = IMG_SIZE config.num_classes = len(LABELS) แน่นอนคุณสามารถเปลี่ยนชื่อโครงการ ชื่อโครงการ WandB ที่ต้องการของคุณ my-bird-vocalization-classifier ส่วน 4.2 - การสร้างและประกอบรูปแบบ EfficientNet B0 โซ วิธีที่ใช้ในการโหลดรุ่น EfficientNet B0 ที่ได้รับการฝึกอบรมล่วงหน้าด้วยน้ําหนัก ImageNet และไม่มีชั้นด้านบน: build_model model = EfficientNetB0(include_top=False, input_tensor=inputs, weights="imagenet") The model is frozen to leverage the pre-trained ImageNet weights with the objective to only (i.e. train) layers in the final stage of the model: ไม่แช่แข็ง # 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) การต่อเนื่อง ใน the เซลล์ระบุจํานวนชั้นที่จะไม่แช่แข็ง UNFREEZE_LAYERS Config The top of the model is rebuilt with a final ชั้นสะท้อนให้เห็นถึงคลาสสายพันธุ์นกจํานวน เลือกเป็นฟังก์ชั่นการสูญเสียเพื่อช่วยแก้ไขความไม่สมดุลของชั้น และ ความคงที่ใน เซลล์ใช้กับฟังก์ชั่นการสูญเสีย Dense Categorical focal cross-entropy LOSS_ALPHA LOSS_GAMMA Config ส่วน 4.3 - รูปแบบการฝึกอบรม โซ วิธีการที่เรียกว่าบนคอมโพสิต from สําหรับการฝึกอบรม การสังเกตว่า a การเรียกคืน , ใช้แทนอัตราการเรียนรู้ที่คงที่ อัตราการเรียนรู้เริ่มต้นของ เป็นฮาร์ดโค้ดลงใน callback อัตราการเรียนรู้จะลดลงใน 2 ขั้นตอนขึ้นอยู่กับจํานวน epoch count จํานวน epochs การฝึกอบรมถูกควบคุมโดย ปัจจุบันใน เซลล์ fit model Section 4.2 learning rate scheduler lr_scheduler 4.0e-4 EPOCHS Config ส่วนที่ 4.4 - รูปแบบการประหยัด The วิธีการที่เรียกว่าบนคอมโพสิต following training to save the model to disk. save model model.save("bird-vocalization-classifier.keras") Training Results การเรียกใช้บันทึกควรผลิตผลการฝึกอบรมต่อไปนี้โดยจําไว้ว่าคุณใช้การตั้งค่าการทดลองที่อธิบายไว้ในบทความนี้ หมวดหมู่ : Building the Classifier ตามที่เห็นความแม่นยําสูงกว่า 90% และความแม่นยําในการยืนยันคือประมาณ 70% หลังจากการฝึกอบรมสําหรับ 30 epochs อย่างไรก็ตามตามที่เห็นความแม่นยําในการยืนยันจะแตกต่างกันอย่างมีนัยสําคัญ การเปลี่ยนแปลงนี้เป็นส่วนหนึ่งที่เกิดจากความไม่สมดุลของชั้นที่มีหน่วยความจําที่มีอยู่ จํากัด การใช้การเพิ่มขึ้นเพิ่มเติมเพื่อแก้ไขความไม่สมดุลอย่างเต็มที่ ผลลัพธ์แสดงให้เห็นว่ารุ่นที่ทุกข์ทรมานจากความซับซ้อนของข้อมูลการฝึกอบรมและไม่ได้รวมกันเช่นเดียวกับที่คาดหวัง อย่างไรก็ตามรุ่นนี้สามารถใช้สําหรับการคาดการณ์พร้อมกับตัวจัดอันดับ GBV ตามวัตถุประสงค์เดิม การวิ่ง Inference นี่ ("Inference Notebook") สามารถใช้ในการเรียกใช้การสรุป โลจิกของ Inference Notebook ใช้ทั้งรุ่น GBV classifier และรุ่นที่คุณได้ฝึกอบรมในส่วนก่อนหน้านี้ มันเรียกใช้การสรุปในไฟล์ soundcapes ที่ไม่ได้ติดฉลากใน ไดเรกทอรี ไฟล์เสียงแต่ละ soundcapes จะแบ่งออกเป็นกรอบ 5 วินาที อย่างต่อเนื่องที่กําหนดไว้ใน เซลล์ of the notebook ควบคุมจํานวนไฟล์เสียง soundcapes ที่โหลดเพื่อการสรุป Kaggle notebook train_soundscapes MAX_FILES Config Section 0 บันทึกข้อสรุปจะสร้างการคาดการณ์ครั้งแรกโดยใช้เครื่องจําลอง GBV การคาดการณ์สําหรับ 143 ชั้นของชุดข้อมูลการแข่งขัน BirdCLEF+ 2025 ที่รู้จักกับเครื่องจําลอง GBV จะแยกต่างหากหากความน่าจะเป็นสูงสุดในหมู่ 143 ชั้น "รู้จัก" จะสูงกว่าหรือเท่ากับ , แล้วคลาสที่คาดการณ์ GBV จะถูกเลือกเป็นคลาสที่แท้จริง หากความน่าจะเป็นสูงสุดในหมู่ 143 คลาสที่ "รู้จัก" นั้นต่ํากว่า , จะคาดว่าคลาสที่แท้จริงเป็นหนึ่งใน 63 คลาส "ไม่รู้จัก" สําหรับ GBV classifier - นั่นคือคลาสที่ใช้ในการฝึกอบรมรูปแบบในส่วนก่อนหน้านี้ โลจิกแล้วเรียกใช้การคาดการณ์โดยใช้รุ่นที่กําหนดเอง คลาสที่คาดการณ์จากชุดการคาดการณ์นั้นจะถูกเลือกเป็นคลาสที่แท้จริง GBV_CLASSIFIER_THRESHOLD GBV_CLASSIFIER_THRESHOLD โซ constant is defined in the เซลล์ ของบันทึกข้อสรุป การคาดการณ์คือการส่งออกไปยัง 2 ไฟล์: GBV_CLASSIFIER_THRESHOLD Config Section 5 ไฟล์ preds.csv ที่บันทึกการคาดการณ์และความน่าจะเป็นการคาดการณ์สําหรับแต่ละ 5 วินาทีของภาพเสียง ไฟล์ submission.csv ที่บันทึกความเป็นไปได้ทั้งหมดของชั้นในรูปแบบสําหรับการแข่งขัน BirdCLEF+ 2025 กําหนดเส้นทางไปยังรูปแบบการปรับขนาดละเอียดของคุณในเซลล์แรกของส่วน 4 ของบันทึกสรุป กําหนดเส้นทางไปยังรูปแบบการปรับแต่งในเซลล์แรกของ ของบันทึก inference Section 4 งานในอนาคต บันทึกการฝึกอบรมสามารถใช้ในการฝึกอบรมรุ่นในทุกชั้น 206 BirdCLEF+ 2025 เพื่อกําจัดความจําเป็นในการจัดอันดับ GBV อย่างน้อยในแง่ของชุดข้อมูลการแข่งขัน ดังกล่าวก่อนหน้านี้ผ่านรายการว่าง ไปยัง the วิธีการจะโหลดข้อมูลเสียงจากทุกชั้น and คืนสามารถใช้เพื่อ จํากัด จํานวนเสียงที่โหลดเพื่อทํางานภายในขอบเขตของสภาพแวดล้อมบันทึก Kaggle [] load_training_audio MAX_FILES LOAD_SLICE แน่นอนโมเดลที่แม่นยําขึ้นสามารถฝึกอบรมได้โดยใช้ข้อมูลการฝึกอบรมจํานวนมากยิ่งขึ้น เหมาะสําหรับจํานวนการเพิ่มจะใช้เพื่อแก้ไขความไม่สมดุลของชั้น นอกจากนี้ยังสามารถใช้เทคนิคการเพิ่มอื่น ๆ เช่น CutMix เพื่อเพิ่มข้อมูลการฝึกอบรม อย่างไรก็ตามกลยุทธ์เหล่านี้ต้องการสภาพแวดล้อมการพัฒนาที่แข็งแกร่งมากขึ้น