You are on page 1of 36

KHOA: KỸ THUẬT& KHOA HỌC MÁY TÍNH

TIỂU LUẬN
MÔN ĐỒ ÁN CƠ SỞ 1

ĐỀ TÀI:
NHẬN DIỆN BIỂN BÁO GIAO THÔNG

SINH VIÊN: NGUYỄN HIẾU KHA – 31012202530


TRẦN ĐỖ CÔNG MINH -
NGUYỄN THẾ ANH -
TRƯƠNG TRÍ ĐỨC – 31012202532

Lớp: 22DAI/DMT/HTDL
GIẢNG VIÊN: ĐINH THỊ THU HƯƠNG

1
BẢNG PHÂN CÔNG NHIỆM VỤ

STT Họ và tên Nhiệm vụ % tương ứng


công việc được
giao

1 NGUYỄN HIẾU KHA -Tìm hiểu đề tài 100%

-Tinh chỉnh mô
hình

-Làm slide, thuyết


trình

-Tổng hợp, chỉnh


sửa nội dung báo
cáo

2 TRẦN ĐỖ CÔNG MINH -Tìm hiểu đề tài 70%

-Tổng hợp, báo


cáo

-Thuyết trình

3 TRƯƠNG TRÍ ĐỨC -Tìm hiểu đề tài 100%

-Viết báo cáo

-Thuyết trình

4 NGUYỄN THẾ ANH -Tìm hiểu đề tài 100%

-Viết báo cáo

-Thuyết trình

2
MỤC LỤC

BẢNG PHÂN CÔNG NHIỆM VỤ...................................................................................2


MỤC LỤC..........................................................................................................................3
DANH MỤC HÌNH ẢNH.................................................................................................4
PHẦN MỞ ĐẦU................................................................................................................5
1.Lý Do Chọn Đề Tài.......................................................................................................5
2.Lịch Sử Nghiên Cứu Vấn Đề........................................................................................6
3.Mục Tiêu Nghiên Cứu...................................................................................................6
4.Đối Tượng và Phạm Vi Nghiên Cứu.............................................................................6
5.Phương Pháp Nghiên Cứu.............................................................................................6
PHẦN NỘI DUNG.............................................................................................................7
CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN.................................................................7
1.1. Tầm quan trọng của biển báo giao thông............................................................7
1.2. Thách thức và hạn chế của biển báo giao thông.................................................7
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT..............................................................................8
2.1. Học sâu - Deep Learning......................................................................................8
2.2. Mạng nơ-ron tích chập - Convolutional Neural Network......................................9
2.3. Densenet.................................................................................................................9
2.4. Mạng dư - Residual Networks (ResNet)..............................................................12
2.5. Keras....................................................................................................................15
2.6. Các thư viện được sử dụng...............................................................................15
CHƯƠNG 3: CHƯƠNG TRÌNH VÀ GIẢI THÍCH.................................................20
3.1 Dataset...................................................................................................................20
3.2 Huấn Luyện mô hình............................................................................................22
CHƯƠNG 4: KẾT QUẢ..............................................................................................27
PHẦN KẾT LUẬN..........................................................................................................34
TÀI LIỆU THAM KHẢO...............................................................................................35

3
DANH MỤC HÌNH ẢNH

Hình 1. Hình ảnh về mạng lưới Deep Learning. Nguồn: thedatascientist.com 7


Hình 2. Cấu trúc DenseNet và Resnet. Nguồn: paperswithcode.com 9
Hình 3. Một mạng lưới gồm 5 DenseBlock được liên kết với nhau với số lớp k = 4. Mỗi
lớp đều lấy kết quả từ lớp ở Block phía trước. Nguồn: paperswithcode.com 10
Hình 4. DenseBlock và các layer 10
Hình 5. Đồ thị về tỷ lệ lỗi khi huấn luyện và thử nghiệm. Nguồn: geeksforgeek.org 11
Hình 6. Mô tả về công thức được sử dụng trong ResNet với hàm kích hoạt relu. Nguồn:
geeksforgeeks.org 12
Hình 7. Ví dụ về ImageNet. Bên trái: cái Mô hình VGG-19 (19,6 tỷ FLOP) làm tài liệu
tham khảo.Ở giữa: một mạng đơn giản Với 34 lớp tham số (3,6 tỷ FLOP). Bên phải:
mạng dư có 34 lớp tham số (3,6 tỷ FLOP). Nguồn: arxiv.org [7] 13
Hình 8. Sự ngắn gọn trong việc sử dụng API Keras để làm việc. Nguồn: keras.io 15
Hình 9. Phân chia dữ liệu. 17
Hình 10. Xây dựng mô hình CNN. 17
Hình 11. Hình ảnh minh họa sự mất mát. 18
Hình 12. Hình ảnh minh họa kết quả đạt được. 18
Hình 13. Tập dữ liệu được sử dụng để xây dựng mô hình CNN. 21
Hình 14. Khai báo thư viện Keras.23
Hình 15. Tạo model Keras. 23
Hình 16. Compile model Keras. 24
Hình 17. Training model Keras. 24
Hình 18. Lưu model Keras.24
Hình 19. Khai báo thư viện Tkinter và Keras để tạo giao diện người dung. 25
Hình 20. Tạo mảng gồm các nhãn của biển báo. 25
Hình 21. Tạo giao diện. 26

