Tải bản đầy đủ (.docx) (60 trang)

Traffic Sign detection using YOLOV4

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (6.51 MB, 60 trang )

ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA ĐIỆN – ĐIỆN TỬ
BỘ MÔN VIỄN THÔNG
---------------o0o---------------

BÁO CÁO
ĐỒ ÁN MÔN HỌC

NHẬN DIỆN BIỂN BÁO
GIAO THÔNG
Giảng viên hướng dẫn:
Sinh viên thực hiện:

TP. HỒ CHÍ MINH, THÁNG 03 NĂM 2020


:

2


:

MỤC LỤC
CHƯƠNG 1 : TỔNG QUAN ĐỀ TÀI NHẬN DIỆN BIỂN BÁO GIAO THÔNG

5

1.2


Tình hình nghiên cứu trong và ngoài nước..............................................................5

1.3

Tóm tắt quá trình thực hiện đề tài............................................................................6

CHƯƠNG 2: CƠ SỞ LÝ THUYẾT MẠNG CNN VÀ THUẬT TOÁN YOLO

7

2.1

Deep Learning.........................................................................................................7

2.2

Neural Network.......................................................................................................8

2.3

Convolutional Neural Network..............................................................................11

2.3.1 Tổng quát...........................................................................................................11
2.3.2 Lớp tích chập (Convolutional Layer).................................................................12
2.3.3 Lớp tổng hợp (Pooling layer).............................................................................14
2.3.4 Lớp kết nối đầy đủ (Fully Connected Layer)......................................................15
2.3.5 Softmax..............................................................................................................15
2.3.6 Batch Normalization..........................................................................................16
2.4 Thuật toán YOLO......................................................................................................17
2.4.1 Sơ lược về thuật toán YOLO................................................................................17

2.4.2 Thuật toán YOLOv4.............................................................................................24
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

33

3.1

Sơ đồ khối tổng quát..............................................................................................33

3.2

Dataset................................................................................................................... 34

3.3

Tiền xử lí và phân chia dữ liệu...............................................................................37
3


:

3.4

Định nghĩa mô hình...............................................................................................38

3.5

Huấn luyện thuật toán............................................................................................42


CHƯƠNG 4. XÂY DỰNG MÔ HÌNH PHÁT HIỆN BIỂN BÁO GIAO THÔNG TRÊN
VIDEO

43

4.1 Sơ đồ khối tổng quát...................................................................................................43
4.2 Dataset........................................................................................................................ 44
4.3 Huấn luyện thuật toán.................................................................................................47
4.3.1 Cài đặt các thông số huấn luyện...........................................................................47
4.3.2 Google Colab.......................................................................................................48
4.3.3 Huấn luyện dữ liệu...............................................................................................48
CHƯƠNG 5. KẾT LUẬN VÀ HƯỚNG PHÁT TRIỂN NHẬN DIỆN BIỂN BÁO GIAO
THÔNG

55

5.1

Kết luận..................................................................................................................55

5.2

Hướng phát triển....................................................................................................56

TÀI LIỆU THAM KHẢO

58

4



:

BẢNG KÍ HIỆU SỬ DỤNG TRONG ĐỒ ÁN
Kí hiệu
Ý nghĩa
s
Stride: số pixel dịch chuyển trong
p

mỗi lần trượt
Padding: số hàng và số cột tăng

nc

thêm ở các lớp tích chập
Số filter được sử dụng ở mỗi lớp

f*f
H
W

Kí hiệu
y

Ý nghĩa
Scaling factor hay scaling

β


parameter của layer
Shifitng factor hay offset của

ε

layer
Smoothing factor để tránh việc

tích chập

chia 0 làm vô nghía, thường có

Kích thước của filter

yi

giá trị rất nhỏ
Đầu ra của batch

bw
ci

normalization
Chiều rộng của box
Xác suất xuất hiện của vật thể

Chiều dài của lớp tích chập
Chiều rộng của lớp tích chập

D

pc
bx

Số chiều của lớp tích chập
Xác suất grid đang xét chứa vật thể
Tọa độ x của góc phía trên bên trái

by

của box
Tọa độ y của góc phía trên bên

bh
µB

dưới của box
Chiều cao của box
Giá trị kì vọng thực nghiệm được

B

tính toán trên mini-batch B
Độ lệch chuẩn thực nghiệm cũng

m

được tính toán trong mini-batch B
Số lượng instance trong mini-batch
B
Giá trị đầu vào thứ i trong minibatch sau khi chuẩn hóa và tâm

không

5

2

S
i
B

thứ i trong grid
Tổng số grid trong 1 ảnh.
Mẫu thứ i
Số box


:

CHƯƠNG 1 : TỔNG
QUAN ĐỀ TÀI NHẬN
DIỆN BIỂN BÁO GIAO
THÔNG
Chương này trình bày tình hình nghiên cứu trong và ngoài nước về đề tài nhận diện biển
báo giao thông. Từ đó đưa ra lí do chọn đề tài và tóm tắt quá trình thực hiện.
1.1 Đặt vấn đề
Trong vài năm trở lại đây, Artificial Intelligence (trí tuệ nhân tạo) hay cụ thể là
Machine Learning ( Máy học) đang phát triển. Ứng dụng của AI rất đa dạng và ảnh hưởng
tích cực đến đời sống như: Ô tô tự lái, hệ thống dịch tự động, chatbox tự động trả lời,…
Hiện nay, có rất nhiều nghiên cứu về bài toán nhận diện biển báo, các hệ thống từ đơn
giản đến phức tạp, sử dụng nhiều thuật toán khác nhau. Do đó, dễ dàng trong việc thực

hiện và đánh giá các thuật toán
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ày thuộ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án hiệ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ận diệ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ại vậ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
6


:

và một số thuật toán khác. Trong đó, thuật toán YOLO (You Only Look Once) được xem
là vượt trội hơn về mặt thời gian khi có thể đáp ứng thời gian thực tốt hơn và mặc dù khả
năng nhận diện được đánh giá là thấp hơn R-CNN series nhưng khả năng nhận diện chính
xác vẫn nằm trong khả năng chấp nhận được.
Trong đề tài đồ án này, chúng tôi sử dụng thuật toán mới nhất của YOLO là YOLOv4
để nhận diện biển báo giao thông, YOLOv4 có đáp ứng thời gian thực không khác so với
YOLOv3 nhưng cho kết quả nhận diện chính xác hơn.
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ột cô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, YOLO.
 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ập
validation 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

7


:

CHƯƠNG 2: CƠ SỞ LÝ
THUYẾT MẠNG CNN VÀ
THUẬT TOÁN YOLO
Chương này đưa ra lý thuyết về Deep Learning, mạng Neural Network và thuật toán
YOLO. Để thực hiệ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 trê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. Phần 2.4 trình
bày về thuật toán YOLO, là một mô hình CNN để phát hiện vật thể một cách nhanh chóng
và hiệu quả.
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 mang lạ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ới tậ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 doanh internet 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ên cứu và dự đoán các khả năng mang bệnh của
người khám. Và đặc biệt Deep Learning còn được ứng dụng trong các xe tự hành để dự
đoán các tình huống giao thông.


8


:

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ác nhau:
Các ứng dụng
Đoán giá nhà
Quảng cáo online
Xe tự hành
Nhận diện giọng nói
Máy dịch
Nhận diện vật thể

Neural Network có thể áp dụng
Standard Neural Network
Custom, Hybrid Neural Network
Current Neural Network
Convolutional Neural Network

2.2 Neural Network
Neural Network là một mạng lưới gồm nhiều lớp được lấy cảm hứng từ neuron người.
Ở đó, lớp đầu tiên để đưa các đặc tính của vật cần dự đoán vào được gọi là Input Layer.
Và layer cuối cùng mang kết quả dự đoán gọi Output Layer. Một mạng neuron có thể có
hoặc không có các lớp ở giữa Input Layer và Output Layer gọi là Hidden Layer, các
Hidden Layer này giúp cho tỉ lệ dự đoán chính xác cao hơn tuy nhiên việc huấn luyện
cũng tốn nhiều thời gian và dung lượng hơn. Mỗi Layer là tập hợp nhiều node, các node
của lớp sau kết nối với toàn bộ các node của lớp trước.


9


:

Mỗi node trong hidden layer và output layer thực hiện các công việc sau: Liên kế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.
Node phía trên có đầu vào là X1,X2, trọng số w1,w2. Ngõ ra y là kết quả của mộ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àm kí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:

 ( x) 

