Სარჩევი:

ობიექტის გამოვლენა Sipeed MaiX დაფებით (Kendryte K210): 6 ნაბიჯი
ობიექტის გამოვლენა Sipeed MaiX დაფებით (Kendryte K210): 6 ნაბიჯი

ვიდეო: ობიექტის გამოვლენა Sipeed MaiX დაფებით (Kendryte K210): 6 ნაბიჯი

ვიდეო: ობიექტის გამოვლენა Sipeed MaiX დაფებით (Kendryte K210): 6 ნაბიჯი
ვიდეო: Romulus Audiobook: Chapter 1 - Romulus' Roots: A Prelude to Rome's Tale | Makers of History Series 2024, ივლისი
Anonim
Image
Image

Sipeed MaiX დაფებით გამოსახულების ამოცნობის შესახებ ჩემი წინა სტატიის გაგრძელება, მე გადავწყვიტე დავწერო სხვა გაკვეთილი, რომელიც ორიენტირებული იქნებოდა ობიექტების გამოვლენაზე. ცოტა ხნის წინ Kendryte K210 ჩიპთან ერთად გამოჩნდა რამდენიმე საინტერესო ტექნიკა, მათ შორის Seeed AI Hat for Edge Computing, M5 stack's M5StickV და DFRobot's HuskyLens (თუმცა მას აქვს საკუთრების firmware და უფრო სრულყოფილია დამწყებთათვის). იაფი ფასის გამო, Kendryte K210 მიმართა ხალხს, რომელთაც სურთ კომპიუტერულ ხედვას დაამატონ მათი პროექტები. როგორც ყოველთვის, ჩინური ტექნიკის პროდუქტებთან ერთად, ტექნიკური მხარდაჭერა აკლია და ეს არის ის, რასაც მე ვცდილობ გავაუმჯობესო ჩემი სტატიებითა და ვიდეოებით. მაგრამ გახსოვდეთ, რომ მე არ ვარ Kendryte ან Sipeed დეველოპერების გუნდში და ვერ ვუპასუხებ მათ პროდუქტთან დაკავშირებულ ყველა კითხვას.

ამის გათვალისწინებით, დავიწყოთ! ჩვენ დავიწყებთ მოკლე (და გამარტივებული) მიმოხილვით, თუ როგორ მუშაობს ობიექტის ამოცნობის CNN მოდელები.

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

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

ნაბიჯი 1: ობიექტის გამოვლენის მოდელის არქიტექტურა ახსნილი

ობიექტის გამოვლენის მოდელის არქიტექტურა განმარტებულია
ობიექტის გამოვლენის მოდელის არქიტექტურა განმარტებულია
ობიექტის გამოვლენის მოდელის არქიტექტურა განმარტებულია
ობიექტის გამოვლენის მოდელის არქიტექტურა განმარტებულია

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

აქ არის, როდესაც ობიექტის გამოვლენის მოდელები გამოდგება. ამ სტატიაში ჩვენ ვიყენებთ YOLO (თქვენ მხოლოდ ერთხელ უყურებთ) არქიტექტურას და ყურადღებას გავამახვილებთ ამ კონკრეტული არქიტექტურის შიდა მექანიკაზე.

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

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

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

მოამზადეთ გარემო
მოამზადეთ გარემო

aXeleRate ემყარება მშვენიერ პროექტს penny4860, SVHN yolo-v2 ციფრული დეტექტორი. aXeleRate ატარებს კერასში YOLO დეტექტორის ამ დანერგვას მომდევნო დონეზე და იყენებს მის მოსახერხებელ კონფიგურაციურ სისტემას, რათა განახორციელოს გამოსახულების ამოცნობის/ობიექტების გამოვლენისა და გამოსახულების სეგმენტაციის ქსელების სწავლება და გარდაქმნა სხვადასხვა უკანა მხარეს.

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

PASCAL-VOC Object Detection Colab Notebook

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

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

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

conda create -n yolo python = 3.7

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

მდგომარეობა გააქტიურეთ იოლო

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

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

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

შემდეგ გაუშვით ეს სკრიპტების ჩამოსატვირთად, რომლებიც დაგჭირდებათ ტრენინგისა და დასკვნისათვის:

git კლონი

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

ნაბიჯი 3: მოამზადეთ ობიექტის აღმოჩენის მოდელი კერასით

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

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