4
Hình 22. Tạo hàm xử lý ảnh. 26
Hình 23. Tiến hành xử lý ảnh. 27
Hình 24 Chạy file chương trình. 28
Hình 25 Cửa sổ sau khi mở file. 29
Hình 26 Chọn biển báo từ máy tính. 30
Hình 27. Chọn 1 ảnh bất kì trong folder 26. 31
Hình 28. Sau khi nhấn Open để tài ảnh lên phần mềm nhận diện. 32
Hình 29 Bấm nút nhận diện và xem kết quả. 33
Hình 30. Ví dụ về biển báo giao thông ‘Giới hạn tốc độ’. 34
Hình 31. Ví dụ về biển báo giao thông 'Cấm xe'.35
Hình 32. Ví dụ về biển báo giao thông ' Dừng '. 36

PHẦN MỞ ĐẦU

5
1.Lý Do Chọn Đề Tài
Trong thời đại công nghệ hiện đại, sự phát triển của trí tuệ nhân tạo và máy học đã mở ra
những cánh cửa mới cho việc giải quyết các vấn đề phức tạp trong đời sống hàng ngày.
Trong lĩnh vực giao thông, việc nhận diện biển báo đóng một vai trò quan trọng trong
việc nâng cao an toàn giao thông và giảm thiểu tai nạn. Để đáp ứng nhu cầu này, việc áp
dụng các thuật toán học sâu, như mạng nơ-ron tích chập (CNN), đã thu hút sự quan tâm
lớn từ cộng đồng nghiên cứu và công nghệ.
Tại Việt Nam, tình trạng an toàn giao thông đường bộ vẫn còn diễn biến phức tạp, số
người tử vong vì tài nạn giao thông vẫn còn mức cao do tình trạng không tuân thủ luật
giao thông và quan trọng nhất vẫn là vì ý thức của người điều khiển giao thông còn kém.
Biển báo giao thông được nhận diện tự động sẽ giúp người tham gia giao thông rất nhiều
nhằm đưa ra những cảnh báo kịp thời, chính xát để giảm ùn tắc và an toàn hơn.
Việc ứng dụng công nghệ thông tin để giải quyết các vấn đề trong lĩnh vực giao thông
đang là một chủ đề nóng ở nước ta hiện nay. Vấn đề phát triển giao thông thông minh để
giảm thiểu ùn tắc, tai nạn và tiết kiệm nguồn lực cũng được thảo luận trong nhiều hội
thảo, diễn đàn như diễn đàn cấp cao Công nghệ Thông tin – Truyền thông Việt Nam
(Vietnam ICT Summit), 2015. Phát hiện và nhận dạng biển báo giao thông là một công
cụ hỗ trợ trong hệ thống giao thông thông minh. Các hệ thống như vậy đang được phát
triển và ứng dụng trong ngành công nghiệp tự động hóa, thông minh ở một số quốc gia
phát triển trên thế giới. Ở Việt Nam, cũng có một số nghiên cứu về lĩnh vực này.

2.Lịch Sử Nghiên Cứu Vấn Đề


Lịch sử nghiên cứu về nhận diện biển báo giao thông đã trải qua những bước đột phá
đáng kể từ những phương pháp truyền thống đến các phương pháp dựa trên trí tuệ nhân
tạo và học máy. Các nghiên cứu trước đây đã giúp cải thiện hiệu suất nhận diện và giảm
thiểu sai số, tuy nhiên vẫn còn nhiều thách thức cần được vượt qua, đặc biệt là trong việc
nhận diện các biển báo có điều kiện ánh sáng và thời tiết khác nhau.

3.Mục Tiêu Nghiên Cứu


Mục tiêu của nghiên cứu này là áp dụng và tối ưu hóa thuật toán CNN để nhận diện biển
báo giao thông với độ chính xác cao và đáng tin cậy, kể cả trong điều kiện ánh sáng và
thời tiết biến đổi.

4.Đối Tượng và Phạm Vi Nghiên Cứu

6
Đối tượng của nghiên cứu là các biển báo giao thông thông thường được sử dụng trên các
tuyến đường phổ biến. Phạm vi của nghiên cứu sẽ tập trung vào việc nhận diện và phân
loại các loại biển báo này trong các điều kiện khác nhau, từ ban ngày đến ban đêm, từ
điều kiện ánh sáng tốt đến điều kiện ánh sáng yếu.

5.Phương Pháp Nghiên Cứu


Nghiên cứu sẽ sử dụng các phương pháp và kỹ thuật của máy học, đặc biệt là mạng nơ-
ron tích chập (CNN), để xây dựng một hệ thống nhận diện biển báo giao thông. Các bước
tiếp theo bao gồm tiền xử lý dữ liệu, xây dựng mô hình CNN, huấn luyện mô hình và
đánh giá hiệu suất của hệ thống.
Thông qua việc thực hiện nghiên cứu này, hy vọng rằng sẽ đóng góp vào việc cải thiện
hiệu suất và độ tin cậy của hệ thống nhận diện biển báo giao thông, từ đó nâng cao an
toàn và hiệu quả của giao thông đường bộ.

PHẦN NỘI DUNG