1
1  e x

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ên sau 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àm sigmoid 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ính binary 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:. 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ông giúp các dữ liệu được phân bố quanh
điểm 0, tanh khi lấy đạo hàm có cả phần dương và phần âm giúp việc hội tụ trở nên tốt
10


:

hơn. Tuy nhiên hàm tanh không giải quyế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 hơn khi không
còn bị bão hòa ở hai đầu như hàm Sigmoid và hàm Tanh. Tuy nhiê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ấy Gradient, nhưng lại bị triệt tiêu gây
ra hiện tượng “Dying ReLU”. Để khắc phục việc đó, hàm Leaky ReLU ra đời và là biến
thể của ReLU: g(x) = , các giá 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.

Hình 2.4: Đồ thị hàm ReLU[1]

11


:

Mish: Mish là hàm kích hoạt được sử dụng trong YOLOv4. Mish được tác giả cho rằng
tốt hơn các hàm kích hoạt khác nhờ việc giữ được tính chất của hàm ReLU giúp hội tụ

nhanh chóng hơn, giữ được một phần gradient âm cho phép model học tốt hơn như hàm
Leaky ReLU, mà khắc phục được việc không có đạo hàm tại 0 của hai hàm trên, Mish có
đạo hàm tại mọi giá trị. Hàm Mish được biểu diễn bởi công thức:
g(x) = x . tanh(ln(1+ex))

Hình 2.5: Đồ thị hàm Mish[7]
2.3 Convolutional Neural Network
2.3.1 Tổng quát
Convolutional Neural Network (CNN) hay còn được gọi là mạng Nơ-ron tích chập là
một trong những mô hình của Deep Learning. Tác dụng của thuật toán này chính là tạo ra
những hệ thống thông minh, có sự phản ứng với độ chính xác cao. Ví dụ như Facebook,
Google,.. đã đưa vào sản phẩm của mình chức năng nhận diệ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ông liê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:
12


:

 Phần tầng ẩn hay phần rút trích đặc trưng: Trong phần này, mạng sẽ tiến hà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 đủ (Fully Connected) 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ách trượ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ằm ngang,
cạnh nghiêng. Ở các lớp tiếp theo, khối tích chập sẽ nhận diện các đường cong, đườ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 được nhữ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ánh xe.

13


:

14


:

Hì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.
Padding (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ài cù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 (nc) : 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)
15


:

Mục đích là làm giảm số parameters mà ta cần phải tính toán, từ đó giảm thời gian
tính toán mà vẫn giữ được các đặc trưng quan trọng. Ngoài ra nó còn tránh overfitting.
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ừng giá 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 củ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 mode giố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ài toán. Hàm

16


:

softmax là một mô hình xác suất để với mỗi input x, tính được output a i 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
a ( z ) : R n � R n có công thức là:
ai 

exp( zi )
C

�exp( z )
j 1

, i  1, 2,3,...C

j

với C là số lớp ngõ ra

Nhậ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 a i lớn hơn 0 và có
tổng bằng 1.

Hì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 do gradients

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.
17


:

Batch Normalization học những giá trị trung bình và phương sai của đầu vào sau đó
chuẩn hóa đầu vào để có giá trị trung bình là 0 và phương sai là 1. Việc chuẩ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. Trong
đề tài đồ án này, 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à:

Hì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
2.4 Thuật toán YOLO
Phần trước việc phân loại vật thể được thực hiện qua một số mô hình CNN cụ thể để
phân loại các vật thể khác nhau. Tuy nhiên trong thực tế, các bài toán về thị giác máy, học
sâu không chỉ đơn thuần trong việc phân loại vật thể mà còn phải nhận diện được đâu là
vật thể đang cần phát hiện trong một tấm hình, một video gồm nhiều ngoại cảnh xung
quanh. Để thực hiện được bài toán này có nhiều thuật toán có thể thực hiện để phát hiện
vật thể như R-CNN series (R-CNN, Faster R-CNN, Fastest R-CNN) hay YOLOv1,
YOLOv2,... Để thực hiện phát hiện và nhận diện biển báo giao thông, nhóm chúng tôi lựa
chọn thuật toán YOLOv4 là thuật toán YOLO mới nhất do Alexey Bochkovskiy, ChienYao Wang, Hong-Yuan Mark Liao công bố vào 23/04/2020.
18



