Mục lục:

Robot nhận dạng biển báo giao thông Raspberry Pi 4: 6 bước
Robot nhận dạng biển báo giao thông Raspberry Pi 4: 6 bước

Video: Robot nhận dạng biển báo giao thông Raspberry Pi 4: 6 bước

Video: Robot nhận dạng biển báo giao thông Raspberry Pi 4: 6 bước
Video: Final Project 11: Traffic Sign Recognition - Nhận dạng biển báo giao thông 2024, Tháng mười một
Anonim
Robot nhận dạng biển báo giao thông Raspberry Pi 4
Robot nhận dạng biển báo giao thông Raspberry Pi 4

Hướng dẫn này dựa trên dự án đại học của tôi. Mục đích là tạo ra một hệ thống trong đó mạng nơ-ron phân tích một hình ảnh và sau đó dựa trên sự nhận dạng sẽ ra lệnh cho một robot arduino di chuyển qua Ros.

Ví dụ: nếu nhận ra biển báo rẽ phải thì rô bốt sẽ rẽ phải, nếu nhận biết biển báo rẽ trái thì rô bốt sẽ rẽ trái, nếu không nhận dạng được thì rô bốt sẽ tiếp tục đi về phía trước. Tập dữ liệu sẽ được sử dụng là nhận dạng biển báo giao thông chính thức từ INI (2019) (Institut Fur Neuroinformatik), tập dữ liệu này có 43 lớp tuy nhiên chỉ cần hai lớp; Các thư mục 00033 và 00034 trong tập dữ liệu là các biển báo rẽ trái và rẽ phải.

Bước 1: Yêu cầu

Yêu cầu
Yêu cầu
Yêu cầu
Yêu cầu
Yêu cầu
Yêu cầu

Các yêu cầu đối với dự án này là:

Một robot arduino. (về cơ bản là arduino una, trình điều khiển động cơ và động cơ) (không cần thiết nếu bạn không sử dụng rô bốt)

Một số pi 4 quả mâm xôi.

Một máy ảnh pi.

Phần mềm yêu cầu:

Python 3.

OpenCV 4.

Dòng chảy căng.

arduino IDE (không cần thiết nếu bạn không sử dụng rô bốt)

Ros (không cần thiết nếu bạn không sử dụng rô bốt)

Dù lý tưởng python yêu thích của bạn là gì (Trên pi mâm xôi, tôi sử dụng Thonny).

Để thiết lập OpenCV và Tensorflow, hãy làm theo hướng dẫn của Adrian. Liên kết:

Tôi khuyên bạn nên xem càng nhiều hướng dẫn của anh ấy càng tốt, chúng thực sự thú vị và hữu ích cho người mới bắt đầu cũng như người trung gian.

Bước 2: Đào tạo dữ liệu

Tập lệnh tàu được thiết kế để truy cập tập dữ liệu bao gồm khoảng 50, 000 hình ảnh từ 43 lớp. Tập lệnh được viết bằng python, sử dụng nhiều thư viện: os - đây là để liên kết tập lệnh python với đúng thư mục chứa tập dữ liệu. Matplotlib - đây là để hiển thị dữ liệu từ mô hình đào tạo. Tensorflow và keras - đây là những thư viện được sử dụng để tạo mô hình mạng nơron nhân tạo, chúng được sử dụng để thiết kế mô hình. Numpy - thư viện này dùng để chuyển hình ảnh thành một mảng sau đó có thể được đưa vào mô hình để lấy ra một dự đoán.

Tập lệnh đính kèm là mã python để tạo mô hình từ tập dữ liệu. Điều này bao gồm trên 2D tích chập với đầu vào (5, 5) và kích hoạt relu sau đó gộp lại, khi điều này được thực hiện, đầu vào sẽ chuyển qua một tích chập khác với đầu vào (3, 3) với cùng một kích hoạt và tổng hợp. Điều này xảy ra lần cuối trước khi được làm phẳng và sau đó mật độ được áp dụng cho số lượng các lớp ở đó, trong trường hợp này là 43.

Bước tiếp theo là biên dịch mô hình. Đây là phần thiết lập bộ tối ưu, một sgd là phù hợp nhất vì nó tương tự như bộ tối ưu được sử dụng trong bài tập 1. Sgd là viết tắt của Stochastic gradient descent. Ngoài ra trong trình biên dịch, tổn thất cần được đặt, việc chọn tổn thất precision_categorical_crossentropy là cách phù hợp nhất vì các danh mục ở dạng số nguyên và mô hình sẽ xuất ra dự đoán cho mỗi lớp dưới dạng phao từ 0 đến 1. 1 là độ chính xác 100%.

Khi trình biên dịch hoàn tất, một trình tạo cần được áp dụng cho mô hình để bắt đầu xử lý đầu vào hình ảnh. Trình tạo bao gồm nhiều phần: training_set - đây là liên kết đến tập dữ liệu được sử dụng để đào tạo, steps_per_epoch - đây là số bước trên mỗi kỷ nguyên được yêu cầu, kỷ nguyên - đây là số lần chương trình sẽ lặp lại qua một bộ dữ liệu đầy đủ, validation_data - đây là liên kết đến tập dữ liệu được sử dụng để xác thực, validation_steps - số bước được sử dụng để xác nhận, xác nhận xảy ra ở cuối mỗi kỷ nguyên.