7
CHƯƠNG 1: GIỚI THIỆU TỔNG QUAN
1.1. Tầm quan trọng của biển báo giao thông
Biển báo giao thông trên biển không chỉ là những dấu hiệu tĩnh đơn giản, mà còn đóng
vai trò không thể phủ nhận trong việc đảm bảo an toàn và trật tự trên mặt biển. Với vai
trò như là các hướng dẫn và cảnh báo, chúng đóng góp đáng kể vào việc điều hướng các
phương tiện và tàu thuyền trên biển một cách an toàn và hiệu quả.
Một trong những yếu tố quan trọng nhất mà biển báo giao thông mang lại là sự an toàn.
Bằng cách cung cấp thông tin về các vùng nguy hiểm, điều kiện thời tiết và các điểm
cảnh báo khác, chúng giúp tàu thuyền và phương tiện biển tránh xa các tình huống nguy
hiểm và giảm thiểu nguy cơ xảy ra tai nạn. Đồng thời, chúng cũng giúp hạn chế và giải
quyết các tình huống khẩn cấp trên biển một cách nhanh chóng và hiệu quả, từ đó bảo vệ
tính mạng và tài sản của những người tham gia giao thông biển.
Ngoài ra, biển báo giao thông còn đóng vai trò quan trọng như là phương tiện truyền
thông và liên lạc giữa các phương tiện và cơ quan quản lý biển. Chúng tạo ra một hệ
thống liên lạc hiệu quả, giúp thông tin về tình hình trên biển được truyền tải một cách
nhanh chóng và chính xác. Điều này không chỉ giúp tăng cường khả năng đối phó với các
tình huống khẩn cấp mà còn đảm bảo rằng các hoạt động giao thông biển được thực hiện
một cách hợp lý và an toàn.
1.2. Thách thức và hạn chế của biển báo giao thông
Một trong những thách thức lớn nhất là sự đa dạng và phức tạp của các loại biển báo giao
thông. Từ biển báo hướng đi đến biển báo cảnh báo và hạn chế tốc độ, mỗi loại biển báo
đều có một mục đích và quy định riêng. Sự phức tạp này làm tăng độ khó trong việc thiết
kế, triển khai và duy trì hệ thống biển báo.

Thêm vào đó, khả năng hiểu biết và tuân thủ của người tham gia giao thông cũng là một
thách thức đáng kể. Người lái xe hoặc người điều khiển tàu thuyền không luôn tuân thủ
các biển báo giao thông do nhiều lý do khác nhau như sơ suất, thiếu hiểu biết hoặc hành
vi bất cẩn.
Điều kiện môi trường cũng có ảnh hưởng đến hiệu quả của các biển báo giao thông. Thời
tiết xấu, ánh sáng yếu, sương mù hay tình trạng đường trơn trượt có thể làm giảm khả
năng nhận diện và hiệu quả của các biển báo, gây ra nguy cơ tai nạn và gây khó khăn cho
việc duy trì an toàn giao thông.
Ngoài ra, việc duy trì và bảo dưỡng hệ thống biển báo cũng đòi hỏi chi phí đáng kể. Các
biển báo cần phải được kiểm tra định kỳ để đảm bảo rằng chúng vẫn đảm bảo độ rõ ràng,
độ bền và tính hiệu quả trong việc truyền đạt thông điệp giao thông.

8
Cuối cùng, việc cung cấp nguồn lực tài chính đủ để duy trì hệ thống biển báo trong thời
gian dài có thể là một thách thức đối với các cơ quan quản lý giao thông. Việc phải đối
mặt với những hạn chế này yêu cầu sự quản lý thông minh và kế hoạch đầu tư hợp lý từ
phía các nhà quản lý giao thông.

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
2.1. Học sâu - Deep Learning
Deep learning là một tập hợp con của học máy sử dụng mạng lưới thần kinh nhiều lớp,
được gọi là mạng lưới thần kinh sâu, để mô phỏng khả năng ra quyết định phức tạp của
bộ não con người [1]. Một số dạng deep learning hỗ trợ hầu hết trí tuệ nhân tạo (AI) trong
cuộc sống của chúng ta ngày nay.
Deep learning thúc đẩy nhiều ứng dụng và dịch vụ cải thiện tự động hóa, thực hiện các
nhiệm vụ phân tích và vật lý mà không cần sự can thiệp của con người. Nó nằm đằng sau
các sản phẩm và dịch vụ hàng ngày [1].

Hình 1. Hình ảnh về mạng lưới Deep Learning. Nguồn: thedatascientist.com.


2.2. Mạng nơ-ron tích chập - Convolutional Neural Network
Convolutional Neural Network (CNN hoặc ConvNet) còn được gọi là mạng nơ-ron tích
chập [2]. Đây được xem là một trong những mô hình của Deep Learning – tập hợp các
thuật toán để có mô hình dữ liệu trừu tượng hóa ở mức cao bằng cách sử dụng nhiều lớp
xử lý có cấu trúc phức tạp hơn [2]. Hiểu đơn giản, CNN là một dạng của mạng nơ-ron
sâu, được áp dụng phổ biến nhất để phân tích hình ảnh một cách trực quan hơn. Hiện tại,

9
chưa có định nghĩa nào về thuật toán CNN chính xác nhất [2]. Mạng CNN được thiết kế
với mục đích xử lý dữ liệu thông qua nhiều lớp (layers). Ngoài ra, CNN có thể giúp tạo ra
được hệ thống thông minh, phản ứng với độ chính xác tương đối cao. [2]
Kunihiko Fukushima và Yann LeCun đã đề xuất mạng lưới thần kinh tích chập vào
những năm 1980 và 1989, đồng thời áp dụng phương pháp lan truyền ngược để huấn
luyện mạng lưới thần kinh trong việc nhận dạng mã Zip viết tay [2]. Trong suốt những
năm 1990, Yann LeCun và nhóm nghiên cứu của ông tiếp tục phát triển nghiên cứu, đạt
đỉnh cao với kiến trúc "LeNet-5", được sử dụng cho việc nhận dạng tài liệu [2]. Từ đó,
nhiều kiến trúc CNN biến thể đã được phát triển, kèm theo sự xuất hiện của các bộ dữ
liệu mới như MNIST và CIFAR-10, cũng như các cuộc thi như Thử thách nhận dạng hình
ảnh quy mô lớn ImageNet (ILSVRC). Một số kiến trúc nổi tiếng bao gồm:
 AlexNet
 VGGNet2.2. Mạng nơ-ron tích chập - Convolutional Neural Network
 GoogLeNet
 ResNet
 LeNet-5 – được biết đến như 1 kiến trúc CNN cổ điển