დავიწყოთ სათამაშოების მაგალითით და მოვამზადოთ Raccoon დეტექტორი. /Config საქაღალდის შიგნით არის კონფიგურაციის ფაილი, raccoon_detector.json. ჩვენ ვირჩევთ MobileNet7_5 არქიტექტურას (სადაც 7_5 არის ალფა პარამეტრი Mobilenet– ის თავდაპირველი განხორციელებისა, აკონტროლებს ქსელის სიგანეს) და 224x224 როგორც შეყვანის ზომა. მოდით შევხედოთ კონფიგურაციის ყველაზე მნიშვნელოვან პარამეტრებს:

ტიპი არის მოდელის წინამორბედი - კლასიფიკატორი, დეტექტორი ან Segnet

- სრული იოლო - პაწაწინა იოლო - MobileNet1_0 - MobileNet7_5 - MobileNet5_0 - MobileNet2_5 - შეკუმშვა - VGG16 - ResNet50

წამყვანების შესახებ მეტი ინფორმაციისთვის წაიკითხეთ აქ

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

object_scale განსაზღვრავს რამდენად დაჯარიმდება ობიექტის პროგნოზირების ნდობის არასწორი პროგნოზი

no_object_scale განსაზღვრავს რამდენად დაჯარიმდება არაობიექტური პროგნოზების ნდობის არასწორი პროგნოზი

coord_scale განსაზღვრავს რამდენად ჯარიმდება არასწორი პოზიციისა და ზომის პროგნოზები (x, y, w, h)

class_scale განსაზღვრავს რამდენად დაჯარიმდება არასწორი კლასის პროგნოზი

augumentation - სურათის დამატება, ზომის შეცვლა, გამოსახულების შეცვლა და დაბინდვა, რათა თავიდან იქნას აცილებული ზედმეტი მორგება და უფრო მეტი მრავალფეროვნება მონაცემთა ნაკრებში.

train_times, validation_times - რამდენჯერ უნდა გაიმეოროთ მონაცემთა ნაკრები. სასარგებლოა, თუ თქვენ გაქვთ დამატებითი დოკუმენტები

ჩართულია

first_trainable_layer - გაძლევთ საშუალებას გაყინოთ გარკვეული ფენები, თუ თქვენ იყენებთ წინასწარ გაწვრთნილ ფუნქციურ ქსელს

ახლა ჩვენ უნდა გადმოვწეროთ მონაცემთა ნაკრები, რომელიც მე გავაზიარე ჩემს Google Drive- ში (ორიგინალური მონაცემთა ნაკრები), რომელიც არის რაკონის ამოცნობის მონაცემთა ნაკრები, რომელიც შეიცავს 150 ანოტირებულ სურათს.

დარწმუნდით, რომ შეცვალეთ კონფიგურაციის ფაილში არსებული ხაზები (train_image_folder, train_annot_folder) და შემდეგ დაიწყეთ ტრენინგი შემდეგი ბრძანებით:

python axelerate/train.py -c configs/raccoon_detector.json

train.py კითხულობს კონფიგურაციას.json ფაილიდან და ამზადებს მოდელს axelerate/network/yolo/yolo_frontend.py სკრიპტით. yolo/backend/loss.py არის იქ, სადაც ხორციელდება პერსონალური ზარალის ფუნქცია და yolo/backend/network.py არის ადგილი, სადაც იქმნება მოდელი (შეყვანა, ფუნქციის ამომყვანი და გამოვლენის ფენები ერთად). axelerate/networks/common_utils/fit.py არის სკრიპტი, რომელიც ახორციელებს სასწავლო პროცესს და axelerate/networks/common_utils/feature.py შეიცავს ფუნქციის გამყვანებს. თუ თქვენ აპირებთ გამოიყენოთ გაწვრთნილი მოდელი K210 ჩიპით და Micropython firmware– ით, მეხსიერების შეზღუდვების გამო შეგიძლიათ აირჩიოთ MobileNet (2_5, 5_0 და 7_5) და TinyYolo– ს შორის, მაგრამ მე აღმოვაჩინე, რომ MobileNet იძლევა გამოვლენის უკეთეს სიზუსტეს.

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

ნაბიჯი 4: გადააკეთეთ იგი.kmodel ფორმატში

გადააკეთეთ იგი.kmodel ფორმატში
გადააკეთეთ იგი.kmodel ფორმატში

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

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

ახლა ბოლო საფეხურზე, ფაქტობრივად, ჩვენი მოდელის გაშვება Sipeed აპარატურაზე!