Nói chung, quá trình xóa hoàn toàn toàn bộ tập dữ liệu cần phải hoàn tất theo từng kỷ nguyên. Do đó, ví dụ, một tập dữ liệu gồm 1024 hình ảnh sẽ yêu cầu: Kích thước lô = 32, Số bước trên mỗi kỷ nguyên = 32, kỷ nguyên = 1. Mỗi bước bao gồm toàn bộ kích thước lô, vì vậy với kích thước lô là 32, các bước sẽ là 32. Mặt khác tay, tốt nhất nên có kích thước lô lớn hơn số lớp, điều này là do nếu kích thước lô nhỏ hơn thì mỗi bước không thể bao gồm một hình ảnh từ mỗi lớp.

Khi mô hình đã kết thúc quá trình huấn luyện, sử dụng matplotlib, chương trình sẽ tạo một biểu đồ của các kết quả đầu ra, điều này cho thấy lịch sử của quá trình huấn luyện từ đầu đến cuối. Biểu đồ bao gồm độ chính xác, độ chính xác của xác nhận, mất mát và mất xác thực, điều này được chia nhỏ theo từng kỷ nguyên để hiển thị quá trình đào tạo diễn ra như thế nào. Giai đoạn cuối cùng là lưu mô hình dưới dạng tệp.h5 có thể được truy cập sau này cho quá trình dự đoán. Lưu mô hình có nghĩa là mỗi khi chương trình dự đoán được chạy, chương trình đào tạo không cần phải chạy lại. Chương trình đào tạo có thể mất tới 10 phút mỗi kỷ trên pi raspberry.

Đính kèm là tập lệnh Đào tạo:

Bước 3: Thực hiện dự đoán máy ảnh Pi

Chương trình tiếp theo là phần dự đoán và kịch bản nhà xuất bản.

Giai đoạn đầu tiên là tải mô hình bằng cách sử dụng model.load (). Giai đoạn thứ hai là lặp lại các khung hình từ máy ảnh pi bằng opencv và sau đó thay đổi kích thước khung hình thành kích thước giống với kích thước đầu vào được sử dụng trong giai đoạn đào tạo, 32 x 32 pixel. Khi điều này được thực hiện, khung thay đổi kích thước mới được đưa qua mô hình bằng cách sử dụng model.p Dự đoán () tạo ra một ma trận, mỗi phần tử của ma trận là một số thực từ 0 đến 1, chỉ số phần tử giống với lớp mà nó đại diện, do đó phần tử đầu tiên là lớp một và con số là dự đoán về độ chắc chắn của hình ảnh thuộc lớp đó. Ví dụ.

LƯU Ý: Nếu bạn không sử dụng phía rô bốt. Chỉ cần xóa các dòng:

"import rospy"

def talker (hướng):

message = String ()

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

rospy.init_node ('talker', nặc danh = True)

tin nhắn = hướng

rospy.loginfo (tin nhắn)

pub.publish (tin nhắn)"

"người nói chuyện (hướng)"

Kèm theo đó là script camera Pi.

Bước 4: Robot Arduino

Bước cuối cùng là tập lệnh chương trình robot.

Điều này được viết bằng C ++ và là một tệp.ino cho arduino una. Chương trình yêu cầu thư viện ros có thể được tìm thấy trong trình quản lý thư viện trong Ide. Khi điều này được nhập, có các tệp ví dụ, tôi đã chọn mở rộng trên tệp nhấp nháy dẫn vì điều này sẽ thực hiện một mục tiêu tương tự như những gì tôi cần. Chương trình tiếp tục lặp cho đến khi ngắt nguồn, đầu tiên nó lắng nghe robot chủ đề, khi bắt được lệnh từ chủ đề đó nó sẽ có câu lệnh if để xem câu lệnh đó nói gì. Nếu lệnh bên trái thì tập lệnh sẽ chạy phương thức rẽ trái, nếu lệnh bên phải thì tập lệnh sẽ chạy phương thức rẽ phải và nếu không, tập lệnh sẽ chạy phương thức chuyển tiếp. Ba phương pháp này rất giống nhau, chúng yêu cầu các chân kỹ thuật số là LOW (mặt đất) hoặc 100 (PWM), điều này là để robot không quá nhanh bằng cách yêu cầu trình điều khiển động cơ chỉ để một chút điện áp ra. Thứ tự của các đầu ra này là những gì làm cho robot quay trái và phải hoặc đi về phía trước, điều này là do sự định hướng của điện áp đi đến động cơ.

Đính kèm là tập lệnh.ino cho arduino.

Bước 5: Kiểm tra

Thử nghiệm
Thử nghiệm
Thử nghiệm
Thử nghiệm
Thử nghiệm
Thử nghiệm

Các hình ảnh đính kèm để dự án từ đầu đến cuối. Hình ảnh đầu tiên cho thấy quá trình đào tạo. Sau khi hoàn tất, bản in từ mô hình đã tạo sẽ được hiển thị. Hình ảnh thứ ba hiển thị một dự đoán từ kịch bản đào tạo. đây là giai đoạn cuối cùng của kịch bản đào tạo. Nếu bạn nhìn vào thư mục có tập lệnh đào tạo, một biểu đồ và mô hình đã được tạo. Biểu đồ sẽ giống như hình 4 ở đây, biểu đồ này cho thấy lịch sử của quá trình đào tạo từ đầu đến cuối.

Hình ảnh cuối cùng là khi đang chạy script camera pi, là một luồng trực tiếp từ camera pi. một dự đoán được thực hiện trên mỗi khung và dự đoán được in trong thiết bị đầu cuối. Khung hiển thị những gì máy ảnh đang nhìn thấy.

Đính kèm là báo cáo Đại học của tôi cho dự án này. Vui lòng đọc để biết thêm chi tiết của dự án.

Bước 6: Tất cả các tệp bổ sung

Tất cả các tệp bổ sung
Tất cả các tệp bổ sung

Một số trong số này là các tệp thử nghiệm tôi đã thực hiện trong quá trình thực hiện.

Đề xuất: