Სარჩევი:

ჟოლო Pi 4 საგზაო ნიშნის ამოცნობის რობოტი: 6 ნაბიჯი
ჟოლო Pi 4 საგზაო ნიშნის ამოცნობის რობოტი: 6 ნაბიჯი

ვიდეო: ჟოლო Pi 4 საგზაო ნიშნის ამოცნობის რობოტი: 6 ნაბიჯი

ვიდეო: ჟოლო Pi 4 საგზაო ნიშნის ამოცნობის რობოტი: 6 ნაბიჯი
ვიდეო: ASSASSINS CREED REBELLION UNRELEASED UNPLUGGED UNSURE UNBELIEVABLE 2024, ნოემბერი
Anonim
Raspberry Pi 4 საგზაო ნიშნის ამოცნობის რობოტი
Raspberry Pi 4 საგზაო ნიშნის ამოცნობის რობოტი

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

მაგალითად, თუ მოტრიალების მარჯვენა ნიშანი აღიარებულია, მაშინ რობოტი მოუხვევს მარჯვნივ, თუ მოუხვევს მარცხენა ნიშანი, მაშინ რობოტი მოუხდება მარცხნივ, თუ არცერთი არ არის აღიარებული, მაშინ რობოტი განაგრძობს წინსვლას. მონაცემთა ნაკრები, რომელიც გამოყენებული იქნება, არის ოფიციალური საგზაო ნიშნის ამოცნობა INI– დან (2019) (Institut Fur Neuroinformatik), ამ მონაცემთა ნაკრებს აქვს 43 კლასი, თუმცა საჭიროა მხოლოდ ორი; მონაცემთა ნაკრებში 00033 და 00034 საქაღალდე არის მარცხენა და მარჯვენა მოსახვევის ნიშნები.

ნაბიჯი 1: მოთხოვნები

მოთხოვნები
მოთხოვნები
მოთხოვნები
მოთხოვნები
მოთხოვნები
მოთხოვნები

ამ პროექტის მოთხოვნები შემდეგია:

არდუინოს რობოტი. (ძირითადად arduino uno, ძრავის მძღოლი და ძრავები) (არ არის საჭირო თუ არ იყენებთ რობოტს)

ჟოლო პი 4.

პი კამერა.

საჭირო პროგრამული უზრუნველყოფა:

პითონი 3.

OpenCV 4.

Tensorflow.

arduino IDE (არ არის საჭირო, თუ არ იყენებთ რობოტს)

როსი (არ არის საჭირო, თუ რობოტს არ იყენებთ)

როგორიც არ უნდა იყოს თქვენი საყვარელი პითონის იდეა (ჟოლოს პიზე, მე ვიყენებ ტონს).

OpenCV და Tensorflow დასაყენებლად მიჰყევით ადრიანის მითითებებს. ბმული:

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

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

მატარებლის სკრიპტი შექმნილია მონაცემთა ბაზაში წვდომისათვის, რომელიც აერთიანებს დაახლოებით 50 000 სურათს 43 კლასიდან. სკრიპტი დაწერილია პითონში, სხვადასხვა ბიბლიოთეკების გამოყენებით: os - ეს არის პითონის სკრიპტის დასაკავშირებლად იმ სწორ დირექტორიასთან, სადაც მონაცემთა ნაკრები მდებარეობს. Matplotlib - ეს არის სასწავლო მოდელის მონაცემების ჩვენება. Tensorflow და keras - ეს არის ბიბლიოთეკები, რომლებიც გამოიყენება ხელოვნური ნერვული ქსელის მოდელის შესაქმნელად, ისინი გამოიყენება მოდელის შესაქმნელად. Numpy - ეს ბიბლიოთეკა არის სურათების მასივად გადაქცევისთვის, რომელიც შემდგომში შეიძლება მოდელის საშუალებით იქნას მიღებული პროგნოზის მისაღებად.

თანდართული სკრიპტი არის მონაცემთა ნაკრებიდან მოდელის დამზადების პითონის კოდი. ეს შედგება კონვოლუციური 2D (5, 5) შეყვანისა და რელუს გააქტიურებით შემდეგ გაერთიანებით, მას შემდეგ რაც ეს კეთდება შეყვანა გადის სხვა კონვოლუციაში (3, 3) შეყვანის იგივე გააქტიურებითა და გაერთიანებით. ეს ხდება ბოლოჯერ გაბრტყელებამდე და შემდეგ სიმკვრივე გამოიყენება კლასების რაოდენობაზე, ამ შემთხვევაში 43.

შემდეგი ნაბიჯი იყო მოდელის შედგენა. ეს არის ნაწილი, რომელიც ადგენს ოპტიმიზატორს, sgd იყო ყველაზე მორგებული, ვინაიდან ეს იყო მსგავსი დავალებაში გამოყენებული ოპტიმიზატორისა. Sgd ნიშნავს სტოქასტური გრადიენტის წარმოშობას. ასევე შემდგენლის შიგნით საჭიროა ზარალის დადგენა, იშვიათი_კატეგორიული_კროსენტროპიული ზარალის არჩევა საუკეთესოა, რადგან კატეგორიები არის მთელი რიცხვები და მოდელი გამოაქვეყნებს თითოეულ კლასს პროგნოზს, როგორც მცურავი 0 -დან 1.1 -მდე 100% სიზუსტით.

შემდგენლის დასრულების შემდეგ, გენერატორი უნდა იქნას გამოყენებული მოდელისთვის სურათის შეყვანის დამუშავების დასაწყებად. გენერატორი შედგება რამოდენიმე ნაწილისგან: training_set - ეს არის ტრენინგისთვის გამოყენებული მონაცემთა ნაკრები, ნაბიჯები_ per_epoch - ეს არის რიცხვითი ნაბიჯები თითო ეპოქაში, რომლებიც საჭიროა, ეპოქები - ეს არის რამდენჯერ გაიმეორებს პროგრამა მონაცემთა სრულ ნაკრებებს, validation_data - ეს არის ბმული გადამოწმებისათვის გამოყენებული მონაცემთა ნაკრებისთვის, validation_steps - ვალიდაციისათვის გამოყენებული ნაბიჯების რაოდენობა, ვალიდაცია ხდება ყოველი ეპოქის ბოლოს.

საერთოდ, მთლიანი მონაცემთა ნაკრების სრული გაწმენდა უნდა დასრულდეს ყოველ ეპოქაში. ასე რომ, მაგალითად, 1024 სურათის მონაცემთა ნაკრები მოითხოვს: სურათების ზომა = 32, ნაბიჯები ეპოქაში = 32, ეპოქები = 1. თითოეული საფეხური მოიცავს მთლიანი სურათების ზომას, ასე რომ 32 -იანი სურათის ზომა ნაბიჯები იქნება 32. მეორეს ხელით, უმჯობესია გქონდეთ უფრო დიდი პარტიის ზომა, ვიდრე კლასების რაოდენობა, ეს იმიტომ ხდება, რომ თუ სურათების ზომა უფრო მცირეა, თითოეული ნაბიჯი არ შეიძლება შეიცავდეს გამოსახულებას თითოეული კლასიდან.

მას შემდეგ რაც მოდელმა დაასრულა სწავლება, matplotlib– ის გამოყენებით პროგრამა გააკეთებს შედეგების გრაფიკს, ეს გვიჩვენებს სწავლების ისტორიას თავიდან ბოლომდე. გრაფიკი შედგება სიზუსტისგან, დადასტურების სიზუსტისგან, ზარალისგან და ვალიდაციის დაკარგვისგან, ეს არის გაყოფილი თითო ეპოქაში, რათა ნახოთ თუ როგორ მიმდინარეობდა სწავლება. დასკვნითი ეტაპი არის მოდელის შენახვა.h5 ფაილის სახით, რომელზე წვდომაც შემდგომში შესაძლებელია პროგნოზირების პროცესისთვის. მოდელის შენახვა ნიშნავს იმას, რომ ყოველ ჯერზე პროგნოზირების პროგრამა გაშვებულია, სასწავლო პროგრამას აღარ სჭირდება გაშვება. სასწავლო პროგრამას შეიძლება დასჭირდეს 10 წუთი ერთ ეპოქაზე ჟოლოს პიზე.

თან ერთვის სასწავლო სკრიპტი:

ნაბიჯი 3: Pi კამერის პროგნოზების განხორციელება

შემდეგი პროგრამა არის პროგნოზირების და გამომცემლის სკრიპტი.

პირველი ეტაპი არის მოდელის ჩატვირთვა model.load () გამოყენებით. მეორე ეტაპი არის pi კამერის ჩარჩოების გამეორება opencv გამოყენებით და შემდეგ ჩარჩოს ზომის შეცვლა იმავე ზომის, როგორც სასწავლო ეტაპზე გამოყენებული შეყვანის ზომები, 32 x 32 პიქსელი. მას შემდეგ რაც ეს მოხდება ახალი ზომის შეცვლა ხდება მოდელის გამოყენებით მოდელით. პირველი ელემენტი არის კლასი პირველი და რიცხვი არის პროგნოზი იმის შესახებ, თუ რამდენად დარწმუნებულია გამოსახულება ამ კლასიდან. Მაგალითად.

შენიშვნა: თუ თქვენ არ იყენებთ რობოტის მხარეს. უბრალოდ წაშალეთ ხაზები:

"შემოტანა rospy"

def სპიკერი (მიმართულება):

შეტყობინება = სიმებიანი ()

pub = rospy. Publisher ('robot', String, queue_size = 10)

rospy.init_node ('მოსაუბრე', ანონიმური = ჭეშმარიტი)

შეტყობინება = მიმართულება

rospy.loginfo (შეტყობინება)

pub.publish (შეტყობინება)"

"მოსაუბრე (მიმართულება)"

ერთვის Pi კამერის სკრიპტი.

ნაბიჯი 4: Arduino Robot

ბოლო ნაბიჯი არის რობოტის პროგრამის სკრიპტი.

ეს არის დაწერილი C ++ და არის.ino ფაილი arduino uno– სთვის. პროგრამა მოითხოვს ros ბიბლიოთეკას, რომელიც შეგიძლიათ იხილოთ ბიბლიოთეკების მენეჯერში იდეის ფარგლებში. მას შემდეგ, რაც ეს იმპორტირდება, არის ფაილების მაგალითი, მე ავირჩიე გაფართოება led blink ფაილზე, რადგან ეს გააკეთებდა მსგავს მიზანს, რაც მჭირდებოდა. პროგრამა აგრძელებს მარყუჟს სანამ ძალა არ გათიშულია, პირველ რიგში ის უსმენს რობოტის თემას, როდესაც ის იჭერს ბრძანებას ამ თემიდან მას ექნება if განცხადება რომ ნახოთ რას ამბობს ბრძანება. თუ ბრძანება დარჩა, მაშინ სკრიპტი მუშაობს მარცხენა მოსახვევის მეთოდით, თუ ბრძანება სწორია, ის ატრიალებს მარჯვნივ შემობრუნების მეთოდს და სხვაგვარად გაუშვებს წინსვლის მეთოდს. ეს სამი მეთოდი ძალიან ჰგავს ერთმანეთს, ისინი ციფრულ ქინძისთავებს ეუბნებიან იყოს LOW (ადგილზე) ან 100 (PWM) ეს არის იმისთვის, რომ რობოტი არ იყოს ძალიან სწრაფი, როდესაც ეუბნება ძრავის მძღოლს მხოლოდ ცოტაოდენი ძაბვა გამოვიდა. ამ შედეგების თანმიმდევრობა არის ის, რაც რობოტს აქცევს მარცხნივ და მარჯვნივ ან წინ მიდის, ეს განპირობებულია ძრავებზე ძაბვის ორიენტაციით.

ერთვის arduino– ს.ino სკრიპტი.

ნაბიჯი 5: ტესტირება

ტესტირება
ტესტირება
ტესტირება
ტესტირება
ტესტირება
ტესტირება

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

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

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

ნაბიჯი 6: ყველა დამატებითი ფაილი

ყველა დამატებითი ფაილი
ყველა დამატებითი ფაილი

ზოგიერთი მათგანი იყო ტესტირების ფაილი, რომელიც მე შევქმენი გზაზე.

გირჩევთ: