BỘ GIÁO DỤC VÀ ĐÀO TẠO TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT THÀNH PHỐ HỒ CHÍ MINH ĐỒ ÁN TỐT NGHIỆP NGÀNH CÔNG NGHỆ KỸ THUẬT Ô TÔ NGHIÊN CỨU VÀ PHÁT TRIỂN HỆ THỐNG PHÁT HIỆN ĐỐI TƯỢNG TRÊN XE TỰ HÀNH DÀNH C[.]
CƠ SỞ LÝ THUYẾT
Tổng quan về xe tự hành
Ô tô tự lái (ô tô tự hành hoặc ô tô không người lái) là phương tiện sử dụng kết hợp các cảm biến, camera, radar, lidar, phần mềm và trí tuệ nhân tạo (AI),… để di chuyển giữa các điểm đến mà không cần con người điều khiển Để đủ điều kiện là hoàn toàn tự động, một chiếc xe phải có khả năng điều hướng mà không cần sự can thiệp của con người đến một điểm đến được xác định trước trên những con đường chưa được điều chỉnh để sử dụng (bất kể địa hình nào có thể đi được).
Hình 2.1 Xe tự hành của Google
Các cấp độ tự hành: Hiệp hội Kỹ sư Ô tô (SAE) xác định 6 cấp độ tự động hóa lái xe, từ Cấp độ 0 (hoàn toàn thủ công) đến Cấp độ 5 (hoàn toàn tự động) Các cấp độ này đã được Bộ Giao thông Vận tải Hoa Kỳ thông qua và đang áp dụng trên toàn thế giới.
– Cấp 0: Không có chức năng tự động Con người vận hành và kiểm soát tất cả các hệ thống chính Điều này bao gồm những chiếc xe có kiểm soát hành trình vì người lái thiết lập và thay đổi tốc độ khi cần thiết.
– Cấp 1: Hệ thống hỗ trợ lái xe Hệ thống hỗ trợ người lái tiên tiến (Advanced Driver Assistance Systems – ADAS) hỗ trợ người lái xe bằng vô lăng, phanh hoặc tăng tốc, và không đồng thời ADAS bao gồm camera chiếu hậu và các tính năng như cảnh báo ghế rung để cảnh báo cho người lái xe khi họ lệch khỏi làn đường đang di chuyển Một số hệ thống như điều khiển hành trình thích ứng hoặc phanh tự động có thể được điều khiển bằng ô tô khi kích hoạt, cá nhân, bởi trình điều khiển của con người Như vậy, hầu hết các ô tô ngày nay đều đang ở cấp độ 1 về xe tự lái/tự hành.
– Cấp độ 2: Tự động hóa từng phần Hệ thống hỗ trợ lái xe tiên tiến (ADAS) trên xe có thể tự điều khiển đồng thời cả đánh lái và phanh/tăng tốc trong một số trường hợp. Người lái xe phải luôn chú ý hoàn toàn (theo dõi môi trường lái xe) và thực hiện phần còn lại của nhiệm vụ lái xe Chiếc xe sẽ phù hợp với tốc độ của bạn để lưu thông và đi theo những khúc cua trên đường, nhưng người lái xe phải sẵn sàng kiểm soát nhiều hệ thống mọi lúc Các hệ thống cấp 2 bao gồm Tesla Autopilot, Volvo Pilot Assistant, Mercedes-Benz Drive Pilot và Cadillac Super Cruise…
– Cấp độ 3: Tự động hóa có điều kiện Hệ thống lái xe tự động (Automated Driving Systems – ADS) trên xe có thể tự thực hiện quản lý tất cả các hoạt động an toàn quan trọng, các khía cạnh của nhiệm vụ lái xe trong các điều kiện cụ thể nhưng người lái xe phải đảm nhận khi được cảnh báo Chiếc xe giám sát môi trường thay vì con người, nhưng lái xe không nên ngủ gật, vì họ sẽ cần phải biết cách chiếm lấy kiểm soát khi được yêu cầu. Trong mọi trường hợp khác, người lái xe thực hiện nhiệm vụ lái xe Về cơ bản thì Tesla đang tiến tới cấp độ 3.
– Cấp độ 4: Tự động hóa cao Hệ thống lái xe tự động (Automated Driving Systems – ADS) về cơ bản trên xe có thể tự thực hiện tất cả các nhiệm vụ lái xe và giám sát môi trường lái xe, thực hiện tất cả các thao tác lái xe – trong một số trường hợp nhất định. Con người không cần phải chú ý trong những trường hợp đó Nó vẫn sẽ cần sự can thiệp của lái xe trong điều kiện thời tiết xấu hoặc môi trường bất thường Xe cấp 4 vẫn sẽ có vô lăng và bàn đạp để lái xe khi cần thiết.
– Cấp 5: Hoàn toàn tự động Hệ thống lái xe tự động (Automated Driving Systems– ADS) trên xe có thể thực hiện tất cả các thao tác lái xe trong mọi trường hợp Con người chỉ là hành khách và không bao giờ cần phải tham gia vào việc lái xe Trong mọi tình huống lái xe, chiếc xe sử dụng chế độ lái hoàn toàn tự động và chỉ hỏi con người về lịch trình đi.
Hình 2.2 Các cấp độ xe tự hành
Hoạt động của xe tự hành: Mặc dù có thể là thiết kế khác nhau giữa các nhà sản xuất, nhưng xe ô tô tự lái đều dựa vào cảm biến, cơ cấu chấp hành, thuật toán phức tạp, hệ thống máy học và bộ xử lý mạnh mẽ để thực thi phần mềm.
– Xe ô tô tự lái tạo và duy trì bản đồ môi trường xung quanh dựa trên nhiều loại cảm biến nằm ở các bộ phận khác nhau của xe Cảm biến radar giám sát vị trí của các phương tiện gần đó Máy quay video phát hiện đèn giao thông, đọc biển báo đường bộ, theo dõi các phương tiện khác và tìm kiếm người đi bộ Cảm biến Lidar (phát hiện và phạm vi ánh sáng) phát ra các xung ánh sáng từ môi trường xung quanh ô tô để đo khoảng cách, phát hiện các mép đường và xác định các vạch kẻ đường Cảm biến siêu âm trong bánh xe phát hiện lề đường và các phương tiện khác khi đỗ xe.
– Sau đó, phần mềm tinh vi sẽ xử lý tất cả đầu vào cảm biến này, vạch ra đường đi và gửi hướng dẫn đến bộ truyền động – cơ cấu chấp hành của ô tô, bộ điều khiển này sẽ điều khiển gia tốc, phanh và lái Các quy tắc được mã hóa cứng, thuật toán tránh chướng ngại vật, mô hình dự đoán và nhận dạng đối tượng giúp phần mềm tuân theo các quy tắc giao thông và điều hướng chướng ngại vật.
Các mô hình tự lái hiện tại đều tự chủ một phần và đòi hỏi trình điều khiển của người lái xe Chúng bao gồm những chiếc xe truyền thống với sự hỗ trợ phanh và các nguyên mẫu xe không người lái gần như độc lập Các mô hình tương lai, tự chủ hoàn toàn, tuy nhiên, thậm chí có thể không cần vô lăng Một số cũng có thể đủ điều kiện được kết nối với nhau, có nghĩa là chúng có thể giao tiếp với những chiếc xe khác trên đường hoặc với cơ sở hạ tầng.
Những thách thức với ô tô tự hành: Xe ô tô hoàn toàn tự động (Cấp độ 5) đang được thử nghiệm ở một số quốc gia trên thế giới, nhưng chưa có loại xe nào được cung cấp cho công chúng Chúng ta vẫn còn nhiều năm nữa mới đạt được điều đó Các thách thức bao gồm từ công nghệ và lập pháp đến môi trường và triết học Đây chỉ là một số ẩn số.
– Lidar và Radar: Lidar đắt tiền và vẫn đang cố gắng đạt được sự cân bằng giữa phạm vi và độ phân giải Nếu nhiều xe ô tô tự lái chạy trên cùng một con đường, liệu tín hiệu điều khiển của chúng có gây nhiễu cho nhau không? Và nếu có nhiều tần số vô tuyến, liệu dải tần có đủ để hỗ trợ sản xuất hàng loạt ô tô tự lái?
– Điều kiện thời tiết: Điều gì xảy ra khi ô tô tự lái trong tình trạng mưa lớn? Nếu có một lớp tuyết trên đường, dải phân cách sẽ biến mất Máy ảnh và cảm biến sẽ theo dõi các vạch kẻ làn đường như thế nào nếu vạch này bị nước, dầu, băng hoặc bụi bẩn che khuất?
Tổng quan về Cuộc đua số FPT
2.2.1 Giới thiệu về Cuộc đua số FPT
Cuộc Cách mạng Công nghiệp lần thứ 4 – cuộc Cách mạng số đang diễn ra mạnh mẽ và có tác động to lớn đến sự phát triển của các doanh nghiệp trên toàn cầu Việc chủ động chuẩn bị và tiếp cận nguồn lực am hiểu công nghệ mới cần được quan tâm đúng mức từ sớm đối với tất cả các quốc gia.
Nắm bắt được bối cảnh đó, từ năm 2016, Tập đoàn FPT tổ chức chương trình Cuộc đua số - cuộc thi lập trình công nghệ thường niên dành cho các sinh viên yêu thích công nghệ trên toàn quốc, với mục đích tạo sân chơi hấp dẫn, bổ ích, thúc đẩy đam mê học hỏi, cập nhật, thực hành và sáng tạo các công nghệ mới trên thế giới, trên cơ sở hiểu biết và nắm vững nhu cầu của các ngành công nghiệp cho sinh viên Việt Nam, góp phần xây dựng nguồn lực chất lượng cao, đáp ứng nhu cầu của cuộc cách mạng 4.0 Chủ đề của từng mùa giải đều là những xu hướng công nghệ mới nhất, thu hút sự quan tâm và tham gia của nhiều hãng công nghệ lớn toàn cầu.
Chủ đề đầu tiên được lựa chọn là “Xe tự hành”, dự kiến sẽ được tổ chức trong 5 năm.Tham dự cuộc thi, các bạn sinh viên được nghiên cứu, sáng tạo, trải nghiệm công nghệ mới nhất trong các lĩnh vực xử lý ảnh, lập trình nhúng, trí tuệ nhân tạo… Sau khi vòng sơ khảo đánh giá kiến thức, năng lực lập trình, xử lý hình ảnh tại các trường và các địa điểm doBan tổ chức chỉ định, các đội thi xuất sắc nhất sẽ được cấp một xe mô hình để thiết lập hệ thống điều khiển tự động và chạy đua trên sa hình mô phỏng với mức độ thách thức nâng dần qua các năm Điểm đặc biệt của cuộc thi là các kết quả và sản phẩm của năm thi trước được mở cho cộng đồng cùng sử dụng nhằm mục đích phát triển cộng đồng.
Với sự tư vấn từ các chuyên gia, các bạn thí sinh sẽ được trau dồi và phát triển thêm các kỹ năng cần thiết cho công việc trong tương lai từ năng lực công nghệ, quản trị dự án, làm việc nhóm, vượt qua áp lực… Các bạn sẽ được học cách xây dựng đội ngũ để cùng nhau theo đuổi đam mê, tạo dựng sự nghiệp riêng, hoặc để đồng hành với các doanh nghiệp lớn tại Việt Nam và trên thế giới.
Giải thưởng cao nhất dành cho đội chiến thắng chung cuộc là cơ hội để khám phá, trải nghiệm tại những cái nôi công nghệ lớn nhất của thế giới như Mỹ, Nhật Bản Bước chân ra thế giới để biết họ đã đi bao xa, để biết mình là ai, để biết mình cần phải nỗ lực tiếp thế nào Ngoài ra, các đội tham gia cuộc thi đều nhận được những giải thưởng giá trị như các khóa học bổng đào tạo theo tiêu chuẩn quốc tế và nhiều hiện vật khác.
Hình 2.4 Mô hình xe cuộc đua số
2.2.2 Mục đích của Cuộc đua số FPT
Cuộc Cách mạng Công nghiệp lần thứ 4 – cuộc Cách mạng số đang diễn ra mạnh mẽ và có tác động to lớn đến sự phát triển của mỗi cá nhân, tổ chức trên toàn cầu Việc chủ động chuẩn bị phát triển nguồn nhân lực am hiểu công nghệ mới cần nhận được sự quan tâm đúng mức từ sớm Do đó, sáng kiến chương trình Cuộc đua số chủ đề “Xe tự hành” được Tập đoàn FPT tổ chức từ năm 2016 với mục đích:
- Xây dựng sân chơi công nghệ hấp dẫn, bổ ích, tạo động lực để sinh viên học hỏi, cập nhật, thực hành và sáng tạo các công nghệ mới trên thế giới, trên cơ sở hiểu biết và nắm vững nhu cầu của các ngành công nghiệp cho sinh viên Việt Nam.
- Góp phần xây dựng nguồn nhân lực chất lượng cao, đáp ứng nhu cầu của cuộc Cách mạng 4.0.
Thi theo đội, mỗi đội thi gồm 3 – 4 thành viên thuộc cùng một trường đại học. Khuyến khích đội có 01 người hướng dẫn; người hướng dẫn phải là giảng viên của trường có đội tham gia.
Các đội thi được phép thay thế hoặc bổ sung tối đa 50% số lượng thành viên ban đầu (Tổng số thành viên trong đội không vượt quá 4 người và đảm bảo có tối thiểu 2 thành viên ban đầu).
2.2.4 Cơ cấu giải thưởng cuộc thi
Vòng thi tìm kiếm đội đại diện trường (Tối đa 10 điểm trường) Đội nhất vòng thi trường – Giải thưởng tiền mặt 5 triệu VNĐ/đội Đội nhì vòng thi trường (nếu được chọn vào bán kết) - Giải 3 triệu VNĐ/đội thưởng tiền mặt
Học bổng toàn phần một trong 3 khóa đào tạo 22 triệu VNĐ/học bổng Automative/Machine Learning/Data Science cho 26 cá nhân xuất sắc nhất từ vòng thi tìm đội đại diện trường (*)
80% giá trị một suất học bổng học nói Tiếng Anh - gói 1 Tổng gói 79 triệu VNĐ năm ELSA Pro’s của Elsa cho thí sinh thuộc đội đạt giải nhất và nhì vòng trường.
Thí sinh tham dự vòng đại diện trường nhận được học bổng Tổng giá trị 3 tỷ VNĐ một trong 4 môn học của trường Đại học trực tuyến Funix
Môn 1: Becoming a Digital Citizen – Trở thành công dân số
Môn 2: Building your first website – Xây dựng website đầu tiên
Môn 3: Mastering your Computer – Làm chủ máy tính
Môn 4: Creating your first program (with Javascript) – Xây dựng phần mềm đầu tiên
Vòng bán kết (Lựa chọn 8 đội) Đội được chọn vào chung kết – giải thưởng tiền mặt: 5 triệu VNĐ/đội
Gi ải thưởng dành cho đội giải nhất (1 giải)
- Giải thưởng tiền mặt - 15 triệu VNĐ/đội
- 01 chuyến trải nghiệm tại Mỹ (**) - 400 triệu VNĐ/đội
- 04 học bổng toàn phần khóa đào tạo Automative - 88 triệu VNĐ/đội
- 01 học bổng tiến sĩ tại ĐH Quốc gia Hà Nội dành cho thí - 700 triệu VNĐ/giải sinh xuất sắc nhất (***Ngành Trí tuệ nhân tạo)
Gi ải thưởng dành cho đội giải nhì (1 giải) - 15 triệu VNĐ/đội
Gi ải thưởng dành cho đội giải ba (2 giải) - 10 triệu VNĐ/đội
Gi ải thưởng cho đội có Thuật toán xuất sắc nhất - 5 triệu VNĐ/đội
Giải thưởng cho giáo viên hướng dẫn đội giải nhất - 01 Máy tính trị giá 20 triệu
Gi ải thưởng cho trường có đội giải nhất - 50 triệu VNĐ
Gi ải thưởng chung cho Top 4 chung kết Được nhận thực tập và làm việc tại Tập đoàn FPT trong thời gian tối thiểu 3 tháng, có lương tối thiểu 5 triệu VNĐ/tháng.
( 26 học bổng toàn phần khóa đào tạo Automative do Đại học trực tuyến FUNiX trao tặng như sau: Trong vòng 2 tuần sau khi kết thúc tất cả vòng thi trường, thí sinh thuộc
Top 4 đội mỗi vòng thi “Tìm kiếm đội thi đại diện trường” có quyền nộp hồ sơ đăng ký nhận học bổng Automative Ban tổ chức sẽ lựa chọn 26 cá nhân xuất sắc nhất để trao học bổng này Học bổng phải được sử dụng trong vòng 6 tháng sau khi được trao tặng.
Tổng quan về nhận dạng đối tượng
2.3.1 Bài toán nhận dạng đối tượng
Một trong những lĩnh vực quan trọng của trí tuệ nhân tạo (Artificial Intelligence) là thị giác máy tính (Computer Vision) Thị giác máy tính là một lĩnh vực bao gồm các phương pháp thu nhận, xử lý ảnh kỹ thuật số, phân tích và nhận dạng các hình ảnh, phát hiện các đối tượng, tạo ảnh, siêu phân giải hình ảnh và nhiều hơn Nhận dạng vật thể (Object Detection) có lẽ là khía cạnh sâu sắc nhất của thị giác máy do số lần sử dụng trong thực tế.
Nhận dạng vật thể là lĩnh vực thuộc “Machine Learning” nguyên cứu khả năng của hệ thống máy tính cũng như phần mềm để định vị các đối tượng trong một hình ảnh, video cho trước và xác định từng đối tượng trong đó Sự phát triển khoa học kỹ thuật công nghệ đã thúc đẩy đưa bài toán nhận dạng đối tượng vào ứng dụng thực tiễn với mức độ tinh vi ngày càng cao Có thể thấy nhận dạng vật thể đã được sử dụng rộng rãi để phát hiện khuôn mặt, phát hiện xe, đếm số người đi bộ, hệ thống bảo mật và xe không người lái, công nghệ robot, Vì vậy, nhận dạng vật thể là một lĩnh vực đang được quan tâm và có tính ứng dụng cao.
Hình 2.10 Nhận diện đối tượng
Bài toán nhận dạng đối tượng có thể áp dụng rộng rãi trong nhiều ứng dụng thực tế khác nhau Đó chính là lý do mà bài toán này rất hấp dẫn với nhiều nhóm nguyên cứu trong thời gian dài Các ứng dụng liên quan đến nhận dạng đối tượng có thể kể ra như:
– Hệ thống phát hiện tội phạm: Camera được đặt tại một số điểm công cộng như: siêu thị, nhà sách, trạm xe buýt, sân bay, Khi phát hiện được sự xuất hiện của các đối tượng là tội phạm, hệ thống sẽ gởi thông điệp về trung tâm xử lý.
– Hệ thống theo dõi nhân sự trong một đơn vị: Giám sát giờ ra vào của từng nhân viên và chấm công.
– Hệ thống giao tiếp người máy: Thay thế việc tương tác giữa người và máy theo những cách truyền thống như: bàn phím, chuột, Thay vào đó là sử dụng giao tiếp trực quan như: Biểu cảm khuôn mặt, dấu hiệu, cử chỉ bằng tay,
– Các hệ thống bảo mật dựa trên thông tin sinh trắc học: Mặt người, vân tay, Thay vì xác nhận mật khẩu, khóa,
– Công nghệ nhận dạng quản lý giao thông quản lý hình ảnh của xe và biển số xe thay đổi (không khớp với dữ liệu), giám sát bãi đỗ xe, phương tiện giao thông tại các khu vực nhạy cảm như sân bay, bến cảng.[1]
2.3.2 Kiến trúc của một hệ thống nhận dạng đối tượng
Một hệ thống nhận dạng đối tượng thông thường xử lý bốn bước sau:
– Thu nhận tín hiệu và tiền xử lý.
– Phân lớp đối tượng. Ảnh đầu vào được thu nhận và được qua công đoạn tiền xử lý nhằm tăng độ chính xác cho hệ thống Các ảnh sau đó được trích chọn đặc trưng để tạo ra các vectơ đặc trưng trong bước rút trích đặc trưng Những vectơ đặc trưng này sẽ là dữ liệu đầu vào cho một mô hình đã được huấn luyện trước Phát hiện đối tượng là bước dò tìm và định vị những vị trí đối tượng xuất hiện trong ảnh hoặc trên chuỗi ảnh của video Những đối tượng thu được qua bước phát hiện sẽ tiếp tục được phân lớp thành từng lớp riêng biệt để nhận dạng.[1]
Hình 2.11 Kiến trúc hệ thống nhận diện đối tượng
Tổng quan một số mô hình nhận diện đối tượng
Machine Learning là quá trình dạy máy tính thực hiện một nhiệm vụ, thay vì lập trình cho nó làm thế nào để thực hiện nhiệm vụ đó từng bước một Khi kết thúc đào tạo, một hệ thống Machine Learning sẽ có thể đưa ra dự đoán chính xác khi được cung cấp dữ liệu.
Hình 2.12 Cấu trúc khi lập trình thông thường
Hình 2.13 Cấu trúc khi lập trình Machine Learning
Machine Learning thường được chia thành học có giám sát, trong đó máy tính học bằng ví dụ từ dữ liệu được gắn nhãn và học không giám sát, trong đó các máy tính nhóm các dữ liệu tương tự và xác định chính xác sự bất thường.
– Học có giám sát là việc cho máy tính học trên dữ liệu đã được gán nhãn (label).
Hình 2.14 Cấu trúc Machine Learning theo kiểu học có giám sát
– Học không giám sát là cho máy tính học trên dữ liệu mà không được gán nhãn, các thuật toán machine learning sẽ tìm ra sự tương quan dữ liệu, mô hình hóa dữ liệu hay chính là làm cho máy tính có kiến thức, hiểu về dữ liệu, từ đó chúng có thể phân loại các dữ liệu về sau thành các nhóm, lớp (clustering) giống nhau mà chúng đã được học hoặc giảm số chiều dữ liệu (dimension reduction).
Hình 2.15 Cấu trúc Machine Learning theo kiểu học không giám sát
– Training data và test data: dataset thường sẽ được chia làm 2 tập này, training data dùng để huấn luyện cho mô hình, test data dùng để dự đoán kết quả và đánh giá mô hình Có bài toán người ta sẽ cho sẵn hai tập này thì bạn không cần phải chia nữa, đối với bài toán chỉ cho mỗi dataset thôi thì phải chia ra Thường tỷ lệ giữa tập train và test sẽ là 8/2.
– Features vector: là vector đặc trưng, mỗi vector này sẽ biểu diễn cho một điểm dữ liệu trong dataset Mỗi vector có n chiều biểu diễn các đặc trưng của điểm dữ liệu, mỗi đặc trưng là một chiều và phải là dữ liệu số Các mô hình chỉ có thể huấn luyện được từ các vector đặc trưng này, do đó dataset cần phải chuyển về dạng một tập các vector đặc trưng (features vectors).
– Model: là các mô hình được dùng để training trên một training data theo thuật toán của mô hình đó Sau đó mô hình có thể dự đoán hoặc đưa ra các quyết định dựa trên những gì chúng đã được học. Điển hình nhất trong Machine Learning mà nhiều người lập trình xử lý ảnh hay nghe đến đó là Deep Learning.
Deep Learning (thuật toán) là một tập hợp con của Machine Learning, nó cũng là quá trình dạy máy tính thực hiện một nhiệm vụ, nhưng nó có khả năng khác biệt ở một số khía cạnh quan trọng so với Machine Learning, cho phép máy tính giải quyết một loạt các vấn đề phức tạp không thể giải quyết được Chẳng hạn như nhận dạng hình ảnh, ngôn ngữ và lời nói – bằng cách cho phép máy móc tìm hiểu cách các tính năng trong dữ liệu kết hợp thành các dạng trừu tượng ngày càng cao hơn Ví dụ: trong nhận dạng khuôn mặt, cách các pixel trong hình ảnh tạo ra các đường và hình dạng, cách các đường và hình dạng đó tạo ra các đặc điểm khuôn mặt và cách các đặc điểm khuôn mặt này được sắp xếp thành một khuôn mặt, ngoài ra trong điều kiện thời tiết luôn thay đổi thì Deep Learning sẽ giải quyết vấn đề tốt hơn Machine Learning.
Deep Learning cũng có thể không phải là lựa chọn tốt nhất để đưa ra dự đoán dựa trên dữ liệu Ví dụ: nếu tập dữ liệu nhỏ thì đôi khi mô hình Machine Learning tuyến tính đơn giản có thể mang lại kết quả chính xác hơn. Ưu điểm Deep Learning: Xử lí những dữ liệu phần lớn không có cấu trúc và có rất nhiều dữ liệu – chẳng hạn như video, hình ảnh, bản ghi âm thanh và văn bản – và áp đặt đủ thứ tự cho dữ liệu đó để đưa ra dự đoán hữu ích.
Nhược điểm Deep Learning: Lượng dữ liệu cần đào tạo lớn và số chu kỳ đào tạo phải được chạy, vì vậy việc đào tạo thường yêu cầu quyền truy cập vào phần cứng máy tính mạnh mẽ và đắt tiền, điển hình là GPU cao cấp.
Các kỹ thuật Deep Learning: CNN (Convolutional Neural Network) thường được sử dụng cho các tác vụ thị giác máy tính, trong khi RNN (Recurrent neural network) thường được sử dụng để xử lý ngôn ngữ.
2.4.2 Giới thiệu mô hình Yolo
You Only Look Once(YOLO) là một mô hình mạng nơ ron tích chập dùng để nhận dạng đối tượng mà ưu điểm nổi trội là nhanh hơn nhiều so với những mô hình cũ, thuật toán được đánh giá là một trong những thuật toán nhận diện đối tượng nhanh nhất thời điểm hiện tại Mặc dù không phải là thuật toán có độ chính xác cao nhất tuy nhiên YOLO vẫn là được ứng dụng rất nhiều trong những dự án thực tế khi mà độ chính xác không phải là tiêu chí hàng đầu Hơn thế nữa, YOLO còn có thể chạy tốt trên các thiết bị IoT như Rasberry Pi.
Kiến trúc của YOLO bao gồm: Base Network (Mạng gốc) là mạng CNN làm nhiệm vụ trích xuất đặc trưng, phần phía sau là những Extra Layers (Tầng phụ) được áp dụng để phát hiện vật thể trên Feature Map (Ma trận đặc trưng) của Base Network.[10]
Trên đây là một ví dụ về sơ đồ kiến trúc mô hình YOLO Thành phần Darknet Architechture được gọi là Base Network có tác dụng rút trích đặc trưng của hình ảnh. Đầu ra của Base Network là một Feature Map có kích thước 7x7x1024 sẽ được sử dụng để làm đầu vào cho các Extra Layers có tác dụng dự đoán nhãn và tọa độ Bounding Box (hình chữ nhật bao quanh vật thể) của vật thể.
Như vậy có thể thấy cấu trúc thuật toán YOLO được chia ra rất rõ ràng bao gồm hai thành phần là mạng CNN và các Extra Layers để dự đoán Vì thế để tìm hiểu thuật toán chúng tôi sẽ đi qua khái niệm mạng CNN và các nhiệm vụ của từng lớp Extra Layers.
Mạng nơ ron tích chập - Convolutional Neural Network
Mạng nơ ron tích chập là một trong những mạng truyền thẳng đặc biệt Mạng nơ ron tích chập là một mô hình học sâu phổ biến và tiên tiến nhất hiện nay Hầu hết các hệ thống nhận diện và xử lý ảnh hiện nay đều sử dụng mạng nơ ron tích chập vì tốc độ xử lý nhanh và độ chính xác cao Trong mạng nơ ron truyền thống, các tầng được coi là một chiều, thì trong mạng nơ ron tích chập, các tầng được coi là 3 chiều, gồm: Chiều cao, chiều rộng và chiều sâu Mạng nơ ron tích chập có hai khái niệm quan trọng: Kết nối cục bộ và chia sẻ tham số Những khái niệm này góp phần giảm số lượng trọng số cần được huấn luyện, do đó tăng nhanh được tốc độ tính toán.[1]
2.5.2 Mô hình mạng nơ rơn tích chập
Có ba tầng chính để xây dựng kiến trúc cho một mạng nơ ron tích chập: Tầng tích chập (Convolulion Layer) ; tầng gộp (Pooling Layer); tầng được kết nối đầy đủ (Fully- connected Layer) Ở các mạng nơ ron tích chập, tầng kết nối đầy đủ giống như các mạng nơ ron thông thường, và tầng chập thực hiện tích chập nhiều lần trên tầng trước Tầng gộp có thể làm giảm kích thước mẫu trên từng khối 2x2 của tầng trước đó Các lớp này liên kết với nhau theo một thứ tự nhất định Thông thường, một ảnh sẽ được lan truyền qua tầng tích chập, sau đó ma trận tính toán được sẽ lan truyền qua tầng gộp, bộ đôi tầng tích chập và tầng gộp có thể được lặp lại nhiều lần trong mạng Và cuối cùng được lan truyền qua tầng kết nối đầy đủ để tính xác xuất ảnh đó chứa vật thể gì.[1]
Hình 2.17 Kiến trúc mạng CNN 2.5.3 Tầng tích chập (Convolutional layer)
Tầng tích chập (Convolutional Layer) là lớp quan trọng nhất cũng là lớp đầu tiên của mô hình mạng CNN Tầng này có chức năng chính là trích xuất các đặc trưng có tính không gian hiệu quả của ảnh bao gồm góc cạnh, màu sắc hoặc đặc trưng phức tạp hơn như kết cấu của ảnh Trong tầng này có 4 đối tượng chính là: ma trận đầu vào, bộ Filters (ma trận tích chập), và Receptive Field (ma trận tương ứng ) , Feature Map.
Hình 2.18 Ma trận trước và sau tầng tích chập
Tầng tích chập này nhận đầu vào là một ma trận ba chiều và một bộ Filters Bộ Filters này sẽ trượt qua từng vị trí trên bức ảnh để tính tích chập giữa bộ Filter và phần tương ứng trên bức ảnh Phần tương ứng này trên bức ảnh gọi là Receptive Field, tức là vùng mà một nơ ron có thể nhìn thấy để đưa ra quyết định, và ma trận cho ra bởi quá trình này được gọi là Feature Map.
Vì bộ Filter quét qua toàn bộ bức ảnh, nên những đặc trưng này có thể nằm ở vị trí bất kì trong bức ảnh, cho dù ảnh bị xoáy trái/phải thì những đặc trưng này vẫn bị phát hiện Kích thước Filter của tầng tích hầu hết đều là số lẻ, ví dụ như 3x3 , 5x5 hoặc 7x7 Với kích thước Filter lẻ, các giá trị của Feature Map sẽ xác định một tâm điểm ở tầng phía trước.[1]
Hình 2.19 Tích chập ma trận
Tuy đã sử dụng các mạng được kết nối cục bộ và chia sẻ tham số, tuy nhiên số lượng tham số trong mạng nơ ron vẫn là quá lớn So với một tập dữ liệu tương đối nhỏ, nó có thể gây ra tình trạng quá khớp Vì vậy, mạng nơ ron nhân tạo thường chèn các tầng gộp vào mạng Tầng gộp (Pooling Layer) sẽ giảm kích cỡ của hình ảnh ngay sau khi thực hiện tích chập, giúp giữ lại các đặc điểm, tính chất nổi bật nhất của ảnh Điều này cho phép cải thiện thời gian tính toán trong mạng nơ ron, đồng thời không làm mất đi các đặc
Tầng gộp áp dụng lấy mẫu xuống cho tầng trước bằng cách sử dụng hàm max Tầng gộp hoạt động độc lập trên mỗi tầng trước đó Ngoài ra, có thể đặt lượng pixel khi YOLO di chuyển cửa sổ trượt hoặc bước nhảy, như làm với tầng tích chập.
Hình 2.20 Tầng gộp Ở hình 2.15, kích thước cửa sổ trượt là 2x2 và bước nhảy mỗi lần trượt là 2 Tại mỗi cửa sổ, hàm max (tìm giá trị lớn nhất) sẽ lấy giá trị tối đa để đại diện cho giá trị của tầng tiếp theo Các mạng nơ ron thường sử dụng kích thước cửa sổ cùng kích thước bước nhảy trong gộp chung và sử dụng kích thước cửa sổ cùng kích thước bước nhảy là 2 trong gộp nhóm, vì nếu tăng kích cỡ cửa sổ sẽ rất dễ làm mất các đặc tính của dữ liệu Ngoài việc gộp sử dụng hàm max, người ta có thể sử dụng các hàm khác Ví dụ người ta có thể sử dụng hàm tính trung bình của cửa sổ trượt để tính toán giá trị cho tầng tiếp theo, được gọi là gộp trung bình.[1]
2.5.5 Tầng kết nối đầy đủ
Tầng thứ ba là tầng kết nối đầy đủ Tầng này giống như mạng nơ ron truyền thống: các nơ ron ở tầng trước sẽ kết nối với một nơ ron ở tầng tiếp theo và tầng cuối cùng là đầu ra Để có thể đưa hình ảnh từ những tầng trước vào, dữ liệu phải dàn phẳng ra thành một véc tơ nhiều chiều Cuối cùng là sử dụng hàm Softmax để thực hiện phân loại đối tượng.
Hình 2.21 Tầng kết nối đầy đủ 2.5.6 Vấn đề đầu vào của mạng
Với cấu trúc mạng nơ ron tích chập chặt chẽ thì yêu cầu đầu vào mạng cũng phải phù hợp với cấu hình mạng Mạng nơ ron tích chập có rất nhiều cấu hình mạng nhưng số lượng cấu hình mạng mô hình YOLO lại bị giới hạn Hiện tại, YOLO đang hỗ trợ hai đầu vào chính là 416x416 và 608x608 Mỗi một đầu vào sẽ có một thiết kế các tầng riêng biệt phù hợp với cấu hình đầu vào Vì thế các bức ảnh trước khi đi vào mô hình sẽ được qua bước tiền xử lý để chỉnh sửa độ tương phản, đưa tỷ lệ của bức ảnh hiện tại về tỷ lệ phù hợp với cấu hình mạng.
Nhiệm vụ các lớp Extra Layers
2.6.1 Đầu ra của mạng nơ ron tích chập
Với cấu trúc phức tạp của mạng nơ ron tích chập, thực hiện tính toán qua nhiều tầng lớp, đầu ra của mô hình là một yếu tố rất quan trọng cần được nguyên cứu Theo trình bày các bước thực hiện xây dựng cấu trúc mạng ở trên, các bức ảnh được vào mô hình mạng, trải qua các tầng tích chập, tầng gộp, tầng kết nối đầy đủ và cuối cùng cho ra đầu ra là một vectơ bao gồm các thành phần như hình dưới đây:
Hình 2.22 Cấu trúc đầu ra của mạng CNN
– 0 là xác xuất dự đoán vật thể xuất hiện trong Bounding Box.
– , , , ℎ giúp xác định Bounding Box Trong đó , lần lượt là tọa độ tâm Bounding Box và , ℎ lần lượt là chiều rộng và chiều cao của Bounding Box.
– 1, 2, … ,lần lượt là vectơ phân phối xác xuất dự đoán của các Classes.
2.6.2 Dự đoán trên nhiều Feature maps
Sau khi đi qua các tầng tích chập thì kích thước ma trận giảm dần theo cấp số nhân là 2, cuối cùng ma trận đầu ra của thuật toán là được một Feature Map có kích thước tương đối nhỏ để dự báo vật thể trên từng ô của Feature Map.
Như đã đề cập ở trên, mô hình YOLO hiện tại chỉ hoạt động chính trên hai cấu hình đầu vào là 416x416 và 608x608 Với mỗi cấu hình đầu vào, Feature Map sẽ có kích thước khác nhau Đối với đầu vào là 416x416 thì Feature Map có các kích thước là 13x13, 26x26, 52x52 Và đối đầu vào là 608x608 thì Feature Map có các kích thước là 19x19, 38x38,
72x72 Việc chia ra nhiều Feature Map với mỗi cấu hình có ý nghĩa đối với đầu ra của thuật toán Với những Feature Map ban đầu có kích thước nhỏ giúp dự báo được các vật thể có kích thước lớn Những Feature Map sau có kích thước lớn hơn trong khi sẽ giúp dự báo các vật thể kích thước nhỏ.[1]
Hình 2.23 Feature Maps ma trận đầu ra 416x416
Việc dự đoán Bounding Box cho một vật thể, YOLO dựa vào hai dữ liệu chính là Anchor Box và Cell Vì thế, để hiểu được nguyên tắc vận hành của dự doán chúng tôi sẽ đi sâu vào hai dữ liệu trên.
2.6.3.1 Khái niệm Cell và Archon Box
Cell chính là từng ô trên Feature Map Trên mỗi một Cell của các Feature Map YOLO sẽ áp dụng ba Anchor Box với kích thước khác nhau lần lượt là Box 1, Box 2, Box 3 để dự đoán vật thể Số lượng Anchor Box sử dụng trên mỗi Cell đều được chúng tôi cài đặt trong thuật toán.
Hình 2.24 Cấu trúc đầu ra mô hình YOLO
Trên đây là một cấu trúc đầu ra thuật toán YOLO trên một Cell Hình ảnh gốc được là một Feature Map có kích thước 13x13, trên Cell này YOLO lựa chọn ba Anchor Box là Box 1, 2, 3 sao cho tâm các Anchor Box trùng cới Cell Sau khi thực hiện dự đoán Bounding Box, YOLO sẽ được một đầu ra thuật toán là một vectơ “ghép” thông số của ba Bounding Box được lựa chọn như trên.[1] Để tìm được Bounding Box cho vật thể, thuật toán YOLO sẽ cần các Anchor Box làm cơ sở ước lượng Những Anchor Box này sẽ được xác định trước và bao quanh vật thể một cách tương đối chính xác Sau này thuật toán hồi quy – Regresstion Bounding Box sẽ tinh
YOLO, mỗi một vật thể trong hình ảnh huấn luyện được phân bố về một Anchor Box. Trong trường hợp có từ hai Anchor Box trở lên cùng bao quanh vật thể thì YOLO sẽ xác định Anchor Box mà có chỉ số IoU ( giữa Anchor Box và Truth Bounding Box) cao nhất.
Chẳng hạn hình 2.16 miêu tả cách xác định Anchor Box cho một vật thể Từ Cell i xác định được ba Anchor Box viền xanh như trong hình Cả ba Anchor Box này đều giao nhau với Bounding Box của vật thể Tuy nhiên chỉ duy nhất một Anchor Box có đường viền dày nhất màu xanh được lựa chọn làm Anchor Box cho vật thể bởi nó có IoU cao nhất.[1]
Hình 2.25 Dự đoán Bounding Box bằng Anchor Box và Cell
Chỉ số IoU là một chỉ số để đo độ chính xác của công cụ phát hiện vật thể trên tập dữ liệu cụ thể Để áp dụng được IoU đánh giá một công cụ phát hiện vật thể bất kì cần:
– Những Ground-truth Bounding Box (Bounding Box đúng của đối tượng, ví dụ như Bounding Box của đối tượng được khoanh vùng và đánh nhãn bằng tay sử dụng trong tập kiểm tra).
– Những Predict Bounding Box được mô hình sinh ra.
Hình 2.26 Chỉ số IoU Ở tử số là Area of Overlap (diện tính phần chồng lên nhau giữa Predicted Bounding Box và Ground-truth Bounding Box) Phần mẫu số là Area of Union (Diện tích phần hợp hay đơn giản hơn là diện tích mà hai Bounding box này đang chiếm) Chia diện tích phần chồng (giao) cho diện tích phần hợp sẽ thu được giá trị mong muốn -Intersection over Union (IoU).
Thêm vào đó, mỗi một vật thể trong hình ảnh huấn luyện được phân bố về một Cell trên Feature Map nơi mà chứa tâm (Mid Point) của vật thể Chẳng hạn như hình chú chó trong hình 2.15 sẽ được phân về cho Cell màu đỏ vì tâm của ảnh chú chó rơi vào đúng Cell này Từ Cell sẽ xác định các Anchor Box bao quanh hình ảnh chú chó.
Như vậy khi xác định một vật thể YOLO sẽ cần xác định hai thành phần gắn liền với nó là (Cell, Anchor Box) Không chỉ riêng mình Cell hoặc chỉ mình Anchor Box.
2.6.3.2 Cách thức dự đoán Bounding Box Để dự báo Bounding Box cho một vật thể YOLO dựa trên một phép biến đổi từ Anchor box và Cell.
Cho một Anchor Box có kích thước ( , ℎ ) tại Cell nằm trên Feature Map với góc trên cùng bên trái của nó là ( , ), mô hình dự đoán 4 tham số ( , , , ℎ ) trong đó hai tham số đầu là độ lệch so với góc trên cùng bên trái của Cell và hai tham số sau là tỷ lệ so với Anchor Box Các tham số này sẽ giúp xác định Bounding Box có tâm (b x , b y ) và kích thước ( , ℎ ) thông qua hàm Sigmoid và hàm Exponential như các công thức bên dưới:
Hình 2.27 Tọa độ Bounding Box
TỔNG QUAN PHẦN CỨNG VÀ PHẦN MỀM
Phần cứng
3.1.1 Giới thiệu xe mô hình RC
Xe RC được hiểu một cách chính xác là Remoted Control Car, tức là xe điều khiển từ xa.
Có hai dòng xe RC được chơi nhiều nhất hiện nay là xe on-road và off-road Xe on- road thường chạy trên đường bằng phẳng, gầm thấp và chạy bằng pin Còn xe off-road là các dạng xe chạy địa hình có gầm cao, trong đó xe Buggy là một trong những loại xe off- road được nhiều người chơi nhất. Ưu điểm:
– Đa dạng kiểu dáng mức giá, giúp mọi người dễ dàng sở hữu được 1 sản phẩm. – Cấu tạo sản phẩm đơn giản, dễ dàng sửa chữa và thay phụ tùng.
– Pin bền, thời gian chơi khá lâu từ 15 – 60p ( chạy liên tục) mỗi lần sạc.
– Khoảng cách điều khiển xa khoảng 100m do sử dụng sóng 2.4ghz.
– Nhiều kỹ thuật được thể hiện như trên xe thật.
– Mẫu xe đẹp do dc thiết kế theo tỉ lệ 1:10 1:12 hoặc 1:18 từ các nguyên mẫu thật. Nhược điểm:
– Có giá thành sản phẩm cao.
– Người chơi phải tự biết sửa chữa xe.
– Khó điều khiển do tốc độ khá cao.
Khung xe tự hành có kiểu hình Buggy offroad 1/10 (đa địa hình) 4WD Kết cấu Khung sườn nhôm dày 3,5mm với 2 mép gấp dập khung tăng độ cứng, ngoài ra còn có 2 thanh chống sườn (trước & sau) Với kích thước dài 40cm, rộng 25cm, cao 15cm.
Truyền động 2 cầu 4 bánh chủ động toàn phần (4WD) – toàn bộ truyền động bạc đạn tốc độ cao Các chi tiết truyền động trong visai và bánh răng làm bằng thép Toàn bộ láp truyền động (dog-bone shaft driver) bằng thép.
Hệ thống treo với hệ càng trước kiểu BALL SUSPENSION, đây là loại càng lái tiên tiến cho góc lái rộng và nhạy Càng treo sau cũng kiểu Ball, giúp tinh chỉnh góc bánh xe rất dễ dàng.
Visai xe được trang bị 2 bộ visai chất lượng cao và siêu bền giúp xe vận hành 4WD tuyệt hảo lúc vào cua và vượt dốc Bộ số được trang bị bộ 2 số tới (tự động) rất nhạy giúp xe tăng tốc lên 75km/h trong nháy mắt Phuộc giảm sốc với loại phuộc dầu 11mm - kiểu piston kèm lò xo nhún và dầu silicon đặc chủng, vận hành vô cùng nhịp nhàng trên mọi địa hình Bánh xe kiểu Off Road với độ bám đường rất tốt.
Hình 3.2 Khung xe mô hình tự hành – Buggy 1:10 3.1.3 Motor DC giảm tốc Động cơ điện một chiều hay còn gọi là motor DC ( DC là từ viết tắt của "Direct Current Motors") là động cơ điều khiển trực tiếp có cấu tạo gồm hai dây (dây nguồn và dây mass) DC motor là một động cơ một chiều với cơ năng quay liên tục. Động cơ giảm tốc hay còn được gọi là motor giảm tốc, motor hộp số, động cơ hộp số… Đây là loại động cơ điện có tốc độ thấp Tốc độ của motor giảm tốc đã giản đi rất nhiều so với những động cơ thông thường có cùng số cực và công suất Khi động cơ này quay với tốc độ chậm thì lực mà nó sản sinh ra sẽ mạnh hơn.
Như vậy thì Motor DC giảm tốc là một động cơ điện một chiều và có hộp giảm tốc.
Servo là một dạng động cơ điện đặc biệt Không giống như động cơ thông thường cứ cắm điện vào là quay liên tục, servo chỉ quay khi được điều khiển (bằng xung PWM) với góc quay nằm trong khoảng bất kì từ 0 – 180 độ Mỗi loại servo có kích thước, khối lượng và cấu tạo khác nhau Có loại thì nặng chỉ 9g (chủ yếu dùng trên máy bay mô mình), có loại thì sở hữu một momen lực bá đạo (vài chục N/m), hoặc có loại thì khỏe và nhông sắc chắc chắn, Động cơ servo được thiết kế như hệ thống hồi tiếp vòng kín Tín hiệu ra của động cơ được nối với một mạch điều khiển Khi động cơ quay, vận tốc và vị trí sẽ được hồi tiếp về mạch điều khiển này Nếu có bầt kỳ lý do nào ngăn cản chuyển động quay của động cơ, cơ cấu hồi tiếp sẽ nhận thấy tín hiệu ra chưa đạt được vị trí mong muốn Mạch điều khiển tiếp tục chỉnh sai lệch cho động cơ đạt được điểm chính xác.
Hình 3.4 Động cơ Servo MG946R 3.1.5 Mạch cầu H
Mạch cầu H dùng để tăng công suất nhằm điều khiển DC Motor thông qua tín hiệu từ Jetson Nano.
SHB được thiết kế để điều khiển một động cơ DC có chổi than công suất lớn cho những ứng dụng trong điều khiển robot, xe điện, và những ứng dụng DIY khác Dòng điện điều khiển liên tục đạt đến 20A và dòng đỉnh 50A, dãy điện áp hoạt động rộng từ 12V đến 30V Sản phẩm còn được thiết kế cho những ứng dụng có tần số PWM cao, tần số cao nhất đạt được ở 40kHz.
SHB còn hỗ trợ giám sát các thông số trong quá trình điều khiển bằng việc đưa ra một số tín hiệu phản hồi như: dòng điện, điện áp, nhiệt độ.
SHB hỗ trợ phần cứng tương thích với các mạch Arduino thông dụng : Uno, Mega cũng như cung cấp các ví dụ mẫu (điều khiển PWM, tốc độ và vị trí sử dụng PID Controller).
Hình 3.5 Mạch cầu H SHB Tính năng:
– Điều khiển thuận nghịch cho một động cơ DC chổi than.
– Cấu hình mạch cầu H với MOSFET kênh N cho hiệu suất tốt hơn, đáp ứng cho những ứng dụng có công suất lớn.
– Tương thích với các mạch Arduino.
– Tương thích với CircleTech Motor Control Shield 32bit Microcontroller (CT – MCS).
– Cung cấp các tín hiệu phản hồi như: Dòng điện, điện áp, nhiệt độ.
– Có thể gắn thêm tản nhiệt, vỏ hộp.
– Hỗ trợ 3 ngõ vào cho encoder (A, B, Z).
– Hỗ trợ mã nguồn mở.
– Phù hợp cho các ứng dụng DIY, Prototype.
NVIDIA Jetson Nano Developer Kit là một máy tính nhỏ nhưng rất mạnh mẽ cho phép bạn chạy song song nhiều mạng neural sử dụng cho các ứng dụng như phân loại hình ảnh, phát hiện đối tượng, phân đoạn và xử lý giọng nói.
Sản phẩm NVIDA Jetson Nano Developer Kit trang bị số lượng cổng kết nối khá đầy đủ: 4 cổng USB 3.0, cổng HDMI, DisplayPort và một cổng Ethernet, cùng với đó là những chuẩn kết nối phổ biến như SDIO, I2C, SPIO và UART Không chỉ vậy, Jetson Nano còn có cả cổng kết nối M.2, giao thức MIPI-CSI để kết nối với máy ảnh Người dùng cũng có thể kết nối mạng cho Jetson Nano bằng Wifi nếu không muốn sử dụng dây cáp Ethernet truyền thống.
– Hỗ trợ GPU này bao gồm 1 CPU 4 nhân 64-bit dựa trên ARM Cortex-A57, RAM 4GB và bộ xử lý video có thể xử lý lên đến 4K 30fps đối với mã hóa và 4K 60fps đối với giải mã, cùng với đó là các khe cắm PCIe và USB 3.0.
– Jetson Nano cung cấp 472 GFLOPS để chạy các thuật toán AI hiện đại một cách nhanh chóng, với một quad-core 64-bit ARM CPU, một 128-core được tích hợp trên NVIDIA GPU, cũng như bộ nhớ 4GB LPDDR4 Có thể chạy song song nhiều mạng neural và xử lý đồng thời một số cảm biến có độ phân giải cao Jetson Nano cũng được hỗ trợ bởi NVIDIA JetPack Bao gồm các gói hỗ trợ board (BSP), CUDA, cuDNN và thư viện phần mềm TensorRT cho deep learning, computer vision, GPU computing, multimedia processing và nhiều ứng dụng khác SDK cũng bao gồm khả năng cài đặt frameworks Machine Learning (ML) mã nguồn mở như TensorFlow, PyTorch, Caffe/Caffe2, Keras và MXNet, cho phép các nhà phát triển tích hợp các model AI/ framework AI yêu tích của họ vào các sản phẩm một cách nhanh chóng và dễ dàng.
Phần mềm
Python là ngôn ngữ lập trình hướng đối tượng, cấp cao, mạnh mẽ, được tạo ra bởi Guido van Rossum Nó dễ dàng để tìm hiểu và đang nổi lên như một trong những ngôn ngữ lập trình nhập môn tốt nhất cho người lần đầu tiếp xúc với ngôn ngữ lập trình. Python hoàn toàn tạo kiểu động và sử dụng cơ chế cấp phát bộ nhớ tự động Python có cấu trúc dữ liệu cấp cao mạnh mẽ và cách tiếp cận đơn giản nhưng hiệu quả đối với lập trình hướng đối tượng Cú pháp lệnh của Python là điểm cộng vô cùng lớn vì sự rõ ràng, dễ hiểu và cách gõ linh động làm cho nó nhanh chóng trở thành một ngôn ngữ lý tưởng để viết script và phát triển ứng dụng trong nhiều lĩnh vực, ở hầu hết các nền tảng.
Hình 3.10 Ngôn ngữ Python Tính năng chính của Python:
– Ngôn ngữ lập trình đơn giản, dễ học: Python có cú pháp rất đơn giản, rõ ràng.
Nó dễ đọc và viết hơn rất nhiều khi so sánh với những ngôn ngữ lập trình khác như C++, Java, C# Python làm cho việc lập trình trở nên thú vị, cho phép bạn tập trung vào những giải pháp chứ không phải cú pháp.
– Miễn phí, mã nguồn mở: Bạn có thể tự do sử dụng và phân phối Python, thậm chí là dùng nó cho mục đích thương mại Vì là mã nguồn mở, bạn không những có thể sử dụng các phần mềm, chương trình được viết trong Python mà còn có thể thay đổi mã nguồn của nó Python có một cộng đồng rộng lớn, không ngừng cải thiện nó mỗi lần cập nhật.
– Khả năng di chuyển: Các chương trình Python có thể di chuyển từ nền tảng này sang nền tảng khác và chạy nó mà không có bất kỳ thay đổi nào Nó chạy liền mạch trên hầu hết tất cả các nền tảng như Windows, macOS, Linux.
– Khả năng mở rộng và có thể nhúng: Giả sử một ứng dụng đòi hỏi sự phức tạp rất lớn, bạn có thể dễ dàng kết hợp các phần code bằng C, C++ và những ngôn ngữ khác (có thể gọi được từ C) vào code Python Điều này sẽ cung cấp cho ứng dụng của bạn những tính năng tốt hơn cũng như khả năng scripting mà những ngôn ngữ lập trình khác khó có thể làm được.
– Ngôn ngữ thông dịch cấp cao: Không giống như C/C++, với Python, bạn không phải lo lắng những nhiệm vụ khó khăn như quản lý bộ nhớ, dọn dẹp những dữ liệu vô nghĩa, Khi chạy code Python, nó sẽ tự động chuyển đổi code sang ngôn ngữ máy tính có thể hiểu Bạn không cần lo lắng về bất kỳ hoạt động ở cấp thấp nào.
– Thư viện tiêu chuẩn lớn để giải quyết những tác vụ phổ biến: Python có một số lượng lớn thư viện tiêu chuẩn giúp cho công việc lập trình của bạn trở nên dễ thở hơn rất nhiều, đơn giản vì không phải tự viết tất cả code.
– Hướng đối tượng: Mọi thứ trong Python đều là hướng đối tượng Lập trình hướng đối tượng (OOP) giúp giải quyết những vấn đề phức tạp một cách trực quan Với OOP, bạn có thể phân chia những vấn đề phức tạp thành những tập nhỏ hơn bằng cách tạo ra các đối tượng.
Phạm vi ứng của Python:
– Lập trình ứng dụng web: Bạn có thể tạo web app có khả năng mở rộng (scalable) được bằng cách sử dụng framework và CMS (Hệ thống quản trị nội dung) được tích hợp trong Python Vài nền tảng phổ biến để tạo web app là: Django, Flask, Pyramid, Plone, Django CMS Các trang như Mozilla, Reddit, Instagram và PBS đều được viết bằng Python.
– Khoa học và tính toán: Có nhiều thư viện trong Python cho khoa học và tính toán số liệu, như SciPy và NumPy, được sử dụng cho những mục đích chung chung trong tính toán Và, có những thư viện cụ thể như: EarthPy cho khoa học trái đất, AstroPy cho Thiên văn học, Ngoài ra, Python còn được sử dụng nhiều trong machine learning, khai thác dữ liệu và deep learning.
–Tạo nguyên mẫu phần mềm: Python chậm hơn khi so sánh với các ngôn ngữ được biên dịch như C++ và Java Nó có thể không phải là lựa chọn tốt nếu nguồn lực bị giới hạn và yêu cầu về hiệu quả là bắt buộc Tuy nhiên, Python là ngôn ngữ tuyệt vời để tạo những nguyên mẫu (bản chạy thử - prototype) Ví dụ, bạn có thể sử dụng Pygame (thư viện viết game) để tạo nguyên mẫu game trước Nếu thích nguyên mẫu đó có thể dùng C++ để viết game thực sự.
– Ngôn ngữ tốt để dạy lập trình: Python được nhiều công ty, trường học sử dụng để dạy lập trình cho trẻ em và những người mới lần đầu học lập trình Bên cạnh những tính năng và khả năng tuyệt vời thì cú pháp đơn giản và dễ sử dụng của nó là lý do chính cho việc này.
Anaconda là một nền tảng phân phối miễn phí của ngôn ngữ lập trình Python và R cho tính toán khoa học (khoa học dữ liệu, machine learning, xử lý dữ liệu lớn, phân tích dự đoán, ), nhằm mục đích đơn giản hóa việc quản lý và triển khai gói Nó có trên cả Windows, MacOS và Linux.
Anaconda chứa tất cả các gói (công cụ) phổ biến nhất mà một nhà khoa học dữ liệu cần Các package trong Anaconda được quản lý bởi trình quản lý riêng của nền tảng này là conda Ta thường dùng conda để tạo môi trường cô lập các dự án của mình, nhằm sử dụng các phiên bản Python khác nhau hoặc các phiên bản package khác nhau, cũng như dùng nó để cài đặt, gỡ cài đặt và cập nhật các package riêng trong từng dự án.
Lợi ích khi dùng Anaconda:
– Anaconda không chỉ có Python: Anaconda không chỉ gồm có Python, mà còn có hơn 600 package mở rộng đi kèm, đó là các package cơ bản cho các tác vụ xử lý khoa học dữ liệu như NumPy, Pandas, Bạn không cần phải nhập các lệnh trên terminal để tải về nữa, chỉ cần tải Anaconda là có thể sử dụng ngay các package đó, giúp tiết kiệm khá nhiều thời gian cho chúng ta.
CHƯƠNG TRÌNH NHẬN DIỆN ĐỐI TƯỢNG
Chuẩn bị data
Data là những hình ảnh của đối tượng mà chúng ta sẽ nhận diện Càng nhiều data thì những đặc trưng của đối tượng khi train dữ liệu sẽ càng rõ, vì vậy mà mỗi đối tượng sẽ cần tối thiểu 3000 hình ảnh Trong đồ án này chúng tôi sử dụng 5 đối tượng thường gặp trên đường:
– Người đi bộ qua vạch kẻ đường.
Hình 4.1 Người đi bộ qua vạch kẻ đường
Hình 4.2 Xe hơi trên đường – Biển báo hiệu lệnh rẽ trái.
– Biển báo cấm rẽ trái – đi thẳng.
Hình 4.4 Biển báo cấm rẽ trái – đi thẳng – Biển báo Stop.
Gán nhãn data – labelImg Tool
Dùng công cụ gán nhãn labelImg Tool để gán nhãn cho từng đối tượng nhằm tạo ra data dùng để train dữ liệu Các bước sử dụng công cụ labelImg Tool như sau:
– Bước 1: click chọn OPEN DIR để chọn thư mục chứa ảnh.
– Bước 2: click chọn CHANGE SAVE DIR để chọn thư mục lưu file txt/xml.
– Bước 3: click vào Pascal/VOC để chuyển đổi file lưu từ “.xml” sang “.txt” (Bước này quan trọng).
– Bước 4: chọn View/Auto save mode để tự lưu các file.
– Bước 5: chọn View/Single class mode để gán nhãn cho từng loại đối tượng. Cách gán nhãn từng loại đối tượng một sẽ cho năng suất gán nhãn cao hơn bởi vì có thể loại bỏ các bước lựa chọn tên nhãn và click chọn OK.
Một số phím tắt thường sử dụng trong công cụ gán nhãn:
Hình 4.7 Gán nhãn cho vật thể
Với mỗi hình gán nhãn xong, tool sẽ tự tạo một file có tên trùng với bức ảnh và có đuôi “.txt” có nội dung như sau:
Hình 4.8 Nội dung file “.txt”
Tương tự như vậy, gán nhãn cho từng đối tượng trong đề tài:
– Gán nhãn cho người đi bộ qua vạch kẻ đường.
Hình 4.9 Gán nhãn cho người đi bộ qua vạch kẻ đường – Gán nhãn cho xe hơi đậu trên đường.
– Gán nhãn cho biển báo hiệu lệnh rẽ trái.
Hình 4.11 Gán nhãn cho biển báo hiệu lệnh rẽ trái – Gán nhãn cho biển báo cấm rẽ trái – đi thẳng.
– Gán nhãn cho biển báo Stop.
Hình 4.13 Gán nhãn cho biển báo Stop
Train data trên Google Colab
4.3.1 Train data – model Yolov3 Bước 1: Resize tất cả ảnh cho cùng kích thước bằng phần mềm trước khi gán nhãn. Bước 2: Thực hiện gán nhãn bằng công cụ labelImg Tool:
– Xóa các danh mục trong file data/predefined_classes.txt
– Chọn Open Dir => chọn đến thư mục chứa ảnh.
– Chọn Open change dir => chọn thư mục chứa ảnh.
– Gán nhãn xong phải mở file classes.text => xóa dòng trống cuối cùng.
Bước 3: Mở file classes.txt trong custom_data => Save as => classes.names (All type
Bước 4: Tạo file train.txt và test.txt: cd Downloads\train\custom_data
– Liệt kê File ảnh: dir/s/b *.jpg
– Xuất đường dẫn file ảnh: dir/s/b *.jpg >train.txt
– Replace đường dẫn trong file train.txt => custom_data/xxxx.jpg
– Xóa dòng trống cuối cùng trong train.txt => Save
– Mở file train.txt => save as tạo file test.txt.
– File train.txt va test.txt được lưu trong file custom_data.
– Mở Notepab và gõ nội dung như sau: classes = 5 (số lượng vật thể) train = custom_data/train.txt valid custom_data/test.txt names custom_data/classes.names backup
– Lưu và đuổi đuôi từ “.txt” sang “.data”
– File labelled_data.data cũng được lưu trong file custom_data.
Bước 6: Zip thư mục chứa ảnh (đặt tên thư mục là custom_data).
Bước 7: Upload file custom_data.zip vào thư mục yolo_custom_model_Training trên Google Drive.
Bước 8: Mở Google colab: colab.research.google.com
Bước 9: Liên kết Colab với Drive: from google.colab import drive drive.mount('/content/drive')
Bước 10: Liệt kê tệp trong thư mục yolo_custom_model_Training ls
'/content/drive/My Drive/yolo_custom_model_Training'
Bước 11: Download file darknet vào thư mục yolo_custom_model_Training trong
!git clone 'https://github.com/AlexeyAB/darknet.git' '/content/drive/My Drive/ yolo_custom_model_Training/darknet'
Bước 12: Chuyển đến thư mục darknet
%cd /content/drive/My Drive/yolo_custom_model_Training/darknet
Bước 13: Liệt kê file có trong thư mục darknet
!ls => xóa !ls => gõ !make => run
Bước 14: Download và chỉnh sửa file makefile
Bước 15: Xóa makefile cũ trên drive => upload makefile mới lên drive
– Khi xóa phải xem makefile đã mất bên thư mục của colab chưa.
– Khi upload cũng phải xem makefile đã tải lên colab chưa.
– Classes = số lượng vật thể
– Save as yolov3.cfg => yolov3_custom.cfg => upload lên darknet/cfg
– Khi upload phải xem bên colab có chưa.
Bước 17: Tạo file custom_weight trong yolo_custom_model_Training => Upload file darknet53.conv.74 vào thư mục custom_weight.
Bước 18: Tạo file backup trong yolo_custom_model_Training.
Bước 19: Chuyển đến thư mục yolo_custom_model_Training %cd / content/drive/My Drive/yolo_custom_model_Training
Bước 20: Gõ và chạy lệnh: !darknet/darknet
Hình 4.14 Thứ tự Train Yolov3 bước 1 – 20 Bước 21: Thực hiện lại các bước với thời gian chạy là GPU:
– Liệt kê tệp trong thư mục yolo_custom_model_Training
– Chuyển đến thư mục darknet
– Liệt kê file có trong thư mục darknet => chạy lệnh !make
– Chuyển đến thư mục yolo_custom_model_Training
– Gõ và chạy lệnh: !darknet/darknet
!unzip '/content/drive/My Drive/yolo_custom_model_Training/custom_data.zi p' -d '/content/drive/My Drive/yolo_custom_model_Training'
– Chuyển đến thư mục yolo_custom_model_Training
!darknet/darknet detector train custom_data/labelled_data.data darknet/cfg/yol ov3_custom.cfg custom_weight/darknet53.conv.74 -dont_show
Hình 4.15 Thứ tự Train Yolov3 bước 21
4.3.2 Train data – model Yolov3 – tiny Bước 1: Resize tất cả ảnh cho cùng kích thước bằng phần mềm trước khi gán nhãn. Bước 2: Thực hiện gán nhãn bằng công cụ labelImg Tool:
– Xóa các danh mục trong file data/predefined_classes.txt
– Chọn Open Dir => chọn đến thư mục chứa ảnh.
– Chọn Open change dir => chọn thư mục chứa ảnh.
– Gán nhãn xong phải mở file classes.text => xóa dòng trống cuối cùng.
Bước 3: Mở file classes.txt trong custom_data => Save as => classes.names (All type
Bước 4: Tạo file train.txt và test.txt:
– Mở cmd chỉ đường dẫn tới thư mục chứa ảnh: cd Downloads\train\custom_data
– Liệt kê File ảnh: dir/s/b *.jpg
– Xuất đường dẫn file ảnh: dir/s/b *.jpg >train.txt
– Replace đường dẫn trong file train.txt => custom_data/xxxx.jpg
– Xóa dòng trống cuối cùng trong train.txt => Save
– Mở file train.txt => save as tạo file test.txt.
– File train.txt va test.txt được lưu trong file custom_data.
– Mở Notepab và gõ nội dung như sau: classes = 5 (số lượng vật thể) train = custom_data/train.txt valid custom_data/test.txt names backup = backup
– Lưu và đuổi đuôi từ “.txt” sang “.data”
– File labelled_data.data cũng được lưu trong file custom_data.
Bước 6: Zip thư mục chứa ảnh (đặt tên thư mục là custom_data).
Bước 7: Upload file custom_data.zip vào thư mục yolo_custom_model_Training trên Google Drive.
Bước 8: Mở Google colab: colab.research.google.com
Bước 9: Liên kết Colab với Drive: from google.colab import drive drive.mount('/content/drive')
Bước 10: Liệt kê tệp trong thư mục yolo_custom_model_Training ls
'/content/drive/My Drive/yolo_custom_model_Training'
Bước 11: Download file darknet vào thư mục yolo_custom_model_Training trong
!git clone 'https://github.com/AlexeyAB/darknet.git' '/content/drive/My Drive/ yolo_custom_model_Training/darknet'
Bước 12: Chuyển đến thư mục darknet
%cd /content/drive/My Drive/yolo_custom_model_Training/darknet
Bước 13: Liệt kê file có trong thư mục darknet
!ls => xóa !ls => gõ !make => run
Bước 14: Download và chỉnh sửa file makefile
Bước 15: Xóa makefile cũ trên drive => upload makefile mới lên drive
– Khi xóa phải xem makefile đã mất bên thư mục của colab chưa.
– Khi upload cũng phải xem makefile đã tải lên colab chưa.
Bước 16: Tải và sửa file yolov3 – tiny.cfg trong thư mục darknet/cfg:
– step = 0.8* max_batches, 0.9* max_batches
– Classes = số lượng vật thể
– Save as yolov3 – tiny.cfg => yolov3 – tiny_custom.cfg => upload lên darknet/cfg – Khi upload phải xem bên colab có chưa.
Bước 17: Tạo file custom_weight trong yolo_custom_model_Training => Upload file yolov3 – tiny.conv.15 vào thư mục custom_weight.
Bước 18: Tạo file backup trong yolo_custom_model_Training.
Bước 19: Chuyển đến thư mục yolo_custom_model_Training %cd / content/drive/My Drive/yolo_custom_model_Training
Bước 20: Gõ và chạy lệnh: !darknet/darknet
Hình 4.16 Thứ tự Train Yolov3 – tiny bước 1 – 20
Bước 21: Thực hiện lại các bước với thời gian chạy là GPU:
– Liên kết Colab với Drive
– Liệt kê tệp trong thư mục yolo_custom_model_Training
– Chuyển đến thư mục darknet
– Liệt kê file có trong thư mục darknet => chạy lệnh !make
– Chuyển đến thư mục yolo_custom_model_Training
– Gõ và chạy lệnh: !darknet/darknet
!unzip '/content/drive/My Drive/yolo_custom_model_Training/custom_data.zi p' -d '/content/drive/My Drive/yolo_custom_model_Training'
– Chuyển đến thư mục yolo_custom_model_Training
!darknet/darknet detector train custom_data/labelled_data.data darknet/cfg/yol ov3-tiny_custom.cfg custom_weight/yolov3-tiny.conv.15 -dont_show
Hình 4.17 Thứ tự Train Yolov3 – tiny bước 21
4.3.3 Train data – model Yolov4 Bước 1: Resize tất cả ảnh cho cùng kích thước bằng phần mềm trước khi gán nhãn. Bước 2: Thực hiện gán nhãn bằng công cụ labelImg Tool:
– Xóa các danh mục trong file data/predefined_classes.txt
– Chọn Open Dir => chọn đến thư mục chứa ảnh.
– Chọn Open change dir => chọn thư mục chứa ảnh.
– Gán nhãn xong phải mở file classes.text => xóa dòng trống cuối cùng.
Bước 3: Mở file classes.txt trong custom_data => Save as => classes.names (All type
Bước 4: Tạo file train.txt và test.txt:
– Mở cmd chỉ đường dẫn tới thư mục chứa ảnh: cd Downloads\train\custom_data
– Liệt kê File ảnh: dir/s/b *.jpg
– Xuất đường dẫn file ảnh: dir/s/b *.jpg >train.txt
– Xóa dòng trống cuối cùng trong train.txt => Save
– Mở file train.txt => save as tạo file test.txt.
– File train.txt va test.txt được lưu trong file custom_data.
– Mở Notepab và gõ nội dung như sau: classes = 5 (số lượng vật thể) train = custom_data/train.txt valid custom_data/test.txt names custom_data/classes.names backup
– Lưu và đuổi đuôi từ “.txt” sang “.data”
– File labelled_data.data cũng được lưu trong file custom_data.
Bước 6: Zip thư mục chứa ảnh (đặt tên thư mục là custom_data).
Bước 7: Upload file custom_data.zip vào thư mục yolo_custom_model_Training trên Google Drive.
Bước 8: Mở Google colab: colab.research.google.com
Bước 9: Liên kết Colab với Drive: from google.colab import drive drive.mount('/content/drive')
Bước 10: Liệt kê tệp trong thư mục yolo_custom_model_Training ls '/content/drive/My Drive/yolo_custom_model_Training'
Bước 11: Download file darknet vào thư mục yolo_custom_model_Training trong
!git clone 'https://github.com/AlexeyAB/darknet.git' '/content/drive/My Drive/ yolo_custom_model_Training/darknet'
Bước 12: Chuyển đến thư mục darknet
%cd /content/drive/My Drive/yolo_custom_model_Training/darknet
Bước 13: Liệt kê file có trong thư mục darknet
!ls => xóa !ls => gõ !make => run
Bước 14: Download và chỉnh sửa file makefile
Bước 15: Xóa makefile cũ trên drive => upload makefile mới lên drive
– Khi xóa phải xem makefile đã mất bên thư mục của colab chưa.
– Khi upload cũng phải xem makefile đã tải lên colab chưa.
Bước 16: Tải và sửa file yolov4.cfg trong thư mục darknet/cfg:
– step = 0.8* max_batches, 0.9* max_batches
– Classes = số lượng vật thể
– Save as yolov4.cfg => yolov4_custom.cfg => upload lên darknet/cfg
– Khi upload phải xem bên colab có chưa.
Bước 17: Tạo file custom_weight trong yolo_custom_model_Training => Upload file yolov4.conv.137 vào thư mục custom_weight.
Bước 18: Tạo file backup trong yolo_custom_model_Training.
Bước 19: Chuyển đến thư mục yolo_custom_model_Training %cd / content/drive/My Drive/yolo_custom_model_Training
Bước 20: Gõ và chạy lệnh: !darknet/darknet
Hình 4.18 Thứ tự Train Yolov4 bước 1 – 20 Bước 21: Thực hiện lại các bước với thời gian chạy là GPU:
– Liên kết Colab với Drive
– Liệt kê tệp trong thư mục yolo_custom_model_Training
– Chuyển đến thư mục darknet
– Liệt kê file có trong thư mục darknet => chạy lệnh !make
– Chuyển đến thư mục yolo_custom_model_Training
!unzip '/content/drive/My Drive/yolo_custom_model_Training/custom_data.zi p' -d '/content/drive/My Drive/yolo_custom_model_Training'
– Chuyển đến thư mục yolo_custom_model_Training
!darknet/darknet detector train custom_data/labelled_data.data darknet/cfg/yol ov4_custom.cfg custom_weight/yolov4.conv.137 -dont_show
Hình 4.19 Thứ tự Train Yolov4 bước 21
4.3.4 Train data – model Yolov4 – tiny
Bước 1: Resize tất cả ảnh cho cùng kích thước bằng phần mềm trước khi gán nhãn. Bước 2: Thực hiện gán nhãn bằng công cụ labelImg Tool:
– Xóa các danh mục trong file data/predefined_classes.txt
– Chọn Open Dir => chọn đến thư mục chứa ảnh.
– Chọn Open change dir => chọn thư mục chứa ảnh.
– Gán nhãn xong phải mở file classes.text => xóa dòng trống cuối cùng.
Bước 3: Mở file classes.txt trong custom_data => Save as => classes.names (All type
Bước 4: Tạo file train.txt và test.txt:
– Mở cmd chỉ đường dẫn tới thư mục chứa ảnh: cd Downloads\train\custom_data
– Liệt kê File ảnh: dir/s/b *.jpg
– Xuất đường dẫn file ảnh: dir/s/b *.jpg >train.txt
– Replace đường dẫn trong file train.txt => custom_data/xxxx.jpg
– Xóa dòng trống cuối cùng trong train.txt => Save
– Mở file train.txt => save as tạo file test.txt.
– File train.txt va test.txt được lưu trong file custom_data.
– Mở Notepab và gõ nội dung như sau: classes = 5 (số lượng vật thể) train = custom_data/train.txt valid custom_data/test.txt names custom_data/classes.names backup
– Lưu và đuổi đuôi từ “.txt” sang “.data”
– File labelled_data.data cũng được lưu trong file custom_data.
Bước 6: Zip thư mục chứa ảnh (đặt tên thư mục là custom_data).
Bước 7: Upload file custom_data.zip vào thư mục yolo_custom_model_Training trên Google Drive.
Bước 9: Liên kết Colab với Drive: from google.colab import drive drive.mount('/content/drive')
Bước 10: Liệt kê tệp trong thư mục yolo_custom_model_Training ls
'/content/drive/My Drive/yolo_custom_model_Training'
Bước 11: Download file darknet vào thư mục yolo_custom_model_Training trong
!git clone 'https://github.com/AlexeyAB/darknet.git' '/content/drive/My Drive/ yolo_custom_model_Training/darknet'
Bước 12: Chuyển đến thư mục darknet
%cd /content/drive/My Drive/yolo_custom_model_Training/darknet
Bước 13: Liệt kê file có trong thư mục darknet
!ls => xóa !ls => gõ !make => run
Bước 14: Download và chỉnh sửa file makefile
Bước 15: Xóa makefile cũ trên drive => upload makefile mới lên drive
– Khi xóa phải xem makefile đã mất bên thư mục của colab chưa.
– Khi upload cũng phải xem makefile đã tải lên colab chưa.
Bước 16: Tải và sửa file yolov4 – tiny – custom.cfg trong thư mục darknet/cfg:
– step = 0.8* max_batches, 0.9* max_batches
– Classes = số lượng vật thể
– Save yolov3 – tiny – custom.cfg => upload lên darknet/cfg
– Khi upload phải xem bên colab có chưa.
Bước 17: Tạo file custom_weight trong yolo_custom_model_Training => Upload file yolov4 – tiny.conv.29 vào thư mục custom_weight.
Bước 18: Tạo file backup trong yolo_custom_model_Training.
Bước 19: Chuyển đến thư mục yolo_custom_model_Training %cd / content/drive/My Drive/yolo_custom_model_Training
Bước 20: Gõ và chạy lệnh: !darknet/darknet
Hình 4.20 Thứ tự Train Yolov4 – tiny bước 1 – 20Bước 21: Thực hiện lại các bước với thời gian chạy là GPU:
– Liên kết Colab với Drive
– Liệt kê tệp trong thư mục yolo_custom_model_Training
– Chuyển đến thư mục darknet
– Liệt kê file có trong thư mục darknet => chạy lệnh !make
– Chuyển đến thư mục yolo_custom_model_Training
– Gõ và chạy lệnh: !darknet/darknet
!unzip '/content/drive/My Drive/yolo_custom_model_Training/custom_data.zi p' -d '/content/drive/My Drive/yolo_custom_model_Training'
– Chuyển đến thư mục yolo_custom_model_Training
!darknet/darknet detector train custom_data/labelled_data.data darknet/cfg/yol ov4-tiny-custom.cfg custom_weight/yolov4-tiny.conv.29 -dont_show
Hình 4.21 Thứ tự Train Yolov4 – tiny bước 21
Code chương trình nhận diện đối tượng
Để nhận diện được đối tượng thì code có thể tóm gọn qua những bước sau:
– Khai báo các thư viện cần thiết.
– Tạo một biến để đọc file config và weights.
– Đọc từng dòng trong file “.txt” hoặc file “.classes”
– Đọc từng khung hình trong video.
– Nhận diện từng đối tượng trong khung hìn và so sánh với từng nhãn có trong file “.txt” hoặc “.classes”.
– Xác định 4 điểm trong khung ảnh mà chứa đối tượng.
– Vẽ một khung từ 4 điểm trên.
– In tên đối tượng và phần trăm mà đối tượng giống với ảnh đã train.
– Xuất từng khung hình để được một video liền mạch.
Hình 4.22 Code nhận diện đối tượng dùng cho tất cả các model
So sánh, đánh giá các model – Lựa chọn model phù hợp
Để so sánh và đánh giá các model cần phải dựa vào 2 tiêu chí chủ yếu là: Độ chính xác và tốc độ khung hình (FPS) của từng model Model nào có thể trung hòa được 2 yếu tố trên là đạt yêu cầu đối với bài toán nhận dạng đối tượng trong thời gian thực Để làm được điều đó thì cần trải qua các bước sau:
– Chọn một đối tượng để thực hiện gán nhãn và train dữ liệu trên Google Colab.
– Chọn một máy tính để chạy chương trình nhận diện đối tượng cho từng model.
Do các model phải cùng chạy trên một cấu hình máy tính thì mới có thể đánh giá tổng quan được các model.
– Lập trình để hiển thị FPS trên khung hình và kết hợp với chương trình nhận diện vật thể.
Sau khi thực hiện các bước thì được kết quả như sau:
Hình 4.23 Đối tượng dùng để so sánh các model YOLO – Kangaroo
Hình 4.24 Nhận diện đối tượng model YOLOv3
Hình 4.25 Nhận diện đối tượng model YOLOv3 – tiny
Hình 4.26 Nhận diện đối tượng model YOLOv4
– Độ chính xác: các model đều nhận diện được đối tượng, nhưng ở các model YOLOv4 thì nhận diện tốt hơn các model YOLOv3 với độ chính xác lớn hơn 90% và nhận diện được nhiều đối tượng cùng một lúc.
– Tốc độ khung hình: các model YOLO – tiny có tốc độ khung hình cao hơn nhiều so với các model YOLO, trong đó cao nhất là model YOLOv4 – tiny với khoảng 10 FPS.
Qua việc so sánh và đánh giá về độ chính xác, tốc độ khung hình của các model thì thấy rằng có 2 model thích hợp cho các yêu cầu của bài toán đó là YOLOv3 – tiny vàYOLOv4 – tiny vì có thể trung hòa được cả 2 yếu tố là độ chính xác và FPS Nhưng nhìn chung thì YOLOv4 – tiny vẫn tốt hơn YOLOv3 – tiny về mặt FPS (khoảng 20%) và độ chính xác (khoảng 8%) Do vậy ở bài toán nhận diện đối tượng của đề tài này thì modelYOLOv4 – tiny là phù hợp nhất.
THỰC NGHIỆM VÀ KẾT QUẢ
Tổng quan
Trong chương này, chúng tôi thiết kế một hệ thống phát hiện các đối tượng bằng camera áp dụng mô hình phát hiện vật thể YOLOv4 – tiny Từ dữ liệu đầu ra của mô hình, chúng tôi kiểm tra liệu đối tượng có đang nằm ở trong vùng điều khiển hay không và từ đó đưa ra tín hiệu điều khiển xe theo từng giai đoạn phù hợp với khoảng cách hiện tại của đối tượng và xe.
Tiếp theo, chúng tôi tiến hành lắp đặt và thử nghiệm hệ thống trên xe nhằm kiểm tra liệu hệ thống của chúng tôi có đáp ứng được mục tiêu đã định ra ban đầu hay không, hệ thống chạy trên thời gian thực có ổn định hay không, có độ trễ xảy ra hay không và cuối cùng kiểm tra xem độ chính xác khi xử lý tín hiệu có phù hợp hay không để từ đó chúng tôi điều chỉnh thuật toán một cách chính xác hơn.
Hình 5.1 Sơ đồ khối mô hình xe tự hành
Hình 5.2 Sơ đồ chân mô hình xe tự hành
Hình 5.3 Mô hình xe tự hành hướng nhìn từ phía trước
Hình 5.4 Mô hình xe tự hành hướng nhìn từ trên xuống
Xử lý nhận diện đối tượng
5.2.1 Giới thiệu Điểm cốt lõi của hệ thống chính là vấn đề nhận dạng các đối tượng, nếu hệ thống phát hiện đối tượng chính xác và đạt được hiệu quả cao thì hệ thống sẽ đáp ứng được chỉ tiêu về tín hiệu xử lý Vì vậy việc lựa chọn thuật toán và mô hình cần phải được khảo sát kỹ và đưa vào thực nghiệm để đánh giá độ ổn định và đáp ứng của mô hình Do đó, dựa trên cơ sở so sánh các thuật toán và mô hình được đề cập ở phần trước, chúng tôi chọn mô hình YOLOv4 – tiny làm cơ sở cho việc tìm kiếm và phát hiện đối tượng của hệ thống.
Mô hình YOLOv4 – tiny là một trong những mô hình phát hiện vật thể nhanh nhất hiện tại với độ chính xác tương đối ổn Dựa vào tốc độ phát hiện vật thể của mô hình, hệ thống có thể đáp ứng được tiêu chí chạy được trong thời gian thực Phiên bản này được phát hành vào ngày 25 tháng 6 năm 2020, nó cải thiện được độ chính xác cũng như tốc độ phát hiện và một số tính năng khác Vì vậy, đồ án lần này của chúng tôi sử dụng mô hình
5.2.2 Thực hiện nhận diện đối tượng
Nhận diện 5 đối tượng trong thời gian thực thông qua camera trên mô hình xe tự hành bằng chương trình nhận diện đối tượng ở phần trước.
Hình 5.5 Nhận diện người trong thời gian thực
Hình 5.7 Nhận diện biển báo hiệu lệnh rẽ trái trong thời gian thực
Hình 5.9 Nhận diện biển báo STOP trong thời gian thực Nhận xét:
– Phát hiện các đối tượng nhanh và nhận diện các đối tượng với độ chính xác cao (trên 95%).
– Khi xe di chuyển thì việc nhận diện các đối tượng có giảm về mặt độ chính xác nhưng không đáng kể, hầu hết độ chính xác đều trên 90%.
Xử lý tránh vật cản
Chúng tôi kết hợp sử dụng thuật toán nhận diện vật thể và ước lượng khoảng cách từ xe đến các đối tuọng để tiến hành điều khiển xe dừng lại hoặc tránh vật cản Đầu tiên hệ thống sẽ kiểm tra xem có đối tượng nào phía trước xe hay không thông qua những hình ảnh mà camera ghi lại và được xử lý bằng chương trình nhận diện đối tượng Nếu có, hệ thống sẽ ước lượng khoảng cách từ xe đến đối tượng và điều khiển xe dừng lại (đối với đối tượng là người và biển báo STOP), điều khiển xe tránh vật cản (đối với đối tượng là xe), điều khiển xe rẽ sang trái hoặc phải (đối với đối tượng là biển báo hiệu lệnh rẽ trái và biển báo cấm rẽ trái – đi thẳng) khi khoảng cách phù hợp với yêu cầu đặt ra trước đó.
Bắt đầu Ảnh từ camera
S Đ Ước lượng khoảng cách đối với xe
Khoảng cách dưới 10cm Đ Điều khiển xe dừng lại
Bắt đầu Ảnh từ camera
S Đ Ước lượng khoảng cách đối với xe
Khoảng cách phù hợp Đ Đánh lái xe theo khoảng cách và hiệu lệnh biển báo
Hình 5.11 Sơ đồ giải thuật hoạt động khi phát hiện đối tượng là biển báo/xe
5.3.2 Xử lý tránh vật cản
5.3.2.1 Đối tượng “Person” và “Biển báo STOP” Đối với đối tượng là người và biển báo STOP: Nếu khi hệ thống phát hiện ra đối tượng mà khoảng cách giữa xe và đối tượng chưa đạt yêu cầu thì xe vẫn sẽ chạy tiếp, đến khi khoảng cách giữa xe và đối tượng đạt yêu cầu thì chúng tôi sẽ điều khiển xe dừng lại.
Hình 5.12 Phát hiện “Person” và xe vẫn tiếp tục chạy
Hình 5.14 Phát hiện “Biển báo STOP” và xe vẫn tiếp tục chạy
Hình 5.15 Phát hiện “Biển báo STOP” và xe dừng lại
5.3.2.2 Đối tượng “Biển báo hiệu lệnh rẽ trái” và “Biển báo cấm rẽ trái – đi thẳng” Ở hai đối tượng này, ban đầu chúng tôi sẽ cho xe chạy thẳng Nếu khi hệ thống phát hiện ra đối tượng mà khoảng cách giữa xe và đối tượng chưa đạt yêu cầu thì xe vẫn sẽ chạy tiếp, đến khi khoảng cách giữa xe và đối tượng phù hợp yêu cầu thì chúng tôi sẽ điều khiển xe đánh lái một góc tương ứng với khoảng cách giữa xe và đối tượng để cho xe rẽ trái (đối với đối tượng “Biển báo hiệu lệnh rẽ trái”) hoặc rẽ phải (đối với đối tượng
“Biển báo cấm rẽ trái – đi thẳng”).
Hình 5.16 Phát hiện “Biển báo hiệu lệnh rẽ trái” và xe tiếp tục chạy
Hình 5.18 Phát hiện “Biển báo hiệu lệnh rẽ trái” và xe đánh lái một góc 45 0
Hình 5.19 Phát hiện “Biển báo cấm rẽ trái – đi thẳng” và xe tiếp tục chạy
Hình 5.20 Phát hiện “Biển báo cấm rẽ trái – đi thẳng” và xe đánh lái một góc 10 0
5.3.2.3 Đối tượng “Xe hơi trên đường”
Trong đối tượng này, ban đầu xe vẫn đang chạy thẳng Nếu khi hệ thống phát hiện ra đối tượng mà khoảng cách giữa xe và đối tượng chưa đạt yêu cầu thì xe vẫn sẽ chạy tiếp, đến khi khoảng cách giữa xe và đối tượng phù hợp yêu cầu thì chúng tôi sẽ điều khiển xe đánh lái một góc tương ứng với khoảng cách giữa xe và đối tượng để cho xe rẽ trái (nếu đối tượng lệch về bên phải) hoặc rẽ phải (nếu đối tượng lệch về bên trái) Sau khi đánh lái và vượt qua đối tượng thì xe sẽ trả lái và tiếp tục chạy thẳng.
Hình 5.22 Phát hiện “CAR” và xe tiếp tục chạy
Hình 5.24 Phát hiện “CAR” và xe đánh lái một góc 30 0 Nhận xét:
– Độ chính xác khi nhận diện các đối tượng vẫn cao (hầu hết trên 90%) khi chạy chương trình xử lý tránh vật cản.
– Tốc độ khung hình khá ổn định (16 – 21 FPS) giúp cho tốc độ xử lý ở những khúc xe đánh lái khá trơn tru.
– Ở một số chỗ hệ thống bị nhiễu về mặt đo khoảng cách giữa xe và đối tượng do trong quá trình xe di chuyển thì camera bị rung lắc Tuy nhiên điều này không ảnh hưởng nhiều đến qua trình điều khiển xe đánh lái.