175 ការអាន

ការរៀនម៉ាស៊ីនសម្រាប់សិល្បៈសិល្បៈសិល្បៈសិល្បៈសិល្បៈសិល្បៈ

ដោយ pictureint...20m2025/06/09
Read on Terminal Reader

យូរ​ពេក; អាន

ការប្រកួតប្រជែង BirdCLEF+ 2025 បានជំរុញអ្នកប្រើដើម្បីរចនាម៉ូដែលកំណត់ដែលអាចជឿទុកចិត្តបានពីប្រភេទសត្វនៃសត្វពីការកំណត់សត្វ។ គោលដៅនេះបន្ថែមពីវិធីសាស្រ្តដើម្បីបង្កើតកំណត់សត្វសត្វសត្វសត្វរបស់អ្នកដែលអាចត្រូវបានប្រើជាមួយកំណត់ GBV ដើម្បីកំណត់សត្វសត្វសត្វសត្វធំជាងគេ។ គោលដៅនេះប្រើបច្ចេកទេសសំខាន់ដូចគ្នានៅក្នុងអត្ថបទស្រាវជ្រាវរបស់ Google ការកំណត់សត្វសត្វសត្វសត្វសត្វនៅក្នុងសត្វសត្វសត្វសត្វសម្រាប់កំណត់សត្វ។
featured image - ការរៀនម៉ាស៊ីនសម្រាប់សិល្បៈសិល្បៈសិល្បៈសិល្បៈសិល្បៈសិល្បៈ
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ការកំណត់ GBV ត្រូវបានបណ្តុះបណ្តាលនៅលើប្រហែល 11,000 ប្រភេទខ្មៅហើយដូច្នេះគឺជាការជ្រើសរើសជាម៉ូដែលកំណត់។

ប្រព័ន្ធ ប្រតិបត្តិការ Google Bird Vocalization (GBV)

ទោះជាយ៉ាងណាក៏ដោយការប្រកួតប្រជែងនេះរួមបញ្ចូលគ្នានៃសត្វសត្វសត្វសត្វដែលនៅខាងក្រៅនៃការបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្ត

វគ្គបណ្តុះបណ្តាលនេះបានបង្ហាញពីវិធីសាស្រ្តដើម្បីបង្កើតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតកម្រិតអត្ថបទការរចនាសម្ព័ន្ធនេះត្រូវបានប្រើដើម្បីបណ្តុះបណ្តាលដោយក្រុមហ៊ុន 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 ដូចជា:

SUB-DIRECTORY NAME          SCIENTIFIC NAME             COMMON NAME
amakin1                     Chloroceryle amazona        Amazon Kingfisher
amekes                      Falco sparverius            American Kestrel
...


Amazon Kingfisher


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វគ្គសិក្សានេះមានលក្ខណៈពិសេសដោយ:

  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.

ទាំងពីរតម្រូវការនេះធ្វើឱ្យមានការខុសគ្នានៃតម្រូវការសំខាន់ក្នុងចំណោមគុណភាពខុសគ្នានៃគុណភាពខុសគ្នានៃគុណភាពខុសគ្នានៃគុណភាពខុសគ្នានៃគុណភាពខុសគ្នា។

លក្ខណៈពិសេសនៃការសាកល្បងនៃការសាកល្បងសាកល្បងទាំងពីរGBVនិងNon-GBVវគ្គសិក្សានិងរួមបញ្ចូលគ្នានៃការសរសេររបស់មនុស្ស, ជាមួយនឹងការសរសេរការសរសេរការសរសេរដែលមានលក្ខណៈពិសេសដូចជាប្រភេទនៃសត្វដែលត្រូវបានសរសេរនិងទីតាំងនៃការសរសេរ។ នៅភាគច្រើន -ប៉ុន្តែមិនទាំងអស់- លក្ខណៈសម្បត្តិ, សៀវភៅនេះបើយោងតាមការត្រួតពិនិត្យសៀវភៅសៀវភៅសៀវភៅ។

គោលបំណងដែលត្រូវបានប្រើដើម្បីបញ្ចូលគ្នានៃការអនុម័តអាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសអាភាសBuilding the Classifierផ្នែក

train_soundscapes

នេះtrain_soundscapesសៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅunlabeledសៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅBuilding the Classifierទោះជាយ៉ាងណាក៏ដោយអ្នកអាចបញ្ចូលទិន្នន័យពិនិត្យឡើងវិញទាំងនេះទៅក្នុងទិន្នន័យបណ្តុះបណ្តាល។pseudo-labeling.

test_soundscapes

នេះtest_soundscapesសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅreadme.txtសៀវភៅនេះត្រូវបានបណ្តុះបណ្តាលដោយក្រុមប្រឹក្សាភិបាលសាកល្បងដែលត្រូវបានបណ្តុះបណ្តាលនៅពេលដែលអ្នកបានផ្ញើផលិតផលសាកល្បងទៅនឹងសាកល្បង BirdCLEF+ 2025 ។

ការបង្កើតកម្រិតខ្ពស់

គោលបំណងសំខាន់និង背景

គោលបំណងសំខាន់ដែលបានប្រើដោយការស្រាវជ្រាវរបស់ Googleដើម្បីបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តាល គឺដូចខាងក្រោម:

  1. ទាញយករូបថតក្នុង 5 វិនាទី
  2. ការផ្លាស់ប្តូរផ្នែកខ្សែភាពយន្តទៅជាកម្រិតខ្សែភាពយន្ត។
  3. ការបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តាល

គោលបំណងដូចគ្នានេះនឹងត្រូវបានអនុវត្តនៅក្នុងគោលបំណងនេះ។ គោលបំណងដែលនឹងត្រូវបានបណ្តុះបណ្តាលគឺគោលបំណងរបស់ Google ។EfficientNet B0ប្រសិនបើអ្នកមានបទពិសោធន៍ជាមួយEfficientNetប្រភេទនៃម៉ូដែលអ្នកដឹងថាពួកគេត្រូវបានរចនាឡើងសម្រាប់ការដំណើរការរូបភាពដែលមានប្រសិទ្ធិភាព។

លក្ខណៈពិសេស B0

ទោះជាយ៉ាងណាក៏ដោយមុនពេលដែលគំរូអូឌីយ៉ូអាចត្រូវបានផ្លាស់ប្តូរនិងផ្លាស់ប្តូរទៅជាអេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់អេក្រង់។Training Dataជាទូលំទូលាយបញ្ហាទាំងនេះនឹងត្រូវបានដោះស្រាយតាមរយៈការកើនឡើងទិន្នន័យនិងការកាត់បន្ថយគំរូអូឌីយ៉ូ។

មុនពេលដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយដោះស្រាយ

ម៉ូដែលមានប្រសិទ្ធិភាព

ការស្រាវជ្រាវរបស់ Google បានបង្ហាញក្រុមហ៊ុនរបស់ខ្លួនEfficientNetម៉ូដែលក្នុងឆ្នាំ 2019 ជាប្រភេទនៃconvolutional neural networkម៉ូដែលដែលបានកើនឡើងពីម៉ូដែលច្នៃប្រឌិតច្នៃប្រឌិតនៅពេលវេលាដោយសារតែទំហំនិងសមត្ថភាព។


EfficientNet model family performance

សមត្ថភាព 2ម៉ូដែលដែលបានចេញផ្សាយក្នុងឆ្នាំ 2021 ផ្តល់នូវសម្តែងនិងប្រសិទ្ធិភាពទំហំល្អឥតខ្ចោះ។

ទោះបីជាការបណ្តុះបណ្តាលរូបភាពទិន្នន័យ, ម៉ូដែល EfficientNet បានបង្ហាញនូវប្រសិទ្ធិភាពរបស់ពួកគេនៅពេលដែលបានផ្លាស់ប្តូរទៅលើទិន្នន័យផ្សេងទៀតដែលធ្វើឱ្យពួកគេជាការជ្រើសរើសដ៏អស្ចារ្យជាបច្ចេកវិទ្យាសម្រាប់គម្រោងនេះ។

ក្រុមហ៊ុន Mel Spectrograms

កុំព្យូទ័រ Mel គឺជាការបង្ហាញគំនូរជីវចលនៃអេឡិចត្រូនិ។ វាអាចត្រូវបានប្រៀបធៀបល្អបំផុតទៅនឹងកុំព្យូទ័រកំដៅសម្រាប់សម្លេង។


Sample mel spectrogram

The x-axis of a mel spectrogram represents the time dimension of the audio signal, and the y-axis represents the frequencies of the sounds within the signal. However, instead of displaying all frequencies along a continuous scale, frequencies are grouped into mel bandsវាត្រូវបានកាត់បន្ថយការប្រើប្រាស់នេះដោយប្រើmel scaleកម្រិតខ្សែភាពយន្តនេះគឺ alogarithmicនេះគឺជាកម្រិតដែលប្រៀបធៀបប្រៀបធៀបប្រៀបធៀបប្រៀបធៀបប្រៀបធៀបប្រៀបធៀបប្រៀបធៀបប្រៀបធៀបប្រៀបធៀបប្រៀបធៀបប្រៀបធៀបប្រៀបធៀបប្រៀបធៀបប្រៀបធៀបប្រៀបធៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រៀបប្រ

ការរចនា