ნაბიჯი 5: გაუშვით Micropython Firmware

გაუშვით Micropython Firmware
გაუშვით Micropython Firmware

შესაძლებელია დასკვნის გაკეთება ჩვენი ობიექტის გამოვლენის მოდელთან ერთად C კოდით, მაგრამ მოხერხებულობისთვის ჩვენ ვიყენებთ Micropython firmware- ს და MaixPy IDE- ს ნაცვლად.

ჩამოტვირთეთ MaixPy IDE აქედან და micropython firmware აქედან. თქვენ შეგიძლიათ გამოიყენოთ პითონის სკრიპტი kflash.py ფირმის ჩასაწერად ან გადმოწეროთ ცალკე GUI ფლეშ ინსტრუმენტი აქ.

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

ამოცანა = kpu.load (0x200000)

რათა

ამოცანა = kpu.load ("/sd/model.kmodel")

გახსენით MaixPy IDE და დააჭირეთ დაკავშირების ღილაკს. გახსენით raccoon_detector.py სკრიპტი example_scripts/k210/detector საქაღალდედან და დააჭირეთ ღილაკს დაწყება. თქვენ უნდა ნახოთ კამერის პირდაპირი ნაკადი ყუთებით შემოსაზღვრული … ასევე, ენოტები. თქვენ შეგიძლიათ გაზარდოთ მოდელის სიზუსტე მეტი ტრენინგის მაგალითის მიწოდებით, მაგრამ გაითვალისწინეთ, რომ ეს არის ზღაპრული პატარა მოდელი (1.9 მ) და მას ექნება პრობლემები მცირე ზომის საგნების გამოვლენისას (დაბალი გარჩევადობის გამო).

ერთ -ერთი შეკითხვა, რომელიც მივიღე სურათების ამოცნობის შესახებ წინა სტატიის კომენტარებში არის ის, თუ როგორ გავაგზავნოთ გამოვლენის შედეგები UART/I2C– ით სხვა მოწყობილობებზე, რომლებიც დაკავშირებულია Sipeed– ის განვითარების დაფებთან. ჩემს github საცავში თქვენ ნახავთ სხვა სკრიპტის მაგალითს, raccoon_detector_uart.py, რომელიც (თქვენ მიხვდით) ამოიცნობს ენოტებს და აგზავნის შემაკავშირებელ ყუთების კოორდინატებს UART– ზე. გაითვალისწინეთ, რომ UART კომუნიკაციისთვის გამოყენებული ქინძისთავები განსხვავებულია სხვადასხვა დაფებიდან, ეს არის ის, რაც თქვენ უნდა შეამოწმოთ დოკუმენტაციაში.

ნაბიჯი 6: შეჯამება

Kendryte K210 არის მყარი ჩიპი კომპიუტერული ხედვისთვის, მოქნილი, თუმცა შეზღუდული მეხსიერებით. ჯერჯერობით, ჩემს გაკვეთილებში ჩვენ განვიხილეთ მისი გამოყენება საბაჟო ობიექტების ამოცნობის, პერსონალური ობიექტების გამოვლენისა და OpenMV კომპიუტერზე დაფუძნებული ზოგიერთი ამოცანის გასაშვებად. მე ნამდვილად ვიცი, რომ ის ასევე შესაფერისია სახის ამოცნობისთვის და ზოგიერთი ჩახუტებით უნდა იყოს შესაძლებელი გამოვლენისა და სურათის სეგმენტაციის გაკეთება (თქვენ შეგიძლიათ გამოიყენოთ aXeleRate სემანტიკური სეგმენტაციის მოდელის მოსამზადებლად, მაგრამ მე ჯერ არ განვახორციელო დასკვნა K210– ით) რა მოგერიდებათ დაათვალიეროთ aXeleRate საცავის საკითხები და გააკეთოთ PR, თუ ფიქრობთ, რომ არის გაუმჯობესება, რომლის წვლილიც შეგიძლიათ შეიტანოთ!

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

შემოსაზღვრული ყუთის ობიექტის დეტექტორები: გაგება YOLO, შენ მხოლოდ ერთხელ გამოიყურები

გაგება YOLO (მეტი მათემატიკა)

ნაზი სახელმძღვანელო, თუ როგორ მუშაობს YOLO ობიექტის ლოკალიზაცია კერასთან (ნაწილი 2)

რეალურ დროში ობიექტების გამოვლენა YOLO, YOLOv2 და ახლა YOLOv3

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

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

გირჩევთ: