Training Mnist Dataset To Recognize Hand Written Numbers

က်ြန္ေတာ္တုိ့ ဒီ Hand Written Number Recognition Project ရဲ့ ျပသနာကေတာ့ လူေတြက တစ္ခါတေလေရးရင္ ေစာင္းေနတာမ်ိုးပါ ဥပမာ 1 ကုိ ေရးတယ္ ေစာင္းေနတာမ်ိုး ျဖစ္ေနတတ္တယ္။ကြန္ပ်ူတာက ခန့္မွန္းတဲ့ အခါက တစ္ခါတေလက် မွားေနတတ္တယ္။က်ြန္ေတာ္တုိ့ ဒီပုိ့္စ္ မွာေတာ့ ဒီလုိျပသနာေတြပါ ရွင္းျပီး ဘယ္လုိ train ရမယ္ကုိ ျပသြားမွာပါ။

က်ြန္ေတာ္တို့ လက္နဲ့ေရးထားတဲ့ Numbers ေတြကုိ ကြန္ပ်ဴတာ ကနားလည္ဖုိ့ဆုိ machine learning ဒါမွမဟုတ္ deep learning ကုိ သုံးမွအဆင္ေျပပါမယ္။က်ြန္ေတာ္တုိ့ ဒီprojectမွာေတာ့ deep learning မသုံးပါဘူး။Machine learning algorithm ကုိပဲသုံးသြားမွာပါ။Deeplearning သုံးခ်င္တယ္စမ္းခ်င္တယ္ဆုိရင္ေတာ့ LeNet ေလာက္နဲ့ အဆင္ေျပပါတယ္။

က်ြန္ေတာ္တုိ့ မစခင္မွာ ဒီprojectအတြက္ ဘာေတြ install လုပ္ဖုိ့လုိအပ္လဲကုိ ေျပာပါမယ္။

Requirements:

  1. Python3
  2. Opencv
  3. numpy
  4. scikit-image
  5. scikit-learn
  6. mahotas
  7. imutils

အေပါ္ကလုိအပ္ခ်က္ေတြထဲမွာ အလြယ္တကူ install လုပ္မရတာဆုိလုိ့ Opencv ပဲရွိပါတယ္။က်န္တာေတြက python ရဲ့ package ေတြကို အလြယ္တကူ install လုပ္လုိ့ရေအာင္လုပ္ထားတဲ့ Pip ကေန Install လုပ္ယံုပါပဲ။က်ြန္ေတာ္ဒီပုိ့စ္ေတြက python ကုိ intermediate level ေလာက္မွ အဆင္ေျပမွာပါ။အနည္းငယ္ေရးဖူးရမယ္ ဒါမွအဆင္ေျပမွာပါ။Beginnerေတြ လဲရွိမွာပါ။ အခုမွ စသင္တာတဲ့ သူေတြအေနနဲ့ Install မလုပ္တတ္ဘူး လုပ္ရတာအဆင္မေျပဘူးဆုိရင္ က်ြန္ေတာ္တုိ့ facebook pageကို messageပုိ့ျပီး install လုပ္နည္းကုိတင္ဖုိ့ေျပာနုိင္ပါတယ္။အဲ့တာဆုိ က်ြန္ေတာ္လဲ တင္ဖို့လုိအပ္လာရင္ တင္ေပးမွာပါ။ဒီပို့စ္မွာက်ေတာ့ အရမ္းရွည္သြားမွာမုိ့ တင္လုိ့အဆင္မေျပလုိ့ပါ။

က်ြန္ေတာ္တုိ့ ဒီ Hand Written Number Recognition Project ရဲ့ ျပသနာကေတာ့ လူေတြက တစ္ခါတေလေရးရင္ ေစာင္းေနတာမ်ိုးပါ ဥပမာ 1 ကုိ ေရးတယ္ ေစာင္းေနတာမ်ိုး ျဖစ္ေနတတ္တယ္။ကြန္ပ်ူတာက ခန့္မွန္းတဲ့ အခါက တစ္ခါတေလက် မွားေနတတ္တယ္။က်ြန္ေတာ္တုိ့ ဒီပုိ့္စ္ မွာေတာ့ ဒီလုိျပသနာေတြပါ ရွင္းျပီး ဘယ္လုိ train ရမယ္ကုိ ျပသြားမွာပါ။

Project Structure

  • hand_written_recognition_training
    • dataset
      • digits.csv
    • output
    • pyrobocity
      • descriptor
        • __init__.py
        • hog.py
      • preprocessing
        • __Init__.py
        • center_extent.py
        • deskew.py
    • train.py

က်ြန္ေတာ္တုိ့ project structure ကုိၾကည့္မယ္ဆုိရင္ေတာ့ dataset folder ထဲမွာေတာ့ က်ြန္ေတာ္တုိ့  mnist dataset ကုိ ေတြ့ရမွာပါ။mnist က 28 x 28 ရွိတဲ့ Hand written digits ေတြကုိ သိမ္းထားတဲ့ dataset တစ္ခုျဖစ္ပါတယ္။အဲ့ေတာ့ က်ြန္ေတာ္တုိ့ ရဲ့ pyrobocity ဆုိတဲ့ folder ထဲမွာေတာ့

  1. Descriptor
  2. Preprocessing

