(Đồ á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 1KHOA Đ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 2TRƯỜ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 3LỜ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 4LỜ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 5MỤ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 64.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 7LIỆ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 8Hì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 9Hì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 10LIỆ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 11TÓ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 12Chươ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 13và 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 141.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 16Chươ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 172.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 192.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 21Thư 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 22Objdetect: 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 232.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 25hợ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 26Direct 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 27Add 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 28Hì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 29ta có thể xem kiến trúc YOLOv3 ở hình dưới để dễ hình dung hơn
Trang 30tế [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 31Cross-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 34Hì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 38Rấ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 392.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 40có 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