:

2.4.1 Sơ lược về thuật toán YOLO
YOLO được viết tắt từ "You Only Look Once", tạm dịch là "Bạn chỉ nhìn một
lần".Thuật toán YOLO xem bài toán phát hiện vật thể là một vấn đề hồi quy duy nhất trên
toàn bộ bức ảnh, trực tiếp từ các pixel của ảnh thành các ô dự đoán (bounding box) cùng
với xác suất phân loại vật thể[8] thay vì phải thực hiện nhiều bài toán hồi quy cho từng
vùng vật thể như các thuật toán R-CNN series. Như vậy việc chỉ sử dụng 1 bài toán hồi
quy duy nhất cho toàn bộ ảnh, thuật toán YOLO giúp giảm số lượng phép toán, tăng tốc
độ xử lý khi đó có thể đáp ứng bài toán thời gian thực tốt hơn so với các thuật toán RCNN.
2.4.1.1 Grid System
Ý tưởng của việc thực hiện Grid System xuất phát từ việc thay vì thực hiện các lớp
Fully Connected ở cuối mô hình thì các lớp này sẽ được chuyển thành các lớp tích chập
như các lớp phía trước trong bài toán phân loại vật thể. Khi đó ở lớp cuối cùng thay cho
lớp fully connected có kích thước (số classes, 1) thành một lớp tích chập có kích thước 3
chiều (1,1,số classes)
Việc chuyển đổi này không làm ảnh hưởng đến kết quả dự đoán mà còn thể hiện được
chúng ta hoàn toàn có thể phân loại vật thể bằng các phép toán tích chập với kết quả dự
đoán nằm ở lớp tích chập cuối cùng và còn ưu việt hơn khi vẫn giữ được vị trí của vật thể.
Việc chuyển đổi diễn ra như sau, ví dụ, hình ảnh chứa vật cần phân loại có kích thước 14
x 14 x 3, sau khi thực hiện các bước tích chập nhận được lớp tích chập cuối cùng có kích
thước 1 x 1 x 4, chính lớp tích chập mang kết quả phân loại vật thể.

19


:

Hình 2.13: Chuyển các lớp Fully Connected cuối thành các lớp tích chập
Để chứng minh vị trí vật thể không thay đổi và vẫn có thể xác định được qua lớp cuối

ta giả sử hình ảnh đang xét có kích thước 27 x 27 x 3 được chia thành 3 x 3 grid như hình
dưới, vị trí của vật thể nằm ở ô có đánh màu, sau khi thực hiện các bước tích chập, ta thu
được lớp tích chập cuối cùng có kích thước 3 x 3 x 3 .

Hình 2.14: Vị trí và thông tin của vật thể được duy trì đến lúc cuối cùng
(Để đơn giản, trong hình trên không vẽ số chiều của lớp tích chập)
Ta có thể thấy sau khi thực hiện tích chập dữ liệu và vị trí của vật thể được duy trì cho
đến lớp cuối cùng, và ở ô màu tương ứng mang kết quả phân loại của vật thể. Như vậy ta
vừa có thể phân loại vật thể vừa xác định được vị trí của vật thể.
20


:

Qua đó, grid system sẽ chia hình gốc thành số grid tương đương với kích thước của
lớp cuối(không đề cập đến số chiều), như ví dụ trên lớp cuối có kích thước 3 x 3 vậy ta sẽ
chia hình gốc thành 3 x 3 grid (đường kẻ đậm). Tại đó mỗi grid sẽ mang 3 thông tin
chính: Grid có đang chứa vật thể hay không, tọa độ của các bounding box (gồm tọa độ x,y
của góc trên bên trái và chiều dài, chiều rộng của bounding box), xác suất phân loại vật
thể. Xét hình 2.15, giả sử chúng ta cần nhận diện biển báo cấm vượt quá 30km/h, mặc dù
biển báo không nằm trọn trong một grid nhưng thuật toán sẽ chỉ xác định tâm vật thể
(hình tròn trong hình dưới) và tâm vật thể nằm ở grid nào thì grid đó sẽ được xác định tồn
tại vật thể. Ma trận của 1 grid như sau:
[ pc , bx , by , bh , bw , c1 , c2 , c3 , ... ]