Convolutional Neural Network (CNN hoặc ConvNet) còn được gọi là mạng nơ-ron tích
chập [2]. Đây được xem là một trong những mô hình của Deep Learning – tập hợp các
thuật toán để có mô hình dữ liệu trừu tượng hóa ở mức cao bằng cách sử dụng nhiều lớp
xử lý có cấu trúc phức tạp hơn [2]. Hiểu đơn giản, CNN là một dạng của mạng nơ-ron
sâu, được áp dụng phổ biến nhất để phân tích hình ảnh một cách trực quan hơn. Hiện tại,
chưa có định nghĩa nào về thuật toán CNN chính xác nhất. Mạng CNN được thiết kế với
mục đích xử lý dữ liệu thông qua nhiều lớp (layers) [2]. Ngoài ra, CNN có thể giúp tạo ra
được hệ thống thông minh, phản ứng với độ chính xác tương đối cao. [2]
2.3. Densenet
Densenet là mạng tích chập(CNN) được kết nối dày đặc. Nó rất giống với ResNet nhưng
có một số khác biệt cơ bản [3]. ResNet sử dụng một phương pháp bổ sung có nghĩa là lấy
đầu ra trước đó làm đầu vào cho lớp trong tương lai và trong DenseNet lấy tất cả đầu ra
trước đó làm đầu vào cho lớp trong tương lai như trong hình trên. Có thể nói, DenseNet
là một dạng ứng dụng của mạng nơ-ron tích chập (CNN), trong đó các lớp sau được lấy
từ các lớp trước để tính toán [3]. Điều này tạo ra một mạng nơ-ron có cấu trúc kết nối
chặt chẽ, giúp tăng cường khả năng học và hiệu suất của mô hình. [3]

10
Hình 2. Cấu trúc DenseNet và Resnet. Nguồn: paperswithcode.com.
DenseBlock là một mô-đun được sử dụng trong các mạng thần kinh tích chập(CNN), kết
nối trực tiếp tất cả các lớp (với kích thước bản đồ đặc trưng phù hợp) với nhau. Kể từ đó,
lớp thứ lth có l đầu vào(inputs) và nó sẽ được chuyển cho L – l lớp tiếp theo (L: tổng số
lớp, l: lớp hiện lại). Và từ đó nó sẽ tạo nên sự liên kết dày đặc trong mạng lưới. [4]

11
Hình 3. Một mạng lưới gồm 5 DenseBlock được liên kết với nhau với số lớp k = 4. Mỗi
lớp đều lấy kết quả từ lớp ở Block phía trước. Nguồn: paperswithcode.com.

Hình 4. DenseBlock và các layer.

12
2.4. Mạng dư - Residual Networks (ResNet)
Sau kiến trúc đầu tiên dựa trên CNN (AlexNet) chiến thắng cuộc thi ImageNet 2012, mọi
kiến trúc chiến thắng tiếp theo sử dụng nhiều lớp hơn trong một mạng nơ-ron sâu để giảm
tỷ lệ lỗi [5]. Điều này hoạt động cho ít lớp hơn, nhưng khi chúng ta tăng số lớp, có một
vấn đề phổ biến trong học sâu gọi là đạo hàm biến mất/bùng nổ (vanishing) [5]. Điều này
làm cho đạo hàm trở thành 0 hoặc quá lớn. Do đó, khi chúng ta tăng số lớp, tỷ lệ lỗi khi
huấn luyện và kiểm tra cũng tăng. [5]
Vanishing là vấn đề xảy ra khi huấn luyện các mạng nơ ron nhiều lớp [5]. Khi huấn
luyện, giá trị đạo hàm là thông tin phản hồi của quá trình lan truyền ngược [5]. Giá trị này
trở nên vô cùng nhỏ tại các lớp nơ ron đầu tiên khiến cho việc cập nhật trọng số mạng
không thể xảy ra. [6]

Hình 5. Đồ thị về tỷ lệ lỗi khi huấn luyện và thử nghiệm. Nguồn: geeksforgeek.org.
Mạng Residual: Để giải quyết vấn đề về đạo hàm biến mất, kiến trúc này giới thiệu khái
niệm gọi là Residual Blocks. Trong mạng này, chúng ta sử dụng một kỹ thuật gọi là kết
nối trực tiếp. Kết nối trực tiếp kết nối các hoạt động của một lớp đến các lớp tiếp theo
bằng cách bỏ qua một số lớp ở giữa [5]. Điều này tạo thành một khối residual. ResNets
được tạo thành bằng cách xếp các khối residual này cùng nhau [5]. Phương pháp đằng
sau mạng này là thay vì các lớp học ánh xạ cơ bản, chúng ta cho phép mạng phù hợp với
ánh xạ residual [5]. Đó là H(x), ánh xạ ban đầu, để mạng phù hợp với công thức : [5]
F(x) ∶= H(x) – x

13
Hình 6. Mô tả về công thức được sử dụng trong ResNet với hàm kích hoạt relu. Nguồn:
geeksforgeeks.org.

14
Hình 7. Ví dụ về ImageNet. Bên trái: cái Mô hình VGG-19 (19,6 tỷ FLOP) làm tài liệu
tham khảo.Ở giữa: một mạng đơn giản Với 34 lớp tham số (3,6 tỷ FLOP). Bên phải:
mạng dư có 34 lớp tham số (3,6 tỷ FLOP). Nguồn: arxiv.org [7].

15
2.5. Keras
Keras là API cấp cao của nền tảng TensorFlow [8]. Nó cung cấp một giao diện dễ tiếp
cận, hiệu quả cao để giải quyết các vấn đề về máy học (ML), tập trung vào học sâu hiện
đại . Keras bao gồm mọi bước trong quy trình học máy, từ xử lý dữ liệu đến điều chỉnh
siêu tham số cho đến triển khai[8]. Nó được phát triển với trọng tâm là cho phép thử
nghiệm nhanh. [8]
Với Keras, ta có toàn quyền truy cập vào khả năng mở rộng và khả năng đa nền tảng của
TensorFlow. Có thể chạy Keras trên TPU Pod hoặc các cụm GPU lớn vàcũng có thể xuất
các mô hình Keras để chạy trong trình duyệt hoặc trên thiết bị di động. [8]
Keras được thiết kế để đơn giản hóa công bằng cách đạt được các mục tiêu sau: [8]
o Cung cấp giao diện đơn giản, nhất quán.
o Tối thiểu hóa số lượng hành động cần thiết cho các trường hợp sử dụng
thông thường.
o Cung cấp các thông báo lỗi rõ ràng, hữu ích.
o Tuân thủ nguyên tắc tiết lộ dần về độ phức tạp: Bắt đầu dễ dàng và bạn có
thể hoàn thành các luồng công việc nâng cao bằng cách học từng bước.
o Hỗ trợ viết mã ngắn gọn, dễ đọc.

Hình 8. Sự ngắn gọn trong việc sử dụng API Keras để làm việc. Nguồn: keras.io.
2.6. Các thư viện được sử dụng
-Conv2D được sử dụng để thực hiện phép toán tích chập, bước đầu tiên của CNN.
from keras.layers import Conv2D
-MaxPoling2D được sử dụng để thực hiện thao tác gộp, bước thứ hai của CNN.

16
from keras.layers import MaxPooling2D
-Flatten là quá trình chuyển đổi tất cả các mảng 2D kết quả thành một vectơ tuyến tính
dài liên tục.
from keras.layers import Flatten
-Dense được sử dụng để thực hiện kết nối đầy đủ của mạng nơ-ron, bước thứ tư của
CNN.
from keras.layers import Dense
-Tkinter là giao diện Python cho bộ công cụ Tk GUI.
-Để tạo hộp thoại tệp (trình chọn tệp), bạn có thể sử dụng filedialog
from tkinter import filedialog
- Tk là để tạo ra một cửa sổ nhỏ trên màn hình.
import tkinter as tk
- Thư viện PIL cho phép người dùng thực hiện một số tác vụ liên quan đến xử lý hình
ảnh.
- Mudule os cho phép chúng ta thao tác với tệp và thư mục.
- Tensorfow là thư viện mã nguồn mở dùng cho tính toán số học sử dụng đồ thị luồng dữ
liệu.
- OpenCV là một thư viện mã nguồn mở hàng đầu cho thị giác máy tính (computer
vision), xử lý ảnh và máy học, và các tính năng tăng tốc GPU trong hoạt động thời gian
thực.
- Pandas sử dụng một cấu trúc dữ liệu riêng là Dataframe. Pandas cung cấp rất nhiều
chức năng xử lý và làm việc trên cấu trúc dữ liệu này.
Ứng Dụng Vào Bài Toán

Bước 1: Khám phá tập dữ liệu


Thư mục train có chưa 43 thư mục con mỗi thư mục đại diện cho một lớp khác nhau
được đánh số thứ tự từ 0 đến 42. sử dụng module OS ta sẽ lặp lại trên tất cả các lớp để kết
nối các hình ảnh với nhãn tương ứng của chúng.
Thư viện PIL được sử dụng để chuyển hình ảnh thành một mảng.
Sau đó ta sẽ lưu tất cả các hình ảnh và nhãn của chúng vào lists data và labels.

17
Chúng ta cần chuyển các lists thành các numpy array để làm đầu vào cho model.
Kích thước của dữ liệu là (39209, 30, 30, 3), có nghĩa là có 39209 hình ảnh, mỗi ảnh có
kích thước 30×30 pixel, số 3 ở cuối thể hiện dữ liệu là hình ảnh màu (giá trị RGB).
Sử dụng phương thức train_test_split () của sklearn để phân chia bộ dữ liệu thành train
set và test set.
Sử dụng phương thức to_categorical của keras.utils để xử lý các nhãn của y_train và
y_test bằng one-hot encoding.

̀
Hình 9. Phân chia dữ liệu.

Bước 2: Xây dựng mô hình CNN.


Để phân loại các hình ảnh thành các danh mục tương ứng, chúng ta sẽ xây dựng mô hình
CNN (Convolutional Neural Network). CNN là mô hình tốt nhất cho mục đích phân loại
hình ảnh.
Kiến trúc mô hình CNN của chúng ta như sau:

18
Hình 10. Xây dựng mô hình CNN.
Bước 3: Training và xác thực mô hình.
Sau khi xây dựng kiến trúc mô hình, chúng ta sẽ huấn luyện mô hình bằng cách sử dụng
model.fit (). Chúng ta hãy thử với batch size là 32 và 64. nhận thấy mô hình hoạt động tốt
hơn với batch size là 64. và sau 15 epochs độ chính xác đã được ổn định.
Mô hình của chúng ta đã đạt đến độ chính xác ~ 95% trên tập training set. Sử dụng
matplotlib để vẽ biểu đồ tương quan giữa độ chính xác và sự mất mát.

Hình 11. Hình ảnh minh họa sự mất mát.

19
Hình 12. Hình ảnh minh họa kết quả đạt được.
Bước 4: Kiểm tra mô hình với test set.
Tập dữ liệu của chúng ta có chứa 1 thư mục test và 1 file test.csv. Chúng ta cần phải trích
xuất hình ảnh và nhãn tương ứng bằng cách sử dụng pandas. Sau đó, để dự đoán mô hình,
chúng ta phải thay đổi kích thước hình ảnh thành 30 × 30 pixel và tạo một mảng numpy
chứa tất cả dữ liệu hình ảnh. Sử dụng precision_score của sklearn.metrics để dự đoán các
nhãn của bộ test. Có thể thấy ta đã đạt được độ chính xác là 95% trong mô hình này.
Cuối cùng, chúng ta sẽ lưu mô hình đã đào tạo bằng cách sử dụng hàm model.save () của
Keras.
model.save(‘sautrain.h5’)
Bước 5: Thiết Kế Giao Diện Người Dùng (GUI)
Bây giờ chúng ta sẽ xây dựng giao diện người dùng bằng Tkinter. Tkinter là một bộ công
cụ GUI trong thư viện python tiêu chuẩn. Tạo một tệp mới là gui.py trong cùng thư mục
của project và sao chép đoạn code dưới đây vào file. Bạn có thể chạy file này bằng cách
nhập lệnh sau vào cmd: "python gui.py"
Trong đoạn code này, trước tiên ta phải import mô hình đã được training từ trước là
"sautrain.h5" . Và sau đó, xây dựng GUI để upload hình ảnh và một nút để gọi hàm
classify(). Hàm classify() chuyển đổi hình ảnh thành kích thước (1, 30, 30, 3). Sau đó,
chúng ta dự đoán các lớp, model.predict (image) trả về cho chúng ta một số trong khoảng
(0-42) đại diện cho lớp mà nó thuộc về.

20
CHƯƠNG 3: CHƯƠNG TRÌNH VÀ GIẢI THÍCH

3.1 Dataset
Để huấn luyện một mô hình Deep Learning trước tiên ta cần chuẩn bị một tập dữ liệu. tập
dữ liệu là yếu tố vô cùng quan trọng trong việc huấn luyện mô hình. Vì dữ liệu ở các môi
trường khác nhau (cường độ ánh sáng, vật thể bị méo dạng,..), thì pixel của các ảnh khác
nhau. Do đó, tập dữ liệu các lớn giúp mô hình học được vật thể ở nhiều trạng thái môi
trường khác nhau, từ đó tăng khả năng chính xác khi dự đoán ngoài thực tế.
Tập dữ liệu thường được ch Hình 8. Sự ngắn gọn trong việc sử dụng API Keras để làm
việc. Nguồn: keras.io ia làm 3 tập:
1) Tập training: tập training thường có kích thước lớn nhất. Tập training thường được
dán nhãn và cho trước nhãn để tính toán loss function và cập nhập các tham số để
mô hình tăng độ chính xác.
2) Tập validation (hay tập development): Tập validation thường được chia ra từ tập
training. Tập validation là không được dùng để cập nhập các tham số của mô hình,
mà nó chỉ được dùng để đánh giá xem mô hình có cần điều chỉnh parameter lại
hay không, có bị high bias hay high variance hay không.
3) Tập test: tập test được dùng để đánh giá lại mô hình có hiệu quả hay không. Dữ
liệu của tập test phải chưa từng xuất hiện trong tập training để có thể đánh giá mô
hình ngoài thực tế.

Sai số tập 1% 15% 15% 0.5%


training
Sai số tập 22% 16% 30% 1%
validation
Đánh giá Mô hình bị Mô hình bị Mô hình bị Mô hình
mô hình high variance high bias cả high bias và hoạt động ổn
(overfitting) (underfitting) high variance định

Các tập training, validation, test thường được chia với tỉ lệ 60/20/20 với tập dữ liệu
không quá lớn và được chia tỉ lệ 98/1/1 hoặc 99.5/0.1/0.4 với tập dữ liệu rất lớn (khoảng
1 triệu mẫu).
Trong việc phân loại biển báo giao thông trong ảnh, tập datasets được sử dụng là các biển
báo giao thông của Đức được công khai nguồn dữ liệu trên trang web Kaggle [12].
Tại tập datasets này, chúng tôi sử dụng file Train.zip bao gồm 9030 mẫu biển báo của 43
class để tiến hành training và file Test.zip để tiến hành kiểm tra lại.

21
Hình 13. Tập dữ liệu được sử dụng để xây dựng mô hình CNN.

Trong đó, tập dữ liệu training mẫu biển báo giao thông của Đức với 43 class được
gán nhãn như sau:

BẢNG 3.1: NHÃN VÀ TÊN CÁC BIỂN BÁO TRONG BÀI TOÁN PHÂN LOẠI

Nhã Tên biển báo Nhãn Tên biển báo


n
0 Tốc độ giới hạn 20km/h 22 Cảnh báo đường nhấp nhô
1 Tốc độ giới hạn 30km/h 23 Cảnh báo đường trơn trượt
2 Tốc độ giới hạn 50km/h 24 Đường bị hẹp bên phải

22
3 Tốc độ giới hạn 60km/h 25 Đường đang thi công
4 Tốc độ giới hạn 70km/h 26 Cảnh báo có đèn tín hiệu
5 Tốc độ giới hạn 80km/h 27 Cảnh báo có người đi bộ
6 Hết đoạn đường giới hạn 28 Cảnh báo có học sinh đi qua
80km/h
7 Tốc độ giới hạn 100km/h 29 Cảnh báo có xe đạp đi qua
8 Tốc độ giới hạn 120km/h 30 Cảnh báo tuyết lở
9 Cấm vượt 31 Cảnh báo thú hoang đi qua
10 Cấm xe trên 3,5 tấn vượt 32 Hết tất cả lệnh cấm
11 Giao nhau với đường 33 Rẽ phải phía trước
không ưu tiên
12 Giao nhau với đường ưu 34 Rẽ trái phía trước
tiên
13 Biển cảnh báo nguy hiểm 35 Đi thẳng
14 Biển dừng lại 36 Đi thẳng hoặc rẽ phải
15 Biển đường cấm 37 Đi thẳng hoặc rẽ trái
16 Cấm xe trên 3.5 tấn 38 Hướng phải đi vòng sang
phải
17 Cấm đi ngược chiều 39 Hướng trái đi vòng sang trái
18 Biển nguy hiểm khác 40 Nơi giao nhau chạy
theo
vòng xuyến
19 Nguy hiểm khi rẽ trái 41 Hết đoạn đường cấm vượt
20 Nguy hiểm khi rẽ phải 42 Hết đoạn đường cấm vượt
với xe trên 3.5 tấn
21 Chỗ ngoặt nguy hiểm

3.2 Huấn Luyện mô hình

- Với đề tài này, nhóm chúng tôi huấn luyện mô hình trên thư viện Keras.
Đây là một mã nguồn mở dành cho Neural Network. Keras là một
framework cấp cao, cung cấp một số công cụ trừu tượng, 4 module được
dược sử dụng chủ yếu trong Keras bao gồm : Keras models, Keras layers,
Keras losses, Keras optimizers. Có 5 bước cơ bản để huấn luyện và kiểm
tra mô hình dùng các hàm đã xây dựng sẵn của Keras.

 Bước 1: Khai báo các module cần thiết của thư viện Keras.

23
VD: Khai báo các thư viện cần thiết để thực hiện huấn luyện 3 kiến trúc bên trên

Hình 14. Khai báo thư viện Keras.

 Bước 2: Tạo model bằng cách sử dụng các hàm trong thư
viện Keras: VD: Tạo một Convolutional Layer 2D,
Maxpooling và Dropout

Hình 15. Tạo model Keras.

 Bước 3: Compile model bằng lệnh sau:

Hình 16. Compile model Keras.

- Hàm optimizer có thể là ‘adam’, ‘sdg’,RMSprop, …


- Hàm Loss dùng để tính toán chất lượng của model từ đó tìm cách giảm
thiểu trong quá trình đào tạo.

 Bước 4: Train model và test model bằng lệnh sau:

Hình 17. Training model Keras.

24
 Bước 5: Lưu model để sử dụng sau này:

Hình 18. Lưu model Keras.

3.3 Tạo giao diện người dùng

- Sau quá trình training, chúng ta sẽ nhận được file lưu trọng số của model,
lúc này chúng ta sẽ tiến hành xây dựng giao diện người dùng sử dụng thư
viện Tkinter của Python và load model để nhận diện biển báo.

 Bước 1: Khai báo thư viện của Tkinter và Keras

Hình 19. Khai báo thư viện Tkinter và Keras để tạo giao diện người dung.

 Bước 2: Tạo mảng lưu lại nhãn của 43 lớp


mẫu biển báo

VD: Tạo cho 23 biển báo

25
Hình 20. Tạo mảng gồm các nhãn của biển báo.

 Bước 3: Thiết kế giao diện

Hình 21. Tạo giao diện.

 Bước 4: Tạo các hàm để xử lý và đưa ra kết quả

26
Hình 22. Tạo hàm xử lý ảnh.

 Bước 5: Gọi hàm vừa khai báo và tiến


hành classify

Hình 23. Tiến hành xử lý ảnh.

27
CHƯƠNG 4: KẾT QUẢ

Các bước thực hiện chương trình phần mềm nhận diện biển báo giao thông
1) Chạy file chương trình : Chúng ta thực hiện mở folder “ThienCanh” sau đó mở file ‘code
chay chuong trinh.py’

Hình 24. Chạy file chương trình.

28
2) Sau khi mở file thì màn hình sẽ xuất hiện cửa sổ dưới đây

Hình 25 Cửa sổ sau khi mở file.

29
3) Click vào “ Tai bien bao len “ để chọn biển báo từ máy tính

Hình 26 Chọn biển báo từ máy tính.

- Sau khi hoàn thanh bước 3 thì chúng ta sẽ mở 1 file ảnh biển báo giao thông bất kỳ ở
trong các folder “anh test code”, “dulieuanhtrain”, “meta” hoặc chúng ta có thể tải ảnh
từ trang web google để nhận diện.

 Ví dụ: nhóm chúng em chọn ảnh trong file “dulieuanhtrain” để nhận diện thì máy tính sẽ
mở ra 42 folder nhỏ để chúng ta có thể lựa chọn bất kỳ như sau:

- Để chọn ảnh nhận diện, chúng ta sẽ mở 1 foler bất kỳ sau đó chọn 1 ảnh trong folder đó

30
 Ví dụ: Nhóm chúng em mở folder 26 thì sẽ hiện ra rất nhiều ảnh và sẽ chọn 1 ảnh bất kỳ
để nhận diện

Hình 27. Chọn 1 ảnh bất kì trong folder 26.

- Chọn ảnh sau đó nhấn Open để tải ảnh lên phần mềm nhận diện

31
Hình 28. Sau khi nhấn Open để tài ảnh lên phần mềm nhận diện.
- Bấm vào “Nhan dien” và xem kết quả hiển thị trên màn hình

Hình 29 Bấm nút nhận diện và xem kết quả.

32
 Ví dụ về biển báo giao thông 'Giới hạn tốc độ (30km/h)'

Hình 30. Ví dụ về biển báo giao thông ‘Giới hạn tốc độ’.

 Ví dụ về biển báo giao thông 'Cấm xe'

Hình 31. Ví dụ về biển báo giao thông 'Cấm xe'.

33
 Ví dụ về biển báo giao thông “Dừng”

Hình 32. Ví dụ về biển báo giao thông ' Dừng '.

34
PHẦN KẾT LUẬN

Trong quá trình thực hiện dự án này, chúng tôi đã đạt được một mô hình nhận diện
biển báo giao thông với độ chính xác đáng kể, đạt tới mức 95%. Điều này là một bước
tiến quan trọng và đầy ý nghĩa đối với việc nâng cao hiệu suất và an toàn giao thông
trên các tuyến đường.
Tuy nhiên, dự án của chúng tôi vẫn còn khá đơn giản và hạn chế ở một số khía cạnh.
Do đó, chúng tôi nhận thức rõ ràng về những hướng phát triển tiềm năng để cải thiện
và mở rộng dự án trong tương lai.
Một trong những hướng đi quan trọng mà chúng tôi sẽ tiếp tục khám phá là thiết kế
các dự án kết hợp phức tạp hơn. Điều này bao gồm việc tích hợp nhiều loại dữ liệu và
đặc trưng khác nhau vào mô hình, từ thông tin hình ảnh đến dữ liệu từ cảm biến và hệ
thống GPS. Việc này sẽ giúp tăng tính tổng quát và đa dạng hóa mô hình, từ đó cải
thiện khả năng nhận diện và dự đoán trên các tình huống giao thông phức tạp.
Ngoài ra, chúng tôi cũng đặc biệt quan tâm đến việc mở rộng áp dụng mô hình nhận
diện này trên các đối tượng khác nhau, không chỉ là biển báo giao thông. Bằng cách sử
dụng thông tin được trích xuất từ ảnh thu thập, chúng tôi tin rằng mô hình có thể được
áp dụng trên nhiều loại đối tượng khác nhau như người, động vật, xe máy và nhiều hơn
nữa. Điều này mở ra nhiều cơ hội mới và tiềm năng trong việc ứng dụng trí tuệ nhân
tạo vào các lĩnh vực khác nhau ngoài giao thông.
Tóm lại, dự án này không chỉ là một bước tiến quan trọng trong việc phát triển một mô
hình nhận diện biển báo giao thông, mà còn là điểm khởi đầu cho những nỗ lực tiếp
theo của chúng tôi trong việc nghiên cứu và ứng dụng trí tuệ nhân tạo vào các vấn đề
thực tiễn và hữu ích trong xã hội. Chúng tôi hướng đến một tương lai năng động và
phát triển, với những dự án đa dạng và tích hợp, góp phần vào sự tiện bộ và an toàn
cho cộng đồng.

35
TÀI LIỆU THAM KHẢO

[1] Mykola, “GTSRB - German Traffic Sign Recognition Benchmark,” Kaggle,


https://www.kaggle.com/datasets/meowmeowmeowmeowmeow/gtsrb-german-
traffic-sign (accessed Apr. 15, 2024).

[2] L. Craig and R. Awati, “What is a Convolutional Neural Network (CNN)?,”


Enterprise AI,
https://www.techtarget.com/searchenterpriseai/definition/convolutional-neural-
network#:~:text=A%20CNN%20is%20a%20kind,the%20network%20architecture
%20of%20choice. (accessed Apr. 15, 2024).

[3] S. Baldha, “Introduction to DenseNets (dense CNN),” Analytics Vidhya,


https://www.analyticsvidhya.com/blog/2022/03/introduction-to-densenets-dense-
cnn/ (accessed Apr. 15, 2024).

[4] G. Huang, Z. Liu, L. Van Der Maaten, and K. Q. Weinberger, “Densely connected
Convolutional Networks,” 2017 IEEE Conference on Computer Vision and Pattern
Recognition (CVPR), Jul. 2017. doi:10.1109/cvpr.2017.243

[5] GfG, “Residual networks (resnet) - deep learning,” GeeksforGeeks,


https://www.geeksforgeeks.org/residual-networks-resnet-deep-learning/ (accessed
Apr. 15, 2024).

[6] “Vanishing gradient,” Trí tuệ nhân tạo,


https://trituenhantao.io/tu-dien-thuat-ngu/vanishing-gradient/ (accessed Apr. 15,
2024).

[7] K. He, X. Zhang, S. Ren, and J. Sun, “Deep residual learning for image recognition,”
2016 IEEE Conference on Computer Vision and Pattern Recognition (CVPR), Jun.
2016. doi:10.1109/cvpr.2016.90

[8] “Keras: The high-level API for tensorflow : Tensorflow Core,” TensorFlow,
https://www.tensorflow.org/guide/keras (accessed Apr. 15, 2024).

36

You might also like