គោលបំណងរបស់ខ្ញុំក្នុងការពិភាក្សាអំពីការរចនាសម្ព័ន្ធគឺដើម្បីផ្តល់នូវការពិនិត្យឡើងវិញដែលមានគុណភាពខ្ពស់នៃវិធីសាស្រ្តដោយមិនចូលទៅក្នុងលក្ខណៈពិសេសជាច្រើន។ គោលបំណងការបណ្តុះបណ្តាលសំខាន់ (ការត្រួតពិនិត្យ) ត្រូវបានកាត់បន្ថយនៅក្នុងនេះកុំព្យូទ័រសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅ

  • មាត្រា 1: ទាញយកទិន្នន័យអូឌីយ៉ូ
  • ផ្នែកទី 2: ការដំណើរការទិន្នន័យអូឌីឌី។
  • Section 3: Mel spectrogram generation and input preparation.
  • មាត្រា 4: គំរូបណ្តុះបណ្តាល។

អ្នកនឹងមើលឃើញថាតើកុំព្យូទ័រទីពីរដំបូងនៃការបញ្ចូលគ្នានៅក្នុងការបញ្ចូលគ្នានៅក្នុងការបញ្ចូលគ្នានៅក្នុងការបញ្ចូលគ្នានៅក្នុងការបញ្ចូលគ្នានៅក្នុងការបញ្ចូលគ្នានៅក្នុងការបញ្ចូលគ្នានៅក្នុងការបញ្ចូលគ្នានៅក្នុងការបញ្ចូលគ្នានៅក្នុងការបញ្ចូល។Configកុំព្យូទ័រដែលបានកំណត់កុំព្យូទ័រដែលត្រូវបានប្រើនៅក្នុងផ្នែកនេះនិងផ្នែកបន្ទាប់។

សៀវភៅសៀវភៅពិតប្រាកដចាប់ផ្តើមជាមួយSection 0នៅទីនេះជាកញ្ចប់ Python base ដែលត្រូវបានប្រើនៅទូទាំងកញ្ចប់កញ្ចប់កញ្ចប់កញ្ចប់កញ្ចប់កញ្ចប់កញ្ចប់កញ្ចប់កញ្ចប់កញ្ចប់កញ្ចប់កញ្ចប់កញ្ចប់កញ្ចប់កញ្ចប់កញ្ចប់កញ្ចប់Weights & Biases("WandB") សម្រាប់ការរក្សាទុកការបណ្តុះបណ្តាល។ អ្នកនឹងត្រូវការបណ្តុះបណ្តាល WandB របស់អ្នកAPI keyសៀវភៅសៀវភៅ AKaggle Secret using the name WANDB_API_KEY.

ដូចដែលបាននិយាយនៅក្នុងការTraining Dataការសិក្សានិងការសិក្សានិងការសិក្សានិងការសិក្សានិងការសិក្សានិងការសិក្សានិងការសិក្សានិងការសិក្សានិងការសិក្សានិងការសិក្សានិងការសិក្សានិងការសិក្សានិងការសិក្សានិងការសិក្សានិងការសិក្សាន។Section 3.5 - Pseudo-Labelingទោះជាយ៉ាងណាក៏ដោយ Kaggle មិនមានទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំ។

ម៉ូដែលដែលបានបណ្តុះបណ្តាលបន្ទាប់ពីការដំឡើងពិសោធន៍ដែលបានបង្ហាញនៅក្នុងផ្នែកខាងក្រោមនេះត្រូវបានបង្ហោះនៅលើ Kaggle នៅទីនេះ។ ប្រសិនបើអ្នកចង់ប្រើម៉ូដែលនេះដោយគ្មានការបណ្តុះបណ្តាលរបស់អ្នកហើយអ្នកអាចបិទដោយផ្ទាល់ទៅក្នុងផ្នែក Running Inference ដើម្បីដំឡើងការបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តុះបណ្តាល។

ម៉ូដែលដែលបានបណ្តុះបណ្តាលបន្ទាប់ពីការដំឡើងពិសោធន៍ដែលបានបង្ហាញនៅក្នុងផ្នែកខាងក្រោមត្រូវបានបង្ហោះនៅលើ Kaggleទីនេះប្រសិនបើអ្នកចង់, អ្នកអាចប្រើម៉ូដែលនេះដោយគ្មានការបណ្តុះបណ្តាលរបស់អ្នកនិងបិទផ្ទាល់ទៅRunning Inferenceការបោះពុម្ព ការបោះពុម្ព ការបោះពុម្ព ការបោះពុម្ព ការបោះពុម្ព ការបោះពុម្ព ការបោះពុម្ព ការបោះពុម្ព ការបោះពុម្ព ការបោះពុម្ព ការបោះពុម្ព ការបោះពុម្ព ការបោះពុម្ព

ផ្នែក 1 - ទាញយកទិន្នន័យទូរទស្សន៍

