Cat OR Dog Audio Classification

က်ြန္ေတာ္ ဒီေန့မွာေတာ့ audio classification ကုိ simple example ေလးနဲ့လုပ္ျပသြားပါမယ္။အဲ့ေတာ့ ဒီေန့သင္ခန္းစာမွာ ပါ၀င္သြားမွာကေတာ့

Table Of Contents

  • preparing data loader
  • audio feature extraction
  • prepare data to fit machine learning model
  • tuning hyperparameters
  • save our model for next time use
  • testing with unknown data

ပထမဆုံး မစခင္ audio data ေတြကုိ ဘာေၾကာင့္နားလည္ဖုိ့လုိလာတာလဲ ဆုိတာနဲ့ ေျပာခ်င္ပါတယ္။ဥပမာ။။မိတ္ေဆြက robot တစ္ခုတည္ေဆာက္တာျဖစ္ျဖစ္ တျခား amazon alexa တုိ့ google တုိ့လုိမ်ိုး device ေတြလုပ္ခ်င္တယ္ဆုိ voice or audio ကလုိလာပါျပီ။ဒီေန့ သင္ခန္းစာမွာေတာ့ ေစာနက device မ်ားရဲ့ audio record လုပ္ပုံကုိ မေျပာေတာ့ပါဘူး။ေနာက္က်ရင္ေတာ့ အားရင္ တင္ေပးပါမယ္။

က်ြန္ေတာ္တုိ့ နုိင္ငံမွာလဲ sharing ေတြလုပ္ေပးက်တဲ့အခါ computer vision လုိ ေခြးပုံျမင္လုိ့ ေခြးလုိ့ေျပာတဲ့ပုံစံမ်ိုးပဲ sharing လုပ္ေပးက်ပါတယ္။အကယ္လုိ့ မိတ္ေဆြ robot က အဆင့္ျမင့္ေအာင္လုပ္ဖုိ့ဆုိ ေခြးကုိ မျမင္ပဲ ေခြးေဟာင္သံပဲၾကားရရင္ေကာ ေခြးလုိ့သိေနဖုိ့လုိအပ္ပါတယ္။

ပထမဆုံး dataset ကုိ download ဒီ link ကေန လုပ္လုိက္ပါ။link ကုိေရာက္သြားရင္ cats_dogs.zip ကုိ download လုပ္ပါ။ျပီးရင္ေတာ့ extract လုပ္လုိက္ရင္ ဒီ test,train folder ေတြထဲမွာ cat dog data ေတြရွိပါတယ္။အဲ့ေတာ့ က်ြန္ေတာ္တုိ့ dataset ကုိ နည္းနည္းျပင္ပါမယ္။

Project Structure

  • data
    • cat
      • cat_1.wav
    • dog
      • dog_barking_1.wav
  • load_data.py
  • train.py
  • test.py

ေစာနက download လုပ္ထားတဲ့ zip ထဲက cat dog ေဒတာအားလုံးကုိ data ေအာက္က cat,dog ေတြ ထဲမွာ အကုန္ထည့္လုိက္ပါ။

ျပီးရင္ေတာ့ coding စေရးၾကတာေပါ့။

1.Data Loader

load_data.py ထဲမွာ DatasetLoader ဆုိတဲ့ class ရွိေနပါတယ္။ အဲ့ထဲမွာေတာ့ constructor နဲ့ load ဆုိတဲ့ method ေလးရွိေနပါတယ္။load သည္ train.py က ပုိ့လုိက္မယ့္ file path ေတြထဲက audio file(.wav) ေတြကုိဖတ္ျပီး self.featurize() ဆုိတဲ့ method ကုိ ေခါ္ျပီး audio feature ထုတ္ကာ train.py ကုိျပန္ပုိ့ေပးဖုိ့ေရးထားတာပါ။အဲ့ေတာ့ featurize() method ကုိေအာက္မွာဆက္ၾကည့္ေပးပါ။

2.Feature Extraction

audio feature ေတြထုတ္တဲ့ေနရာမွာ author အၾကုိက္ဆုံးေသာ library သည္ librosa ပါ။အလြယ္တကူနဲ့ ထိထိေရာက္ေရာက္ထုတ္လုိ့ရလုိ့ပါ။ေနာက္တစ္ခုကေတာ့ pydub ေပါ့ဒီမွာေတာ့ မသုံးျပေတာ့ပါဘူး။အဲ့ေတာ့ audio classification အတြက္ အေကာင္းဆုံးေသာ mfcc feature ကုိ ထုတ္ျပီး ေစာနက load ထဲမွာ audio file တစ္ခုခ်င္းစီရဲ့ feature ေတြကုိ ျပန္ပုိ့ေပးေနပါတယ္။

3.prepare data to fit machine learning model

feature ေတြရျပီ ဆုိေတာ့ train.py မွာ အဲ့ feature ေတြကုိ model ထဲမွာ trainဖုိ့ လုိပါျပီ။

ပထမဆုံး လုိအပ္တာေတြ import လုပ္လုိက္ပါတယ္။ျပီးေတာ့ command line ကေန argument လက္ခံဖုိ့လုပ္လုိက္ျပီး dataset နဲ့ ျပန္ျပီးထုတ္ေပးမယ့္ model name ကိုလက္ခံလုိက္ပါတယ္။

ျပီးရင္ေတာ့ imutils သည္ image library လုိ့သိထားေပမယ့္ file ေတြ list လုပ္တဲ့ေနရာမွာလဲ အသုံး၀င္တာမုိ့ ကုိယ့္ဘာ့သာမေရးေတာ့ပဲ ယူသုံးလုိက္ပါတယ္။ရလာတယ့္ file list ေတြကုိ ေစာနက ေရးထားခဲ့တဲ့ load_data ထဲက DatasetLoader ကုိ ျပန္ေပးျပီး load method ကုိေခါ္ကာ feature ေတြျပန္ယူလာပါတယ္။ရလာတဲ့ feature ေတြကုိ (data,labels) ထဲထည့္ျပီး data ကုိ normalize ျပန္လုပ္လုိက္ပါတယ္။

အဲ့ေတာ့ က်ြန္ေတာ္တုိ့ data ေတြ normalize လုပ္ျပီးျပီဆုိေတာ့ ဘယ္ data ကိုေတာ့ train မယ္ ဘယ္ data ကိုေတာ့ ျပန္ျပီး test လုပ္ဖုိ့တြက္ သုံးမယ္ကုိခြဲထုတ္ဖုိ့လုိပါတယ္။

4.tuning hyperparameters

KNeighborsClassifier model ထဲကုိ neighbors ေတြ tune လုပ္ၾကည့္လုိက္ပါတယ္။ျပီးေတာ့မွ အေကာင္းဆုံး model  ကုိ train လုိက္ပါတယ္။

5.save our model for next time use

ဘယ္ class ကေတာ ့ဘယ္ေလာက္ထိ predict လုပ္တာမွန္တယ္ကုိ ၾကည့္လုိက္ျပီး pickle ကုိသုံးကာ model ကုိ save လုိက္ပါတယ္။

RUN

6.test unknown data

test လုပ္ဖုိ့ဆုိ test.py ထဲမွာ ေရးဖုိ့လုိပါမယ္။အဲ့ေတာ့ က်ြန္ေတာ္ကေတာ့ ေၾကာင္သံကုိ freesound.org ကေန download သြားဆြဲလုိက္ပါတယ္။

အဲ့ေတာ့ ပထမက save ထားတဲ့ model ကုိ ျပန္load လုပ္လုိက္ျပီး dl.featurize(‘ကုိယ့္ audio .wav file ရွိတဲ့ေနရာ’) ကရလာတဲ့ feature ကုိ predict လုပ္လုိက္ျပီး ၾကည့္လုိက္မယ္ဆုိ output ကုိေတြ့ရမွာပါ။

RUN

အားလုံးအဆင္ေျပပါေစ။ဒီ blog က code ေတြသည္ credit ေပးစရာမလုိပါဘူး။အဆင္ေျပသလုိယူသုံးနုိင္ပါတယ္။code file လုိခ်င္ပါက page မွာလာေျပာလုိ့ရပါတယ္။

FACEBOOK PAGE-https://www.facebook.com/pyrobocity/

 

Share:

Leave a Reply