การแนะนํา
นักวิทยาศาสตร์ใช้ระบบอัตโนมัติเพื่อศึกษาระบบนิเวศขนาดใหญ่ ในกรณีของพื้นที่ป่าและป่าautonomous recording units (ARUs)ใช้เพื่อบันทึกเสียงซึ่งสามารถใช้เพื่อช่วยระบุสายพันธุ์สัตว์และแมลงที่แตกต่างกัน ข้อมูลนี้สามารถใช้เพื่อพัฒนาความเข้าใจที่ดีขึ้นเกี่ยวกับการกระจายของสายพันธุ์ภายในสภาพแวดล้อมที่กําหนด ในกรณีของนก Google Research ระบุในบทความของพวกเขาการแยกเพลงนกในป่าเพื่อการจัดอันดับที่ "นักนิเวศวิทยาใช้นกเพื่อทําความเข้าใจระบบอาหารและสุขภาพป่า - ตัวอย่างเช่นถ้ามีไม้ก๊อกไม้มากขึ้นในป่าซึ่งหมายความว่ามีไม้ตายมาก" นอกจากนี้พวกเขายังสังเกตเห็นมูลค่าของการระบุด้วยเสียง: "[เนื่องจาก] นกสื่อสารและทําเครื่องหมายภูมิภาคด้วยเพลงและโทรเป็นสิ่งที่มีประสิทธิภาพมากที่สุดในการระบุพวกเขาด้วยหู ในความเป็นจริงผู้เชี่ยวชาญสามารถระบุนกได้ถึง 10 เท่าด้วยหูกว่าด้วยสายตา"
การแยกเพลงนกในป่าเพื่อการจัดอันดับเมื่อเร็ว ๆ นี้, theBirdCLEF+ 2025การแข่งขันที่เปิดตัวในKaggleภายใต้ฝาครอบของรูปภาพImageCLEF สนับสนุนการวิจัยเกี่ยวกับการอ้างอิงข้ามภาษาและการค้นหาภาพในหลายโดเมน วัตถุประสงค์ของการแข่งขันคือตรงไปข้างหน้า: ออกแบบรูปแบบการจัดอันดับที่สามารถคาดการณ์ชนิดของนกได้อย่างแม่นยําจากบันทึกเสียง
BirdCLEF+ 2025รูปภาพในตอนแรกงานดูเหมือนเป็นเรื่องธรรมเนียมเนื่องจากความพร้อมใช้งานของGoogle Bird Vocalization (GBV) คลาสสิฟิกนอกจากนี้ยังเป็นที่รู้จักกันในฐานะPerchคลาสสิก GBV ได้รับการฝึกอบรมเกี่ยวกับเกือบ 11,000 ชนิดของนกและดังนั้นจึงเป็นตัวเลือกที่ชัดเจนเป็นรูปแบบการจัดอันดับ
Google Bird Vocalization (GBV) คลาสสิฟิกอย่างไรก็ตามการแข่งขันรวมถึงสายพันธุ์นกที่อยู่ภายนอกชุดการฝึกอบรม GBV Classifier เป็นผลให้ GBV Classifier มีความแม่นยํา ~60% ในชุดข้อมูลการทดสอบการแข่งขัน BirdCLEF+ 2025 เป็นผลให้ต้องพัฒนารูปแบบที่กําหนดเอง
คู่มือนี้จะอธิบายวิธีการสร้างเครื่องจําลองเสียงนกของคุณเองซึ่งสามารถใช้ร่วมกับเครื่องจําลอง GBV เพื่อจัดประเภทสายพันธุ์นกที่หลากหลาย วิธีนี้ใช้เทคนิคพื้นฐานเดียวกันที่อธิบายไว้ใน Google Researchบทความการออกแบบใช้ชุดข้อมูลการแข่งขัน BirdCLEF+ 2025 สําหรับการฝึกอบรม
ข้อมูลการฝึกอบรม
โซชุดข้อมูลการฝึกอบรม BirdCLEF+ 2025รวมถึงไฟล์ที่สนับสนุนเป็นประมาณ 12 GB แคตตาล็อกหลักและไฟล์ที่ประกอบด้วยโครงสร้างชุดข้อมูลคือ:
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 ชั้นตามที่แนะนําในบทความนี้Introduction63 ของชั้นเรียนเหล่านี้คือไม่ครอบคลุมโดย theGBV 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
สองเงื่อนไขเหล่านี้นําไปสู่ความไม่สมดุลที่สําคัญระหว่างชั้นในแง่ของปริมาณเสียงและคุณภาพเสียงที่มีอยู่
จํานวนมากของการฝึกอบรมบันทึกเสียงทั้งสองGBVและNon-GBVชั้นเรียนยังรวมถึงการพูดของมนุษย์ด้วยผู้พูดที่อธิบายการบันทึกด้วยรายละเอียดเช่นชนิดของนกที่บันทึกและสถานที่ของบันทึก ในส่วนใหญ่ -แต่ไม่ทั้งหมด-กรณีที่บันทึกตามเสียงนกที่บันทึกไว้
กลยุทธ์ที่ใช้ในการแก้ไขความไม่สมดุลของชั้นเรียนและการปรากฏตัวของคําอธิบายการพูดของมนุษย์จะถูกกล่าวถึงในBuilding the Classifierส่วน
train_soundscapes
โซtrain_soundscapes
ไดเรกทอรีมีเกือบ 10,000unlabeledการบันทึกเสียงของ birdsong. ในขณะที่จะถูกกล่าวถึงในBuilding the Classifierส่วนบันทึกเสียงเหล่านี้สามารถรวมเข้ากับข้อมูลการฝึกอบรมผ่านทางpseudo-labeling.
test_soundscapes
โซtest_soundscapes
ไดเรกทอรีที่ว่างเปล่ายกเว้น areadme.txt
ไดเรกทอรีนี้เต็มไปด้วยชุดเสียงทดสอบที่ซ่อนอยู่เมื่อส่งผลการคาดการณ์ไปยังการแข่งขัน BirdCLEF+ 2025
สร้างคลาสสิฟิก
วิธีการพื้นฐานและพื้นหลัง
วิธีการพื้นฐานที่ใช้โดยGoogle การวิจัยสําหรับการฝึกอบรมการจําแนกเสียงนกของพวกเขาคือดังต่อไปนี้:
- แบ่งเสียงที่บันทึกไว้เป็นช่วง 5 วินาที
- แปลงส่วนเสียงเป็น spectrograms mel
- การฝึกอบรมเครื่องจําลองภาพบน spectrograms mel
วิธีการเดียวกันจะปฏิบัติตามในคู่มือนี้ เครื่องจําลองภาพที่จะได้รับการฝึกอบรมคือ Google'sประสิทธิภาพการทํางาน B0แบบ. หากคุณมีความคุ้นเคยกับEfficientNetครอบครัวของรุ่นคุณรู้ว่าพวกเขาถูกออกแบบมาเพื่อการประมวลผลภาพที่มีประสิทธิภาพ
ประสิทธิภาพการทํางาน B0อย่างไรก็ตามก่อนที่ตัวอย่างเสียงสามารถแบ่งออกและแปลงเป็น spectrograms mel เราต้องจัดการกับความไม่สมดุลของชั้นและปัญหาการบันทึกของมนุษย์ที่กล่าวถึงในTraining Dataส่วนใหญ่ปัญหาเหล่านี้จะได้รับการแก้ไขโดยการเพิ่มข้อมูลและตัดตัวอย่างเสียง
ก่อนที่จะเจาะเข้าไปในการออกแบบที่แท้จริงส่วนประกอบต่อไปนี้ให้ข้อมูลพื้นหลังสั้น ๆ
รูปแบบที่มีประสิทธิภาพ
Google Research นําเสนอครอบครัวของมันEfficientNetรูปแบบในปี 2019 เป็นชุดของconvolutional neural networkรุ่นที่เหนือกว่ารุ่นทันสมัยในเวลานั้นในแง่ทั้งขนาดและประสิทธิภาพ
ประสิทธิภาพNetV2รุ่นที่เปิดตัวในปี 2021 ให้ประสิทธิภาพและประสิทธิภาพพารามิเตอร์ที่ดีขึ้น
แม้ว่าการฝึกอบรมในรูปภาพรุ่น EfficientNet ได้แสดงให้เห็นถึงประโยชน์ของพวกเขาเมื่อถ่ายโอนไปยังชุดข้อมูลอื่น ๆ ทําให้เป็นทางเลือกที่น่าสนใจเป็นเทคโนโลยีการจัดประเภทสําหรับโครงการนี้
เมล Spectrograms
Spectrogram mel เป็นตัวแทนภาพของสัญญาณเสียง มันอาจจะดีที่สุด analogized กับ heatmap สําหรับเสียง
แกน x ของสเปกตรัม mel แสดงให้เห็นถึงมิติเวลาของสัญญาณเสียงและแกน y แสดงให้เห็นถึงความถี่ของเสียงภายในสัญญาณ อย่างไรก็ตามแทนที่จะแสดงความถี่ทั้งหมดตามสแควร์อย่างต่อเนื่องความถี่จะถูกกลุ่มเป็นmel bandsแถบเหล่านี้ในทางกลับกันจะถูกแยกออกโดยใช้mel scaleระดับน้ําผึ้งคือ alogarithmicตารางที่เข้าถึงระบบฟังของมนุษย์และวิธีการที่มนุษย์รับรู้เสียง สีของสเปกตรัมผึ้งแสดงให้เห็นถึงความกว้างของเสียงภายในแถบ สีสดใสแสดงให้เห็นถึงความกว้างที่สูงขึ้นในขณะที่สีเข้มแสดงให้เห็นถึงความกว้างที่ต่ํากว่า
การออกแบบ
วัตถุประสงค์ของฉันในการพูดคุยเกี่ยวกับการออกแบบคือการให้การตรวจสอบระดับสูงของวิธีการโดยไม่ต้องเข้าสู่รายละเอียดมากเกินไป โลกการฝึกอบรมหลัก (การปรับความละเอียด) จะถูกจับในเรื่องนี้กระดาษแข็ง(“บันทึกการฝึกอบรม”) ซึ่งประกอบด้วย 4 ส่วนหลัก:
- ส่วนที่ 1: การโหลดข้อมูลเสียง
- ส่วนที่ 2: การประมวลผลข้อมูลเสียง
- ส่วนที่ 3: การสร้างสเปกตรัม Mel และการเตรียมการป้อนข้อมูล
- ส่วนที่ 4: การฝึกอบรมแบบจําลอง
คุณจะสังเกตเห็นว่า 2 เซลล์แรกของแต่ละส่วนหลักคือ (1) การนําเข้าที่ใช้โดยส่วนนั้นและ (2) aConfigตัวกําหนดเสถียรของเซลล์ที่ใช้ในส่วนนี้และส่วนต่อไปนี้
บันทึกการฝึกอบรมจริง ๆ เริ่มต้นด้วยSection 0ที่แพคเกจ Python ฐานที่ใช้ในบันทึกทั้งหมดจะถูกนําเข้า ส่วนนี้ยังรวมถึงกลยุทธ์ในการเข้าสู่ระบบWeights & Biases("WandB") สําหรับการติดตามการออกกําลังกาย คุณจะต้องแนบ WandB ของคุณเองAPI keyไปที่บันทึกเป็น aKaggle Secretใช้ชื่อWANDB_API_KEY
.
ตามที่กล่าวถึงในTraining Dataส่วนเสียงการฝึกอบรมที่ไม่ติดฉลากสามารถรวมเข้ากับข้อมูลการฝึกอบรมผ่านทาง pseudo-labeling การใช้ข้อมูลที่ติดฉลากฉลากฉลากฉลากฉลากฉลากฉลากSection 3.5 - Pseudo-Labelingโปรดจําไว้ว่าสภาพแวดล้อมที่ไม่ใช่ GPU ของ Kaggle ถูก จํากัด ถึง 30 GiB ของหน่วยความจํา
โมเดลที่ได้รับการฝึกอบรมตามการตั้งค่าการทดลองที่อธิบายไว้ในส่วนใต้ต่อไปนี้ได้รับการโพสต์ใน Kaggle ที่นี่ หากต้องการคุณสามารถใช้รุ่นนี้โดยไม่ต้องฝึกอบรมของคุณเองและกระโดดโดยตรงไปยังส่วน Running Inference เพื่อเรียกใช้การสรุปเกี่ยวกับเสียงเพลงนก
โมเดลที่ได้รับการฝึกอบรมตามการตั้งค่าการทดลองที่อธิบายไว้ในส่วนใต้ต่อไปนี้ได้รับการโพสต์ใน Kaggle ที่นี่ หากต้องการคุณสามารถใช้รุ่นนี้โดยไม่ต้องฝึกอบรมของคุณเองและกระโดดโดยตรงไปยังส่วน Running Inference เพื่อเรียกใช้การสรุปเกี่ยวกับเสียงเพลงนก
ส่วนที่ 1 - การโหลดข้อมูลเสียง
โซAudio Data Loadingส่วนของบันทึก:
- สกัดชั้นในชุดข้อมูลการแข่งขัน BirdCLEF+ 2025 ที่ไม่ได้ครอบคลุมโดยตัวจัดอันดับ GBV
- โหลดข้อมูลเสียงดิบผ่านวิธีการ load_training_audio
- สร้างไดเรกทอรี processed_audio และบันทึกสําเนาข้อมูลเสียงที่โหลดเป็นไฟล์ .wav ในไดเรกทอรี
โซConfigเซลล์ของส่วนนี้รวมถึง aMAX_FILES
ค่าคงที่นี้ระบุจํานวนไฟล์เสียงสูงสุดที่จะโหลดจากคลาสที่ระบุ ค่าคงที่นี้ถูกตั้งค่าเป็นค่าขนาดใหญ่ของ1000
เพื่อให้แน่ใจว่าไฟล์เสียงทั้งหมดจะถูกโหลดสําหรับnon-GBVคุณอาจจําเป็นต้องปรับเสถียรภาพนี้สําหรับการตั้งค่าทดลองของคุณเอง ตัวอย่างเช่นถ้าคุณโหลดข้อมูลเสียงจากallคุณอาจจําเป็นต้องตั้งค่าคงที่นี้ให้ต่ํากว่าเพื่อหลีกเลี่ยงการใช้หน่วยความจําที่มีอยู่
โซload_training_audio
วิธีการที่สามารถเรียกได้ด้วย aclasses
พารามิเตอร์ซึ่งเป็นรายการของชั้นที่มีเสียงที่จะโหลด สําหรับโครงการนี้non-GBVคลาสถูกจัดเก็บเป็นรายการและกําหนดให้ตัวแปรmissing_classes
ซึ่งต่อมาจะถูกส่งไปยังload_training_audio
วิธีการผ่าน theclasses
พารามิเตอร์
# `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
โซload_training_audio
วิธีการยังยอมรับ boolean ที่เลือกuse_slice
พารามิเตอร์นี้ทํางานร่วมกับLOAD_SLICE
อย่างต่อเนื่องที่กําหนดไว้ในConfigเซลล์use_slice
พารามิเตอร์และLOAD_SLICE
ปัจจุบันnotใช้กับการประยุกต์ใช้นี้ อย่างไรก็ตามพวกเขาสามารถใช้เพื่อโหลดปริมาณเสียงเฉพาะจากไฟล์แต่ละไฟล์ ตัวอย่างเช่นเพื่อโหลดเสียงเพียง 5 วินาทีจากไฟล์เสียงแต่ละไฟล์LOAD_SLICE
สอง160000
ซึ่งจะคํานวณเป็น5
times อัตราตัวอย่างของ32000
; และผ่านTrue
สองuse_slice
พารามิเตอร์
โซload_training_audio
วิธีการยอมรับ Booleanmake_copy
พารามิเตอร์ เมื่อพารามิเตอร์นี้True
โจริยธรรมสร้าง aprocessed_audio
ไดเรกทอรีและบันทึกสําเนาของแต่ละตัวอย่างเสียงเป็น.wav
ไฟล์ไปยังไดเรกทอรี คัดลอกเสียงจะถูกบันทึกไว้ในไดเรกทอรีย่อยซึ่งสะท้อนให้เห็นถึงชั้นที่พวกเขา принадлежитprocessed_audio
ไดเรกทอรีจะถูกใช้ในส่วนถัดไปเพื่อบันทึกตัวอย่างเสียงที่แก้ไขไว้ในไดรฟ์โดยไม่ส่งผลกระทบต่อไดเรกทอรีชุดข้อมูล BirdCLEF+ 2025
โซload_training_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.(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 Audio Data Processing section of the notebook:
- ตัวเลือกแถบส่วนที่เงียบสงบและแถบเสียงเพื่อกําจัดคําอธิบายของมนุษย์ส่วนใหญ่จากเสียงดิบ การแถบส่วนที่เงียบสงบกําจัดส่วนที่ไม่เกี่ยวข้องของสัญญาณเสียง
- การเพิ่มเสียงประกอบด้วย (1) เพิ่มสัญญาณเสียงที่สร้างขึ้นโดยสุ่ม (2) เปลี่ยนความเร็วของเสียงดิบหรือ (3) เพิ่มสัญญาณเสียงที่สร้างขึ้นโดยสุ่มและเปลี่ยนความเร็วของเสียงดิบ
ส่วน 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
วิธีการ :
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 SIL_FRAME
และSIL_HOP
constants can be modified to adjust how the method "slides" over the raw audio. Similarly, the SIL_THRESHOLD
value can be modified to make the method more aggressive or conservative with respect to identification of silent segments.
วิธีการส่งออกคําอธิบายของเครื่องหมายส่วนเงียบสําหรับแต่ละไฟล์ในแต่ละชั้น ไฟล์เสียงที่ไม่มีส่วนเงียบที่ตรวจพบจะถูกระบุโดยรายการว่างเปล่า
{'1139490': {'CSA36389.ogg': [0, 8000, 16000, 272000, 280000, 288000, 296000, 304000], 'CSA36385.ogg': [0, 8000, 16000, 24000, 240000, 248000, 256000]}, '1192948': {'CSA36388.ogg': [0, 8000, 16000, 24000, 256000, 264000, 272000, 288000], 'CSA36366.ogg': [0, 8000, 16000, 24000, 256000, 264000, 272000, 280000, 288000], 'CSA36373.ogg': [0, 8000, 16000, 24000, 256000, 264000, 272000, 288000], 'CSA36358.ogg': [8000]}, '1194042': {'CSA18794.ogg': [], 'CSA18802.ogg': [], 'CSA18783.ogg': [0, 8000, 16000, 24000, 600000, 608000, 616000]}, '126247': {'XC941297.ogg': [], 'iNat1109254.ogg': [], 'iNat888527.ogg': [], 'iNat320679.ogg': [0], 'iNat888729.ogg': [], 'iNat146584.ogg': []}, '1346504': {'CSA18803.ogg': [0, 8000, 16000, 24000, 3000000, 3008000, 3016000], 'CSA18791.ogg': [], 'CSA18792.ogg': [], 'CSA18784.ogg': [0, 8000, 16000, 1232000, 1240000, 1248000], 'CSA18793.ogg': [0, 8000, 16000, 24000, 888000]} ...}
Section 2.2 - Removing Silent Segments and Eliminating Human Annotations
The USE_REMOVE_SILENCE_AND_HUMAN_ANNOT
constant defined in the Config cell of this section specifies if audio should be stripped of silent segments และ sliced to remove มากที่สุด human annotations.
USE_REMOVE_SILENCE_AND_HUMAN_ANNOT = True
The remove_silence_and_human_annot
วิธีการ strips ชิ้นส่วนเงียบจากตัวอย่างเสียงโดยใช้การส่งออกจาก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 |
The birdsong and human annotation sections themselves may contain silent segments. However, as seen in the diagram above, the bird vocalization recordings often occur within the first few seconds of audio. Therefore, a simple, if imperfect, approach to deal with human annotations is to slice audio samples at the first silent segment marker that occurs outside of a specified window, under the assumption that a human annotation follows that silent segment. The remove_silence_and_human_annot
logic uses the ANNOT_BREAKPOINT
ปัจจุบันในConfig cell to check if a silent segment marker lies outside the window specified by ANNOT_BREAKPOINT
, แสดงให้เห็นในจํานวนวินาที หากทําเช่นนั้นกลยุทธ์จะตัดเสียงดิบที่เครื่องหมายและเก็บข้อมูลเฉพาะที่เกิดขึ้นก่อนมัน การตรวจสอบด้วยตนเองของเสียงที่ประมวลผลในระหว่างการทดลองแสดงให้เห็นว่าวิธีการนี้มีความพึงพอใจ อย่างไรก็ตามตามที่กล่าวถึงในTraining Data section, there are บางคนการบันทึกเสียงที่บันทึกของมนุษย์precedes 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.
A second constant, SLICE_FRAME
, สามารถนํามาใช้ในขั้นตอนการประมวลผลขั้นสุดท้ายเพื่อคืนชิ้นส่วนเสียงที่ได้รับการประมวลผลมากขึ้นSLICE_FRAME
จํานวนวินาทีของการประมวลผลเสียงที่คุณต้องการเก็บ
โซremove_silence_and_human_annot
วิธีการบันทึกเสียงที่ประมวลผลลงในดิสก์ภายใต้ไดเรกทอรีprocessed_audio
via the save_audio
พารามิเตอร์ซึ่งผ่านเป็นTrue
. The method returns a dictionary of the ทั้งหมด seconds of processed audio for each class.
{'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
ตามที่กล่าวไว้ในTraining Data 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 get_audio_stats
method. Classes with total seconds of processed audio ด้านล่าง the average are augmented. The 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
ค่าคงที่ซึ่งสามารถใช้เพื่อปรับค่าสําหรับ
จํานวนวินาทีโดยเฉลี่ยของเสียงในทุกชั้น ค่าคงที่สามารถใช้เพื่อทําให้กลยุทธ์บํารุงรักษาหรือก้าวร้าวมากขึ้นเมื่อคํานวณจํานวนการเพิ่มการหมุน
The get_augmentation_turns_per_class
includes a AVG_SECS_FACTOR
ค่าคงที่ซึ่งสามารถใช้เพื่อปรับค่าสําหรับ
จํานวนวินาทีโดยเฉลี่ยของเสียงในทุกชั้น ค่าคงที่สามารถใช้เพื่อทําให้กลยุทธ์บํารุงรักษาหรือก้าวร้าวมากขึ้นเมื่อคํานวณจํานวนการเพิ่มการหมุน
Section 2.4 - Running Augmentations
โซUSE_AUGMENTATIONS
constant defined in the Configเซลล์ของส่วนนี้ระบุว่าควรเพิ่มเสียงหรือไม่
USE_AUGMENTATIONS = True
ตามที่กล่าวไว้ก่อนหน้านี้การเพิ่มเสียงประกอบด้วย (1) เพิ่มสัญญาณเสียงที่สร้างขึ้นแบบสุ่ม (2) เปลี่ยนความเร็วของเสียงดิบหรือ (3) เพิ่มสัญญาณเสียงที่สร้างขึ้นแบบสุ่มและเปลี่ยนความเร็วของเสียงดิบadd_noise
and change_tempo
วิธีการ encapsulate the logic for adding a noise signal and changing the tempo respectively. ช่วงสัญญาณเสียงและช่วงการเปลี่ยนแปลงความเร็วสามารถปรับได้โดยใช้เสถียรภาพต่อไปนี้ในConfig cell:
NOISE_RNG_LOW = 0.0001
NOISE_RNG_HIGH = 0.0009
TEMPO_RNG_LOW = 0.5
TEMPO_RNG_HIGH = 1.5
โซrun_augmentations
วิธีการเรียกใช้การเพิ่มโดยใช้การส่งออกจาก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.
ในขณะที่กลยุทธ์โน้ตบุ๊คเพิ่มชั้นประชากรโดยรวมของวินาทีเสียงต่ํากว่าเฉลี่ยก็ลืมชั้นที่มีทั้งหมดของวินาทีเสียงสูงกว่าเฉลี่ย วิธีการนี้ถูกนํามาใช้เพื่อจัดการหน่วยความจําที่มีอยู่และด้วยความเข้าใจว่าความไม่สมดุลของชั้นจะได้รับการแก้ไขต่อไปโดยการเลือกฟังก์ชั่นการสูญเสีย
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
ข้อมูลเสียงที่ประมวลผลจะถูกโหลดจากprocessed_audio
โฟลเดอร์ ข้อมูลจะแบ่งออกเป็น 4 รายการ:
training_audio
training_labels
validation_audio
validation_labels
Labels are, of course, the class names associated with the audio examples. The SPLIT
constant defined in the Configเซลล์ควบคุมอัตราส่วนแบ่งระหว่างรายการข้อมูลการฝึกอบรมและข้อมูลการยืนยัน ข้อมูลเสียงที่ประมวลผลจะถูก shuffled ก่อนที่จะแบ่ง
ส่วน 3.2 - การแบ่งเสียงเป็นกรอบ
เสียงจะถูกแบ่งออกเป็น 5 วินาทีส่วนโดยใช้frame_audio
method, which itself uses the TensorFlow signal.frame
วิธีการแบ่งแต่ละตัวอย่างเสียง ตัวคงที่ต่อไปนี้ในConfig cell control the split operation:
FRAME_LENGTH = 5
FRAME_STEP = 5
ส่วนที่ 3.3 - การสร้าง Mel Spectrograms
เมลสเปกตรัมจะถูกสร้างขึ้นสําหรับแต่ละกรอบเสียง 5 วินาทีที่สร้างขึ้นในSection 3.2ผ่านaudio2melspec
method. The following constants in the 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 potential range of most bird vocalizations. However, some bird species can vocalize outside this range.
Section 3.4 - Resizing Mel Spectrograms
The to_melspectrogram_image
method is used to convert each mel spectrogram to a pillow
Image
Object. แต่ละImage
วัตถุจะถูกเปลี่ยนเป็น(224, 224)
which is the input dimension expected by the EfficientNet B0 model.
ส่วน 3.5 - การโหลดข้อมูลที่ติดฉลาก Pseudo-Labeled
As mentioned in the Training Data section, the train_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-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.
การประยุกต์ใช้นี้ไม่ได้ใช้ข้อมูลที่มีการติดฉลากแบบสุ่ม อย่างไรก็ตามคุณสามารถแก้ไขบันทึกข้อสรุปที่อ้างถึงในRunning Inferenceส่วนเพื่อสร้างข้อมูลที่ติดฉลาก pseudo
Set the USE_PSEUDO_LABELS
ปัจจุบันในConfig cell to False
to skip the use of pseudo-labeled data.
ส่วน 3.6 - การเข้ารหัสฉลาก
The process_labels
วิธีนี้ใช้สําหรับฉลากการเข้ารหัสแบบฮอตเดียว แท็กที่เข้ารหัสแบบฮอตเดียวจะกลับเป็นแถบ NumPy และเพิ่มลงในรายการฉลากการฝึกอบรมและฉลากการยืนยัน
ส่วน 3.7 - แปลงรายการข้อมูลการฝึกอบรมและการยืนยันเป็น TensorFlowฐานข้อมูล
วัตถุ
ฐานข้อมูล
TensorFlowdata.Dataset.from_tensor_slices
วิธีการสร้าง TensorFlowDataset
objects from the training and validation data lists. The shuffle
วิธีการเรียกร้องในการฝึกอบรมDataset
object to shuffle training data before batching. The batch
วิธีการที่เรียกว่าทั้งสองDataset
Objects to batch the training and validation data sets. ชุดข้อมูลการฝึกอบรมและการยืนยันBATCH_SIZE
ปัจจุบันในConfigเซลล์ควบคุมขนาดแบทช์
Section 3.8 - Using MixUp to Augment Training Data
ดังที่คุณอาจรู้แล้ว MixUp เป็นเทคนิคการเพิ่มข้อมูลที่ผสมผสานภาพสองภาพร่วมกันอย่างมีประสิทธิภาพเพื่อสร้างตัวอย่างข้อมูลใหม่ คลาสสําหรับภาพผสมคือการผสมผสานของคลาสที่เกี่ยวข้องกับภาพเดิม 2 รูปmix_up
method, along with the sample_beta_distribution
วิธีการ encapsulates โลก MixUp แบบเลือก
การประยุกต์ใช้นี้ใช้ 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
โซ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
ชื่อโครงการ WandB ที่ต้องการของคุณ
ส่วน 4.2 - การสร้างและประกอบรูปแบบ EfficientNet B0
โซbuild_model
วิธีที่ใช้ในการโหลดรุ่น EfficientNet B0 ที่ได้รับการฝึกอบรมล่วงหน้าด้วยน้ําหนัก ImageNet และไม่มีชั้นด้านบน:
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)
การต่อเนื่องUNFREEZE_LAYERS
ใน theConfigเซลล์ระบุจํานวนชั้นที่จะไม่แช่แข็ง
The top of the model is rebuilt with a final Dense
ชั้นสะท้อนให้เห็นถึงคลาสสายพันธุ์นกจํานวนCategorical focal cross-entropyเลือกเป็นฟังก์ชั่นการสูญเสียเพื่อช่วยแก้ไขความไม่สมดุลของชั้นLOSS_ALPHA
และLOSS_GAMMA
ความคงที่ในConfigเซลล์ใช้กับฟังก์ชั่นการสูญเสีย
ส่วน 4.3 - รูปแบบการฝึกอบรม
โซfit
วิธีการที่เรียกว่าบนคอมโพสิตmodel
from Section 4.2สําหรับการฝึกอบรม การสังเกตว่า alearning rate schedulerการเรียกคืนlr_scheduler
, ใช้แทนอัตราการเรียนรู้ที่คงที่ อัตราการเรียนรู้เริ่มต้นของ4.0e-4
เป็นฮาร์ดโค้ดลงใน callback อัตราการเรียนรู้จะลดลงใน 2 ขั้นตอนขึ้นอยู่กับจํานวน epoch count จํานวน epochs การฝึกอบรมถูกควบคุมโดยEPOCHS
ปัจจุบันในConfigเซลล์
ส่วนที่ 4.4 - รูปแบบการประหยัด
The save
วิธีการที่เรียกว่าบนคอมโพสิตmodel
following training to save the model to disk.
model.save("bird-vocalization-classifier.keras")
Training Results
การเรียกใช้บันทึกควรผลิตผลการฝึกอบรมต่อไปนี้โดยจําไว้ว่าคุณใช้การตั้งค่าการทดลองที่อธิบายไว้ในบทความนี้Building the Classifierหมวดหมู่ :
ตามที่เห็นความแม่นยําสูงกว่า 90% และความแม่นยําในการยืนยันคือประมาณ 70% หลังจากการฝึกอบรมสําหรับ 30 epochs อย่างไรก็ตามตามที่เห็นความแม่นยําในการยืนยันจะแตกต่างกันอย่างมีนัยสําคัญ การเปลี่ยนแปลงนี้เป็นส่วนหนึ่งที่เกิดจากความไม่สมดุลของชั้นที่มีหน่วยความจําที่มีอยู่ จํากัด การใช้การเพิ่มขึ้นเพิ่มเติมเพื่อแก้ไขความไม่สมดุลอย่างเต็มที่ ผลลัพธ์แสดงให้เห็นว่ารุ่นที่ทุกข์ทรมานจากความซับซ้อนของข้อมูลการฝึกอบรมและไม่ได้รวมกันเช่นเดียวกับที่คาดหวัง อย่างไรก็ตามรุ่นนี้สามารถใช้สําหรับการคาดการณ์พร้อมกับตัวจัดอันดับ GBV ตามวัตถุประสงค์เดิม
การวิ่ง Inference
นี่Kaggle notebook("Inference Notebook") สามารถใช้ในการเรียกใช้การสรุป โลจิกของ Inference Notebook ใช้ทั้งรุ่น GBV classifier และรุ่นที่คุณได้ฝึกอบรมในส่วนก่อนหน้านี้ มันเรียกใช้การสรุปในไฟล์ soundcapes ที่ไม่ได้ติดฉลากในtrain_soundscapes
ไดเรกทอรี ไฟล์เสียงแต่ละ soundcapes จะแบ่งออกเป็นกรอบ 5 วินาทีMAX_FILES
อย่างต่อเนื่องที่กําหนดไว้ในConfigเซลล์Section 0of the notebook ควบคุมจํานวนไฟล์เสียง soundcapes ที่โหลดเพื่อการสรุป
บันทึกข้อสรุปจะสร้างการคาดการณ์ครั้งแรกโดยใช้เครื่องจําลอง GBV การคาดการณ์สําหรับ 143 ชั้นของชุดข้อมูลการแข่งขัน BirdCLEF+ 2025 ที่รู้จักกับเครื่องจําลอง GBV จะแยกต่างหากหากความน่าจะเป็นสูงสุดในหมู่ 143 ชั้น "รู้จัก" จะสูงกว่าหรือเท่ากับGBV_CLASSIFIER_THRESHOLD
, แล้วคลาสที่คาดการณ์ GBV จะถูกเลือกเป็นคลาสที่แท้จริง หากความน่าจะเป็นสูงสุดในหมู่ 143 คลาสที่ "รู้จัก" นั้นต่ํากว่าGBV_CLASSIFIER_THRESHOLD
, จะคาดว่าคลาสที่แท้จริงเป็นหนึ่งใน 63 คลาส "ไม่รู้จัก" สําหรับ GBV classifier - นั่นคือคลาสที่ใช้ในการฝึกอบรมรูปแบบในส่วนก่อนหน้านี้ โลจิกแล้วเรียกใช้การคาดการณ์โดยใช้รุ่นที่กําหนดเอง คลาสที่คาดการณ์จากชุดการคาดการณ์นั้นจะถูกเลือกเป็นคลาสที่แท้จริง
โซGBV_CLASSIFIER_THRESHOLD
constant is defined in the Configเซลล์Section 5ของบันทึกข้อสรุป การคาดการณ์คือการส่งออกไปยัง 2 ไฟล์:
- ไฟล์ preds.csv ที่บันทึกการคาดการณ์และความน่าจะเป็นการคาดการณ์สําหรับแต่ละ 5 วินาทีของภาพเสียง
- ไฟล์ submission.csv ที่บันทึกความเป็นไปได้ทั้งหมดของชั้นในรูปแบบสําหรับการแข่งขัน BirdCLEF+ 2025
กําหนดเส้นทางไปยังรูปแบบการปรับขนาดละเอียดของคุณในเซลล์แรกของส่วน 4 ของบันทึกสรุป
กําหนดเส้นทางไปยังรูปแบบการปรับแต่งในเซลล์แรกของSection 4ของบันทึก inference
งานในอนาคต
บันทึกการฝึกอบรมสามารถใช้ในการฝึกอบรมรุ่นในทุกชั้น 206 BirdCLEF+ 2025 เพื่อกําจัดความจําเป็นในการจัดอันดับ GBV อย่างน้อยในแง่ของชุดข้อมูลการแข่งขัน ดังกล่าวก่อนหน้านี้ผ่านรายการว่าง[]
ไปยัง theload_training_audio
วิธีการจะโหลดข้อมูลเสียงจากทุกชั้นMAX_FILES
and LOAD_SLICE
คืนสามารถใช้เพื่อ จํากัด จํานวนเสียงที่โหลดเพื่อทํางานภายในขอบเขตของสภาพแวดล้อมบันทึก Kaggle
แน่นอนโมเดลที่แม่นยําขึ้นสามารถฝึกอบรมได้โดยใช้ข้อมูลการฝึกอบรมจํานวนมากยิ่งขึ้น เหมาะสําหรับจํานวนการเพิ่มจะใช้เพื่อแก้ไขความไม่สมดุลของชั้น นอกจากนี้ยังสามารถใช้เทคนิคการเพิ่มอื่น ๆ เช่น CutMix เพื่อเพิ่มข้อมูลการฝึกอบรม อย่างไรก็ตามกลยุทธ์เหล่านี้ต้องการสภาพแวดล้อมการพัฒนาที่แข็งแกร่งมากขึ้น