3.5.4.1 Cài đặt Cuda , cuDNN
Việc cài đặt Cuda và cuDNN nhằm mục đích tận dụng gpu rời của máy tham gia vào việc đào tạo mô hình deep learning. Việc cài đặt và sử dụng cuda trên windows tương đối phức tạp do hạn chế về dòng card đồ họa hỗ trợ (của nvidia) cũng như sự kém tương thích giữa Cuda và cuDNN trên windows. Để đơn giản hóa vấn đề ta cài đặt các chương trình này trên ubuntu.
Đầu tiên thiết lập card đồ họa nvidia là mặc định, vào mục tìm kiếm chọn software and update chọn diver của nvidia và tiến hành reset máy
45 Hình 3.24: Thiết lập card nvidia là GPU mặc định
Sau đó ta tải phiên bản Cuda và cuDNN trên trang chủ của nvidia và cài đặt theo hướng dẫn (phiên bản tụi em sử dụng là Cuda 10.1 và cuDNN 7.5). Khi quá trình cài đặt hoàn tất gõ nvidia-smi để kiểm tra, nếu thông số tương tự như hình dưới thì quá trình cài đặt hoàn tất.
46 3.5.4.2 Cài đặt anaconda, Visual studio code
Tác dụng của Visual studio code tương tự như trên jetson nano. Tuy nhiên việc cài đặt trên hệ điều hành máy tính đơn giản hơn rất nhiều đối với cả Visual studio code và anaconda. Đối với anaconda, nó cho phép ta tạo nhiều môi trường với mỗi môi trường tương ứng với một phiên bản python và các gói phần mềm khác nhau. Các môi trường nay hoạt động độc lập với nhau. Điều này cho phép chúng ta so sanh ưu nhược điểm giữa các phiên bản khác nhau mà không lo bị xung đột tới những nền tảng đã được cài đặt cũng như tự do thử các gói chương trình mới.
Sau khi cài đặt anaconda ta thiết lập môi trường cũng như phiên bản cho python: - Bước 1: Mở cửa sổ terminal (linux) hoặc anaconda promt (Windows) và tạo môi trường : conda create -n <tên môi trường> python==3.6.9 . Việc sử dụng phiên bản python 3.6.x thay vì 3.7.x hoặc cao hơn là vì python 3.6.x có sự tương thích ổn định với phiên bản tensorflow 1.x thay vì tensorflow 2.x cho phiên bản python 3.7.x hoặc cao hơn.
- Bước 2: Tiến hành cài đặt các chương trình như trên jetson nano. Ngoài ra cài một số gói đặc thù cho việc đào tạo mô hình như keras (phiên bản 2.2.0) và scikit-learn - đào tạo mô hình deep learning trên keras.
3.5.4.3 Thiết lập cho học sâu hướng đối tượng
So với đào tạo mô hình deep learning qua keras thì việc đào tạo mô hình deep learning hướng đối tượng của tensorflow đòi hỏi nhiều thiết lập hơn. Tiến hành cài đặt tensorflow object detection api từ github( tụi em sử dụng phiên bản tf v1.13) như sau:
- Bước 1: Tải tập tin tensorflow từ github cho (linux) ( windows thì chỉ cần tải ngay trên trang web) :
git clone https://github.com/tensorflow/models/tree/r1.13.0 - Bước 2: Tải model zoo phù hợp với nhu cầu đào tạo.
- Bước 3: Thiết lập PYTHONPATH theo địa chỉ của tệp tensorflow vừa tải về Ví dụ: tệp được tải về được lưu trong thư mục tensorflow1. Đối với windows:C:\> set PYTHONPATH=C:\tensorflow1\models;C:\tensorflow1\models\research;C:\tensorflow1 \models\research\slim” đối với linux: “export
PYTHONPATH=home/tensorflow1/models;home/tensorflow1/models/research;tensorflo w1/model/research/slim”.
47
- Bước 4: Tiến hành biên dịch protobufs và chạy file setup.py. Truy cập thu mục research tiến hành chuyển đổi các file có đuôi .proto sang .py :” protoc object_detection/protos/*.proto --python_out=.” và tiến hành xây dưng và cài đặt “python setup.py build” và “python setup.py install”. vậy là quá trình cài đặt hoàn tất.
3.5.5 Lưu đồ giải thuật hệ thống
3.5.5.1 Nhận diện Lane
Lưu đồ chạy theo Lane:
48 Hình 3.27: Lưu đồ nhận diện và chạy theo lane (P2)
Khi đã có model đã được huấn luyện ở phần trước,ta sẽ dùng nó để nhận diện và điều khiển.Đầu tiên phải khởi tạo các thư viện cần thiết.Sau đó đọc model đã được huấn luyện vào chương trình.
Đọc ảnh đầu vào và tiến hành xử lý để phù hợp với model đã được huấn luyện.Đưa ảnh vào nhận diện,theo lưu đồ thì có 3 class ứng với thứ tự làn đường và góc quay.Nếu nhận diện class bằng 0 tương ứng với xe đi thẳng ,class bằng 1 thì xe sẽ rẻ phải tương úng với góc quay phải 60 độ,khi class bằng 2 thì tương ứng với góc quay trái 60 độ để xe có thể đi thẳng trở lại.Một số hình ảnh sau khi nhận diện bằng model huấn luyện:
49 Hình 3.28: Thẳng 1
50 3.5.5.2 Nhận diện biển báo Stop
Lưu đồ nhận diện biển báo:
51 Hình 3.31: Lưu đồ nhận diện biển báo Stop (P2)
Việc đầu tiên chúng ta cần phải khởi tạo các thư viện của Opencv để hỗ trợ cho việc thu thập dữ liệu.Tương tự phần trên sau khi lấy được ảnh đầu vào ta tiến hành chuẩn hóa theo lưu đồ giải thuật trên.
Đọc ảnh đầu vào và tiến hành xử lý giống với phần thu thập dữ liệu để phù hợp với model nhiện diện biển báo Stop đã được huấn luyện.Đưa ảnh vào nhận diện, khi nhận diện được biển báo Stop thì thuật toán sẽ vẽ một hình chữ nhật bao xung quanh biển báo để thông báo là đã xác định được vât.Sau đó diện tích của biển báo sẽ được tính toán theo đơn
52
vị là pixel,khi diện tích biển báo lớn hơn giá trị cho phép thì tính hiệu sẽ được truyền xuống để dừng xe,còn ngược lại khi diện tích biển báo nhỏ hơn chứng tỏ xe chưa đến vị trí cần dừng lại thì xe vẫn xe đi thẳng.
53 3.5.6 Giao diện lập trình
3.5.6.1 Giao diện lập trình xử lý ảnh lane và biển báo
Để có thể lập trình cũng như xây dựng hệ thống xử lý ảnh nhóm em sử dụng ngôn ngữ Python và viết trên nền Visual Studio:
Hình 3.33: Giao diện Visual Studio
54
Để điều khiển động cơ và hướng di chuyển cho xe,nhóm em sử dụng phần mềm Arduino IDE để có thể lập trình cũng như nạp code xuống bo mạch Arduino Uno R3.Một chương trình được viết bởi Arduino IDE được gọi là sketch, sketch được lưu dưới dạng .ino.
Hình 3.35: Giao diện lập trình Arduino
Giao diện Arduino IDE gồm 3 vùng: vùng lệnh, vùng lập trình và vùng thông báo. - Vùng lệnh: Bao gồm các nút lệnh menu File,Edit,Sketch,Tools,Help.
- Vùng lập trình: Vùng này chứ code lập trình
- Vùng thông báo: Những thông báo thì IDE sẽ được thông báo tại đây. Các thông báo như chương trình có lỗi hay không, liệt kê các lỗi, quá trình nạp,…Góc dưới cùng bên phải hiển thị loại board Arduino và cổng COM được sử dụng.
55 3.6 HƯỚNG DẪN THAO TÁC
3.6.1 Thao tác đối với Jetson Nano 3.6.1.1 Remote Desktop 3.6.1.1 Remote Desktop
Mục đích của việc remote desktop là giúp chúng ta có thể quan sát được quá trình xử lý hình ảnh,hình ảnh nhận vào từ camera,đồng thời có thể sửa lỗi cũng như điều chỉnh code từ xa thông qua laptop mà không cần đến tận xe. Nhằm tiết kiệm thời gian cũng như thuận tiện cho quá trình sửa chữa.Để remote desktop nhóm em sử dụng phầm mềm VNC,các bước được tiến hành như sau:
- Bước 1: Cài đặt phần mềm VNC Viewer vào laptop.Để tải phần mềm thì vào đường dẫn https://www.realvnc.com/en/connect/download/viewer/,giao diện sau khi cài đặt thành công phần mềm.
56
- Bước 2: Tìm địa chỉ IP của Jetson Nano
Hình 3.37: Cú pháp tìm IP của Jetson Nano
57
- Bước 3: Chạy tập tin VNC trên Jetson Nano Để tải tập tin về Jetson Nano ta vào đường dẫn:
https://github.com/jetsonworld/downloadManuals/blob/master/00_How_To_Start_VNC.t xt
Tiến hành tải tập tin có tên là:00_How_To_Start_VNC.txt Tiến hành chạy trên Jetson Nano
Hình 3.39:Chạy VNC trên Jetson Nano
58
- Bước 4: Nhập IP của Jetson Nano vào VNC trên laptop
Hình 3.41: Nhập IP của Jetson vào VNC
- Bước 6: Chấp nhận trên Jetson Nano để liên kết với laptop bằng cách nhấn Accept
59
Liên kết thành công VNC giữ laptop và Jetson Nano.
Hình 3.43: Liên kết thành công Jetson Nano và laptop
Sau khi liên kết thành công Jetson Nano và laptop thì ta có thể điều khiển,lập trình,sử chửa hay thao các với Jetson từ xa.Nhưng VNC chỉ có thể sử dụng để liên kết hai thiết bị khi hai thiết bị cùng sử dụng chung một mạng wifi,nên đó cũng là nhược điểm của phần mềm này.Một nhược điểm khác là khi truyền dữ liệu từ Jetson sang laptop bằng VNC thì sẽ có độ trễ đối với tín hiệu,nhưng độ trễ này vẫn nằm trong khoảng có thể chấp nhận được,thời gian trể là tâm 1 đến 2s.
60 Chương 4
THỰC NGHIỆM VÀ ĐÁNH GIÁ 4.1 KẾT QUẢ
4.1.1 Kết quả thi công phần cứng
Sau 15 tuần thiết kế và thi công,nhóm đã hoàn thành mô hình xe tự hành.Mô hình xử lý được 10 frame/s đối với chương trình nhận diện lane, 4 frame/s đối với chương trình nhận diện biển báo.Nên tốc độ xe khá chậm so với dự kiến.
Hình 4.1: Mô hình xe tự hành
Hình 4.2: Mô hình xe tự hành
61 Hình 4.3: Mô hình xe tự hành
Những hình ảnh trên là mô hình xe tự hành sau khi hoàn thành của nhóm.Về mặt phần khung xe nhóm em đã tận dụng khung xe ô tô điện vì kích thước phù hợp,đồng thời tiết kiệm được thời gian để có thể tập trung vào xử lý phần mềm.Nhóm đã hoàn thành mô hình bao gồm: thiết kế và chế tạo lại hệ thống lái của xe sử dụng động cơ bước để đánh lái nhằm phục vụ cho mục đích tự hành, lắp đặt thêm hai camera phía trước và bên phải của xe để có thể thu thập hình ảnh trong việc xử lý ảnh chạy theo lane và nhận diện biển báo stop. Sử dụng Jetson Nano để làm máy tính xử lý trung tâm cho xe để xe có thể hoạt động tốt hơn.Đồng thời nâng cấp hai động cơ của xe để có thể đạt được tốc độ như mong.Sử dụng màn hình lcd để hiện thị hình ảnh xử lý của Jetson Nano trong khi xe di chuyển để dể dàng quan sát những sai lệch trong quá trình thu thập hình ảnh nhằm khắc phục,giúp xe ngày càng hoàn thiện hơn.
Trong qua trình vận hành ở môi trường thực tế thì cho thấy mô hình vẫn đáp ứng tốt với các yêu cầu của nhóm.Tuy vẫn có những sai lệch do sự chênh lệch tốc độ giữa hai bánh cũng như khả năng giữ lái của xe vẫn còn hạn chế khi bị tác động của ngoại lực bên ngoài, nhưng nhóm đã khắc phục đến mức thấp nhất cũng ảnh hưởng đó trong việc hoạt động của xe.
2
62 Hình 4.4: Mạch điện trong xe
Hình 4.4 là sơ đồ mạch điện thực tế trên xe đã được lắp đặt và sử dụng.
Bảng 4.1: Các linh kiện lắp đặt trên xe
STT Tên linh kiện
1 Camera logitech C270 2 LCD 3 Ắc quy 4 Module BTS7960 5 Arduino Uno R3 6 Driver TB6560 7 Jetson Nano 8 Giảm áp DC LM2596 4 5 6 7 8
63 4.2 THỰC NGHIỆM
4.2.1 Thực nghiện model Deep learning sử dụng tensorflow và keras
Nhóm chúng tôi thực nghiệm nhận dạng lane và điều khiển trong điều kiện thực tế,với môi trường tự nhiên ngoài trời,ánh sáng mặt trời.Trong phần điều khiển có chạy thẳng,rẽ phải,và dừng lại khi nhận diện biển báo.Vì xe chạy trong môi trường tự nhiên nên ảnh hưởng của ánh sáng và điều không tránh khỏi, nên các trường hợp trên nhóm em đã thực nghiệm trong những thời gian khác nhau trong ngày để quan sát độ của kết quả nhận dạng và điều khiển.
Hình 4.5: Xe đi thẳng1
64
Hình 4.5 và 4.6 là quá trình thử nghiệm xe đi thẳng bằng model được tạo ra bằng thư viện tensorflow và keras.Với nhiều lần thực nghiệm thì cho thấy khả năng nhận diện và xử lý hình ảnh đi thẳng của model là tốt.
Hình 4.7: Xe rẽ phải
Hình 4.8: Kết quả nhận diện lane cong
Hình 4.7 và 4.8 là quá trình thử nghiệm khi xe rẽ phải.Cũng với số lần thực nghiệm là 100 lần và được kết quả như trên thì cũng có thể thấy model xử lý chính xác hình ảnh được thu nhận từ camera trong điều kiện ánh sáng tối ưu nhất.
65 Hình 4.9: Xe đi thẳng 2
Hình 4.10: Kết quả nhận diện lane thẳng 2
Hình 4.9 và 4.10 là quá trình thực nghiệm đi xe đi thẳng 2.Cùng với số lần thực nghiệm như trên thì cho thấy model xử lý tốt hình ảnh của thẳng 2 trong điều kiện ánh sáng tối ưu nhất.Và tất cả các hình ảnh trên đều được nhóm thu thập khi xe chạy trong điều kiện ánh sáng tốt nhất.
66 Hình 4.11: Xe dừng lại
Hình 4.12: Kết quả nhận diện biển báo
Hình 4.12 là quá trình thực nghiệm nhận diện biển báo đồng thời tính diện tích của biển báo để cho xe dừng lại khi diện tích thỏa điều kiện.Và điều khiện cho trước đó cũng thông qua việc thực nghiệm để tìm diện tích biển báo thích hợp với mong muốn của nhóm.Qua hình ảnh cũng có thể đánh giá được model nhận diện được biển báo khá tốt.
67 4.2.2 Thực nghiệm model Deep learning sử dụng tensorflow
Hình 4.13: Xe đi thẳng api
Hình 4.14: Kết quả nhận diện thẳng api
Hình 4.13 và 4.14 là quá trình thử nghiệm xe chạy thẳng với model được xây dựng bởi thư viện tensorflow.Kết quả trên cho thấy model đáp ứng được yêu cầu đặt ra là xác định xe phải đi thẳng trong trường hợp này.Cũng như những thực nghiệm khác đây là kết quả khi thực nghiệm trong điều kiện ánh sáng tối ưu nhất,không bị các tác động bên ngoài.
68 Hình 4.15: Xe rẽ phải api
69 Hình 4.17: Kết quả nhận diện biển báo bằng api
Hình 4.17 là ảnh thực nghiệm quá trình nhận diện biển báo bằng model api, đồng thời tính diện tích của biển báo để có dừng xe khi diện tích thỏa điều kiện cho phép.Kết quả trên cũng cho thấy model api cũng đáp ứng khá tốt việc nhận diện biển báo trong điều kiện ánh sáng thực tế.Số lần thực nghiệm của model này cũng tương tự như model keras là 100 lần.
4.2.3 Thống kê
Qua quá trình thực nghiệm của cả hai model được xây dựng dựa trên hai phương pháp.Mỗi phương pháp có những ưu điểm khác nhau đã được trình bày ở chương 2,nhưng lại có những nhược điểm khá giống nhau.Khi xử lý hình ảnh trong môi trường thực tế thì việc hình ảnh bị nhiễu do ánh sánh là điều không thể tránh khỏi, khi ánh sáng thay đổi
70
trong ngày thì việc xác định hình ảnh để xứ lý và điều khiển xe cũng bị sai theo.Các hình ảnh được thể hiện phía trên là những hình ảnh xe thu thập và xử lý trong điều kiện ánh sáng tối ưu nhất.
Việc thu thập hình ảnh đầu vào để tạo model trong nhiều điều kiện ánh sáng khác nhau là điều vô cùng quan trọng,nó giúp việc xử lý trở nên tốt hơn,hạn chế các trường hợp nhiễu do ánh sáng.
Dưới đây là thống kê thời gian chạy tối ưu trong ngày của model sử dụng tensorflow và kears:
Bảng 4.2: Bảng kết quả thực nghiệm nhận dang lane,biển stop trong điều kiện thực tế.
Giờ Số lần 7 AM 8 AM 9 AM 10 AM 11 AM 12 AM 1 PM 2 PM 3 PM 4 PM 5 PM 6 PM 1 O O O X O O O O O O O X 2 O O O O O O X O X X O X 3 X O O O O O X O O X O X 4 O O O O O O O O X O O O 5 O X X O O O O X X O X O 6 X O O X X O O O O X X X 7 O O O O X O O O O X O X 8 O O X O O X O X O O X O 9 X X O O O O O X O O X O 10 O O O O O O O O O O X X Độ chính xác(%) 70 80 80 80 80 90 80 70 70 60 50 40
Với: O là nhận dạng lane và điều khiển chính xác, X là nhận dạng lane và không điều khiển chính xác.
Độ chính xác trung bình là 80%. Như vậy,có 20% là nhận biết và điều khiển không chính xác.Trong đó nguyên nhân lớn nhất lớn nhất gây ra việc nhận biết và điều khiển không chính xác chính là sự ảnh hưởng của ánh sáng,như đã nói phía trên ánh sáng đóng