Hình 2.15: Mô tả grid system trong bài toán nhận diện biển báo
2.4.1.2.Khái niệm về chỉ số IoU và thuật toán Non-max suppression
Chỉ số IoU (Intersection over Union) cho ta biết tỉ lệ trùng vào nhau của 2 box.
Trong đó A B là phần giao nhau (Intersection) của box A và box B, A B là phần
chung của 2 box (Union) bằng tổng diện tích của 2 box trừ đi phần giao nhau. Việc xác

định IoU giúp tính toán khả năng phát hiện chính xác vật thể, trong đó box A thường là
các anchor box ( hay groundtruth bounding box) được gán nhãn ở pha huấn luyện và box
B là bounding box của hệ thống xác định ở pha kiểm tra. Tính toán IoU để đánh giá mô
hình đã phát hiện vật thể đúng hay chưa.
21


:

Hình 2.16: Phần giao nhau giữa 2 box A và B
Trong pha kiểm tra, hệ thống sẽ đưa ra nhiều bounding box khác nhau với các xác suất
dự đoán khác nhau và tỉ số IoU khác nhau, vì vậy thuật toán Non-max suppression giúp
loại bỏ các bounding box có tỷ lệ dự đoán thấp và chỉ giữ lại 1 bounding box cuối cùng có
tỷ lệ dự đoán cao nhất. Thuật toán Non-max suppression diễn ra như sau:
Bước 1: Loại bỏ tất cả các bounding box có xác suất xuất hiện của vật thể p c thấp hơn
ngưỡng. Việc loại bỏ như vậy để các grid không chứa vật thể có xác suất xuất hiện của vật
thể thấp sẽ không hiển thị bounding box.
Bước 2: Chọn các bounding box có xác suất xuất hiện vật thể cao nhất.
Bước 3: Nếu có nhiều bounding box có cùng xác suất xuất hiện vật thể cao nhất thì ta
sẽ loại bỏ bằng IoU, bounding box nào có chỉ số IoU thấp hơn ngưỡng sẽ bị loại bỏ. Kết
thúc bước ba, ta sẽ nhận được bounding box có tỉ lệ nhận diện vật thể tốt nhất.
2.4.1.3 Gán nhãn cho các mẫu
Tương tự các bài toán "Máy học"/"Học sâu", bài toán nhận diện vật thể cũng gồm có 2
pha, pha kiểm tra và pha huấn luyện. Trong pha học của thuật toán YOLO, chúng ta sẽ
thực hiện label vị trí và phân loại cho vật thể, khi đó y có dạng như sau:
y =[pc , bx , by , bh , bw , c1 , c2 , c3,...]
Ví dụ đối với hình 2.15 giả sử bài toán cần tìm vị trí vật thể và phân loại với 3 nhãn,
trong đó biển báo của hình thuộc nhãn thứ nhất. Khi đó, ở grid phát hiện được biển báo
giao thông, y sẽ được gán như sau y = [1 , 230 , 120 , 20 , 30 , 1 , 0 , 0], tức là grid đó có
vật thể, tọa độ (x,y) ở phía trên bên trái của anchor box là (230,120), anchor box có chiều

dài là 20 chiều rộng là 30, biển thuộc nhãn 1 và không thuộc hai nhãn còn lại. Nếu xét
22


:

grid không chứa vật thể y sẽ được gán y = [0 , x , x , x , x , x , x , x ] tức là không có vật
thể ở grid đó và các giá trị còn lại không cần quan tâm.
Tuy nhiên, nếu có cùng 2 vật thể cùng xuất hiện trong 1 grid thì không thể thực hiện
gán y như trên. Với vấn đề đó, chúng ta có thể xử lý theo 2 cách:
Cách 1: Chia nhỏ grid ra đến khi nào 2 vật thể nằm ở 2 grid khác nhau. Tuy nhiên
nếu chia càng nhỏ grid, việc học không thể diễn ra sâu khiến việc phân loại vật thể khó
chính xác do các lớp sau không học được các đặc trưng cao.Và nếu tâm của 2 vật thể gần
như trùng nhau cũng không thể giải quyết được như trên. Khi đó, ta phải thực hiện theo
cách thứ 2.
Cách 2: Thay vì y chỉ được gán cho 1 vật thể, y sẽ được mở rộng ra với nhiều vật
thể như sau:
y =[pc1 , bx1 , by1 , bh1 , bw1 , c1 , c2 , c3,...,pc2 , bx2 , by2 , bh2 , bw2 , c1 , c2 , c3,...]
Xét ví dụ với hình 2.16 bên dưới, cô gái và chiếc xe đều nằm cùng chung 1 grid. Khi
đó, y sẽ được gán như sau y = [1, 120, 20, 20 , 120 , 1 , 0 , 1 , 90, 50 , 90 , 20 , 0 , 1] .
Tức là ở grid này có xuất hiện ô tô (y[0] = 1), (120,20,20,120) là 4 thông số anchor box
của xe ô tô, (y[5]=1,y[6]=0) để phân loại cho anchor box này là xe ô tô chứ không phải cô
gái, tương tự y[7]=1 có nghĩa grid này cũng có cô gái, 4 thông số tiếp theo để xác định tọa
độ anchor box cho cô gái cà (y[12]=0,y[13]=1) để phân loại anchor box này là cô gái chứ
không phải xe ô tô. Như vậy, với cách 2 ta sẽ ghép y của 2 hay nhiều vật thể nằm trong
cùng 1 grid lại thành một, y[0:6] để xác định cho việc phát hiện chiếc xe, và y[7:13] để
xác định cho cô gái. Tuy nhiên với cách thứ 2, nếu ta ghép càng nhiều tốc độ xử lý càng
lâu do càng có nhiều phép toán phép thực hiện, vì vậy không nên quá lạm dụng cách này
mà nên phối hợp hài hòa với cách thứ 1, tăng số grid phải chia lên.


23


:

Hình 2.17: Tâm của 2 vật thể trùng nhau và cùng nằm trong 1 grid.
Nguồn : reddit.com
2.4.1.4.Hàm mất mát
Sau khi gán nhãn cho toàn bộ tập dữ liệu, các mẫu dữ liệu sẽ được đưa qua mạng
CNN (toàn bộ ảnh sẽ đưa vào mạng CNN) để thực hiện việc học các tham số. Trong quá
trình này, các hàm mất mát sẽ được tính toán. Đối với bài toán nhận diện vật thể sẽ cần
tính toán 3 hàm mất mát.

Hàm mất mát phân loại (Classification Loss Function):

Hàm mất mát vị trí (Localization Loss Function): Được sử dụng để tính toán độ sai số
giữa các bounding box dự đoán với các anchor box, cải thiện Localization Loss sẽ giúp
việc phát hiện vật thể trở nên chính xác hơn:
Hàm mất mát dự đoán (Confidence Loss Function): thể hiện sai số giữa dự đoán của
bounding box với nhãn thực tế:
Hàm mất mát tổng quát sẽ bằng tổng 3 hàm mất mát phía trên:

24


:

2.4.1.5.Ngõ ra
Ở ngõ ra, mỗi grid sẽ thực hiện dự đoán 2 bounding box có pc cao nhất. Loại bỏ tất cả
bounding box có pc thấp trên toàn bộ bức ảnh. Và cuối cùng thuật toán Non-max

suppression sẽ được thực hiện để giữ lại bounding box chính xác nhất cho từng vật thể.

(a)

(b)

(c)

Hình 2.18: Thuật toán được áp dụng ở ngõ ra
(a): Với mỗi grid, lấy 2 bounding box có pc cao nhất.
(b): Loại bỏ tất cả các bounding box có pc thấp trên toàn bộ bức ảnh, bước này giúp loại
bỏ các grid không chứa vật thể.
(c): Áp dụng non-max suppression để chỉ chọn ra bounding-box cuối cùng có xác suất dự
đoán cao nhất.
2.4.2 Thuật toán YOLOv4
Thuật toán YOLOv4 về cơ bản cũng thừa kế các phương pháp cơ bản của các YOLO,
tuy nhiên YOLOv4 áp dụng một số thuật toán phát hiện vật thể nhanh, tối ưu hóa các
phép toán thực hiện song song giúp tăng tốc độ nhận diện và tăng độ chính xác.

25


×