Სარჩევი:

სურათის ამოცნობა K210 დაფებით და Arduino IDE/Micropython: 6 ნაბიჯი (სურათებით)
სურათის ამოცნობა K210 დაფებით და Arduino IDE/Micropython: 6 ნაბიჯი (სურათებით)

ვიდეო: სურათის ამოცნობა K210 დაფებით და Arduino IDE/Micropython: 6 ნაბიჯი (სურათებით)

ვიდეო: სურათის ამოცნობა K210 დაფებით და Arduino IDE/Micropython: 6 ნაბიჯი (სურათებით)
ვიდეო: სურათის ამოცნობა GooGle_ს საშუალებით 2024, ივნისი
Anonim
Image
Image

მე უკვე დავწერე ერთი სტატია იმის შესახებ, თუ როგორ უნდა გაუშვათ OpenMV დემოები Sipeed Maix Bit– ზე და ასევე გავაკეთე ამ ობიექტთან ერთად ობიექტის გამოვლენის დემო ვიდეო. ხალხის მიერ დასმული მრავალი კითხვა არის ერთი - როგორ შემიძლია ამოვიცნო ობიექტი, რომლისთვისაც ნერვული ქსელი არ არის მომზადებული? სხვა სიტყვებით, თუ როგორ უნდა შექმნათ თქვენი საკუთარი სურათის კლასიფიკატორი და გაუშვათ იგი აპარატურის აჩქარებით.

ეს გასაგები კითხვაა, რადგან თქვენი პროექტისათვის თქვენ ალბათ არ გჭირდებათ ზოგიერთი ზოგადი ობიექტის ამოცნობა, როგორიცაა კატები და ძაღლები და თვითმფრინავები. გსურთ აღიაროთ რაიმე კონკრეტული, მაგალითად, ძაღლის ჯიში იმ ავტომატური შინაური ცხოველის კარისთვის, ან მცენარის სახეობა დასალაგებლად, ან ნებისმიერი სხვა გამავალი პროგრამა, რომელზეც შეგიძლიათ იფიქროთ!

მიმიხვდი! ამ სტატიაში მე გასწავლით თუ როგორ უნდა შექმნათ თქვენი პერსონალური გამოსახულების კლასიფიკატორი კერასში გადაცემის სწავლით, გადააკეთოთ გაწვრთნილი მოდელი.kmodel ფორმატში და გაუშვით Sipeed დაფაზე (შეიძლება იყოს ნებისმიერი დაფა, Bit/Dock ან Go) მიკროპითონის ან Arduino IDE. და მხოლოდ თქვენი ფანტაზია იქნება ზღვარი იმ ამოცანებზე, რომელთა შესრულებაც შეგიძლიათ ამ ცოდნით.

UPDATE MAY 2020: იმის დანახვა, თუ როგორ არის ჩემი სტატია და ვიდეო გამოსახულების ამოცნობის შესახებ K210 დაფებით, ჯერ კიდევ ძალიან პოპულარულია და YouTube- სა და Google- ის საუკეთესო შედეგებს შორის, მე გადავწყვიტე სტატიის განახლება, რათა შევიტანო ინფორმაცია AXeleRate, Keras დაფუძნებული AI ჩარჩოს შესახებ ზღვარი განვავითარე.

aXeleRate, არსებითად, დაფუძნებულია სკრიპტების კოლექციაზე, რომელიც მე გამოვიყენე გამოსახულების ამოცნობის/ობიექტების გამოვლენის მოდელების სწავლებისთვის - გაერთიანებულია ერთ ჩარჩოში და ოპტიმიზირებულია Google Colab– ზე მუშაობისთვის. უფრო მოსახერხებელია გამოსაყენებლად და უფრო თანამედროვე.

სტატიის ძველი ვერსიისთვის, თქვენ კვლავ შეგიძლიათ ნახოთ იგი steemit.com– ზე.

ნაბიჯი 1: CNN და სწავლების გადაცემა: ზოგიერთი თეორია

CNN და გადაცემის სწავლება: ზოგიერთი თეორია
CNN და გადაცემის სწავლება: ზოგიერთი თეორია