ဆုိျပီး နွစ္ခု ရွိပါတယ္။က်ြန္ေတာ္ Descriptor ကိုမေျပာခင္ Preprocessingထဲက deskew ကေတာ့ က်ြန္ေတာ္တုိ့ လူေတြရဲ့ လက္ေရးေတြက ေစာင္းေနတာမ်ိဳးေတြ အဲ့တာေတြကုိရွင္းဖုိ့လုပ္ထားတာပါ။center_extent ကေတာ့ က်ြန္ေတာ္တုိ့ deskew နဲ့ေျဖရွင္းျပီးလုိ့ ရလာတဲ့ imageကုိ အလည္ကုိ ေသခ်ာေရာက္ေအာင္ျပန္ပုိ့ဖုိ့ပါ။

Descriptor ထဲက hog.py ကေတာ့ က်ြန္ေတာ္တုိ့ Preprocessing နဲ့ ရွင္းလုိ့ရတဲ့ image ထဲကေန feature ကုိထုတ္ယူဖုိ့ပါ။Machine learningက ကုိယ္တုိင္ feature ထုတ္ယူရပါတယ္။ဒီမွာ image descriptor ထဲက အဆင္ေျပတဲ့ Hog feature descriptor ကုိသုံးလုိက္ပါတယ္။ရလာတဲ့ Feature ေတြကုိ Machine Learningရဲ့ modelထဲမွာ traingလုိက္ယံုပါပဲ။လြယ္တယ္မဟုတ္လား။

အဲ့ေတာ့ က်ြန္ေတာ္တုိ့ preprocessingထဲက deskew.py ကုိၾကည့္ရေအာင္

က်ြန္ေတာ္တုိ့ deskew မွာေတာ့ image လည္ေနတာမ်ိုးေတြရွင္းမွာမုိ့လုိ့ line 13 မွာ imageရဲ့ moments ကုိရယူျပီး line 16 ကေန 20 ထိ လည္ေနတဲ့ ဟာကိုတြက္ျပီး ျပန္ျပီး အတည့္ျဖစ္ေအာင္ လုပ္လုိက္ပါတယ္။cv2.warpAffineက ဥပမာ အားျဖင့္ Image translation မွာ သုံးပါတယ္။image ကုိေရြ့ခ်င္တာမိ်ုိးေပါ့။skew ထဲမွာ တန္ဖိုးေရာက္လာေတာ့ Mask နဲ့ ျပန္ျပီး ျပန္ျပီး x,y ေရြ့ေအာင္ ျပင္လုိက္ပါတယ္ M ထဲမွာ ျပီးေတာ့မွ warpAffine method ကုိ သုံးျပီး လည္ေနတာကုိ တကယ္ျပန္ျပီး Fix လုပ္လုိက္ပါတယ္။ျပီးေတာ့မွ imageကုိ resize လုပ္ျပီးျပန္ေပးလုိက္ပါတယ္။

အခု Basic အပုိင္းေလးေတြကုိ နားမလည္လုိ့ စိတ္မပူပါနဲ့ က်ြန္ေတာ္လဲ ၾကဳံခဲ့ဖူးတာမုိ့ပါ။မိတ္ေဆြ basic ကစေလ့လာခ်င္တယ္ဆုိ page ကို ဆက္သြယ္ျပီး ေျပာေပးပါ။က်ြန္ေတာ္လုိအပ္တယ္ဆုိ Basic Course လုပ္ေပးမွာပါ။

အခု ျပန္ရလာတဲ့ image ကုိ တကယ္ hog feature describe လုပ္တဲ့ အခါ ပုိေကာင္းေအာင္ center ကုိ ျပန္ပုိ့ရမယ့္အဆင့္ပါ။

က်ြန္ေတာ္တုိ့ line ၁၂ ကေန ၂၁ ထိက Aspect ratio နဲ့ Image resize လုပ္တာပါ အဲ့လုိမလုပ္ဘူးဆုိရင္ ထြက္လာတဲ့ပုံက အဆင္မေျပပါဘူး။ျပီးေတာ့ numpy ကုိ အသုံးျပဳျပီး Image နဲ့ height နဲ့ width အတုိင္း zeros ေတြထားလုိက္ပါတယ္။matlab မွာလဲ ဒီလုိ function ေတြရွိျပီးသားပါ။အဲ့ေတာ့ Image တစ္ခုရဲံ datatype က uint8 ပါ unsigned integerေပါ့ေနာ္။အဲ့ေတာ့ ရလာတဲ့ ပုံက zerosေတြခ်ည္းျဖစ္တဲ့အတြက္ black ပုံတစ္ခုရလာမွာပါ။