នេះAudio Data Loadingផ្នែកមួយនៃសៀវភៅ:

  1. វាត្រូវបានទាញយកកម្រិតទាំងអស់នៅក្នុងកំណត់ទិន្នន័យការប្រកួត BirdCLEF+ 2025 ដែលមិនត្រូវបានពិនិត្យឡើងវិញដោយការកំណត់ GBV ។
  2. ទាញយកទិន្នន័យសូម្បីតែប្រព័ន្ធ load_training_audio ។
  3. បានបង្កើតឯកសារ processed_audio និងរក្សាទុករូបរាងនៃទិន្នន័យអូឌីយ៉ូដែលត្រូវបានទាញយកជាឯកសារ .wav នៅក្នុងឯកសារនេះ។

នេះConfig cell of this section includes a MAX_FILESវាត្រូវបានកំណត់ដោយមានតម្លៃខ្ពស់នៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូលគ្នានៃការបញ្ចូល។1000ដើម្បីធ្វើឱ្យប្រសិនបើឯកសារអូឌីយ៉ូទាំងអស់ត្រូវបានទាញយកសម្រាប់non-GBVអ្នកអាចត្រូវការកំណត់កំណត់កំណត់កំណត់កំណត់នេះសម្រាប់ការដំឡើងពិសោធន៍របស់អ្នក។ ឧទាហរណ៍, ប្រសិនបើអ្នកកំពុងទាញយកទិន្នន័យអូឌីយ៉ូពីallអ្នកអាចត្រូវកំណត់កំណត់កំណត់កំណត់នេះទៅកំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់កំណត់។

នេះload_training_audioគោលបំណងនេះអាចត្រូវបានគេស្គាល់ដោយ Aclassesវាត្រូវបានរៀបចំនៅលើគម្រោងនេះ, ដែលជាសៀវភៅនៃគម្រោងដែលនឹងត្រូវបានទាញយក។ សម្រាប់គម្រោងនេះ,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 ដោយផ្ញើអ៊ីនធឺណិតដោយclassesផែនទី


ឧបករណ៍ load_training_audio ក៏ទទួលបានឧបករណ៍ boolean use_slice ដែលមានលក្ខណៈពិសេស។ ឧបករណ៍នេះធ្វើការជាមួយឧបករណ៍ LOAD_SLICE ដែលមានលក្ខណៈពិសេសនៅក្នុងសត្វ Config ។ ឧបករណ៍ use_slice និងឧបករណ៍ LOAD_SLICE ដែលមានលក្ខណៈពិសេសមិនត្រូវបានប្រើនៅក្នុងការអនុវត្តនេះ។ ប៉ុន្តែពួកគេអាចត្រូវបានប្រើដើម្បីទាញយកបរិមាណតម្រូវការពីឯកសារទាំងអស់។ ដូច្នេះសម្រាប់ការទាញយកតម្រូវការតែ 5 វិនាទីនៃសត្វពីឯកសារសត្វទាំងអស់, ទាញយកឧបករណ៍ LOAD_SLICE ទៅ 160000 ដែលត្រូវបានកំណត់ជាលក្ខណៈពិសេស 5 ដងនៃលក្ខណៈពិសេស 32000 និងទាញយកឧបករណ៍ use

ឧបករណ៍ load_training_audio ក៏ទទួលបានឧបករណ៍ boolean use_slice ដែលមានលក្ខណៈពិសេស។ ឧបករណ៍នេះធ្វើការជាមួយឧបករណ៍ LOAD_SLICE ដែលមានលក្ខណៈពិសេសនៅក្នុងសត្វ Config ។ ឧបករណ៍ use_slice និងឧបករណ៍ LOAD_SLICE ដែលមានលក្ខណៈពិសេសមិនត្រូវបានប្រើនៅក្នុងការអនុវត្តនេះ។ ប៉ុន្តែពួកគេអាចត្រូវបានប្រើដើម្បីទាញយកបរិមាណតម្រូវការពីឯកសារទាំងអស់។ ដូច្នេះសម្រាប់ការទាញយកតម្រូវការតែ 5 វិនាទីនៃសត្វពីឯកសារសត្វទាំងអស់, ទាញយកឧបករណ៍ LOAD_SLICE ទៅ 160000 ដែលត្រូវបានកំណត់ជាលក្ខណៈពិសេស 5 ដងនៃលក្ខណៈពិសេស 32000 និងទាញយកឧបករណ៍ use

នេះload_training_audioគោលបំណងទទួលបាន Booleanmake_copyនៅពេលដែលគំរូនេះគឺTrueគោលនយោបាយនេះបានបង្កើត aprocessed_audioវាត្រូវបានរក្សាទុកសៀវភៅមួយចំនួននៃសៀវភៅទាំងអស់ដូចជា a.wavសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅprocessed_audioវាត្រូវបានប្រើនៅក្នុងផ្នែកបន្ទាប់ដើម្បីរក្សាទុកគំរូសៀវភៅដែលបានផ្លាស់ប្តូរទៅលើដំណោះស្រាយដោយគ្មានការប្រសិទ្ធិភាពនៃដំណោះស្រាយដំណោះស្រាយទិន្នន័យ BirdCLEF+ 2025 ។


នេះ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]]))] ...}

The method also returns basic statistics describing the data loaded for each class as a comma-separated-value string. 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
...

Section 2 - Audio Data Processing

The Audio Data Processing section of the notebook:

  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.
Section 2.1 - Detecting Silent Segments

The detect_silence method is used to "slide" over each raw audio sample and identify silent segments by comparing the root-mean square (RMS)ទោះជាយ៉ាងណាក៏ដោយប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើប្រសិនបើ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

The SIL_FRAMEនិងSIL_HOP constants can be modified to adjust how the method "slides" over the raw audio. Similarly, the SIL_THRESHOLDតម្លៃអាចត្រូវបានផ្លាស់ប្តូរដើម្បីធ្វើឱ្យវិធីសាស្រ្តមានប្រសិទ្ធិភាពជាងមុនឬប្រសិទ្ធិភាពប្រសើរជាងមុនក្នុងចំណោមការកំណត់ផ្នែកគ្មានការចែកចាយ។

The method outputs a dictionary of silent segment markers for each file in each class. Audio files with no detected silent segments are identified by empty lists.

{'1139490': {'CSA36389.ogg': [0, 8000, 16000, 272000, 280000, 288000, 296000, 304000], 'CSA36385.ogg': [0, 8000, 16000, 24000, 240000, 248000, 256000]}, '1192948': {'CSA36388.ogg': [0, 8000, 16000, 24000, 256000, 264000, 272000, 288000], 'CSA36366.ogg': [0, 8000, 16000, 24000, 256000, 264000, 272000, 280000, 288000], 'CSA36373.ogg': [0, 8000, 16000, 24000, 256000, 264000, 272000, 288000], 'CSA36358.ogg': [8000]}, '1194042': {'CSA18794.ogg': [], 'CSA18802.ogg': [], 'CSA18783.ogg': [0, 8000, 16000, 24000, 600000, 608000, 616000]}, '126247': {'XC941297.ogg': [], 'iNat1109254.ogg': [], 'iNat888527.ogg': [], 'iNat320679.ogg': [0], 'iNat888729.ogg': [], 'iNat146584.ogg': []}, '1346504': {'CSA18803.ogg': [0, 8000, 16000, 24000, 3000000, 3008000, 3016000], 'CSA18791.ogg': [], 'CSA18792.ogg': [], 'CSA18784.ogg': [0, 8000, 16000, 1232000, 1240000, 1248000], 'CSA18793.ogg': [0, 8000, 16000, 24000, 888000]} ...}
Section 2.2 - Removing Silent Segments and Eliminating Human Annotations

The USE_REMOVE_SILENCE_AND_HUMAN_ANNOT constant defined in the Configកុំព្យូទ័ររបស់កុំព្យូទ័រនេះបានបញ្ជាក់ថាតើអ៊ីនធឺណិតគួរតែត្រូវបានបាត់បន្ថយពីផ្នែកស្អាត។និង sliced to remove ដំបូង human annotations.

USE_REMOVE_SILENCE_AND_HUMAN_ANNOT = True

នេះremove_silence_and_human_annotប្រព័ន្ធ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការdetect_silenceលើសពីនេះទៀត, វាត្រូវបានអនុវត្តលក្ខណៈសម្បត្តិដើម្បីដំណើរការសៀវភៅរបស់មនុស្សដោយផ្អែកលើការស្ទើរតែមួយ: លក្ខណៈសម្បត្តិសៀវភៅជាច្រើនដែលមានសៀវភៅរបស់មនុស្ស។tend 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គោលបំណងនេះបានប្រើANNOT_BREAKPOINT constant in the Configសន្លឹកដើម្បីត្រួតពិនិត្យថាតើម៉ាស៊ីនបង្វិលបង្វិលបង្វិលគឺនៅខាងក្រៅនៃបង្វិលបង្វិលបង្វិលបង្វិល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 section, there are some audio recordings where the human annotation precedes the birdsong recording. The logic described here does notមានគំនិតមួយចំនួនដែលមានលក្ខណៈពិសេសក្នុងការបញ្ជាទំហំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទ

A second constant, SLICE_FRAME, can be optionally used in a final processing step to return an even more refined slice of the processed audio. Set SLICE_FRAME to the number of seconds of processed audio that you want to retain.

The remove_silence_and_human_annot method saves processed audio to disk under the directory processed_audio via the save_audio parameter, which is passed as 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, ...}

The get_audio_statsគោលបំណងនេះត្រូវបានប្រើដូចខាងក្រោមremove_silence_and_human_annot to get the average number of seconds of audio across all classes.

ផ្នែក 2.3 - ការគណនានៃការកែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រែប្រ

As mentioned in the 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 below 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 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.

Section 2.4 - Running Augmentations

The USE_AUGMENTATIONS constant defined in the 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 cell:

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សម្រាប់គំនិតដែលនឹងត្រូវបានកើនឡើង, គោលបំណងនេះ:

  1. ការជ្រើសរើសរើសរើសរើសគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូគំរូ
  2. Randomly selects the augmentation to perform: (1) adding noise, (2) changing the tempo, or (3) adding noise and changing the tempo.
  3. ការសរសេរការសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរសរសេរ

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

នេះMel Spectrogram Generation and Input Preparationផ្នែកមួយនៃសៀវភៅ:

  1. ការផ្លាស់ប្តូរទិន្នន័យអូឌីយ៉ូដែលត្រូវបានដំណើរការទៅក្នុងសៀវភៅបណ្តុះបណ្តាលនិងការត្រួតពិនិត្យ។
  2. Splits audio into 5 second frames.
  3. Generates mel spectrograms for each 5 second audio frame.
  4. ទំហំទំហំទំហំទំហំទំហំទំហំទំហំទំហំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំទូលំ (224, 224)
  5. Optionally loads pseudo-labeled data samples to augment training data.
  6. One-hot encodes training data and validation data labels.
  7. Constructs TensorFlow Dataset objects from training and validation data lists.
  8. Optionally uses MixUp logic to augment training data.
Section 3.1 - Splitting Processed Audio Data

Processed audio data is loaded from the processed_audioទិន្នន័យនេះត្រូវបានផ្លាស់ប្តូរទៅ 4 សៀវភៅ:

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.

Section 3.2 - Splitting Audio into Frames

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ប្រព័ន្ធ ប្រតិបត្តិការ Split:

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

ការជ្រើសរើសកម្រិតនេះត្រូវបានជ្រើសរើសដើម្បីបង្ហាញpotential range of most bird vocalizations. However, some bird species can vocalize outside this range.

Section 3.4 - Resizing Mel Spectrograms

នេះto_melspectrogram_image method is used to convert each mel spectrogram to a pillow Image object. Each Image object is subsequently resized to (224, 224) which is the input dimension expected by the EfficientNet B0 model.

Section 3.5 - Loading Pseudo-Labeled Data

ដូចដែលបាននិយាយនៅក្នុងការTraining Data section, the train_soundscapesសៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ សៀវភៅ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:

  • Train a classifier without pseudo-labeled data.
  • សៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅ
  • Segment each audio soundscape into 5 second frames.
  • Generate mel spectrograms for each 5 second frame and resize to (224, 224).
  • Run predictions on each resized mel spectrogram using the classifier that you trained in the first step.
  • Keep the predictions above a desired confidence level and save the mel spectrograms for those predictions to disk under the predicted class label.
  • Train your classifier again using the psuedo-labeled data.

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 ។ បន្ទាប់មកប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រាប់ការប្រើសម្រើស។

This implementation does not use pseudo-labeled data. However, you can modify the inference notebook referenced in the Running Inference section to generate pseudo-labeled data.

ទាញយកUSE_PSEUDO_LABELSជាធម្មតានៅក្នុងConfigខ្សែភាពយន្តFalseដើម្បីបាត់បង់ការប្រើប្រាស់នៃទិន្នន័យ pseudolabeled ។

មាត្រា 3.6 - coding ស្លាក

នេះprocess_labels method is used to one-hot encode labels. One-hot encoded labels are returned as NumPy arrays and added to the training label and validation label lists.

Section 3.7 - Converting Training and Validation Data Lists to TensorFlow Dataset Objects
Dataset

The TensorFlow data.Dataset.from_tensor_slicesគោលបំណងដើម្បីបង្កើត TensorFlowDatasetសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅshuffleគោលបំណងនេះត្រូវបានគេស្គាល់នៅលើការបណ្តុះបណ្តាលDataset object to shuffle training data before batching. The batchគោលបំណងនេះត្រូវបានគេហៅនៅលើទាំងពីរDatasetគោលបំណងនៃការធ្វើតេស្តនិងការធ្វើតេស្ត។ គោលបំណងនៃការBATCH_SIZE constant in the Configកុំព្យូទ័រគ្រប់គ្រងទំហំ batch ។

Section 3.8 - Using MixUp to Augment Training Data

ដូចដែលអ្នកអាចដឹងថានៅពេលនេះ, MixUp គឺជាបច្ចេកទេសការបង្កើនទិន្នន័យដែលធ្វើឱ្យមានប្រសិទ្ធិភាពការរួមបញ្ចូលរូបភាពពីរដើម្បីបង្កើតគំរូទិន្នន័យថ្មី។ គម្រោងសម្រាប់រូបភាពរួមបញ្ចូលគឺជាការរួមបញ្ចូលគ្នានៃគម្រោងដែលភ្ជាប់ជាមួយរូបភាពដំបូង 2 ។mix_up method, along with the sample_beta_distributionប្រព័ន្ធ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ

ការអនុវត្តនេះប្រើ MixUp ដើម្បីបង្កើនទិន្នន័យបណ្តុះបណ្តាល។ ដើម្បីប្រើ MixUp, ទាញយកUSE_MIXUPជាធម្មតានៅក្នុងConfigខ្សែភាពយន្តTrue.

ផ្នែកទី 4 - ម៉ូដែលការបណ្តុះបណ្តាល

នេះModel Trainingផ្នែកមួយនៃសៀវភៅ:

  1. ការចាប់ផ្តើមនិងកំណត់គម្រោង WandB ដើម្បីរក្សាទុកទិន្នន័យដំណើរការបណ្តុះបណ្តាល។
  2. ការបង្កើតនិងកំណត់គំរូ EfficientNet B0 ។
  3. ការបណ្តុះបណ្តាលរបស់គំរូ
  4. ទាញយកម៉ូដែលដែលបានបណ្តុះបណ្តាលទៅលើដែក។
ផ្នែក 4.1 - ការចាប់ផ្តើមនិងការកំណត់រចនាសម្ព័ន្ធកម្មវិធី WandB

សូមបញ្ជាក់ថាតើអ្នកបានបញ្ជាក់ថាតើអ្នកបានបញ្ជាក់ថាតើអ្នកបានបញ្ជាក់ថាតើអ្នកបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់ថាត្រូវបានបញ្ជាក់។

សូមបញ្ជាក់ថាតើអ្នកបានបញ្ជាក់ថាតើអ្នកបានបញ្ជាក់ថាតើអ្នកបានបញ្ជាក់ថាតើអ្នកបានបញ្ជាក់ថាតើអ្នកមានKaggle Secretនៅលើសៀវភៅនេះ និងនៅលើ WandB នេះloginគោលដៅក្នុងSection 0 of the notebook has returned 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ទាញយកឈ្មោះគម្រោង WandB របស់អ្នក។

ផ្នែក 4.2 - ការបង្កើតនិងបង្កើតម៉ូដែល EfficientNet B0

The build_modelគោលបំណងនេះត្រូវបានប្រើដើម្បីទាញយកម៉ូដែល EfficientNet B0 ដែលបានរៀនមុនដោយមានកម្រិត ImageNet និងដោយគ្មានកម្រិតកំពូល:

model = EfficientNetB0(include_top=False, input_tensor=inputs, weights="imagenet")

ម៉ូដែលនេះត្រូវបានកាត់បន្ថយដើម្បីទទួលបានអត្ថប្រយោជន៍ពីទម្ងន់ ImageNet ដែលបានបណ្តុះបណ្តាលមុនដោយមានគោលបំណងដើម្បីស្បែក (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)

សកម្មភាព ConstantUNFREEZE_LAYERSនៅក្នុងConfigទិន្នន័យថ្នាំកំដៅកំដៅកំដៅកំដៅកំដៅកំដៅកំដៅកំដៅកំដៅកំដៅកំដៅកំដៅ

The top of the model is rebuilt with a final Denseស្លាកដែលបង្ហាញពីការកំណត់ទំហំនៃសត្វសត្វសត្វសត្វ។Categorical focal cross-entropy is chosen as the loss function to help address the class imbalance. The LOSS_ALPHAនិងLOSS_GAMMAជាធម្មតានៅក្នុងConfigកុំព្យូទ័រត្រូវបានប្រើជាមួយនឹងការបាត់បន្ថយ។

មាត្រា 4.3 - ម៉ូដែលការបណ្តុះបណ្តាល

The fit method is called on the compiled modelពីSection 4.2 to run training. Note that a learning rate scheduler callback, lr_schedulerវាត្រូវបានប្រើដោយផ្អែកលើកម្រិតអប់រំធម្មតា។ កម្រិតអប់រំដំបូងនៃការអប់រំធម្មតា4.0e-4វាត្រូវបានកាត់បន្ថយក្នុងរយៈពេល ២ វិនាទី ដោយផ្អែកលើអំឡុងពេលវេលា។ អំឡុងពេលវេលានេះត្រូវបានគ្រប់គ្រងដោយអំឡុងពេលវេលាEPOCHSជាធម្មតានៅក្នុងConfigខ្សែភាពយន្ត

មាត្រា 4.4 - ម៉ូដែលការសុវត្ថិភាព

នេះsave method is called on the compiled model following training to save the model to disk.

model.save("bird-vocalization-classifier.keras")

លទ្ធផលបណ្តុះបណ្តាល

Running the notebook should produce the following training results, assuming you used the experimental setup that was described in the Building the Classifierផ្នែក :

Training results

ដូចដែលបានឃើញ, ការត្រឹមត្រូវគឺត្រឹមត្រូវជាង 90% និងការត្រឹមត្រូវការត្រឹមត្រូវនៃការត្រឹមត្រូវគឺប្រហែល 70% បន្ទាប់ពីការបណ្តុះបណ្តាលសម្រាប់អំឡុងពេល 30 ។ ទោះជាយ៉ាងណាក៏ដោយដូចដែលបានឃើញ, ការត្រឹមត្រូវនៃការត្រឹមត្រូវនៃការត្រឹមត្រូវខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខុសខ

ការដំឡើង Inference

នេះកុំព្យូទ័រនេះអាចត្រូវបានប្រើដើម្បីដំណើរការបញ្ជាក់។ គោលការណ៍បញ្ជាក់ប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តិសាស្រ្តប្រវត្តtrain_soundscapesសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅសៀវភៅMAX_FILES constant defined in the Configខ្សែភាពយន្តSection 0ប្រព័ន្ធ ប្រតិបត្តិការ Notebook Controls the number of soundcapes audio files that are loaded for inference. ប្រតិបត្តិការ Notebook Controls the number of soundcapes audio files that are loaded for inference.

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_CLASSIFIER_THRESHOLD, it is assumed that the true class is among the 63 classes "unknown" to the GBV classifier - i.e. the classes used to train the model in the preceding section. The logic then runs predictions using the finetuned model. The predicted class from that prediction set is subsequently selected as the true class.

នេះGBV_CLASSIFIER_THRESHOLDវាត្រូវបានកំណត់នៅក្នុងការConfigខ្សែភាពយន្តSection 5 of the inference notebook. Predictions are output to 2 files:

  1. ឯកសារ preds.csv ដែលបានរក្សាទុកប្រសិទ្ធិភាពការអនុម័តនិងការអនុម័តសម្រាប់រយៈពេល 5 វិនាទី។
  2. ឯកសារ submission.csv ដែលរក្សាទុកប្រសិទ្ធិភាពអតិបរមាទាំងអស់ក្នុងគំនិតសម្រាប់ការប្រកួត BirdCLEF+ 2025 ។

Set the path to your finetuned model in the first cell of Section 4 of the inference notebook.

សូមបញ្ជាក់អំពីរបៀបដែលអ្នកកំពុងធ្វើនៅក្នុងគំរូដំបូងរបស់អ្នកSection 4សៀវភៅអំពី Inference Notebook

អាជីវកម្មចុងក្រោយ

សៀវភៅការបណ្តុះបណ្តាលអាចត្រូវបានប្រើដើម្បីបណ្តុះបណ្តាលម៉ូដែលនៅលើ 206 BirdCLEF+ 2025 កម្រិតទាំងអស់, ការបាត់បន្ថយការតម្រូវការសម្រាប់ការកំណត់ GBV, ទោះបីជាទូទាំងទិន្នន័យនៃការប្រកួតប្រជែង។ ដូចដែលបាននិយាយមុនពេលនេះ, ការផ្លាស់ប្តូរសៀវភៅបិទ,[]នៅលើ Theload_training_audioប្រព័ន្ធ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការ ប្រតិបត្តិការMAX_FILESនិងLOAD_SLICEទិន្នន័យធម្មតាអាចត្រូវបានប្រើដើម្បីកាត់បន្ថយទំហំនៃការទាញយកអូឌីយ៉ូដើម្បីធ្វើការក្នុងកំណត់នៃបរិស្ថានកុំព្យូទ័រ Kaggle ។

ជាការពិតប្រាកដ, ម៉ូដែលល្អប្រសើរជាងនេះអាចត្រូវបានបណ្តុះបណ្តាលដោយប្រើទិន្នន័យបណ្តុះបណ្តាលធំជាងនេះ។ ជាការល្អប្រសើរជាងនេះ, ទិន្នន័យបណ្តុះបណ្តាលធំជាងនេះនឹងត្រូវបានប្រើសម្រាប់ការបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តុះបណ្តាលបណ្តុះបណ្តុះបណ្តាលបណ្តុះបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តាលបណ្តុះបណ្តុះ

L O A D I N G
. . . comments & more!

About Author

Picture in the Noise HackerNoon profile picture
Picture in the Noise@pictureinthenoise
Speech and language processing. At the end of the beginning.

ព្យួរស្លាក

អត្ថបទនេះត្រូវបានបង្ហាញនៅក្នុង...

Trending Topics

blockchaincryptocurrencyhackernoon-top-storyprogrammingsoftware-developmenttechnologystartuphackernoon-booksBitcoinbooks