1. Trang chủ
  2. » Tất cả

(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư

109 213 2

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư
Tác giả Nguyễn Tấn Hưng, Nguyễn Minh Tuấn
Người hướng dẫn ThS. Nguyễn Duy Thảo
Trường học Trường đại học sư phạm kỹ thuật thành phố Hồ Chí Minh
Chuyên ngành Công nghệ kỹ thuật điện tử truyền thông
Thể loại đề án tốt nghiệp
Năm xuất bản 2021
Thành phố TP. Hồ Chí Minh
Định dạng
Số trang 109
Dung lượng 6,08 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Cấu trúc

  • CHƯƠNG 1. TỔNG QUAN (12)
    • 1.1. ĐẶT VẤN ĐỀ (12)
    • 1.2. MỤC TIÊU (13)
    • 1.3. NỘI DUNG NGHIÊN CỨU (14)
    • 1.4. GIỚI HẠN (14)
    • 1.5. BỐ CỤC (15)
  • CHƯƠNG 2. CƠ SỞ LÝ THUYẾT (16)
    • 2.1. GIỚI THIỆU VỀ XỬ LÝ ẢNH (16)
    • 2.2. NGÔN NGỮ LẬP TRÌNH PYTHON (17)
    • 2.3. MỘT SỐ THƯ VIỆN TRONG PYTHON (19)
      • 2.3.1. Thư viện lập trình giao diện PYQT5 (19)
      • 2.3.2. Thư viện về xử lý ảnh OPENCV (20)
    • 2.4. TỔNG QUAN VỀ YOLO (23)
      • 2.4.1. Lịch sử phát triển từ YOLOv1 đến YOLOv5 (23)
      • 2.4.2. Lý thuyết cơ bản về YOLO (31)
    • 2.5. GIỚI THIỆU GOOGLE COLAB (37)
    • 2.6. KHÁI QUÁT VỀ ARDUINO (39)
    • 2.7. GIỚI THIỆU PHẦN CỨNG (44)
      • 2.7.1. Kit Arduino Uno R3 (44)
      • 2.7.2. Led đơn (48)
      • 2.7.3. Camera (49)
  • CHƯƠNG 3. TÍNH TOÁN VÀ THIẾT KẾ (50)
    • 3.1. GIỚI THIỆU (50)
    • 3.2. TÍNH TOÁN VÀ THIẾT KẾ HỆ THỐNG (50)
      • 3.2.1. Thiết kế sơ đồ khối hệ thống (50)
      • 3.2.2. Thiết kế các khối hệ thống (51)
      • 3.2.3. Thiết kế mô hình đèn giao thông (57)
  • CHƯƠNG 4. THI CÔNG HỆ THỐNG (59)
    • 4.1. GIỚI THIỆU (59)
    • 4.2. THI CÔNG HỆ THỐNG (59)
      • 4.2.1. Thi công bo mạch (59)
      • 4.2.2. Lắp ráp và kiểm tra (60)
      • 4.2.3. Huấn luyện Yolo bằng Google Colab (60)
      • 4.2.4. Thiết kế giao diện điều khiển (66)
    • 4.3. ĐÓNG GÓI VÀ THI CÔNG MÔ HÌNH (68)
    • 4.4. LẬP TRÌNH HỆ THỐNG (71)
      • 4.4.1. Lập trình điều khiển trên máy tính (71)
      • 4.4.2. Lập trình trên Kit Arduino Uno (74)
    • 4.5. VIẾT TÀI LIỆU HƯỚNG DẪN SỬ DỤNG, THAO TÁC (84)
      • 4.5.1. Viết tài liệu hướng dẫn sử dụng (84)
      • 4.5.2. Quy trình thao tác trên giao diện (85)
  • CHƯƠNG 5. KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ (88)
    • 5.1. KẾT QUẢ (88)
    • 5.2. NHẬN XÉT (94)
    • 5.3. ĐÁNH GIÁ (94)
  • CHƯƠNG 6. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN (95)
    • 6.1. KẾT LUẬN (95)
    • 6.2. HƯỚNG PHÁT TRIỂN (95)
  • TÀI LIỆU THAM KHẢO (97)
  • PHỤ LỤC (100)

Nội dung

(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư(Đồ án tốt nghiệp) Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư

Trang 1

KHOA ĐIỆN – ĐIỆN TỬ

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH

GVHD: ThS Nguyễn Duy Thảo SVTH 1: Nguyễn Tấn Hưng

MSSV: 16141175 SVTH 2: Nguyễn Minh Tuấn MSSV: 16141330

Trang 2

TRƯỜNG ĐẠI HỌC SƯ PHẠM KỸ THUẬT TP HỒ CHÍ MINH

KHOA ĐIỆN – ĐIỆN TỬ

BỘ MÔN ĐIỆN TỬ CÔNG NGHIỆP – Y SINH

GVHD: ThS Nguyễn Duy Thảo SVTH 1: Nguyễn Tấn Hưng

MSSV: 16141175 SVTH 2: Nguyễn Minh Tuấn MSSV: 16141330

Tp Hồ Chí Minh – 01/2021

Trang 3

LỜI CAM ĐOAN

Đề tài này là do nhóm đồ án tự nghiên cứu và thực hiện dựa vào một số tài liệu trước đó và không sao chép từ tài liệu hay công trình đã có trước đó

Người thực hiện đề tài

Nguyễn Tấn Hưng – Nguyễn Minh Tuấn

Trang 4

LỜI CẢM ƠN

Trong thời gian thực hiện đồ án tốt nghiệp, nhóm sinh viên thực hiện đề tài đã được học hỏi nhiều kiến thức bổ ích trong giáo trình và thực tế từ thầy cô Qua đây

em xin gửi lời cảm ơn chân thành đến:

Quý thầy cô trong khoa điện điện tử của trường Đại Học Sư Phạm Kỹ Thuật Thành phố Hồ Chí Minh đã truyền đạt kiến thức, những kinh nghiệm quý báu trong chuyên môn cũng như trong các lĩnh vực khác Sự tận tụy say mê, lòng nhân ái, nhiệt tình của thầy cô là động lực lớn giúp chúng em trau dồi thêm kiến thức giúp chúng

em vượt qua khó khăn trong học tập cũng như trong cuộc sống

Chúng em xin gửi lời cảm ơn chân thành nhất đến thầy Nguyễn Duy Thảo đã giúp đỡ và hướng dẫn chúng em hoàn thành đồ án tốt nghiệp này

Đồng thời cũng cảm ơn đến tất cả các bạn bè đã gắn bó và giúp đỡ nhau trong học tập cũng như trong suốt quá trình thực hiện đồ án tốt nghiệp

Xin chân thành cảm ơn!

Người thực hiện đề tài

Nguyễn Tấn Hưng – Nguyễn Minh Tuấn

Trang 5

MỤC LỤC

NHIỆM VỤ ĐỒ ÁN TỐT NGHIỆP I

LỊCH TRÌNH THỰC HIỆN ĐỒ ÁN TỐT NGHIỆP II LỜI CAM ĐOAN IV LỜI CẢM ƠN V MỤC LỤC VI LIỆT KÊ HÌNH VẼ VIII LIỆT KÊ BẢNG XI TÓM TẮT XII

CHƯƠNG 1 TỔNG QUAN 1

1.1 ĐẶTVẤNĐỀ 1

1.2 MỤCTIÊU 2

1.3 NỘIDUNGNGHIÊNCỨU 3

1.4 GIỚIHẠN 3

1.5 BỐCỤC 4

CHƯƠNG 2 CƠ SỞ LÝ THUYẾT 5

2.1 GIỚITHIỆUVỀXỬLÝẢNH 5

2.2 NGÔNNGỮLẬPTRÌNHPYTHON 6

2.3 MỘTSỐTHƯVIỆNTRONGPYTHON 8

2.3.1 Thư viện lập trình giao diện PYQT5 8

2.3.2 Thư viện về xử lý ảnh OPENCV 9

2.4 TỔNGQUANVỀYOLO 12

2.4.1 Lịch sử phát triển từ YOLOv1 đến YOLOv5 12

2.4.2 Lý thuyết cơ bản về YOLO 20

2.5 GIỚITHIỆUGOOGLECOLAB 26

2.6 KHÁIQUÁTVỀARDUINO 28

2.7 GIỚITHIỆUPHẦNCỨNG 33

2.7.1 Kit Arduino Uno R3 33

2.7.2 Led đơn 37

2.7.3 Camera 38

CHƯƠNG 3 TÍNH TOÁN VÀ THIẾT KẾ 39

3.1 GIỚITHIỆU 39

3.2 TÍNHTOÁNVÀTHIẾTKẾHỆTHỐNG 39

3.2.1 Thiết kế sơ đồ khối hệ thống 39

3.2.2 Thiết kế các khối hệ thống 40

3.2.3 Thiết kế mô hình đèn giao thông 46

Trang 6

4.1 GIỚITHIỆU 48

4.2 THICÔNGHỆTHỐNG 48

4.2.1 Thi công bo mạch 48

4.2.2 Lắp ráp và kiểm tra 49

4.2.3 Huấn luyện Yolo bằng Google Colab 49

4.2.4 Thiết kế giao diện điều khiển 55

4.3 ĐÓNGGÓIVÀTHICÔNGMÔHÌNH 57

4.4 LẬPTRÌNHHỆTHỐNG 60

4.4.1 Lập trình điều khiển trên máy tính 60

4.4.2 Lập trình trên Kit Arduino Uno 63

4.5 VIẾTTÀILIỆUHƯỚNGDẪNSỬDỤNG,THAOTÁC 73

4.5.1 Viết tài liệu hướng dẫn sử dụng 73

4.5.2 Quy trình thao tác trên giao diện 74

CHƯƠNG 5 KẾT QUẢ_NHẬN XÉT_ĐÁNH GIÁ 77

5.1 KẾTQUẢ 77

5.2 NHẬNXÉT 83

5.3 ĐÁNHGIÁ 83

CHƯƠNG 6 KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN 84

6.1 KẾTLUẬN 84

6.2 HƯỚNGPHÁTTRIỂN 84

TÀI LIỆU THAM KHẢO 86

PHỤ LỤC 89

Trang 7

LIỆT KÊ HÌNH VẼ

Hình 2.1: Biểu tượng ngôn ngữ lập trình Python 6

Hình 2.2: Biểu tượng Qt 8

Hình 2.3: Biểu tượng thư viện OpenCV 9

Hình 2.4: Cách YOLOv1 dự đoán 12

Hình 2.5: Kiến trúc của YOLOv1 13

Hình 2.6: Dự đoán bounding box trong YOLOv2 15

Hình 2.7: Kiến trúc YOLOv2 16

Hình 2.8: Kỹ thuật Reorg trong YOLOv2 17

Hình 2.9: Kiến trúc YOLOv3 [21] 18

Hình 2.10: So sánh YOLOv4 với một số mô hình khác 19

Hình 2.11: Ảnh được phân chia bởi grid size 7x7 22

Hình 2.12: YOLOv1 dự đoán 2 bouding box xung quanh mỗi object 22

Hình 2.13: Vector ngõ ra của thuật toán YOLO 23

Hình 2.14: Kiến trúc mạng CNN dùng trong YOLOv1 23

Hình 2.15: Hai box giao nhau 26

Hình 2.16: Google colab 26

Hình 2.17: Board Arduino UNO R3 29

Hình 2.18: Board Arduino Nano 29

Hình 2.19: Board Arduino Lilypad 30

Hình 2.20: Board Arduino Redboard 30

Hình 2.21: Board Arduino Mega R3 31

Hình 2.22: Board Arduino Leonardo 31

Hình 2.23: Máy in 3D Materia 101 32

Hình 2.24: Xe điều khiển từ xa 32

Hình 2.25: Arduino Uno R3 33

Hình 2.26: Giao tiếp 2 hệ thống dùng chuẩn UART 35

Hình 2.27: Nguyên lý hoạt động chuẩn UART 36

Hình 2.28: Led đơn sắc 37

Hình 2.29: Sơ đồ chân led đơn sắc 37

Hình 2.30: Camera 38

Hình 3.1: Sơ đồ khối hệ thống 39

Hình 3.2: Camera kết nối với máy tính 40

Hình 3.3: Sơ đồ nguyên lý khối nguồn của board Arduino Uno 41

Hình 3.4: Sơ đồ nguyên lý mạch dao động của board Arduino Uno 42

Hình 3.5: Sơ đồ nguyên lý mạch reset của board Arduino Uno 43

Hình 3.6: Sơ đồ nguyên lý mạch nạp của board Arduino Uno 44

Hình 3.7: Led 5mm màu đỏ, vàng, xanh thực tế 44

Hình 3.8: Sơ đồ kết nối led đơn với điện trở 45

Trang 8

Hình 3.10: Mặt trên của mô hình sau khi thiết kế 46

Hình 3.11: Sơ đồ hệ thống 47

Hình 4.1: Sơ đồ nguyên lý mạch hiển thị 48

Hình 4.2: Sơ đồ mạch in 48

Hình 4.3: Sơ đồ mạch thi công 49

Hình 4.4: Hình ảnh thực tế sau khi thi công 49

Hình 4.5: Bộ dataset dùng để huấn luyện YOLO 50

Hình 4.6: Giao diện của labelImg sau khi khởi động 50

Hình 4.7: Tiến hành gán nhãn cho ảnh 51

Hình 4.8: File train.txt chứa đường dẫn của các ảnh dùng để huấn luyện 52

Hình 4.9: Thư mục ML được tạo trên Drive 53

Hình 4.10: Giao diện thiết kế của Qt Designer 55

Hình 4.11: Xuất file python từ giao diện được thiết kế bằng Qt Designer 55

Hình 4.12: Giao diện điều khiển chính 56

Hình 4.13: Hình 3D mặt trên của mô hình 57

Hình 4.14: Hình 3D mặt bên của mô hình 57

Hình 4.15: Hình 3D mặt bên có rãnh đưa USB ra ngoài 58

Hình 4.16: Hình 3D trụ và giá đỡ gắn camera 58

Hình 4.17: Hình 3D mô hình hoàn chỉnh 59

Hình 4.18: Mặt trên mô hình sau khi thi công 59

Hình 4.19: Mặt dưới mô hình sau khi thi công 60

Hình 4.20: Sơ đồ khối hệ thống điều khiển trên máy tính 60

Hình 4.21: Lưu đồ giải thuật của giao diện điều khiển máy tính 61

Hình 4.22: Biểu tượng PyCharm 62

Hình 4.23: Sơ đồ khối hệ thống điều khiển trên arduino 63

Hình 4.24: Lưu đồ giải thuật trên arduino 64

Hình 4.25: Khảo sát về môi trường phát triển phổ biến nhất năm 2019 65

Hình 4.26: Giao diện tính năng Git trên Visual Studio Code 66

Hình 4.27: Giao diện terminal trên Visual Studio Code 67

Hình 4.28: Giao diện cơ bản của Visual Studio Code lúc mới cài đặt 68

Hình 4.29: Một số extension ngôn ngữ lập trình phổ biến 68

Hình 4.30: Kho extension của Visual Studio Code 69

Hình 4.31: Các extension do các công ty công nghệ và người dùng đóng góp 69

Hình 4.32: Các bản cập nhật Visual Studio Code 70

Hình 4.33: Giao điện visual studio code khi mới khởi động 71

Hình 4.34: Cài đặt FlatformIO 71

Hình 4.35: Giao điện FlatformIO 72

Hình 4.36: Tạo dự án mới bằng FlatformIO 72

Hình 4.37: Giao diện khi tạo project thành công 73

Hình 4.38: Hướng dẫn sử dụng giao diện điều khiển 74

Hình 4.39: Giao diện điều khiển khi vừa khởi động 74

Trang 9

Hình 4.41: Giao diện điều khiển ở chế độ tự động mặc định 75

Hình 4.42: Giao diện điều khiển ở chế độ tự động có dùng YOLO 76

Hình 5.1: Hình 3D mô hình hoàn chỉnh 77

Hình 5.2: Sơ đồ nguyên lý mạch hiển thị 77

Hình 5.3: Sơ đồ mạch in 77

Hình 5.4: Mô hình hoàn chỉnh và cho chạy demo 78

Hình 5.5: Giao diện điều khiển 78

Hình 5.6: Mô hình khi vừa khởi động 79

Hình 5.7: Giao diện điều khiển khi vừa khởi động 79

Hình 5.8: Mô hình khi 2 giao lộ ít xe 80

Hình 5.9: Giao diện điều khiển khi 2 giao lộ ít xe 80

Hình 5.10: Mô hình khi 2 giao lộ đông xe 81

Hình 5.11: Giao diện điều khiển khi 2 giao lộ đông xe 81

Trang 10

LIỆT KÊ BẢNG

Bảng 2.1: Thông số kỹ thuật của Arduino Uno R3 35

Bảng 3.1: Liệt kê điện áp và dòng điện các linh kiện sử dụng trong mạch 45

Bảng 4.1: Danh sách các linh kiện 48

Bảng 5.1: Kết quả nhận dạng 82

Trang 11

TÓM TẮT

Sự phát triển nhanh chóng của nền kinh tế và lượng dân cư đông đúc Nhu cầu

đi lại, vận chuyển cũng tăng lên nhanh chóng đi kèm theo nó là bài toán ùn tắc giao thông Ùn tắc giao thông gây thiệt hại không nhỏ cho sự phát triển kinh tế quốc gia, giảm hiệu suất lao động và tăng các chi phí không cần thiết trong quá trình sản xuất Trong bối cảnh kinh tế khó khăn như hiện nay do đại dịch Covid 19, lãng phí trong giao thông lại đặt thêm một gánh nặng đối với đời sống kinh tế của người dân Nguyên nhân của vấn đề này một phần là do cơ sở hạ tầng chưa đáp ứng được nhu cầu lưu thông hiện nay, một phần là do việc phân chia, định thời gian của hệ thống đèn giao thông hiện tại ở các giao lộ chưa hợp lý khiến cho số lượng phương tiện giao thông

bị ùn tắc theo thời gian rồi dẫn đến tắc nghẽn giao thông Qua thực trạng đó, nhóm muốn xây dựng một hệ thống điều thiết giao thông tự động, phân luồng trực tiếp và hiệu quả hơn phần nào đó giảm bớt tình trạng ùn tắc giao thông Đồng thời tiếp cận,

bổ sung các kiến thức mới, cũng như củng cố lại những kỹ năng kiến thức trong suốt quá trình học tập tại trường

Do đó, nhóm thực hiện đồ án chọn đề tài: “Ứng dụng xử lý ảnh vào mô hình

điều khiển đèn giao thông ngã tư”

Nghiên cứu này nhằm mục tiêu phát triển giải thuật điều khiển hệ thống đèn giao thông cho một giao lộ, với chu kỳ đèn tín hiệu tùy thuộc vào tình trạng xe lưu thông trên hai tuyến đường được quan sát bởi 2 camera Giải thuật đếm số lượng xe trên đường được xây dựng để quyết định thời gian của đèn xanh cho mỗi tuyến đường Hình ảnh thu được từ các camera sẽ được truyền về máy tính đặt tại ngã tư Máy tính

sẽ thu nhận hình ảnh từ camera làm dữ liệu đầu vào cho khối xử lý ảnh Khối xử lý ảnh sẽ có nhiệm vụ phân tích và xử lý hình ảnh để đưa ra kết quả số lượng phương tiện tham gia giao thông ở tuyến đường có đèn tín hiệu là đèn xanh khi thời gian còn

5 giây được gửi về từ Arduino Dựa vào kết quả số lượng xe, khối xử lý ảnh sẽ gửi tín hiệu về Arduino để quyết định có tăng thêm thời gian đèn xanh cho giao lộ đó hay không Số lần cộng thêm thời gian đèn xanh không quá 3 lần Quy trình sẽ được lặp

đi lặp lại như vậy Arduino sẽ có nhiệm vụ điều khiển đèn tín hiệu (led đơn) để người tham gia giao thông quan sát

Trang 12

Chương 1 TỔNG QUAN

1.1 ĐẶT VẤN ĐỀ

Trong những năm gần đây, mặc dù còn mới mẻ trong lĩnh vực khoa học và công nghệ nhưng xử lý ảnh đang được nghiên cứu và phát triển với tốc độ nhanh chóng bởi các trung tâm nghiên cứu, trường đại học và học viện… với rất nhiều ứng dụng trên các lĩnh vực khác nhau [1] Việc áp dụng công nghệ xử lý ảnh để tạo ra các thiết

bị điện tử tự động hóa, phần nào đó thay thế được số lượng các cảm biến cần sử dụng giúp nhà đầu tư và người sử dụng vừa tiết kiệm được chi phí và nâng cao hiệu suất làm việc Trên thực tế các có rất nhiều bài toán đa dạng về các lĩnh vực công nghiệp, nông nghiệp, an ninh thậm chí là y tế được giải quyết nhờ việc áp dụng công nghệ xử

lý ảnh

Hiện nay với sự phát triển nhanh chóng của nền kinh tế nước nhà và lượng dân

cư đông đúc Nhu cầu đi lại, vận chuyển cũng tăng lên nhanh chóng đi kèm theo nó

là bài toán tắc nghẽn ùn tắc giao thông Ùn tắc giao thông gây thiệt hại không nhỏ cho sự phát triển kinh tế quốc gia, giảm hiệu suất lao động và tăng các chi phí không cần thiết trong quá trình sản xuất Trong bối cảnh kinh tế khó khăn như hiện nay, lãng phí trong giao thông lại đặt thêm một gánh nặng đối với đời sống kinh tế của người dân Nguyên nhân của vấn đề này một phần là do cơ sở hạ tầng chưa đáp ứng được nhu cầu lưu thông hiện nay, một phần là do việc phân chia, định thời gian của hệ thống đèn giao thông hiện tại ở các nút giao thông chưa hợp lý khiến cho số lượng phương tiện giao thông bị ùn tắc theo thời gian rồi dẫn đến tắc nghẽn giao thông Hiện tại có khá nhiều giải pháp để giải quyết vấn đề nói trên Như lập trình bộ điều khiển tín hiệu theo khung giờ cao điểm, hay trực tiếp phân luồng bởi con người Tuy vậy các giải pháp chỉ mang tính tương đối và tốn tài nguyên về con nguời Ở các quốc gia tiên tiến, giải pháp đưa ra là lắp đặt các hệ thống camera để tự động điều tiết giao thông tại các giao lộ trọng yếu Trong quá trình phát triển hệ thống kiểm soát giao thông, đã có rất nhiều công bố về việc nghiên cứu thông qua mô phỏng và thực nghiệm nhằm tối ưu hóa các bộ điều khiển đèn tín hiệu Trong đó, các nghiên cứu điển hình về việc sử dụng kỹ thuật xử lý ảnh kết hợp với điều khiển mờ (fuzzy control) đèn tín hiệu đã được áp dụng thành công [7-10] Các hệ thống này có giá rất cao, ví

dụ một hệ thống đèn giao thông thông minh thương mại sử dụng máy tính công nghiệp

Trang 13

và các camera giám sát được giới thiệu bởi AdvanTech lên đến hàng tỉ đồng cho mỗi chốt giao thông [11]

Ở nước ta, hầu hết các hệ thống đèn giao thông hiện đại đều được nhập khẩu với giá thành cao và kèm theo hàng loạt các vấn đề cần khắc phục, do chúng ta chưa làm chủ được công nghệ Chẳng hạn, để lắp đặt 121 trụ đèn giao thông do Tây Ban Nha sản xuất, trong dự án “Tăng cường năng lực giao thông thành phố Hồ Chí Minh”, cần đến 3,5 triệu USD Tuy nhiên, chưa đầy một năm sử dụng, chúng ta đã “phơi nắng” số tiền khổng lồ này, do các trụ đèn giao thông trên không hoạt động được [12] Năm 2007, Sở Giao Thông Công Chánh thành phố Hồ Chí Minh triển khai lắp đặt 48 chốt đèn gắn cảm biến để điều tiết giao thông tự động, bằng nguồn vốn ODA [13] Tuy vậy, mới sau một thời gian ngắn sử dụng, các chốt đèn giao thông này đã

bị bệnh “nan y” Ủy Ban Nhân Dân thành phố Hồ Chí Minh phải chi hơn 8.456USD

để mời chuyên gia nước ngoài “chẩn bệnh” [14] Rõ ràng làm chủ công nghệ đèn giao thông là nhu cầu thiết thực mà xã hội đã và đang đặt ra

Nghiên cứu này hướng tới việc kiểm chứng giải pháp thiết kế đèn giao thông có thể thay đổi được số giây đèn xanh cho mỗi làn đường để điều tiết lưu lượng cho hợp

lý dựa trên công nghệ xử lý ảnh Hệ thống dùng 2 camera để quan sát hai tuyến đường một chiều của một giao lộ Tuyến đường nào có lưu lượng xe cao hơn thì chu kì đèn xanh tương ứng cho tuyến đường đó sẽ dài hơn tuyến đường còn lại

Do đó, nhóm thực hiện đồ án chọn đề tài: “Ứng dụng xử lý ảnh vào mô hình điều khiển đèn giao thông ngã tư” Nhằm góp phần vào việc xây dựng một phương pháp điều khiển đèn tín hiệu giao thông một cách hợp lý hơn, giúp tình trạng giao thông tại các ngã tư ở nước ta được ổn định hơn

1.2 MỤC TIÊU

Thiết kế hệ thống đếm số lượng phương tiện giao thông qua hình ảnh được chụp

từ camera Thông qua quá trình xử lý ảnh sẽ cho ra kết quả là số lượng phương tiện của mỗi làn đường từ đó sẽ gửi dữ liệu để điều khiển tín hiệu đèn giao thông để điều tiết giao thông

Trang 14

1.3 NỘI DUNG NGHIÊN CỨU

Trong quá trình thực hiện Đồ án tốt nghiệp với đề tài “Ứng dụng xử lý ảnh vào

mô hình điều khiển đèn giao thông ngã tư”, nhóm chúng tôi đã tập trung giải quyết

và hoàn thành được những nội dung sau:

- Nội dung 1: Tìm hiểu về các lý thuyết ANN, CNN và các thuật toán sử dụng cho bài toán nhận dạng đối tượng

- Nội dung 2: Nghiên cứu và xử lý hình ảnh từ camera

- Nội dung 3: Tìm hiểu về đặc điểm giao thông trong nước và chọn phương pháp phù hợp

- Nội dung 4: Nghiên cứu về các kỹ thuật object detection trong xử lý ảnh

- Nội dung 5: Tìm hiểu về thuật toán YOLO

- Nội dung 6: Xây dựng bộ database bằng cách thu thập dữ liệu ảnh từ nguồn internet và tiến hành gán nhãn

- Nội dung 7: Thực hiện quá trình huấn luyện cho mạng

- Nội dung 8: Thiết kế mô hình

- Nội dung 9: Kiểm thử, chỉnh sửa và hoàn thiện mô hình

- Nội dung 10: Viết báo cáo thực hiện

1.4 GIỚI HẠN

Các thông số giới hạn của đề tài bao gồm:

- Mô hình gồm có kit Arduino UNO R3, 6 led đơn hiển thị đèn đỏ, xanh, vàng Dùng 2 camera để đếm số lượng phương tiện giao thông ở giao lộ của 2 tuyến đường một chiều

- Mô hình chỉ phát hiện 3 đối tượng: ô tô, xe buýt, xe tải

- Có tham khảo hoặc sử dụng framework, thư viện, cấu trúc đã được công bố

- Độ chính xác của mô hình sẽ phải giảm trong điều kiện có ánh sáng cường

độ mạnh hoặc quá yếu, bức xạ nhiệt lớn

- Do được chạy thử trên mô hình nên sẽ có một số thông số sẽ khác với thực

tế như: khoảng cách đặt camera sẽ gần hơn, lưu lượng phương tiện giao thông mô phỏng khá ít, một số điều kiện ngoại cảnh không được thể hiện trên mô hình như: mưa, đèn đường, đèn xe…

Trang 15

• Chương 2: Cơ sở lý thuyết

Giới thiệu về xử lý ảnh Giới thiệu về Arduino, camera

Giới thiệu về các phương pháp trong quá trình xử lý ảnh đầu vào Giới thiệu

về thuật toán phát hiện và đếm số lượng phương tiện

• Chương 3: Thiết kế và tính toán

Phân tích, xây dựng sơ đồ khối, sơ đồ phần cứng Thiết kế chương trình cho

hệ thống đếm phương tiện qua hình ảnh được viết trên phần mềm Pycharm Thiết kế chương trình nhận dữ liệu và điều khiển hệ thống đèn giao thông trên Arduino UNO R3 được viết trên phần mềm Visual Studio Code

• Chương 4: Thi công mô hình

Xây dựng chương trình hoàn chỉnh cho toàn hệ thống, các lưu đồ, chương trình được sử dụng Lắp ráp và chạy chương trình Viết tài liệu hướng dẫn sử dụng, quy trình thao tác

• Chương 5: Kết quả, nhận xét và đánh giá

Trình bày kết quả đã thực hiện, về cả phần cứng lẫn phần mềm

Nêu ra nhận xét và đánh giá

• Chương 6: Kết luận và hướng phát triển

Tóm tắt kết quả đạt được, nêu ra những hạn chế và các hướng phát triển của

đề tài trong tương lai

Trang 16

Chương 2 CƠ SỞ LÝ THUYẾT

2.1 GIỚI THIỆU VỀ XỬ LÝ ẢNH

Xử lý ảnh được đưa vào giảng dạy ở bậc đại học ở nước ta khoảng chục năm nay Nó là môn học liên quan đến nhiều lĩnh vực và cần nhiều kiến thức cơ sở khác Đầu tiên phải kể đến xử lý tín hiệu số là một môn học hết sức cơ bản cho xử lý tín hiệu chung, các khái niệm về tích chập, các biến đổi Fourier, biến đổi Laplace, các

bộ lọc hữu hạn… Thứ hai, các công cụ toán như đại số tuyến tính, xác xuất, thống kê Một số kiến thứ cần thiết như trí tuệ nhân tao, mạng nơron nhân tạo cũng được đề cập trong quá trình phân tích và nhận dạng ảnh

Các phương pháp xử lý ảnh bắt đầu từ các ứng dụng chính: nâng cao chất lượng ảnh và phân tích ảnh Các phương pháp tri thức nhân tạo như mạng nơ ron nhân tạo, các thuật toán xử lý hiện đại và cải tiến, các công cụ nén ảnh ngày càng được áp dụng rộng rãi và thu nhiều kết quả khả quan Ứng dụng đầu tiên được biết đến là nâng cao chất lượng ảnh báo được truyền qua cáp từ Luân đôn đến New York từ những năm

1920 Vấn đề nâng cao chất lượng ảnh có liên quan tới phân bố mức sáng và độ phân giải của ảnh Việc nâng cao chất lượng ảnh được phát triển vào khoảng những năm

1955 Điều này có thể giải thích được vì sau thế chiến thứ hai, máy tính phát triển nhanh tạo điều kiện cho quá trình xử lý ảnh sô thuận lợi Năm 1964, máy tính đã có khả năng xử lý và nâng cao chất lượng ảnh từ mặt trăng và vệ tinh Ranger 7 của Mỹ bao gồm: làm nổi đường biên, lưu ảnh Từ năm 1964 đến nay, các phương tiện xử lý, nâng cao chất lượng, nhận dạng ảnh phát triển không ngừng [1]

Để dễ tưởng tượng, xét các bước cần thiết trong xử lý ảnh Đầu tiên, ảnh tự nhiên từ thế giới ngoài được thu nhận qua các thiết bị thu (như camera, máy chụp ảnh) Trước đây, ảnh thu qua camera là các ảnh tương tự (loại camera ống kiểu CCIR) Gần đây, với sự phát triển của công nghệ, ảnh màu hoặc đen trắng được lấy ra từ Camera, sau đó nó được chuyển trực tiếp thành ảnh số tạo thuận lợi cho xử lý tiếp theo Máy ảnh số hiện nay là một thí dụ gần gũi Mặt khác, ảnh cũng có thể tiếp nhận

từ vệ tinh; có thể quét từ ảnh chụp bằng máy quét ảnh

Trang 17

2.2 NGÔN NGỮ LẬP TRÌNH PYTHON

Python là ngôn ngữ lập trình bậc cao thông dụng dùng để viết các tiện ích hệ thống Nó cũng được sử dụng như ngôn ngữ kết dính đóng vai trò tích hợp C và C++

Hình 2.1: Biểu tượng ngôn ngữ lập trình Python

Được tạo ra bởi Guido van Rossum tại Amsterdam năm 1990, Python hoàn toàn tạo kiểu động và dùng cơ chế cấp phát bộ nhớ tự động Python được phát triển trong một dự án mã mở, do tổ chức phi lợi nhuận Python Software Foundation quản lý Python là ngôn ngữ có hình thức khá đơn giản và rõ ràng, do đó tạo nên sự dễ dàng tiếp cận cho những lập trình viên mới bắt đầu

Ban đầu, Python được phát triển để chạy trên nền Unix, nhưng rồi theo thời gian, nó đã được mở rộng sang mọi hệ điều hành từ MS-DOS đến Mac OS, OS/2, Windows, Linux và các hệ điều hành khác thuộc họ Unix [4]

Một số tính chất của Python: [5]

- Interpreted: nhờ chức năng thông dịch mà trình thông dịch (Interpreter) của Python có thể xử lý lệnh tại thời điểm chạy chương trình (runtime) Nhờ đó mà không cần biên dịch chương trình trước khi thực hiện nó (tương tự như Perl và PHP)

- Interactive: tính năng tương tác của Python giúp tương tác trực tiếp với trình thông dịch của nó ngay tại dấu nhắc lệnh Cụ thể: Có thể thực hiện lệnh một cách trực tiếp tại dấu nhắc của Python

- Object-Oriented: Python hỗ trợ mạnh cho phong cách lập trình hướng đối tượng và kỹ thuật lập trình gói mã trong đối tượng

Trang 18

- Beginner's Language: Python được xem là ngôn ngữ lập trình dành cho những ai mới làm quen với việc lập trình trên máy tính, nhưng nó hỗ trợ mạnh cho việc phát triển nhiều loại ứng dụng khác nhau, từ các chương trình xử lý văn bản đơn giản đến các ứng dụng web, đến các chương trình game…

Tính năng:

- Python là một ngôn ngữ lập trình dễ học, dễ đọc Python tăng cường sử dụng

từ khóa tiếng Anh, hạn chế các ký hiệu và cấu trúc cú pháp so với các ngôn ngữ khác

- Mã nguồn của Python tương đối dễ để bảo trì và duy trì và có khả năng mở rộng: Python có thể được mở rộng: nếu ta biết sử dụng C, ta có thể dễ dàng viết và tích hợp vào Python nhiều hàm tùy theo nhu cầu Các hàm này sẽ trở thành hàm xây dựng sẵn của Python Ta cũng có thể mở rộng chức năng của trình thông dịch, hoặc liên kết các chương trình Python với các thư viện chỉ ở dạng nhị phân như các thư viện đồ họa do nhà sản xuất thiết bị cung cấp Hơn thế nữa, ta cũng có thể liên kết trình thông dịch của Python với các ứng dụng viết từ C và sử dụng nó như

là một mở rộng hoặc một ngôn ngữ dòng lệnh phụ trợ cho ứng dụng đó

- Python có một tiêu chuẩn thư viện rộng, nền tảng tương thích trên nhiều hệ điều hành hiện nay như: UNIX, Windows, và Macintosh Đây cũng là một trong những điểm mạnh đáng kể của Python

- Python có thể được sử dụng như ngôn ngữ script, hoặc ngôn ngữ biên dịch, nhờ đó có thể build các chương trình lớn trên nó

- Khi chế độ Interactive, có thể nhập kết quả từ các đầu cuối khác nhau vào chương trình Python, do đó mà việc test hay debug lỗi code trở nên đơn giản hơn

- Python cho phép người dùng tích hợp vào các module để có thể sử dụng trong các chương trình khác Nó cũng cung cấp sẵn một tập hợp các modules chuẩn mà lập trình viên có thể sử dụng lại trong chương trình của họ Các module này cung cấp nhiều chức năng hữu ích, như các hàm truy xuất tập tin, các lời gọi hệ thống,

hỗ trợ lập trình mạng (socket)…

- Python cung cấp giao diện cho tất cả các cơ sở dữ liệu thương mại lớn

- Có thể dễ dàng tích hợp với C, C++, COM, CORBA, ActiveX, Java

Trang 19

2.3 MỘT SỐ THƯ VIỆN TRONG PYTHON

2.3.1 Thư viện lập trình giao diện PYQT5

Qt là một Application framework đa nền tảng viết trên ngôn ngữ C++, được dùng để phát triển các ứng dụng trên desktop, hệ thống nhúng và mobile Hỗ trợ cho các nền tảng bao gồm: Linux, OS X, Windows, VxWorks, QNX, Android, iOS, BlackBerry, Sailfish OS và một số nền tảng khác PyQt là Python interface của Qt, kết hợp của ngôn ngữ lập trình Python và thư viện Qt, là một thư viện bao gồm các thành phần giao diện điều khiển (widgets, graphical control elements) PyQt được phát triển bởi Riverbank Computing Limited [27]

Hình 2.2: Biểu tượng Qt

PyQt API bao gồm các module bao gồm số lượng lớn với các classes và functions hỗ trợ cho việc thiết kế ra các giao diện giao tiếp với người dùng của các phần mềm chức năng Hỗ trợ với Python 2.x và 3.x

❖ Các class của PyQt5 được chia thành các module, bao gồm:

- QtCore: là module bao gồm phần lõi không thuộc chức năng GUI, ví dụ dùng

để làm việc với thời gian, file và thư mục, các loại dữ liệu, streams, URLs, mime type, threads hoặc processes

- QtGui: bao gồm các class dùng cho việc lập trình giao diện (windowing system integration), event handling, 2D graphics, basic imaging, fonts và text

- QtWidgets: bao gồm các class cho widget, ví dụ: button, hộp thoại, … được

sử dụng để tạo nên giao diện người dùng cơ bản nhất

- QtMultimedia: thư viện cho việc sử dụng âm thanh, hình ảnh, camera…

- QtBluetooth: bao gồm các class giúp tìm kiếm và kết nối với các thiết bị có

Trang 20

- QtNetwork: bao gồm các class dùng cho việc lập trình mạng, hỗ trợ lập trình TCP/IP và UDP client, server hỗ trợ việc lập trình mạng

- QtPositioning: bao gồm các class giúp việc hỗ trợ xác định vị

- Enginio: module giúp các client truy cập các Cloud Services của Qt

- QtWebSockets: cung cấp các công cụ cho WebSocket protocol

- QtWebKit: cung cấp các class dùng cho làm việc với các trình duyệt Web, dựa trên thư viện WebKit2

- QtWebKitWidgets: các widget cho WebKit

- QtXml: các class dùng cho làm việc với XML file

- QtSvg: dùng cho hiển thị các thành phần của SVG file

- QtSql: cung cấp các class dùng cho việc làm việc với dữ liệu

- QtTest: cung cấp các công cụ cho phép test các đơn vị của ứng dụng với PyQt5

2.3.2 Thư viện về xử lý ảnh OPENCV

OpenCV (OpenSource Computer Vision) là một thư viện mã nguồn mở OpenCV được phát hành theo giấy phép BSD, do đó nó hoàn toàn miễn phí cho cả học thuật và thương mại Nó có các interface C++, C, Python, Java và hỗ trợ Windows, Linux, Mac OS, iOS và Android OpenCV được thiết kế để tính toán hiệu quả và với sự tập trung nhiều vào các ứng dụng thời gian thực Được viết bằng tối ưu hóa C/C++, thư viện có thể tận dụng lợi thế của xử lý đa lõi Được sử dụng trên khắp thế giới, OpenCV có cộng đồng hơn 47 nghìn người dùng và số lượng download vượt quá 6 triệu lần Phạm vi sử dụng từ nghệ thuật tương tác, cho đến lĩnh vực khai thác

mỏ, bản đồ trên web hoặc công nghệ robot

Hình 2.3: Biểu tượng thư viện OpenCV

Trang 21

Thư viện có hơn 2500 thuật toán được tối ưu hóa, bao gồm một bộ toàn diện của cả thuật toán máy tính và thị giác máy tính cổ điển và hiện đại Các thuật toán này có thể được sử dụng để phát hiện và nhận dạng khuôn mặt, xác định đối tượng, phân loại hành động của con người trong video, theo dõi chuyển động của máy ảnh, theo dõi đối tượng chuyển động, trích xuất mô hình 3D của đối tượng, tạo ra các đám mây điểm 3D từ máy ảnh âm thanh nổi, ghép các hình ảnh lại với nhau để tạo ra độ phân giải cao hình ảnh của toàn bộ cảnh, tìm các hình ảnh tương tự từ cơ sở dữ liệu hình ảnh, nhận dạng phong cảnh… [25]

❖ Ứng dụng của OpenCV:

OpenCV được sử dụng cho đa dạng nhiều mục đích và ứng dụng khác nhau bao gồm:

- Hình ảnh street view

- Kiểm tra và giám sát tự động

- Robot và xe hơi tự lái

- Phân tích hình ảnh y học

- Tìm kiếm và phục hồi hình ảnh/video

- Phim – cấu trúc 3D từ chuyển động

- Nghệ thuật sắp đặt tương tác

❖ Một số module phổ biến của thư viện OpenCV:

Core: Đây là module chứa các cấu trúc, class cơ bản mà OpenCV sẽ sử dụng

trong việc lưu trữ và xử lý hình ảnh như Mat, Scale, Point, Vec… và các phương thức

cơ bản sử dụng cho các module khác

Imgproc: Đây là một module xử lý hình ảnh của OpenCV bao gồm các bộ lọc

tuyến tính và không tuyến tính (filter linear and non-linear) và các phép biến đổi hình học (tranformation) như resize hoặc các phép biến đổi affine, chuyển đổi hệ mày và

các thuật toán liên quan đến biểu đồ (histogram) của hình ảnh

Highgui: Đây là một module cho phép tương tác với người dùng trên UI (User Interface) như hiển thị hình ảnh, video capturing

Features2d: Module tìm các đặc trưng (feature) của hình ảnh Trong module

có implement các thuật toán rút trích đặc trưng như PCA…

Trang 22

Objdetect: Module cho việc phát hiện các đối tượng như khuôn mặt, đôi mắt,

cốc, người, xe hơi, vv trong hình ảnh Các thuật toán được sử dụng trong module này

là Haar‐like Features

Ml: Module này chứa các thuật toán về Machine Learning phục vụ cho các bài

toàn phân lớp (Classfitication) và bài toán gom cụm (Clustering) Ví dụ như thuật

toán SVM (Support Vector Machine), ANN…

Video: Module phân tích video gồm ước lượng chuyển động, trừ nền, và các

thuật toán theo dõi đối tượng (object tracking)

❖ OpenCV hiện tại hỗ trợ nhiều ngôn ngữ, mỗi ngôn ngữ có thế mạnh riêng, vậy thì tùy theo nhu cầu mà chọn ngôn ngữ cho phù hợp:

C++: Đây là ngôn ngữ phổ biến nhất hiện tại vì nhanh, nhiều option Các thiết

lập của nó rất hữu ích cho sản phẩm sau này, mặc dù ban đầu mới sử dụng khá phức tạp

Python: Ngôn ngữ được dùng nhiều để demo/test OpenCV do tính ngắn gọn, ít

phải thiết lập Bên cạnh đó, nếu dùng Python thì cũng có thể code được trên nhiều hệ điều hành

Android: Hiện tích hợp sẵn camera, tiện lợi nên có thể sớm trở thành xu hướng

của OpenCV

Java: Nhanh và đa nền tảng, tương tự C++

C#: Code tiện lợi, dễ dàng, có thư viện đa nền tảng là EmguCV hỗ trợ Có một

điểm trừ là EmguCV yêu cầu người dùng phải copy toàn bộ file *.dll của lib đi kèm với ứng dụng nên làm ứng dụng sẽ khá nặng

Trang 23

2.4 TỔNG QUAN VỀ YOLO

2.4.1 Lịch sử phát triển từ YOLOv1 đến YOLOv5

YOLO - You Only Look Once là một trong những mô hình phát hiện vật tốt nhất ở thời điểm hiện tại Dù đều được gọi là YOLO, các phiên bản của mô hình này đều có những cải tiến rất đáng kể sau mỗi phiên bản Sau 3 phiên bản của tác giả chính Joseph Redmon là YOLOv1 đến YOLOv3, tính đến thời điểm hiện tại có thêm một paper YOLOv4 của Alexey Bochkovskiy và YOLOv5 đang được phát triển Cùng nhìn lại chặng đường phát triển của mô hình này và những kiến trúc, kĩ thuật được đưa vào trong các cải tiến của YOLO để nó trở thành một trong những mô hình phát hiện vật thành công nhất

2.4.1.1 YOLOv1

Đầu vào của bài toán phát hiện vật là một bức ảnh Chúng ta không chỉ phải phân loại được object trên bức ảnh mà còn phải định vị được vị trí của đối tượng đó Các phương pháp trước YOLOv1 thường sử dụng 2 bước: bước 1 thường sử dụng sliding window để lấy các vùng khác nhau của bức ảnh, hoặc sử dụng một thuật toán lựa chọn các vùng ứng viên (có thể chứa vật), tiếp theo đó, bước 2 sẽ phân loại các

vị trí này xem vật đó thuộc lớp nào Các cách tiếp cận này có nhược điểm là yêu cầu một lượng tính toán lớn, và bị phân nhỏ thành nhiều bước, khó có thể tối ưu về mặt tốc độ Kiến trúc YOLOv1 coi bài toán phát hiện vật như một bài toán regression Từ input là ảnh đầu vào, qua một mạng gồm các lớp convolution, pooling và fully connected là có thể ra được output Kiến trúc này có thể được tối ưu để chạy trên GPU với một lần forward pass, và vì thế đạt được tốc độ rất cao

Trang 24

Ý tưởng chính của YOLOv1 là chia ảnh thành một lưới các ô (grid cell) với kích thước SxS (mặc định là 7x7) Với mỗi grid cell, mô hình sẽ đưa ra dự đoán cho B bounding box Ứng với mỗi box trong B bounding box này sẽ là 5 tham số x, y, w, h, confidence, lần lượt là tọa độ tâm (x, y), chiều rộng, chiều cao và độ tự tin của dự đoán Với grid cell trong lưới SxS kia, mô hình cũng dự đoán xác suất rơi vào mỗi class

Độ tự tin của dự đoán ứng với mỗi bounding box được tính là:

Vậy tổng số output của mô hình sẽ là: S×S×(5∗B+C) (2.2)

Hình dưới đây là kiến trúc của YOLOv1 Mạng backbone của YOLOv1 lấy ý tưởng từ kiến trúc GoogleNet

Hình 2.5: Kiến trúc của YOLOv1

YOLOv1 có nhược điểm là áp đặt các ràng buộc về không gian trên những bounding box, mỗi grid cell chỉ có thể predict rất ít bounding box (B) và duy nhất một class Các ràng buộc này hạn chế khả năng nhận biết số object nằm gần nhau, cũng như đối với các object có kích thước nhỏ Ngoài ra, trong quá trình training, loss function không có sự đánh giá riêng biệt giữa error của bounding box kích thước nhỏ

so với error của bounding box kích thước lớn Việc coi chúng như cùng loại và tổng

Trang 25

hợp lại làm ảnh hưởng đến độ chính xác toàn cục của mạng Error nhỏ trên box lớn nhìn chung ít tác hại, nhưng error nhỏ với box rất nhỏ sẽ đặc biệt ảnh hưởng đến giá trị IOU [17]

2.4.1.2 YOLOv2

YOLOv2 đã được Joseph Redmon và Ali Farhadi công bố vào cuối năm 2016

và có mặt trong 2017 CVPR Cải tiến chính của phiên bản này tốt hơn, nhanh hơn, tiên tiến hơn để bắt kịp faster R-CNN (phương pháp sử dụng Region Proposal Network), xử lý được những vấn đề gặp phải của YOLOv1

Thêm Batch Normalization: kĩ thuật Batch Normalization được đưa vào sau tất

cả các lớp convolution của YOLOv2 Kĩ thuật này không những giảm được thời gian huấn luyện, mà còn có tác dụng tăng tính phổ quát (generalize) cho mạng Ở YOLOv2, Batch Normalization giúp tăng mAP lên khoảng 2% Mạng cũng không cần sử dụng thêm Dropout để tăng tính phổ quát [18]

High resolution classifier: YOLO được huấn luyện với 2 pha Pha đầu sẽ huấn

luyện một mạng classifier với ảnh đầu vào kích thước nhỏ (224x224) và pha sau sẽ loại bỏ lớp fully connected và sử dụng mạng classifier này như phần khung xương (backbone) để huấn luyện mạng detection Lưu ý rằng ảnh đầu vào kích thước nhỏ cũng thường được sử dụng để huấn luyện các mạng classifier, mà sau đó sẽ được sử dụng như pretrained model cho phần backbone của các mạng detection khác Ở pha sau YOLO trước hết finetune mạng backbone dưới ảnh đầu vào kích thước lớn hơn

là 448x448, để mạng "quen" dần với kích thước ảnh đầu vào lớn, sau đó mới sử dụng kết quả này để huấn luyện cho quá trình detection Điều này giúp tăng mAP của

YOLOv2 lên khoảng 4%

Sử dụng kiến trúc anchorbox để đưa ra dự đoán: Trong YOLOv2, tác giả loại

bỏ lớp fully connected ở giữa mạng và sử dụng kiến trúc anchorbox để predict các bounding box Việc dự đoán các offset so với anchorbox sẽ dễ dàng hơn nhiều so với

dự đoán toạ độ bounding box Thay đổi này làm giảm mAP đi một chút nhưng làm

recall tăng lên

K-mean clustering cho lựa chọn anchor: Thay vì phải chọn anchorbox bằng

tay, YOLOv2 sử dụng thuật toán k-means để đưa ra các lựa chọn anchorbox tốt nhất

Trang 26

Direct location prediction:

YOLOv1 không có các hạn chế trong việc dự đoán vị trí của bounding box Khi các trọng số được khởi tạo ngẫu nhiên, bounding box có thể được dự đoán ở bất kỳ đâu trong ảnh Điều này khiến mô hình không ổn định trong giai đoạn đầu của quá trình huấn luyện Vị trí của bounding box có thể ở rất xa so với vị trí của grid cell YOLOv2 sử dụng hàm sigmoid (σ) để hạn chế giá trị trong khoảng 0 đến 1, từ

đó có thể hạn chế các dự đoán bounding box ở xung quanh grid cell, từ đó giúp mô hình ổn định hơn trong quá trình huấn luyện

Cho anchorbox có kích thước (ph, pw) nằm tại grid cell với vị trí top left là (cx, cy), mô hình sẽ dự đoán các offset và scale tx, ty, tw, th và bounding box (bx, by, bw, bh)

Độ tự tin (confidence của dự đoán là σ(to))

bx = σ(tx) + cx (2.3)

by = σ(ty) + cy (2.4)

bw = pwetw (2.5)

bh = pheth (2.6)

Pr(object)⋅IoU(b, object) = σ(to) (2.7)

Hình 2.6: Dự đoán bounding box trong YOLOv2

Trang 27

Add fine-grained features:

YOLOv2 sử dụng feature map 13x13 để đưa ra các dự đoán, lớn hơn 7x7 của YOLOv1

Faster R-CNN và SSD đưa ra dự đoán ở nhiều tầng khác nhau trong mạng để tận dụng các feature map ở các kích thước khác nhau YOLOv2 cũng kết hợp các feature ở các tầng khác nhau lại để đưa ra dự đoán, cụ thể kiến trúc nguyên bản của YOLOv2 kết hợp feature map 26x26 lấy từ đoạn gần cuối với feature map 13x13 ở cuối để đưa ra các dự đoán Cụ thể là các feature map này sẽ được ghép vào nhau (concatenate) để tạo thành một khối sử dụng cho dự đoán

Hình 2.7: Kiến trúc YOLOv2

Vậy làm thế nào để concatenate được hai feature map kích thước 26x26xm và 13x13xn để trở thành một feature map 13x13xp?

Thông thường việc concatenate 2 feature map chỉ thực hiện được khi chúng có

cùng chiều rộng và chiều dài Tuy nhiên trong YOLOv2 tác giả sử dụng lớp Reorg, tuy nhiên lại không mô tả kỹ về kĩ thuật này trong paper Thực ra Reorg chỉ là kĩ thuật

tổ chức lại bộ nhớ để biến feature map 26x26 thành 13x13 với chiều sâu lớn hơn để

có thể thực hiện phép concatenate với feature map 13x13 ở cuối [22]

Trong trường hợp tổng quát của phép Reorg, ta sẽ biến feature map kích

thước [N, C, H, W] thành kích thước [N, C×s2, Hs, Ws], tức là số lượng tham số trong feature map vẫn được giữ nguyên Khi ta muốn giảm kích thước dài, rộng đi mỗi cạnh 2 lần thì số channel phải được tăng lên 4 lần Việc biến đổi này hoàn toàn không giống phép resize trong xử lý ảnh Để dễ hình dung, chúng ta có thể xem hình

vẽ dưới đây:

Trang 28

Hình 2.8: Kỹ thuật Reorg trong YOLOv2

Đây là một lát cắt (channel) của feature map kích thước 4x4 Để đưa về kích thước 2x2, tức là giảm chiều rộng đi 2 lần và chiều dài đi 2 lần, ta tách channel của feature map 4x4 thành 4 ma trận như hình trên, ứng với 4 channel chiều sâu của feature map 2x2 mới Vị trí các giá trị trong mỗi channel của feature map 2x2 mới sẽ lấy thưa thớt trên feature map 4x4 ban đầu với stride = 2 theo 2 trục dài và rộng

Multi-Scale Training:

Sau khi thêm kĩ thuật anchorbox cho YOLOv2, tác giả đã thay đổi input của mạng thành 416x416 thay vì 448x448 Tuy vậy, YOLOv2 được thiết kể chỉ gồm các lớp convolution và pooling nên có thể thích ứng với nhiều kích thước ảnh đầu vào khác nhau Tác giả đã huấn luyện mạng trên nhiều kích thước ảnh khác nhau để tăng khả năng thích ứng của YOLOv2 với đa dạng kích thước ảnh

Light-weight backbone: Điểm cải tiến của YOLOv2 còn phải kể đến backbone

mới có tên Darknet-19 Mạng này bao gồm 19 lớp convolution và 5 lớp maxpooling

tạo ra tốc độ nhanh hơn phiên bản YOLO trước

2.4.1.3 YOLOv3

YOLOv3 có kiến trúc khá giống YOLOv2 Tác giả đã thêm các cải tiến mới trong các nghiên cứu gần đây vào YOLOv2 để tạo ra YOLOv3 Các cải tiến đó bao gồm [19]:

Logistic regression cho confidence score: YOLOv3 predict độ tự tin của bounding box (có chứa vật hay không) sử dụng logistic regression

Thay softmax bằng các logistic classifier rời rạc: YOLOv3 sử dụng các logistic classifier thay vì softmax cho việc classify đối tượng Việc này cho hiệu quả tốt hơn nếu các label không "mutually exclusive", tức là có thể có đối tượng cùng thuộc 2 hay nhiều class khác nhau Ví dụ với bài toán cần phát hiện 2 đối tượng là "chó" và

"chó Phú Quốc" Rõ ràng nếu đối tượng là "chó Phú Quốc" thì nó cũng thuộc class

"chó", và việc sử dụng softmax là không phù hợp trong trường hợp này

Trang 29

ta có thể xem kiến trúc YOLOv3 ở hình dưới để dễ hình dung hơn

Trang 30

tế [20]

Hình 2.10: So sánh YOLOv4 với một số mô hình khác

Kết quả so sánh YOLOv4 với các SOTA ở thời điểm hiện tại YOLOv4 chạy nhanh gấp đôi EfficientDet và tăng AP và FPS so với YOLOv3 lần lượt là 10% và 12% Hình ảnh từ paper YOLOv4

Trên đây là kết qủa so sánh của YOLOv4 với các thuật toán state-of-the-art tại thời điểm hiện tại Nhìn vào biểu đồ, ta dễ dàng thấy được sự hiệu quả của YOLOv4

so với các mạng tốt nhất hiện nay Cụ thể hơn YOLOv4 đạt 43.5% AP trên tập dữ liệu MS COCO ở tốc độ 65 FPS, trên GPU Tesla V100 Để tạo ra kết quả này, tác giả

sử dụng một loạt các kĩ thuật mới: Weighted-Residual-Connections (WRC), Stage-Partial-connections (CSP), Cross mini – Batch Normalization (CmBN), Self-adversarial-training (SAT) and Mish-activation, Mosaic data augmentation, DropBlock regularization, và CIoU loss

Trang 31

Cross-2.4.1.5 YOLOv5

Hiện tại có một phiên bản YOLOv5 đang được phát triển bởi Ultralytics LLC Phiên bản này hiện khá triển vọng theo các số liệu được cung cấp bởi công ty phát triển Tuy nhiên phiên bản YOLOv5 này chưa có paper chính thức được chấp nhận

và cũng đang có nhiều tranh cãi xung quanh tính hiệu quả của mô hình đang được phát triển này

Tương lai của YOLO: YOLO đã trở nên rất nổi tiếng cho bài toán phát hiện vật thể thời gian thực Tuy nhiên kể từ phiên bản YOLOv3, tác giả đầu tiên của YOLO

là Joseph Redmon đã không còn nghiên cứu và cải thiện kiến trúc này nữa Anh còn tuyên bố đã ngừng nghiên cứu về thị giác máy tính do các lo ngại công nghệ được sử dụng sai mục đích (sử dụng cho quân sự, các lo ngại về quyền riêng tư) Tuy thế, trên quan điểm của chúng em, công nghệ luôn có 2 mặt, tốt và xấu Chúng ta vẫn sẽ nhận được các "bản nâng cấp" YOLO từ các tác giả khác, như YOLOv4 vừa mới ra mắt gần đây

2.4.2 Lý thuyết cơ bản về YOLO

You only look once (YOLO) là một mô hình CNN để detect object mà một ưu điểm nổi trội là nhanh hơn nhiều so với những mô hình cũ Thậm chí có thể chạy tốt trên những IOT device như raspberry pi Trong phần này, chúng em sẽ giới thiệu chi tiết YOLOv1, về sau chúng ta còn có YOLO v2, v3, chạy nhanh hơn nhưng phức tạp hơn và khó cài đặt Hiểu được YOLOv1 sẽ giúp chúng ta dễ dàng cài đặt những phiên bản sau [16]

Đầu vào mô hình là một bức ảnh, đối với bài toán object detection, chúng ta không chỉ phải phân loại được object trên bức ảnh mà còn phải định vị được vị trí của đối tượng đó Object Detection có khá nhiều ứng dụng, ví dụ như hệ thống theo dõi người dân của Trung Quốc, từ đó có thể giúp chính quyền xác định được tội phạm lẫn trốn ở đó hay không, hoặc hệ thống xe tự lái, cũng phải xác định được người đi đường ở đâu từ đó đưa ra quyết định di chuyển tiếp theo

Có một số hướng tiếp cận để giải quyết vấn đề, đồng thời mỗi lần chạy tốn rất nhiều thời gian:

- Chia ảnh thành nhiều box, mỗi box các bạn sẽ detect object trong box đó Vị trí của object chính là tọa độ của box đó

Trang 32

- Thay vì chia thành từng box, chúng ta sẽ sử dụng một thuật toán để lựa chọn những region ứng viên (ví dụ như là thuật toán Selective Search), các vùng ứng viên này giống như là những vùng liên thông với nhau trên kênh màu RGB, sau đó với mỗi vùng ứng viên này, chúng ta dùng model để phân loại object Chúng ta có một số mô hình xây dựng theo kiểu này như RCNN, Fast RCNN

Rất rõ ràng, nhược điểm của các phương pháp trên là tốn rất nhiều tài nguyên

để tính toán cho mội vùng trên một bức ảnh, và do đó không thể chạy realtime trên các thiết bị yếu

Một trong nhưng ưu điểm mà YOLO đem lại đó là chỉ sử dụng thông tin toàn

bộ bức ảnh một lần và dự đoán toàn bộ object box chứa các đối tượng, mô hình được xây dựng theo kiểu end-to-end nên được huấn luyện hoàn toàn bằng gradient descent Sau đây chúng em sẽ trình bày chi tiết về mô hình YOLO

Mỗi ô vuông chịu trách nhiệm dự đoán 2 boundary box của đối tượng Mỗi boundary box dữ đoán có chứa object hay không và thông tin vị trí của boundary box gồm trung tâm boundary box của đối tượng và chiều dài, rộng của boundary box đó

Ví vụ ô vuông màu xanh cần dự đoán 2 boundary box chứa cô gái như hình minh họa

ở dưới Một điều cần lưu ý, lúc cài đặt chúng ta không dự đoán giá trị pixel mà cần phải chuẩn hóa kích thước ảnh về đoạn từ [0-1] và dự đoán độ lệch của tâm đối tượng

Trang 33

đến box chứa đối tượng đó Ví dụ, chúng ta thay vì dữ đoán vị trí pixel của điểm màu

đỏ, thì cần dự đoán độ lệch a, b trong ô vuông chứa tâm object [23]

Hình 2.11: Ảnh được phân chia bởi grid size 7x7

Hình 2.12: YOLOv1 dự đoán 2 bouding box xung quanh mỗi object

Tổng hợp lại, với mỗi ô vuông chúng ta cần dự đoán các thông tin sau:

- Ô vuông có chứa đối tượng nào hay không?

- Dự đoán độ lệch 2 box chứa object so với ô vuông hiện tại

- Lớp của object đó

Như vậy với mỗi ô vuông chúng ta cần dự đoán một vector có (nbox+4*nbox+nclass) chiều Ví dụ, chúng ta cần dự đoán 2 box, và 3 lớp đối với mỗi ô vuông thì chúng sẽ có một ma trận 3 chiều 7x7x13 chứa toàn bộ thông tin cần

Trang 34

Hình 2.13: Vector ngõ ra của thuật toán YOLO

❖ CNN for YOLO Object Detection

Chúng ta đã cần biết phải dự đoán những thông tin nào đối với mỗi ô vuông, điều quan trọng tiếp theo là xây dựng một mô hình CNN có cho ra ouput với shape phù hợp theo yêu cầu của chúng ta, tức là gridsize x gridsize x (nbox+4*nbox+nclass) Ví dụ với gridsize là 7x7 là mỗi ô vuông dự đoán 2 boxes,

và có 3 loại object tất cả thì chúng ta phải cần output có shape 7x7x13 từ mô hình CNN

Hình 2.14: Kiến trúc mạng CNN dùng trong YOLOv1

YOLO sử dụng linear regression để dự đoán các thông tin ở mỗi ô vuông Do

đó, ở layer cuối cùng chúng ta sẽ không sử dụng bất kì hàm kích hoạt nào cả Với ảnh đầu vào là 448x448, mô hình CNN có 6 tầng max pooling với size 2x2 sẽ giảm 64 lần kích thước ảnh xuống còn 7x7 ở output đầu ra Đồng thời thay vì sử dụng tầng full connected ở các tầng cuối cùng, chúng ta có thể thay thế bằng tầng 1x1 conv với

13 feature maps để output shape dễ dàng cho ra 7x7x13

❖ Loss function

Chúng ta đã định nghĩa được những thông tin mà mô hình cần phải dự đoán, và kiến trúc của mô hình CNN Bây giờ là lúc mà chúng ta sẽ định nghĩa hàm lỗi

YOLO sử dụng hàm độ lỗi bình phương giữ dự đoán và nhãn để tính độ lỗi cho

mô hình Cụ thể, độ lỗi tổng của chúng ta sẽ là tổng của 3 độ lỗi con sau:

- Độ lỗi của việc dữ đoán loại nhãn của object - Classifycation loss

- Độ lỗi của dự đoán tạo độ cũng như chiều dài, rộng của boundary box - Localization loss

Trang 35

- Độ lỗi của ô vuông có chứa object nào hay không - Confidence loss

Chúng ta mong muốn hàm lỗi có chức năng sau Trong quá trình huấn luyện,

mô hình sẽ nhìn vào những ô vuông có chứa object Tăng classification score lớp đúng của object đó lên Sau đó, cũng nhìn vào ô vuông đó, tìm boundary box tốt nhất trong 2 boxes được dự đoán Tăng localization score của boundary box đó lên, thay đổi thông tin boundary box để gần đúng với nhãn Đối với những ô vuông không chứa object, giảm confidence score và chúng ta sẽ không quan tâm đến classification score

và localization score của những ô vuông này

Ví dụ, trong hình minh họa ở trên, chúng ta có 2 object tại ô vuông (dòng, cột)

là (2,1) và (3,4), chứa object là hình tam giác và hình tứ giác đều Độ lỗi classification loss chỉ tính cho 2 object này mà ko quan tâm đến những ô vuông khác Lúc cài đặt chúng ta cần lưu ý phải nhân với một mask để triệt tiêu giá trị lỗi tại những ô vuông không quan tâm

❖ Localization Loss

Localization loss dùng để tính giá trị lỗi cho boundary box được dự đoán bao gồm offset x, y và chiều dài, rộng so với nhãn chính xác của chúng ta Nên lưu ý rằng, chúng ta không tính toán trực tiếp giá trị lỗi này trên kích thước của ảnh mà cần chuẩn dưới kính thước ảnh về đoạn [0-1] đối với tọa độ điểm tâm, và không dữ đoán trực tiếp điểm tâm mà phải dự đoán giá trị lệch offset x, y so với ô vuông tương ứng Việc chuẩn hóa kích thước ảnh và dự đoán offset làm cho mô hình nhanh hội tụ hơn so với việc dự đoán giá trị mặc định

(2.8)

bằng 1 nếu ô vuông đang xét có object ngược lại bằng 0

là xác xuất có điều của lớp c tại ô vuông tương ứng mà mô hình dự đoán

Trang 36

Độ lỗi localization loss được tính bằng tổng đỗ lỗi bình phương của offsetx, offsety và chiều dài, rộng trên tất cả các ô vuông có chứa object Tại mỗi ô vuông đúng, ta chọn 1 boundary box có IOU (Intersect over union) tốt nhất, rồi sau đó tính

độ lỗi theo các boundary box này Theo hình mình họa trên chúng ta có 4 boundary box tại ô vuông đúng có viền màu đỏ, chúng ta chọn 1 box tại mỗi ô vuông để tính

độ lỗi Còn box xanh được bỏ qua

Localization loss là độ lỗi quan trọng nhất trong 3 loại độ lỗi trên Do đó, ta cần đặt trọng số cao hơn cho độ lỗi này

❖ Confidence Loss

Confidence loss thể hiện độ lỗi giữa dự đoán boundary box đó chứa object so với nhãn thực tế tại ô vuông đó Độ lỗi này tính nên cả những ô vuông chứa object và không chứa object

Độ lỗi này là độ lỗi bình phường của dự đoán boundary đó chứa object với nhãn

thực tế của ô vuông tại vị trí tương ứng, chúng ta lưu ý rằng, độ lỗi tại ô vuông mà nhãn chứa object quan trọng hơn là độ lỗi tại ô vuông không chứa object, do đó chúng

ta cần sử dụng hệ số lambda để cân bằng điều này

Tổng kết lại, tổng lỗi của chúng ta sẽ bằng tổng của 3 loại độ lỗi trên:

𝐿

𝑡𝑜𝑡𝑎𝑙

= 𝐿

𝑐𝑙𝑎𝑠𝑠𝑖𝑓𝑖𝑐𝑎𝑡𝑖𝑜𝑛

+ 𝐿

𝑙𝑜𝑐𝑎𝑙𝑖𝑧𝑎𝑡𝑖𝑜𝑛

+ 𝐿

𝑐𝑜𝑛𝑓𝑖𝑑𝑒𝑛𝑐𝑒

(2.11)

❖ Dự đoán lớp và tọa độ boundary box sau quá trình huấn luyện - Inference

Chúng ta chỉ giữ lại những boundary box mà có chứa object nào đó Để làm điều này, chúng ta cần tính tích của xác xuất có điều kiện ô vuông thuộc về lớp i nhân với sác xuất ô vuông đó chứa object, chỉ giữ lại những boundary box có giá trị này lớn hơn ngưỡng nhất định

Mỗi object lại có thế có nhiều boundary box khác nhau do mô hình dự đoán Để tìm boundary box tốt nhất các object, chúng ta có thể dùng thuật toán non-maximal suppression để loại những boundary box giao nhau nhiều, tức là có IOU giữ 2 boundary box lớn

(2.10) (2.9)

Trang 37

Để tính IOU giữ 2 box chúng ta cần tính diện tích giao nhau giữa 2 box chia cho tổng diện tích của 2 box đó

Hình 2.15: Hai box giao nhau

𝐼𝑂𝑈 =

𝑆𝑣à𝑛𝑔

𝑆đỏ+𝑆𝑡í𝑚+𝑆𝑣à𝑛𝑔

(2.12)

2.5 GIỚI THIỆU GOOGLE COLAB

Google Colab là một dich vụ đám mây miễn phí, hiện nay có hỗ trợ GPU (Tesla K80) và TPU (TPUv2) Do được phát triển dựa trên Jupiter Notebook nên việc sử dụng Google Colab cũng tương tự như việc sử dụng Jupyter Notebook Google Colab

là một công cụ lý tưởng để chúng ta rèn luyện kỹ năng lập trình với ngôn ngữ Python thông qua các thư viện của deep learning Google Colab cài đặt sẵn cho chúng ta những thư viện rất phổ biến trong nghiên cứu Deep Learning như PyTorch, TensorFlow, Keras và OpenCV [15]

Hình 2.16: Google colab

Machine Learning/Deep Learning đang phát triển với tốc độ rất nhanh Để viết một chương trình sử dụng framework về Deep Learning như TensorFlow, Kera hay Pytorch, chúng ta có thể sử dụng bất kì Python IDE nào như PyCharm, Jupyter Notebook hay Atom Tuy nhiên, do những thuật toán Machine Learning/Deep Learning yêu cầu hệ thống phải có tốc độ và khả năng xử lý cao (thông thường dựa trên GPU), mà máy tính của chúng ta thông thường không được trang bị GPU

Trang 38

Rất nhiều người học và nhà nghiên cứu chọn giải pháp là thuê những dịch vụ tính toán trên AWS

Từ đó, Google cho ra đời một dịch vụ hoàn toàn miễn phí dành cho cộng đồng nghiên cứu AI, phát triển các ứng dụng Deep Learning bằng việc cung cấp GPU và TPU miễn phí – Đó là Google Colab

Hiện nay các lập trình viên thường chọn Colab thay cho dịch vụ của AWS có phí khá cao Colab hỗ trợ GPU (Tesla K80) và TPU (TPUv2) Cách sử dụng Colab cũng tương tự như trên Jupiter Notebook Đây là một dịch vụ miễn phí tuyệt với của Google nếu không có một máy tính cấu hình cao để lập trình, biên dịch Python với các thư viện của deep learning Hiện Google Colab có sẵn các thư viện phổ biến hổ trợ cho việc nghiên cứu về trí tuệ nhân tạo như: PyTorch, TensorFlow, Keras và OpenCV

Google Colab thật sự tuyệt vời Ngoài việc nâng cao kĩ năng code, hay thực hiện trên các thư viện Deep Learning PyTorch, Keras, TensorFlow, OpenCV, chúng ta còn có thể tạo một notebooks trên Colab, thực hiện các thao tác với notebooks đó như tải lên, lưu trữ, chia sẻ kể cả trên Google Drive Chúng ta còn có thể sử dụng bất cứ thứ gì chúng ta lưu trữ trong notebooks như tải lên Jupyter cá nhân, GitHub, Kaggle…

Colab thực sự cung cấp những điều tuyệt vời cần thiết nhất có một người lập trình viên khi thực hiện Deep Learning

Thực hiện trên Google Colab khá dễ dàng Nếu đã dùng Jupyter Notebooks thì Google Colab cũng tương tự Và tất nhiên, chúng ta sẽ cảm nhận được sự tuyệt vời với việc thực hiện Deep Learning trên phần mềm hỗ trợ GPU so với những câu lệnh thông thường tù túng

Trang 39

2.6 KHÁI QUÁT VỀ ARDUINO

Arduino là một bo mạch vi xử lý được dung để lập trình tương tác với các thiết

bị phần cứng như cảm biến, động cơ, đèn hoặc các thiết bị khác đặc điểm nổi bật của Arduino là môi trường phát triển ứng dụng cực kỳ dễ sử dụng, với một ngôn ngữ lập trình có thể học một cách nhanh chóng ngay cả với người ít am hiểu về điện tử và lập trình và điều hiển làm nên hiện tượng Arduino chính là mức giá thấy với tính chấ nguồn mở từ phần cứng tới phần mềm chỉ với khoảng $30, người dung đã có thể sở hữu board Arduino có 20 ngõ I/O có thể tương tác và điều khiển chừng ấy thiết bị Arduino ra đời tại thị trấn Ivrea thuộc nước Ý và được đặt theo tên một vị vua vào thế kỷ thứ 9 là King Arduino, Arduino chính thức được đưa ra giới thiệu vào năm

2005 như là một công cụ khiêm tốn dành cho các sinh viên của giáo sư Massimo Banzi, là một trong những người phát triển Arduino, tại trường Interaction Design Instistute Ivrea (IDII) Mặt dù hầu như không được tiếp thị gì cả, tin tức về arduino vẫn lan truyền với tốc độ chóng mặt nhờ những lời truyền miệng tốt đẹp của những người dùng đầu tiên Hiện nay Arduino nổi tiếng tới nỗi có người tìm đến thị trấn Ivrea chỉ để tham quan nói đã sản sinh ra Arduino

Arduino thực sự đã gây sóng gió trên thị trường người dùng DIY (là những người tự chế ra sản phẩm của mình) trên toàn thế giới trong vài năm gần đây Ngay

cả những sinh viên và nhà nghiên cứu tại các trường đại học danh tiếng như MIT, Stanford, Carnegie Mellon phải sử dụng; hoặc ngay cả Google cũng muốn hỗ trợ khi cho ra đời bộ kit Arduino Mega ADK dùng để phát triển các ứng dụng Android tương tác với cảm biến và các thiết bị khác

Arduino được chọn làm bộ não xử lý của rất nhiều thiết bị từ đơn giản đến phức tạp Trong số đó có một vài ứng dụng thực sự chứng tỏ khả năng vượt trội của Arduino

do chúng có khả năng thực hiện nhiều nhiệm vụ rất phức tạp [3]

Một số board arduino thông dụng: Arduino có nhiều bo mạch khác nhau, mỗi

bo mạch có khả năng khác nhau Thêm vào đó, vì là phần cứng nguồn mở nên nhiều người có thể sửa đổi và tạo ra nhiều các bo mạch Arduino khác với nhiều chức năng hơn Dưới đây là một số loại phổ biến:

Arduino Uno (R3)

Uno là một lựa chọn tuyệt vời nếu bạn mới làm quen với arduino Nó có mọi

Trang 40

có thể được sử dụng làm đầu ra PWM), 6 đầu vào analog, kết nối USB, giắc cắm nguồn, nút reset và nhiều thứ khác nữa Nó chứa mọi thứ cần thiết để hỗ trợ vi điều khiển; chỉ cần kết nối nó với một máy tính bằng cáp USB hoặc cấp điện cho nó bằng

bộ chuyển đổi dòng xoay chiều thành dòng một chiều hoặc pin

Hình 2.17: Board Arduino UNO R3

Arduino Nano

Hình 2.18: Board Arduino Nano

Arduino Nano là một board mạch sử dụng chip ATmega328 (loại Arduino Nano 3.x) hoặc dùng ATmega168 (Arduino Nano 2.x), tuy nhiên có kích thước nhỏ gọn hơn để có thể tích hợp vào các hệ thống, đi kèm với đó là 1 vài điểm khác khi so sánh với board Arduino Uno R3:

• Sử dụng cổng Mini-B USB thay vì cổng USB chuẩn

• Bổ sung thêm 2 chân Analog

• Không có jack nguồn DC

Lilypad Arduino

LilyPad là một công nghệ dệt e-textile được phát triển bởi Leah Buechley và được hợp tác thiết kế bởi Leah và SparkFun Mỗi LilyPad được thiết kế cho phép

Ngày đăng: 15/02/2023, 14:31

Nguồn tham khảo

Tài liệu tham khảo Loại Chi tiết
[1] Nguyễn Thanh Hải, “Giáo Trình Xử Lý Ảnh”, Trường ĐHSPKT, Tp.HCM, Nhà xuất bản ĐH Quốc Gia, 2015 Sách, tạp chí
Tiêu đề: Giáo Trình Xử Lý Ảnh
Nhà XB: Nhà xuất bản ĐH Quốc Gia
[2] Zhong-Qiu Zhao, Peng Zheng, Shou-tao Xu, and Xindong Wu, “Object Detection with Deep Learning: A Review”, Institute of Electrical and Electronics Engineers, 16 Apr 2019 Sách, tạp chí
Tiêu đề: Object Detection with Deep Learning: A Review
[4] Phil Spector, “Introduction to Python Programming”, Department of Statistics, University of California Berkeley, March 16, 2005 Sách, tạp chí
Tiêu đề: Introduction to Python Programming
[5] Dave Kuhlman, “A Python Book: Beginning Python, Advanced Python, and Python Exercises”, Dec 2013 Sách, tạp chí
Tiêu đề: A Python Book: Beginning Python, Advanced Python, and Python Exercises
[6] J. R. Parker, “Algorithms for Image Processing and Computer Vision”, 2st Edition, 2010 Sách, tạp chí
Tiêu đề: Algorithms for Image Processing and Computer Vision
[7] Lin, H., K. M. Aye, H.M. Tun, Theingi and Z. M. Naing, “Design and Construction of IntelligentTraffic Light Control System Using FuzzyLogic”, Proc. AIP Conf., Vol. 1052, pp. 237-239, 2008 Sách, tạp chí
Tiêu đề: Design and Construction of IntelligentTraffic Light Control System Using FuzzyLogic
[8] Wiering M., J.v. Veenen, J. Vreeken and A. Koopman, “Intelligent Traffic Light Control”, Technical report UU – CS – 2004 – 029, UtrechtUniversity, The Netherlands, 2004 Sách, tạp chí
Tiêu đề: Intelligent Traffic Light Control
[9] Tan K. K., M. Khalid and R. Yusof, “IntelligentTraffic Lights Control by Fuzzy Logic”, Malaysian Journal of Computer Science, Vol. 9No. 2, pp. 29-35, 1996 Sách, tạp chí
Tiêu đề: IntelligentTraffic Lights Control by Fuzzy Logic
[10] Kulkarni, G.H.; Waingankar, P.G, “Fuzzy logicbased traffic light controller”, Proc. IEEE Conf. ICIIS 2007, Issue 9-11 Aug. 2007 pp.107 – 110 Sách, tạp chí
Tiêu đề: Fuzzy logicbased traffic light controller
[11] AdvanTech, “Digital Traffic Light Detection System”, Advantech, 2007. http://www.advantech.com/Network/CMScontent-apps-8.asp.html/ Sách, tạp chí
Tiêu đề: Digital Traffic Light Detection System
[12] Ngọc Ẩn, “Đèn tín hiệu giao thông mới: “Phơi nắng” 3,5 triệu đôla!”, Báo Tuổi Trẻ, số ra 21/12/2004 Sách, tạp chí
Tiêu đề: Đèn tín hiệu giao thông mới: “Phơi nắng” 3,5 triệu đôla
[13] Lê Mỹ, “Gần 50 chốt đèn giao thông được lắp hệ thống cảm biến”, Báo Dân Trí, số ra ngày 17/12/2007 Sách, tạp chí
Tiêu đề: Gần 50 chốt đèn giao thông được lắp hệ thống cảm biến
[14] Ánh Nguyệt, Thu Hồng, “48 đèn tín hiệu giao thông mắc chứng “nan y””, Báo Người Lao Động, số ra ngày 20/10/2008 Sách, tạp chí
Tiêu đề: 48 đèn tín hiệu giao thông mắc chứng “nan y”
[16] Quoc Pham, “Tìm Hiểu Mô Hình YOLO Cho Bài Toán Object Detection – Understanding YOLO”, Data Scientist at Overspace, 2018.https://pbcquoc.github.io/yolo/ Sách, tạp chí
Tiêu đề: Tìm Hiểu Mô Hình YOLO Cho Bài Toán Object Detection – Understanding YOLO”, Data Scientist at Overspace, 2018
[17] Joseph Redmon, Santosh Divvala, Ross Girshick, Ali Farhadi, “You Only Look Once: Unified, Real-Time Object Detection”, University of Washington, Allen Institute for AI, 2016 Sách, tạp chí
Tiêu đề: You Only Look Once: Unified, Real-Time Object Detection
[18] Joseph Redmon, Ali Farhadi, “YOLO9000: Better, Faster, Stronger”, University of Washington, Allen Institute for AI, 2017 Sách, tạp chí
Tiêu đề: YOLO9000: Better, Faster, Stronger
[19] Joseph Redmon, Ali Farhadi, “YOLOv3: An Incremental Improvement”, University of Washington, 2018 Sách, tạp chí
Tiêu đề: YOLOv3: An Incremental Improvement
[20] Alexey Bochkovskiy, Chien-Yao Wang, Hong-Yuan Mark Liao, “YOLOv4: Optimal Speed and Accuracy of Object Detection”, Institute of Information Science Academia Sinica, Taiwan, April 2020 Sách, tạp chí
Tiêu đề: YOLOv4: Optimal Speed and Accuracy of Object Detection
[21] Yi-Qi Huang, Jia-Chun Zheng, Shi-Dan Sun, Cheng-Fu Yang and Jing Liu, “Optimized YOLOv3 Algorithm and Its Application in Traffic Flow Detections”, 28 April 2020 Sách, tạp chí
Tiêu đề: Optimized YOLOv3 Algorithm and Its Application in Traffic Flow Detections
[23] Seonkyeong Seong, Jeongheon Song, Donghyeon Yoon, Jiyoung Kim and Jaewan Choi, “Determination of Vehicle Trajectory through Optimization of Vehicle Bounding Boxes Using a Convolutional Neural Network”, 30 September 2019 Sách, tạp chí
Tiêu đề: Determination of Vehicle Trajectory through Optimization of Vehicle Bounding Boxes Using a Convolutional Neural Network

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w