Để đạt được độ chính xác trong công nghệ này, các phương tiện cần phải giải thích được các biển báo giao thông và đưa ra quyết định sao cho phù hợp. Vậy hãy cùng nhóm tụi em tìm hiểu xem làm thế nào để nhận diện biển báo giao thông trong project này nhé.
Trang 1BẢNG KÍ HIỆU SỬ DỤNG TRONG ĐỒ ÁN
s Stride: số pixel dịch chuyển trong
mỗi lần trượt
y Scaling factor hay scaling
parameter của layer
1.1 Đặt vấn đề
Chắc hẳn bạn đã từng nghe về xe ô tô tự lái mà hành khách hoàn toàn có thể tintưởng vào chiếc xe để di chuyển. Nhưng để đạt được mức độ chính xác và an toànthì các phương tiện cần phải hiểu và tuân theo các quy tắc giao thông.
Trong thế giới của trí tuệ nhân tạo và sự tiến bộ trong công nghệ, nhiều nhànghiên cứu và các công ty lớn như Tesla, Uber, Google, Mercedes-Benz, Toyota,Ford, Audi, v.v đang nghiên cứu về xe tự hành và xe tự lái
Để đạt được độ chính xác trong công nghệ này, các phương tiện cần phải giảithích được các biển báo giao thông và đưa ra quyết định sao cho phù hợp Vậy hãy
Trang 2cùng nhóm tụi em tìm hiểu xem làm thế nào để nhận diện biển báo giao thôngtrong project này nhé.
1.2 Tình hình nghiên cứu trong và ngoài nước
Đối với bài toán phân loại biển báo giao thông, tức là nhận diện bức ảnh nàythuộc loại biển báo gì Đối với mỗi ngõ vào, ta phân loại vào 1 class nhất định.Đây là bài toán phân lớp (Classification) Có nhiều thuật toán để phân lớp dữ liệu,
từ cổ điển đến hiện đại Nhưng mạng Nơ- ron tích chập được đánh giá là thuật toánhiệu quả, tránh được tác động từ môi trường, nhiễu, sự thay đổi khoảng cách ảnhđến camera Trong đề tài này, mục tiêu chúng tôi đặt ra là xây dựng mô hình nhậndiện biển báo giao thông trong ảnh và video Từ đó so sánh hiệu quả giữa các môhình khác nhau
Với bài toán nhận diện biển báo, gồm hai bài toán lớn là phát hiện và phân loạivật thể Có rất nhiều cách để phân loại vật thể bao gồm R-CNN, Fast R-CNN,Faster R-CNN và một số thuật toán khác
1.3 Tóm tắt quá trình thực hiện đề tài
Việc hiện đề tài được chia thành nhiều giai đoạn, mỗi giai đoạn thực hiện mộtcông việc như đã trình bày ở phần mục lục Chi tiết cho từng giai đoạn như sau:
Tìm hiểu về Deep Learning và các ứng dụng
Nghiên cứu xây dựng một mô hình CNN
Tham khảo cách sử dụng các thư viện và môi trường ảo Lựa chọn thưviện phù hợp
Thu thập và tiền xử lý dữ liệu Phân chia dataset thành tập training, tậpvalidation và tập test
Xây dựng mô hình phân loại và mô hình nhận diện biển báo giao thông
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT MẠNG CNN
Chương này đưa ra lý thuyết về Deep Learning, mạng Neural Network Để thựchiện việc phân loại và phát hiện biển báo giao thông, việc vận dụng những kỹ thuật
Trang 3trên đã chứng minh được sự hiệu quả của mình Phần 2.1 giới thiệu nhanh về kỹthuật Deep Learning Phần 2.2 trình bày về mạng Neural Network từ đó đưa ra cơ
sở để trình bày về thuật toán Convolutional Neural Network ở phần 2.3
2.1 Deep Learning
Deep Learning (Học sâu) là một nhánh nhỏ của Machine Learning (Máy học),bắt nguồn từ thuật toán Neural Network Tuy nhiên, gần đây Deep Learning manglại nhiều thành tựu kĩ thuật nhờ vào sự phát triển của Big Data (Dữ liệu lớn), vớitập dữ liệu càng lớn giúp phát triển các mạng Neural Network sâu hơn với khảnăng dự đoán chính xác cao hơn (Hình 1.1) Bắt nguồn từ các loại hình kinh doanhinternet truyền thống như tìm kiếm web và quảng cáo Deep Learning ngày nay đãtạo ra nhiều lợi ích hơn trong cuộc sống hằng ngày Ví dụ như trong lĩnh vực y tế,việc phân tích các hình ảnh X-quang được ứng dụng vào Deep Learning để nghiêncứu và dự đoán các khả năng mang bệnh của người khám Và đặc biệt DeepLearning còn được ứng dụng trong các xe tự hành để dự đoán các tình huống giaothông
Hình 2.1 Quan hệ giữa dữ liệu và khả năng dự đoán của thuật toán Nguồn: Coursera
Các ứng dụng khác nhau chúng ta có thể áp dụng các Neuron Network khácnhau:
Trang 4Các ứng dụng Neural Network có thể áp dụng
Đoán giá nhà
Quảng cáo online
Standard Neural Network
Xe tự hành Custom, Hybrid Neural Network
Nhận diện giọng nói
Mỗi node trong hidden layer và output layer thực hiện các công việc sau: Liênkết với tất cả các node ở layer trước đó với các hệ số w riêng Mỗi node có 1 hệ sốbias b riêng Từ đó w,b biểu thị mối quan hệ giữa node trước và node sau
Hình 2.2 Mối quan hệ giữa ngõ vào và ngõ ra của một node.
Trang 5Node phía trên có đầu vào là X1, X2, trọng số w1, w2 Ngõ ra y là kết quả củamột hàm phi tuyến và một hàm tuyến tính Hàm phi tuyến g còn được gọi là hàmkích hoạt (activation) giúp tăng khả năng học của mạng neural
Các hàm phi kích hoạt thường được sử dụng là:
Sigmoid: Giá trị ngõ ra được chuyển về trong khoảng [0,1] bằng công thức:
Hàm sigmoid cho ngõ ra có giá trị bằng 1 khi ngõ vào lớn và ngõ ra bằng 0 khi ngõvào bằng 1 Ở thời gian đầu hàm sigmoid rất được ưa chuộng sử dụng, tuy nhiênsau này vì hàm luôn dương nên khi lấy gradient, hàm sẽ khó hội tụ Mặt khác hàmsigmoid dễ bị bão hòa và không có gradient khi đầu vào rất nhỏ hoặc rất Vì vậy,sau này hàm sigmoid chỉ được sử dụng ở những lớp tích chập cuối khi cần tínhbinary cross-entropy loss
Tanh: Giá trị ngõ ra được chuyển về trong khoảng [-1,1] khiến nó có tính chất tâm
không (zero-centered), theo công thức:g(z)= e z −e −z
e z +e −z Khi đó, ngõ ra bằng 1 khi ngõvào lớn và ngõ ra bằng -1 khi ngõ vào nhỏ Hàm Tanh với tính chất tâm khônggiúp các dữ liệu được phân bố quanh điểm 0, tanh khi lấy đạo hàm có cả phầndương và phần âm giúp việc hội tụ trở nên tốt hơn Tuy nhiên hàm tanh không giảiquyết được vấn đề bão hòa khi giá trị ngõ vào quá lớn hoặc quá nhỏ của sigmoid
Hình 2.3 Đồ thị hàm sigmoid (a) và hàm tanh (b)[1]
ReLU và leaky ReLU: Lấy ngưỡng giá trị ở 0 (Thay thế các giá trị âm bằng 0) :
g(x)= max(0,x) Hàm ReLU loại bỏ các giá trị âm, việc hội tụ cũng diễn ra nhanh
Trang 6hơn khi không còn bị bão hòa ở hai đầu như hàm Sigmoid và hàm Tanh Tuynhiên, với các giá trị âm nhỏ gần 0, việc giữ lại đạo hàm vẫn có giá trị khi lấyGradient, nhưng lại bị triệt tiêu gây ra hiện tượng “Dying ReLU” Để khắc phụcviệc đó, hàm Leaky ReLU ra đời và là biến thể của ReLU: g(x) = {0.01 x , x<0
x, x≥ 0 , cácgiá trị âm lớn gần như xấp xỉ bằng 0 trong khi các giá trị âm nhỏ vẫn mang giá trịkhi đạo hàm Nhưng cả hai hàm ReLU và Leaky ReLU lại không có đạo hàm tại 0
Ví dụ như Facebook, Google đã đưa vào sản phẩm của mình chức năng nhậndiện khuôn mặt… Ứng dụng cơ bản nhất của thuật toán này là phân lớp, tức làphân biệt hoặc là cái này hoặc là cái kia, tức là khi đưa hình ảnh vào máy tính, nó
sẽ là các điểm ảnh hai chiều và điều CNN thực hiện đó là khi các điểm ảnh thanhđổi thì máy tính vẫn biết được đó là hình ảnh gì
CNNs được chia thành 3 chiều: rộng, cao, sâu Các Nơ-ron trong mạng khôngliên kết hoàn toàn với toàn bộ Nơ-ron kế đến mà chỉ liên kết tới một vùng nhỏ.Cuối cùng, một tầng đầu ra được tối giản thành vec-tơ của giá trị xác suất
CNNs gồm 2 thành phần:
Trang 7 Phần tầng ẩn hay phần rút trích đặc trưng: Trong phần này, mạng sẽ tiếnhành tính toán hàng loạt phép tích chập (Convolutional layer) và phép hợp nhất(pooling) để phát hiện các đặc trưng.
Phần phân lớp: Tại phần này, một số lớp các liên kết đầy đủ (FullyConnected) sẽ đóng vai trò như một bộ phân lớp các đặc trưng đã rút trích trước
đó Tầng này sẽ đưa ra xác suất của một đối tượng trong hình
Hình 2.6 Cấu trúc của CNN Nguồn www.mathworks.com
2.3.2 Lớp tích chập (Convolutional Layer)
Đây là phép tính quan trọng trong CNN Ta thực hiện phép tích chập bằng cáchtrượt kernel/filter theo kiểu dữ liệu đầu vào Tại mỗi vị trí, ta tiến hành phép nhân
ma trận và tính tổng để đưa vào feature map Feature map này chính là một ma trận
3 chiều, trong đó bao gồm những con số (parameter)
Ở lớp đầu tiên, khối tích chập dùng để phát hiện cạnh thẳng đứng và cạnh nằmngang, cạnh nghiêng Ở các lớp tiếp theo, khối tích chập sẽ nhận diện các đườngcong, đường gấp khúc Càng sử dụng nhiều lớp tích chập thì càng phát hiện đượcnhững đặc trưng phức tạp hơn, có thể là các vật thể như con mèo, bông hoa, bánhxe
Trang 8Hình 2.7 Mô tả quá trình nhận diện vật thể qua các lớp tích chập.[2]
Tại khối tích chập, các thông số được sử dụng bao gồm:
Stride (S): Số pixel bạn dịch chuyển ở mỗi lần trượt
Trang 9Padding (P): Tăng thêm một số hàng và cột (thường có giá trị bằng 0) đểtránh việc giảm kích thước ở output cũng như để lấy thông tin ở các pixel ngoàicùng Có 2 loại padding là “valid” tức là padding =0 và “same” tức là padding đểkích thước ngõ ra bằng kích thước ngõ vào.
#filters (n c ): Số filter được sử dụng ở mỗi layers
f : kích thước của mỗi filter là f *f
Hình 2.8 Các thông số của conv layers
2.3.3 Lớp tổng hợp (Pooling layer)
Mục đích là làm giảm số parameters mà ta cần phải tính toán, từ đó giảm thờigian tính toán mà vẫn giữ được các đặc trưng quan trọng Ngoài ra nó còn tránhoverfitting
Có 2 loại pooling: max pooling lấy giá trị lớn nhất trong một pooling window
và average pooling lấy giá trị trung bình trong một pooling window
Pooling hoạt động gần giống convolution, ở max pooling cửa sổ trượt qua từnggiá trị của ma trận dữ liệu đầu vào, chọn ra giá trị lớn nhất nằm trong cửa sổ trượt
Hình 2.9 Max pooling Nguồn: viblo
2.3.4 Lớp kết nối đầy đủ (Fully Connected Layer)
Sau khi ảnh được truyền qua nhiều lớp tích chập và lớp tổng hợp thì model đãhọc được tương đối các đặc điểm của ảnh (ví dụ bánh xe, khung xe…) thì tensor
Trang 10của output cuối cùng, kích thước H* W* D sẽ được chuyển về 1 vector kích thước(H * W* D).
Hình 2.10 Phép flatten đưa tensor về thành 1 vector
Sau đó, mỗi điểm của vector sẽ được liên kết với toàn bộ output của modegiống như một lớp của mạng Neural Network Lớp kết nối đầy đủ cuối của mạng
có nhiệm vụ phân loại theo yêu cầu của bài toán
2.3.5 Softmax
Sau khi mạng CNNs học qua các lớp phía trước, ta thu được vector đặc trưng.Khi đó, cần dựa vào vector đặc trưng này để phân loại vào các lớp theo yêu cầu bàitoán Hàm softmax là một mô hình xác suất để với mỗi input x, tính được output ai
thể hiện xác suất để input đó rơi vào lớp thứ i
Hàm softmax có đầu vào là 1 vector, đầu ra là một vector có cùng số chiều
có công thức là:
với C là số lớp ngõ raNhận xét:
Giá trị zi càng lớn thì xác suất dữ liệu rơi vào lớp thứ i càng cao Các ai lớn hơn 0
và có tổng bằng 1
Trang 11Hình 2.11 Ví dụ về đầu vào và đầu ra của hàm softmax.[3]
2.3.6 Batch Normalization
Trong quá trình training, có thể xảy ra hiện tượng gradients không ổn định dogradients trước và sau khi di chuyển qua 1 layers không giống nhau Đây là vấn đềliên quan đến phân phối của inputs của các layers
Batch Normalization học những giá trị trung bình và phương sai của đầu vàosau đó chuẩn hóa đầu vào để có giá trị trung bình là 0 và phương sai là 1 Việcchuẩn hóa dữ liệu đầu vào giúp cho quá trình huấn luyện nhanh hơn (hàm chi phíhội tụ nhanh hơn) so với việc không chuẩn hóa
Một lợi ích được nhận định của batch normalization là huấn luyện nhanh hơn.Chúng tôi kiểm tra hiệu quả của batch normalization thông qua việc so sánh môhình baseline và mô hình baseline có sử dụng batch normalization
Thuật toán chuẩn hóa cụ thể là:
Trang 12Hình 2.12 Phép biến đổi Batch normalization[4]
Các kí hiệu được đề cập trong bảng tóm tắt kí hiệu
CHƯƠNG 3 XÂY DỰNG MÔ HÌNH CNN PHÂN LOẠI BIỂN BÁO GIAO THÔNG TRÊN ẢNH
Chương này trình bày quá trình thực hiện việc phân loại biển báo giao thông sửdụng mô hình CNN Phần 3.1 đưa ra sơ đồ khối của hệ thống Phần 3.2 trình bày
về dataset và cách phân chia dataset Phần 3.3 thể hiện các bước tiền xử lý ảnh đểphù hợp với đầu vào của các mô hình được định nghĩa ở phần 3.4 Phần 3.5 thểhiện quá trình huấn luyện mô hình đã được định nghĩa là VGG16
3.1 Sơ đồ khối tổng quát
Để hoàn thành việc nhận diện biển báo giao thông sử dụng mô hìnhConvolutional Neural Network (CNN), cần thực hiện các bước sau:
Bước 1: Tìm kiếm và thu thập ảnh chứa biển báo giao thông, tiến hành tiền
xử lý và gán nhãn cho từng bức hình
Bước 2: Phân chia dữ liệu thành tập huấn luyện và tập kiểm tra
Bước 3: Huấn luyên mô hình sử dụng dữ liệu trong tập huấn luyện
Bước 4: Kiểm tra mô hình với bộ dữ liệu test
Trang 13Dưới đây là sơ đồ khối tổng quát của hệ thống:
Hinh 3.1 Sơ đồ khối tổng quát
Từng giai đoạn cụ thể trong sơ đồ sẽ được trình bày ở những phần tiếp theo
3.2 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
Trang 14thể ở 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 chia làm 3 tập:
+ Tập training: tập training thường có kích thước lớn nhất Tập trainingthường được dán nhãn và cho trước nhãn để tính toán loss function và cập nhậpcác tham số để mô hình tăng độ chính xác
+ 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 parameterlại hay không, có bị high bias hay high variance hay không
+ 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 bịhigh bias(underfitting)
Mô hình bị
cả high bias
và highvariance
Mô hình hoạtđộng ổn đị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ấtlớn (khoảng 1 triệu mẫu)
Trong project này chúng ta sẽ sử dụng tập dữ liệu công khai có sẵn tại kaggle(một kho dữ liệu và mã được cộng đồng xuất bản khổng lồ về các lĩnh vực khoahọc máy tính, trí tuệ nhân tạo…)
Bộ dữ liệu chứa hơn 50.000 hình ảnh về các biển báo giao thông khác nhau
Nó được phân loại thành 43 lớp khác nhau Tập dữ liệu khá khác nhau, một số lớp
có nhiều hình ảnh trong khi một số lớp có ít hình ảnh Kích thước của tập dữ liệu làkhoảng 300 MB Tập dữ liệu có một thư mục huấn luyện chứa các hình ảnh bên
Trang 15trong mỗi lớp và một thư mục thử nghiệm mà chúng ta sẽ sử dụng để thử nghiệm
mô hình của mình
Hình 3.2: Tập dữ liệu được sử dụng để xây dựng mô hình CNN
Trong đó, tập dữ liệu training có kích thước 39252 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ãn Tên biển báo Nhãn Tên biển báo
1 Tốc độ giới hạn 20km/h 23 Cảnh báo đường nhấp nhô
2 Tốc độ giới hạn 30km/h 24 Cảnh báo đường trơn trượt
3 Tốc độ giới hạn 50km/h 25 Đường bị hẹp bên phải
4 Tốc độ giới hạn 60km/h 26 Đường đang thi công
5 Tốc độ giới hạn 70km/h 27 Cảnh báo có đèn tín hiệu
Trang 166 Tốc độ giới hạn 80km/h 28 Cảnh báo có người đi bộ
7 Hết đoạn đường giới hạn
80km/h
29 Cảnh báo có học sinh đi qua
8 Tốc độ giới hạn 100km/h 30 Cảnh báo có xe đạp đi qua
9 Tốc độ giới hạn 120km/h 31 Cảnh báo tuyết lở
10 Cấm vượt 32 Cảnh báo thú hoang đi qua
11 Cấm xe trên 3,5 tấn vượt 33 Kết thúc tất cả giới hạn tốc độ
và vượt qua
12 Giao nhau với đường không
ưu tiên
34 Rẽ phải phía trước
13 Giao nhau với đường ưu tiên 35 Rẽ trái phía trước
14 Biển cảnh báo nguy hiểm 36 Đi thẳng
15 Biển dừng lại 37 Đi thẳng hoặc rẽ phải
16 Biển đường cấm 38 Đi thẳng hoặc rẽ trái
17 Cấm xe trên 3.5 tấn 39 Hướng phải đi vòng sang phải
18 Cấm đi ngược chiều 40 Hướng trái đi vòng sang trái
19 Biển nguy hiểm khác 41 Nơi giao nhau chạy theo vòng
xuyến
20 Nguy hiểm khi rẽ trái 42 Hết đoạn đường cấm vượt
21 Nguy hiểm khi rẽ phải 43 Hết đoạn đường cấm vượt với
xe trên 3.5 tấn
22 Chỗ ngoặt nguy hiểm
3.3Tiền xử lí và phân chia dữ liệu
Để thực hiện project này cần có kiến thức về các thư viện Keras, Matplotlib,Scikit-learning, Pandas, PIL và phân loại hình ảnh
Bước 1: Khám phá tập dữ liệu