က်ြန္ေတာ္တုိ့ line 32 to 35 မွာ extent ထဲေရာက္ေနတဲ့ပုံကုိ center ကုိ ျပန္ေရြွ့တာပါ။center_of_mass ကုိ opencv နဲ့လဲ လုပ္လုိ့ရေပမယ့္ Mahotas ကုိသုံးေတာ့ အလြယ္တကူျပီးသြားပါတယ္။ေနာက္တစ္ဆင့္အေနနဲ့ေတာ့ preproecessing လုပ္လို့ရလာတဲ့ imageကုိ feature ထုတျ္ပီး train ဖုိ့ပဲ က်န္ပါေတာ့တယ္။

က်ြန္တာ္တုိ့ ရဲံ Feature descriptor ျဖစ္တဲ့ Hog class ကို တစ္ခ်က္ၾကည့္ရေအာင္

က်ြန္ေတာ္ဒီမွာ ရွင္းစရာေတာ့အမ်ားၾကီးမရွိပါဘူး။ပုိျပီးသိခ်င္ရင္ ဒီ skimage-hog  ကေန သြားဖတ္နုိင္ပါတယ္။Hog Feature describe လုပ္ျပီး ရလာတဲ့ Histogram ကုိ က်ြန္ေတာ္တုိ့ train data ထဲ ထည့္ျပီး train ယံုပါပဲ။

Training Script

အခု ဆုိရင္ေတာ့ အားလုံးကုိေပါင္းျပီး train ရမွာပါ။က်ြန္ေတာ္တုိ ့line 20 ကေန 22 ထိ data ကုိ ဖတ္ျပီး label နဲ့ dataကုိခြဲပါတယ္။data ရဲ့ ေ၇ွ့ဆုံးcolumn က label ေတြ ဥပမာ 1,2,3 ခ်ညး္ပဲျဖစ္ျပီး ေနာက္ကေတာ့ image data ေတြပါ။က်ြန္ေတာ္တုိ့ train တဲ့အခါ Image data နဲ့ label ကုိ တြဲျပီး trainတဲ့အတြက္ က်ြန္ေတာ္တုိ ့predictလုပ္တဲ့အခါ hist က trainထားတဲ့ထဲက အတူဆုံးရဲ့ labelကုိျပပါတယ္။ဥပမာ က်ြန္ေတာ္ထည့္လုိက္တဲ့ Imageက ၁နဲ့တူသလားဆုိတာ trainထားတဲ့ histနဲ့ သြားတုိက္ျပီး labelကုိ ထုတ္ေပးတာပါ။

က်ြန္ေတာ္ေျပာခဲ့တဲ့အတုိင္း deskew,centerextent,hog,train ဆုိတဲ့အဆင့္တုိင္း line 23 to line 38ထိလုပ္ျပီး line 39မွာ train_data ထဲကုိ ထည့္ပါတယ္။အဲ့ေတာ့ က်ြန္ေတာ္တုိ့ train dataထဲမွာ extract လုပ္ထားတဲ့ feature ေတြရွိေနပါျပီ။ျပီးေတာ့ svm ရဲ့  LinearSVC modelထဲမွာ train_data ရယ္ targetရယ္ကုိ ထည့္ျပီး trainလုိက္ပါတယ္။

Line 48 မွာ က်ြန္ေတ္ာတုိ့ trainထားတဲ့ model ကုိ output directory ထဲကုိ ျပန္ေရးထည့္လုိက္ပါတယ္။ဒါမွ ေနာက္က်ျပန္သုံးလုိ့ရမွာပါ။Line 50 ကေန 57 ကေတာ့ ေသခ်ာျမင္ရေအာင္ ျပန္စမ္းျပတာပါ။က်ြန္ေတာ္တုိ့ ေအာက္မွာ code file downloadလုပ္လုိ့ရပါတယ္။

ေနာက္ဆုံး Final run မယ္ဆုိရင္ေတာ့ ေအာက္ပါအတုိင္း run နုိင္ပါတယ္။

python3 train.py –model output/svm.cpickle –dataset dataset/digits.csv

Download:

1.Email ကုိ subscribe လုပ္ေပးပါ

2.Inbox,promotions tab,spam tab ေတြထဲမွာ က်ြန္ေတာ္တုိ့ ဆီက confirmation mailကုိစစ္ျပီး confirm လုပ္ေပးပါ။

3.Confirm လုပ္ျပီးတာနဲ့ code file download mailကုိ ပုိ့ေပးပါလိမ့္မယ္။Promotions tab,inbox,spam tabထဲမွာစစ္ေပးပါ။အကယ္လုိ့ Spam folder ထဲေရာက္ေနရင္ေတာ့ က်ြန္ေတ္ာ့mail address ျဖစ္တဲ့ sithuphyo@pyrobocity.orgကုိ  whitelist or contact list ထဲထည့္ေပးပါ။ေက်းဇူးတင္ပါတယ္။

 

Subscribe to our mailing list

* indicates required


Share:

Leave a Reply