კონვოლუციური ნერვული ქსელები ან CNN არის ღრმა ნერვული ქსელების კლასი, რომელიც ყველაზე ხშირად გამოიყენება ვიზუალური გამოსახულების გასაანალიზებლად. ინტერნეტში ბევრი ლიტერატურაა ამ თემაზე და სტატიის ბოლო ნაწილში რამდენიმე ბმულს მოგცემთ. მოკლედ, თქვენ შეგიძლიათ წარმოიდგინოთ CNN როგორც ფილტრების სერია, რომელიც გამოიყენება გამოსახულებაზე, თითოეული ფილტრი ეძებს გამოსახულების კონკრეტულ მახასიათებელს - ქვედა კონვოლუციური ფენების მახასიათებლები, როგორც წესი, არის ხაზები და მარტივი ფორმები, ხოლო უფრო მაღალ ფენებზე - მახასიათებლები შეიძლება იყოს უფრო კონკრეტული, მაგ სხეულის ნაწილები, კონკრეტული ტექსტურები, ცხოველების თუ მცენარეების ნაწილები და ა.შ. ულვაში, ორი თვალი და შავი ცხვირი? კატა უნდა იყოს! მწვანე ფოთლები, ხის ტოტი? ჰგავს ხეს!

ვიმედოვნებ, რომ ახლავე მიიღეთ იდეა CNN– ის მუშაობის პრინციპზე. როგორც წესი, ღრმა ნერვულ ქსელს სჭირდება ათასობით სურათი და ვარჯიშის დრო (დამოკიდებულია ტექნიკაზე, რომელსაც იყენებთ ტრენინგისთვის), რათა შეიქმნას ფილტრები, რომლებიც სასარგებლოა თქვენთვის სასურველი ობიექტების ტიპების ამოცნობისთვის. მაგრამ არსებობს მალსახმობი.

მოდელს, რომელიც გაწვრთნილია მრავალი განსხვავებული ობიექტის (კატები, ძაღლები, საყოფაცხოვრებო ტექნიკა, ტრანსპორტი და სხვა) ამოცნობისთვის უკვე აქვს ბევრი სასარგებლო ფილტრი "შემუშავებული", ამიტომ ჩვენ არ გვჭირდება ის ძირითადი ფორმებისა და ნაწილების ამოცნობის შესასწავლად. ობიექტების კვლავ. ჩვენ შეგვიძლია უბრალოდ გადავარჯიშოთ ქსელის ბოლო რამდენიმე ფენა, რომ ამოიცნოს ჩვენთვის მნიშვნელოვანი ობიექტების კონკრეტული კლასები. ამას ეწოდება "სწავლის გადაცემა". თქვენ გჭირდებათ გაცილებით ნაკლები ტრენინგის მონაცემები და გამოთვალეთ დრო გადაცემის სწავლით, რადგან თქვენ ვარჯიშობთ მხოლოდ ქსელის ბოლო რამდენიმე ფენას, რომელიც შეიძლება შედგებოდეს რამდენიმე ასეული ნეირონისგან.

მშვენივრად ჟღერს, არა? ვნახოთ როგორ განვახორციელოთ იგი.

ნაბიჯი 2: მოამზადეთ თქვენი გარემო

მოამზადეთ თქვენი გარემო
მოამზადეთ თქვენი გარემო

AXeleRate– ის გამოყენების ორი გზა არსებობს: ადგილობრივად გაშვება Ubuntu აპარატზე ან Google Colab– ში. Google Colab– ში მუშაობისთვის გადახედეთ ამ მაგალითს:

გამოსახულების კლასიფიკაცია Colab Notebook

თქვენი მოდელის ადგილობრივად სწავლება და მისი ექსპორტი, რომელიც გამოიყენება აპარატურის აჩქარებით, ასევე ბევრად უფრო ადვილია.

ჩემი სამუშაო გარემო არის უბუნტუ 16.04, 64 ბიტიანი. თქვენ შეგიძლიათ გამოიყენოთ ვირტუალური მანქანა Ubuntu გამოსახულების გასაშვებად, რადგან ჩვენ არ გამოვიყენებთ GPU სასწავლო პროცესში. გარკვეული ცვლილებებით თქვენ ასევე შეგიძლიათ გაუშვათ სასწავლო სკრიპტი Windows- ზე, მაგრამ მოდელის კონვერტაციისთვის დაგჭირდებათ Linux სისტემის გამოყენება. ამრიგად, თქვენთვის სასურველი გარემო ამ გაკვეთილის შესასრულებლად არის Ubuntu 16.04, რომელიც მუშაობს მშობლიურ ან ვირტუალურ აპარატში.

დავიწყოთ მინიკონდას დაყენებით, რომელიც არის პითონის გარემოს მენეჯერი. ჩვენ შევქმნით იზოლირებულ გარემოს, ასე რომ ჩვენ შემთხვევით არაფერს შევცვლით თქვენი სისტემის პითონის გარემოში.

ჩამოტვირთეთ ინსტალერი აქ

ინსტალაციის დასრულების შემდეგ შექმენით ახალი გარემო:

conda შექმნა -n მლ პითონი = 3.7

გავააქტიუროთ ახალი გარემო

conda გააქტიურება მლ

თქვენი ბაშის გარსის წინარეფიქსი გამოჩნდება გარემოს სახელით, რაც მიუთითებს იმაზე, რომ თქვენ ახლა მუშაობთ ამ გარემოში.

ნაბიჯი 3: დააინსტალირეთ AXeleRate და გაუშვით ტესტები

დააინსტალირეთ AXeleRate და გაუშვით ტესტები
დააინსტალირეთ AXeleRate და გაუშვით ტესტები

დააინსტალირეთ aXeleRate თქვენს ადგილობრივ აპარატზე

pip დააინსტალირეთ git+https://github.com/AIWintermuteAI/aXeleRate

მაგალითების ჩამოსატვირთად გაუშვით:

git კლონი

თქვენ შეგიძლიათ აწარმოოთ სწრაფი ტესტები test_training.py– ით aXeleRate საქაღალდეში. ის განახორციელებს ტრენინგს და დასკვნას თითოეული მოდელის ტიპისთვის, შეინახავს და გარდაქმნის გაწვრთნილ მოდელებს. ვინაიდან ის მხოლოდ 5 ეპოქაში ვარჯიშობს და მონაცემთა ნაკრები ძალიან მცირეა, თქვენ ვერ შეძლებთ მიიღოთ სასარგებლო მოდელები, მაგრამ ეს სკრიპტი მხოლოდ შეცდომების არარსებობის შესამოწმებლად არის განკუთვნილი.

ნაბიჯი 4: გადაამზადეთ მოდელი, გადააკეთეთ Keras მოდელი.kmodel- ზე

გადაამზადეთ მოდელი, გადააკეთეთ კერასის მოდელი.kmodel
გადაამზადეთ მოდელი, გადააკეთეთ კერასის მოდელი.kmodel

ამ სათამაშოების მაგალითზე ჩვენ მოვამზადებთ მოდელს, რომ ამოიცნოს თოვლის ბაბუა და არდუინო უნო. ცხადია, თქვენ შეგიძლიათ აირჩიოთ სხვა კლასები. გადმოწერეთ მონაცემთა ნაკრები აქედან. შექმენით classifier.json ფაილის ასლი კონფიგურაციის საქაღალდეში, შემდეგ შეცვალეთ იგი შესაბამისად, ეკრანის სურათში კონფიგურაციის ფაილის მსგავსი - დარწმუნდით, რომ ტრენინგისა და დადასტურების საქაღალდეების გზა სწორია!

გაუშვით შემდეგი ბრძანება aXeleRate საქაღალდედან:

პითონი axelerate/train.py - c configs/santa_uno.json

დაიწყება ტრენინგი. თუ დადასტურების სიზუსტე (ჩვენი დადასტურების მეტრიკა) არ გაუმჯობესდება 20 ეპოქაში, ტრენინგი ნაადრევად შეჩერდება. ყოველ ჯერზე, როდესაც დადასტურების სიზუსტე უმჯობესდება, მოდელი ინახება პროექტის საქაღალდეში. ტრენინგის დასრულების შემდეგ, aXeleRate ავტომატურად გარდაქმნის საუკეთესო მოდელს განსაზღვრულ ფორმატებში - თქვენ შეგიძლიათ აირჩიოთ "tflite", "k210" ან "edgetpu".

ნაბიჯი 5: გაუშვით მოდელი Sipeed Maix Bit– ზე

გაუშვით მოდელი Sipeed Maix Bit– ზე
გაუშვით მოდელი Sipeed Maix Bit– ზე
გაუშვით მოდელი Sipeed Maix Bit– ზე
გაუშვით მოდელი Sipeed Maix Bit– ზე
გაუშვით მოდელი Sipeed Maix Bit– ზე
გაუშვით მოდელი Sipeed Maix Bit– ზე

მოდელის გაშვების ორი გზა არსებობს Sipeed Maix აპარატურაზე: მიკროპითონის firmware და Arduino IDE. მიკროპითონის აპარატურა უფრო ადვილია გამოსაყენებლად, მაგრამ ის იკავებს არსებული მეხსიერების მნიშვნელოვან ნაწილს, ამიტომ მოდელისთვის ნაკლები სივრცეა დარჩენილი. Arduino IDE არის ძირითადად C კოდი, რომელიც გაცილებით ეფექტურია და აქვს მცირე მეხსიერების კვალი. ჩემი მოდელი არის მხოლოდ 1.9 Mb, ამიტომ ორივე ვარიანტი მუშაობს მასზე. თქვენ შეგიძლიათ გამოიყენოთ 2.9 მბ მოდელი Micropython– ით, უფრო დიდი ზომისთვის თქვენ უნდა გაითვალისწინოთ Arduino IDE– ს გამოყენება.

ჩამოტვირთეთ OpenMV IDE აქედან და მინიმალური მიკროპითონის firmware აქედან.

ჩაწერეთ firmware kflash_gui ინსტრუმენტით. თქვენ ასევე შეგიძლიათ ჩაწეროთ გაწვრთნილი მოდელი, რომელიც ასევე ანათებს, როგორც ეს ნაჩვენებია სკრინშოტში. ან დააკოპირეთ ის SD ბარათზე (ამ შემთხვევაში. დააკოპირეთ.kmodel SD ბარათის ძირში და ჩადეთ SD ბარათი Sipeed Maix Bit– ში)

გახსენით OpenMV IDE და დააჭირეთ ღილაკს დაკავშირება. გახსენით santa_uno.py სკრიპტი example_scripts საქაღალდედან და დააჭირეთ ღილაკს დაწყება. თქვენ უნდა ნახოთ პირდაპირი სტრიმინგი კამერიდან და სერიული ტერმინალის გახსნისას თქვენ გახდებით გამოსახულების ამოცნობის უმაღლესი შედეგი ნდობის ქულით!

Arduino IDE– ით სარგებლობისთვის, ჯერ უნდა დაიცვას პროცედურა Arduino IDE– ში Sipeed დაფების დამატების, რაც აქ არის დოკუმენტირებული. თქვენი Arduino IDE ვერსია უნდა იყოს მინიმუმ 1.8.12. დაფების დამატების შემდეგ გახსენით mobilenet_v1_transfer_learning.ino ესკიზი და ატვირთეთ Sipeed Maix Bit– ში. შეცვალეთ მოდელის სახელი SD ბარათზე "მოდელი" (ან გააკეთეთ ასლი ამ სახელით). თქვენ შეგიძლიათ შეცვალოთ ეტიკეტის სახელები names.cpp. ის აჩვენებს კამერის პირდაპირ ნაკადს Sipeed Maix ეკრანზე გამოსახულების ამოცნობის საუკეთესო შედეგთან ერთად.

ნაბიჯი 6: დასკვნები

აქ არის კიდევ რამდენიმე მასალა CNN– ის თემაზე წასაკითხად და სწავლის გადასაცემად:

გადაცემის სწავლა Mobilenet- ისა და კერასის გამოყენებით სწავლების გადაცემის დიდი ახსნა, ეს სამეურვეო იყენებს ამ მუხლის კოდის შეცვლილ ვერსიას.

კატები და ძაღლები და კონვოლუციური ნერვული ქსელები განმარტავს საფუძვლებს CNN– ების უკან და ვიზუალიზაციას უკეთებს ზოგიერთ ფილტრს. კატებთან ერთად!

ივარჯიშეთ, გადაიყვანეთ, გაუშვით MobileNet Sipeed MaixPy– ზე და MaixDuino– ზე! სამეურვეო პროგრამა Sipeed– ისგან, თუ როგორ უნდა მოამზადოთ Mobilenet 1000 კლასი ნულიდან (არ არის გადაცემის სწავლა). შეგიძლიათ ჩამოტვირთოთ მათი წინასწარ მომზადებული მოდელი და სცადოთ!

ვიმედოვნებ, რომ თქვენ შეძლებთ გამოიყენოთ არსებული ცოდნა მანქანების ხედვის გასაოცარი პროექტების შესაქმნელად! თქვენ შეგიძლიათ შეიძინოთ Sipeed დაფები აქ, ისინი ერთ – ერთი ყველაზე იაფი ვარიანტია ML– სთვის, რომელიც ხელმისაწვდომია ჩაშენებულ სისტემებზე.

გირჩევთ: