ეს არის ხელი? (Raspberry Pi კამერა + ნერვული ქსელი) ნაწილი 1/2: 16 ნაბიჯი (სურათებით)
ეს არის ხელი? (Raspberry Pi კამერა + ნერვული ქსელი) ნაწილი 1/2: 16 ნაბიჯი (სურათებით)
Anonim
ეს არის ხელი? (ჟოლო პი კამერა + ნერვული ქსელი) ნაწილი 1/2
ეს არის ხელი? (ჟოლო პი კამერა + ნერვული ქსელი) ნაწილი 1/2
ეს არის ხელი? (ჟოლო პი კამერა + ნერვული ქსელი) ნაწილი 1/2
ეს არის ხელი? (ჟოლო პი კამერა + ნერვული ქსელი) ნაწილი 1/2
ეს არის ხელი? (ჟოლო პი კამერა + ნერვული ქსელი) ნაწილი 1/2
ეს არის ხელი? (ჟოლო პი კამერა + ნერვული ქსელი) ნაწილი 1/2

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

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

ეს სტატია ასახავს იმას, რაც გამოვიდა.

სანამ დავიწყებ, მე მაქვს პასუხისმგებლობის შეზღუდვა-

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

Დავიწყოთ.

ნაბიჯი 1: ვიდეო

Image
Image

აქ არის პატარა 5 წუთიანი ვიდეო, რომელიც მოიცავს ყველა ნაბიჯს. Შეხედე.

ნაბიჯი 2: აპარატურა

ტექნიკა
ტექნიკა

მე დავაყენე ჟოლოს პი ერთად ჟოლოს პი კამერა სიმაღლეზე დაახლოებით 45 სმ. ეს გვაძლევს მონიტორინგის არეს დაახლოებით 25x25 სმ კამერის ქვეშ.

ჟოლოს პი და ჟოლოს პი კამერა ადვილად ხელმისაწვდომია, უბრალოდ google- ში და უნდა შეძლოთ ადგილობრივი მაღაზიის პოვნა.

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

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

ნაბიჯი 3: კოდის ნაჭერი

კოდის ნაჭერი
კოდის ნაჭერი
კოდის ნაჭერი
კოდის ნაჭერი

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

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

ნაბიჯი 4: სურათების მიღება

სურათების მიღება
სურათების მიღება

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

sudo raspistill -w 640 -h 480 -rot 90 -t 250000 -t1 5000 -o frame%04d.jpg

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

160 სურათის გარდა, მე კიდევ 20 სურათი გადავიღე, რომ ჩვენი ქსელი გაწვრთნილიყო.

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

ნაბიჯი 5: გამოყენებული ინსტრუმენტები და ენა

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

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

ნაბიჯი 6: მონაცემთა ნაკრების მომზადება ტრენინგისთვის

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

პირველი (სურათი #1) მე შევიტანე ამ პროექტისათვის საჭირო ყველა ბიბლიოთეკა, რომელიც მოიცავს PIL, matplotlib, numpy, os და Keras. პითონის რვეულის მეორე უჯრედში (სურათი #2) მე ვადგენ მონაცემთა ნაკრების გზებს და ვბეჭდავ ნიმუშის რაოდენობას. ახლა ჩვენ უნდა ჩავტვირთოთ ყველა სურათი დაბუჟებულ მასივში, შესაბამისად მესამე უჯრედში (სურათი #2) მე შევქმენი numpy მასივი 82 (ხელის ნიმუშის რაოდენობა) +75 (არა ხელის ნიმუშის რაოდენობა) ანუ 157x100x100x3. 157 არის სურათების მთლიანი რაოდენობა, რაც მე მაქვს, 100x100 არის ჩვენი ზომის გამოსახულების განზომილება და 3 გამოსახულია წითელი, მწვანე და ლურჯი ფერის ფენებისთვის.

მეოთხე და მეხუთე უჯრედში ჩვენ ვტვირთავთ სურათებს, რომლებიც შეიცავს ხელებს, რასაც მოყვება სურათები, რომლებიც არ შეიცავს ხელს მობუზულ მასივში. მეექვსე უჯრედში, ჩვენ ვყოფთ თითოეულ მნიშვნელობას 255 -ზე, რაც ზღუდავს მნიშვნელობის დიაპაზონს 0 -დან 1 -მდე (სურათი #3)

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

მოძრაობს თან.

შემდეგი ჩვენ უნდა დავნიშნოთ თითოეული სურათი, ასე რომ, ჩვენ ვქმნით ერთ განზომილებიან numpy მასივს 157 სიგრძით. პირველი 82 ჩანაწერი დაყენებულია 1 -ზე და დანარჩენი 75 ჩანაწერი არის 0 -ზე გადაცემის ნერვული ქსელი, რომლითაც პირველი 82 სურათი არის ერთი კლასიდან და დანარჩენი არის მეორედან. (სურათი #4)

ახლა მოდით შევქმნათ ნერვული ქსელი.

ნაბიჯი 7: ნერვული ქსელი

Ნერვული ქსელი
Ნერვული ქსელი
Ნერვული ქსელი
Ნერვული ქსელი

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

ნაბიჯი 8: ნერვული ქსელის სწავლება

ტრენინგი ნერვული ქსელი
ტრენინგი ნერვული ქსელი

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

ნაბიჯი 9: ნერვული ქსელის ტესტირება

ნერვული ქსელის ტესტირება
ნერვული ქსელის ტესტირება

მას შემდეგ რაც ნერვული ქსელი გაწვრთნილი იქნება, ჩვენ უნდა მოვამზადოთ ტესტის მონაცემთა ნაკრები. ჩვენ ვიმეორებთ მე –3, მე –4, მე –5 და მე –6 უჯრედებში ტრენინგის კომპლექტის მომზადების პროცედურას ტესტის მონაცემებზე ტესტის ნაკრების შესაქმნელად. ჩვენ ასევე ვამზადებთ ლეიბლს ტესტის ნაკრებისთვის, მაგრამ ამჯერად ჩვენ ვაყენებთ მოდელს ამ მონაცემთა ნაკრებზე პროგნოზების მისაღებად და არა ვარჯიშისთვის.

ნაბიჯი 10: შედეგი და შემდეგი ნაწილი…

შედეგი და შემდეგი ნაწილი …
შედეგი და შემდეგი ნაწილი …

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

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

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

ყველა შეკითხვა მისასალმებელია.

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

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

შესწორება:- შემდეგი ნაბიჯები არის მეორე ნაწილისთვის.

ნაბიჯი 11: ობიექტის გამოვლენა

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

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

ნაბიჯი 12: ვიდეო

Image
Image

3 წუთიანი ვიდეო, რომელიც ხსნის ყველა დანარჩენ ნაბიჯს. Შეხედე.

ნაბიჯი 13: მარკირება

მარკირება
მარკირება
მარკირება
მარკირება
მარკირება
მარკირება

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

Csv ფაილის თანდართული სურათი შეიცავს ეტიკეტს თითოეული სურათისთვის. გთხოვთ გაითვალისწინოთ, რომ კოორდინატები ნორმალიზდება გამოსახულების განზომილებით, ანუ თუ ზედა X კოორდინატი არის სურათზე 320 -ე პიქსელზე, რომლის სიგანე 640 პიქსელია, ჩვენ მას 0.5 -ს შევაფასებთ.

ნაბიჯი 14: მარკირება GUI

მარკირების GUI
მარკირების GUI
მარკირების GUI
მარკირების GUI
მარკირების GUI
მარკირების GUI
მარკირების GUI
მარკირების GUI

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

ნაბიჯი 15: საჭიროა ბიბლიოთეკები

საჭიროა ბიბლიოთეკები
საჭიროა ბიბლიოთეკები
საჭიროა ბიბლიოთეკები
საჭიროა ბიბლიოთეკები
საჭიროა ბიბლიოთეკები
საჭიროა ბიბლიოთეკები

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

  • PIL გამოსახულების მანიპულირებისთვის,
  • matplotlib შეთქმულებისათვის,
  • numpy for matrix ოპერაცია,
  • OS ოპერაციული სისტემაზე დამოკიდებული ფუნქციონირებისთვის და
  • კერა ნერვული ქსელისთვის.

ნაბიჯი 16: დარჩენილი უჯრედები

დარჩენილი უჯრედები
დარჩენილი უჯრედები
დარჩენილი უჯრედები
დარჩენილი უჯრედები
დარჩენილი უჯრედები
დარჩენილი უჯრედები
დარჩენილი უჯრედები
დარჩენილი უჯრედები

მე -2, მე -3, მე -4 და მე -5 უჯრედში ჩვენ ჩავტვირთავთ სურათებს numpy მასივში და ვქმნით ოთხგანზომილებიან მასივს csv ფაილიდან, რომ ვიმოქმედოთ როგორც ლეიბლები. მე –6 უჯრედში ჩვენ ვქმნით ჩვენს ნერვულ ქსელს. მისი არქიტექტურა კლასიფიკაციისათვის გამოყენებული ნერვული ქსელის იდენტურია, გარდა გამომავალი ფენის განზომილებისა, რომელიც არის 4 და არა 1. სხვაობა მოდის დაკარგვის ფუნქციასთან, რაც ნიშნავს საშუალო კვადრატულ შეცდომას. მე –8 უჯრედში ჩვენ ვიწყებთ ტრენინგს ჩვენი ნერვული ქსელის შემდეგ, როცა გავწვრთნე, მე ეს მოდელი გამოვიყენე საცდელ ჯგუფში, რათა მივიღო პროგნოზები, რომ შემოსაზღვრული ყუთი შემოსაზღვრული ყუთის კოორდინატებზე საკმაოდ ზუსტი ჩანდა.

Მადლობა წაკითხვისთვის.

გირჩევთ: