You are on page 1of 45

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN TOÁN ỨNG DỤNG VÀ TIN HỌC



ỨNG DỤNG YOLO TRONG NHẬN DIỆN ĐỐI


TƯỢNG TỪ HÌNH ẢNH
ĐỒ ÁN I
Chuyên ngành: Toán Tin
Chuyên sâu: Tin học

Giảng viên hướng dẫn: TS. Ngô Thị Hiền


Sinh viên thực hiện: Phùng Văn Tuyên
Mã số sinh viên : 20173601
Lớp: Toán Tin 02 – K62

Hà Nội, 7-2021

0
MỤC LỤC

NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN..........................................................................................2


LỜI NÓI ĐẦU..........................................................................................................................................3
Chương 1: Kiến thức cơ sở...................................................................................................................4
1.1. Bài toán nhận diện đối tượng..............................................................................................4
1.2. Nhận diện đối tượng............................................................................................................5
1.3. Mạng Nơ-ron nhân tạo (Artificial Neural Network).........................................................7
ANN là gì ?...................................................................................................................................7
Kiến trúc của Neural Network....................................................................................................8
Deep Learning............................................................................................................................10
Feed Forward và Back Propagation.........................................................................................11
1.4. Mạng Nơ-ron tích chập (Convolutional Neural Network)..............................................13
CNN là gì ?.................................................................................................................................13
Tổng quan về kiến trúc của CNN.............................................................................................13
Feature........................................................................................................................................14
Convolutional là gì ?..................................................................................................................14
Các layer cơ bản trong CNN.....................................................................................................15
Cấu trúc của CNN.....................................................................................................................20
Chọn tham số cho CNN.............................................................................................................21
Chương 2: Mô hình YOLO nhận diện đối tượng từ hình ảnh............................................................25
2.1. Giới thiệu về YOLO...........................................................................................................25
2.2. Cách YOLO cải thiện so với các phương pháp Object Detection trước........................25
2.3. Kiến trúc mạng YOLO......................................................................................................26
2.4. Cách hoạt động của YOLO...............................................................................................27
2.5. Hàm Loss Funtion..............................................................................................................32
2.6. The Network.......................................................................................................................33
2.7. Hạn chế của YOLO............................................................................................................34
2.8. So sánh các phiên bản YOLO...........................................................................................35
2.9. Kết quả thực nghiệm.........................................................................................................38
Kết luận...............................................................................................................................................41
Tài liệu tham khảo..............................................................................................................................42

1
NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN
1. Mục đích và nội dung của đồ án:

……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………

2. Kết quả thu được:

……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………

3. Ý thức làm việc của sinh viên:

……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………………………………………………………………………………
……………

Hà Nội , ngày tháng năm


2021

Giảng viên hướng dẫn

2
LỜI NÓI ĐẦU
Trong thời đại hiện nay, xã hội chúng ta bước vào cuộc cách mạng công
nghiệp 4.0, có cốt lõi là công nghệ thông tin và các thiết bị máy móc thông minh
để phục vụ nhu cầu đời sống con người và tăng năng suất lao động. Để các thiết bị
máy móc này trở nên thật sự thông minh thì con người chúng ta cần phải dạy cho
chúng biết nhận biết và xử lí các sự vật, sự việc trong thực tế để đạt được mục đích
trong công việc. Từ đó, chúng ta cần phát triển các chương trình có thể giúp máy
tính nhận diện được đối tượng ngoài xã hội đời thực.

Thị giác máy tính (Computer Vision) là một trong những lĩnh vực hot nhất
của khoa học máy tính và nghiên cứu trí tuệ. Mang lại rất nhiều ứng dụng trong đời
sống : xử lí hình ảnh, trình đọc tự động, phát hiện các đối tượng, nhận diện khuôn
mặt, xe tự lái….

Trong đó, Nhận diện đối tượng (Object Detection) là một đề tài rất được
quan tâm hiện nay bởi khả năng ứng dụng cao,dữ liệu dễ chuẩn bị và kết quả ứng
dụng thì cực kì nhiều.

Vì vậy,em quyết định làm đồ án về Object Detection là “ Ứng dụng YOLO


trong nhận diện đối tượng từ hinh ảnh ”.Em chọn sử dụng mô hình của Object
detection ở đây là YOLO-“You only look once” tốc độ thực thi rất nhanh, đạt được
việc nhận diện đối tượng trong thời gian thực.

Em xin cảm ơn chân thành nhất tới cô Ngô Thị Hiền đã có những nhận xét,
hướng dẫn và góp ý khách quan để em hoàn thành báo cáo này một cách tốt hơn.
Trong quá trình tìm hiểu, chắc chắn rằng không tránh khỏi những sai sót. Em mong
nhận được sự thông cảm và góp ý thêm của quý thầy cô.

Em xin chân thành cảm ơn ạ


3
Chương 1: Kiến thức cơ sở
1.1. Bài toán nhận diện đối tượng
Khi con người nhìn vào những hình ảnh sẽ nhận thấy các sự vật, sự việc trong
bức ảnh như: con người, tòa nhà, các hành động … nhìn vào nhiều chi tiết khác
nhau sẽ suy ra nhiều thông tin hơn từ hình ảnh.Nhưng đối với máy tính, tất cả hình
ảnh đều được coi giống nhau ,đó là một mảng các pixel, các giá trị số đại diện cho
các sắc độ của ba màu đỏ ,xanh lá và xanh dương (RGB). Một trong những thách
thức mà các nhà khoa học máy tính phải vật lộn từ những năm 1950s là tạo ra
những cỗ máy có thể hiểu hình ảnh, video như con người.

Ngày nay, số lượng ảnh và video càng lúc càng nhiều hơn,lượng người sử dụng
ở khắp mọi nơi trên toàn thế giới,chúng là những dữ liệu dạng phi cấu trúc khổng
lồ cho nên người ta đặt ra vấn đề để xử lí lượng dữ liệu này.

Vì vậy mà việc phát hiện vật thể và xác định đối tượng đó là một ứng dụng
quan trọng trong việc nghiên cứu tìm hiểu và cải tiến để đạt những thành tựu cho
khoa học ngày nay.

4
1.2. Nhận diện đối tượng
Nhận diện đối tượng (Object Detection) là một bài toán quan trọng trong Thị
giác máy tính (Computer Vision) và Trí tuệ nhân tạo (Artificial Intelligence).

Để khám phá khái niệm Object Detection, chúng ta bắt đầu với phân loại hình
ảnh qua các mức độ tăng dần:

 Image classification (Phân loại hình ảnh): nhằm mục đích gán hình ảnh
cho một trong số các danh mục khác nhau (ví dụ: ô tô, chó, mèo, người,
v.v.), về cơ bản trả lời câu hỏi "Cái gì trong hình này?" . Một hình ảnh chỉ
có một danh mục được gán cho nó. 
 Object localization (Định vị đối tượng) : xác định vị trí đối tượng trong
hình ảnh, vì vậy câu hỏi của chuyển thành "Nó là gì và nó ở đâu?"
 Object detection (Nhận diện đối tượng): là sự kết cả 2 nhiệm vụ trên - xác
định vị trí của một hoặc nhiều đối tượng và vẽ bounding box xung quanh
chúng, gán nhãn phân loại đối tượng được xác định.

5
Object Detection đã được sử dụng rộng rãi để phát hiện khuôn mặt, phát
hiện xe, đếm số người đi bộ, hệ thống bảo mật và xe không người lái. Có nhiều
cách để nhận diện đối tượng có thể được sử dụng cũng như trong nhiều lĩnh vực
thực hành. 

Hiện nay, chúng ta ứng dụng công nghệ mạng nơ-ron trong Trí tuệ nhân tạo
để nhận dạng và phân tích các đối tượng.Có 3 công cụ Object detectors chính hiện
này mà ta thường gặp là :

 R-CNN và các biến thể như : Fast R-CNN, Faster R-CNN, Mask R-
CNN
 Single Shot Detector (SSD)
 You only look once (YOLO)

Ở đây em lựa chọn tìm hiểu về YOLO một trong những phương pháp tốt nhất và
nhanh nhất (real time) hiện nay để nhận diện đối tượng trong ảnh.
6
1.3. Mạng Nơ-ron nhân tạo (Artificial Neural Network)
ANN là gì ?
Việc một chú chó có thể phân biệt được người than trong gia đình với
người lạ hay con người phân biệt được các loài vật,những việc hiển nhiên xảy
ra nhưng lại cực kì khó để thực hiện được bằng máy tính. Vậy sự khác biệt nằm
ở đâu ? Câu trả lời là nằm ở bộ não với lượng lớn các nơ-ron thần kinh liên kết
với nhau.

Mạng nơ-ron nhân tạo (ANN), thường được gọi đơn giản là mạng nơ-ron
Neural Network (NN) là các hệ thống tính toán được lấy cảm hứng từ các mạng
nơ-ron sinh học cấu thành não động vật một cách mơ hồ. ANN chỉ lấy cảm
hứng từ não bộ và cách thức hoạt động của nó, chứ không thể bắt chước toàn bộ
các chức năng này.Công việc của chúng ta chính là dùng mô hình này để giải
quyết các bài toán đặt ra.

7
Kiến trúc của Neural Network
ANN hoạt đô ̣ng theo hướng mô tả lại cách hoạt đô ̣ng của hê ̣ thần kinh với
các neuron được kết nối với nhau.

Một mạng ANN có 3 layer: layer đầu tiên là input layer,các layer ở giữa
gọi là hidden layer ,layer cuối cùng gọi là output layer. Các hình tròn được gọi
là node. Mỗi mô hình luôn có 1 input layer ,1 output layer, có thể có hoặc
không các hidden layer. Tổng số layer trong mô hình được quy ước là ( số layer
- 1) (Không tính input layer).

Mô hình tổng quát Neural Netword

Input layer đóng vai trò đưa các giá trị được truyền vào sau đó qua quá
trình tính toán sẽ đưa vào hidden layer.Trong hidden layer có các hidden neural
chứa các hàm kích hoạt để xử lý rồi sau cùng được truyền ra output layer cho

8
chúng ta lấy về các giá trị mong muốn thu được.Mỗi node trong hidden layer và
output layer :

 Liên kết với tất cả các node ở layer trước đó với các hệ số w (weights) riêng
 Mỗi node có 1 hệ số bias riêng b.
 Diễn ra 2 bước : tính tổng linear zi(l) = ∑ l
j=1 aj(l-1) * wji(l) +bi(l) ( số node

trong hidden layer thứ i là l ) và  activation function: aj(l)= σ(zi(l))

9
Deep Learning
Mạng nơ-ron đơn giản nhất chỉ với input layer và output layer được gọi
là Single-layer Perceptron.

Khi có thêm ít nhất một hidden layer thì mạng đó được gọi là Multi-layer
Perceptron.

Một trong những hạn chế của MLP là vấn đề vanishing gradient. Khi ra
đời ý tưởng  tiền huấn luyện không giám sát (unsupervised pretraining) thông
qua deep belief nets (DBN) của Geoffrey Hinton năm 2006 đã giúp giải quyết
phần nào sự phiền hà của vanishing gradient.

Kể từ đây, neural networks với nhiều hidden layer được đổi tên thành 
Deep Learning.

10
Deep Learning là kỹ thuật để thực hiện hóa Machine Learning.

Feed Forward và Back Propagation


Trong quá trình huấn luyện cho mạng ANN dựa vào 2 bước xử lý chính là
Feed Forward và Back Propagation.

Feed Forward là thuật toán mà mỗi neural ở một tầng nào đó nhận các giá trị
đầu vào của tầng trước đó mà không suy luận ngược lại.

Quá trình Feed Forward

11
Back Propagation là thuật toán mà cơ bản dùng quy tắc đạo hàm của hàm
hợp và phép tính ngược đạo hàm để thu về đạo hàm của tất cả các trọng số để
thay đổi các trọng số sao cho giảm lỗi giữa sau khi quá trình lan truyền tiến và
giá trị thực tế thu được.

.Quá trình Back Propagation

12
1.4. Mạng Nơ-ron tích chập (Convolutional Neural
Network)

CNN là gì ?
Convolutional Neural Network (CNN) là một trong những mô hình Deep
Learning tiên tiến và có ảnh hưởng nhiều đến Computer Vision. Nó giúp cho
chúng ta xây dựng được những hệ thống thông minh, có sự phản ứng và độ chính
xác cao. CNN được ứng dụng rộng rãi trong các bài toán nhận dạng và phân loại
các đối tượng trong ảnh kỹ thuật.

Máy tính coi hình ảnh đầu vào là 1 mảng pixel và nó phụ thuộc vào độ phân
giải của hình ảnh. Dựa trên độ phân giải hình ảnh, máy tính sẽ thấy H x W x D (H:
Chiều cao, W: Chiều rộng, D: Độ dày). Về cơ bản của CNN là giảm kích thước của
ảnh mà không làm mất đi đặc trưng của nó sau đó bức ảnh sẽ trở thành 1 vector
một chiều để đưa vào huấn luyện gần giống với ANN phần bên trên ta đã nói.

Tổng quan về kiến trúc của CNN


Mạng CNN có kiến trục khác với mạng ANN thông thường. ANN thông
thường chuyển đổi đầu vào thông qua hàng loạt các tầng ẩn. Mỗi tầng là một tập
các nơ-ron và các tầng được liên kết đầy đủ với các nơ-ron ở tầng trước đó. Và ở
tầng cuối cùng sẽ là tầng kết quả đại diện cho dự đoán của mạng.

Đầu tiên, mạng Nơ-ron Tích Chập được chia thành 3 chiều: width, height,
depth. Kế đên, 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 nhưng 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 véc-tơ của giá trị xác suất.

13
Mô hình ANN (trái) và CNN (phải)

Feature
Feature có thể hiểu ở đây là đặc điểm. CNN so sánh hình ảnh theo từng
mảnh , mỗi mảnh đó được gọi là feature. So với việc khớp các bức ảnh lại với nhau
thì CNN làm việc nhìn ra sự tương đồng trong việc tìm kiếm thô các feature khớp
với nhau trong hai hình ảnh tốt hơn.

Mỗi feature được coi như là một hình ảnh mini,tức là chúng cũng là những
mảng 2 chiều nhỏ. Các feature sẽ được khớp với các khía cạnh chung của bức ảnh
đó.

Convolutional là gì ?
Convolutional có ý nghĩa là tích chập. Nói đơn giản thì khi xem một hình
ảnh mới,CNN sẽ không biết được nó ở vị trí nào, các feature khớp với nhau ở đâu,
vì vậy nó thử chúng ở tất cả các vị trị khác nhau.Trong quá trình đó chúng ta tạo
thành 1 bộ lọc ,được gọi là Filter. Và để thực hiện điều này,chúng ta sử dụng nơ-
ron tích chập.

Nếu bạn muốn tính toán được sự khớp của các feature với mỗi mảnh của
hình ảnh, ta lấy kết quả mỗi điểm ảnh trong feature nhân với giá trị của điểm ảnh
tương ứng trong hình ảnh đó. Sau khi có được kết quả phép tính từng feature với
ảnh,ta sẽ đem cộng lại hết với nhau rồi chia cho số lượng tất cả điểm ảnh có trong

14
feature đó.Nếu các điểm ảnh mà khớp với nhau thì sẽ trả về kết quả 1,nếu không
thì kết quả là -1.

Để hoàn tất được quá trình tích chập,chúng ta phải lặp lại hành động
trên.Quá trình đó chính là việc ta sắp xếp tất cả các feature vào tất cả mọi mảnh
hình ảnh có thể thực hiện được.Kết quả của quá trình này chính là chúng ta có
được những hình ảnh đã được lọc ,mỗi cái sẽ có filter tương ứng.Có thể nói quá
trình tích chập diễn ra theo từng lớp (layer) một.

Các layer cơ bản trong CNN


CNN được tạo thành từ một chuỗi các layer,mỗi layer chuyển đổi một khối
lượng 3D đầu vào thành một khối lượng 3D đầu ra với một số chức năng khác biệt
có thể có hoặc không có tham số.Các thao tác được lặp lại trên hàng chục hàng
trăm layer để xác định các feature khác nhau.

 Convolutional Layer
Có thể nói đây là một lớp cực kì quan trọng trong CNN,bởi ở lớp này sẽ
thực hiện mọi phép tính toán.
Tích chập là lớp đầu tiên để trích xuất các tính năng từ hình ảnh đầu vào.
Tích chập duy trì mối quan hệ giữa các pixel bằng cách tìm hiểu các tính

15
năng hình ảnh bằng cách sử dụng các ô vương nhỏ của dữ liệu đầu vào. Nó là
1 phép toán có 2 đầu vào như ma trận hình ảnh và 1 bộ lọc hoặc hạt nhân.

VD : Xét ma trận hình ảnh đầu vào 5x5 có giá trị pixel là 0 và 1.Ma trận filter
3x3 như hình sau đây :

Ta nhận được kết quả lớp tích chập của ma trận hình ảnh 5x5 nhân với ma
trận filter 3x3 gọi là Feature map :

Sự kết hợp của 1 hình ảnh với các bộ lọc khác nhau có thể thực hiện các hoạt
động như phát hiện cạnh, làm mờ và làm sắc nét bằng cách áp dụng các bộ
lọc

16
Stride là số pixel thay đổi trên ma trận đầu vào.
Sau khi nhận được feature map thì ma trận đầu vào bị nhỏ dần không phù
hợp với hình ảnh đầu vào nên ta sẽ chèn thêm các số 0 vào 4 đường biên của
hình ảnh (padding) để đảm bảo kích thước đầu ra sau mỗi tầng convolution là
không đổi.

17
 ReLU Layer

ReLU(Rectified linear units) là một hàm phi tuyến với đầu ra là


ƒ(x)=max(0,x).ReLU sẽ gán những giá trị đầu vào âm thành 0 và giữ nguyên
những giá trị dương

Có một số hàm phi tuyến khác như: tanh,sigmoid có thể được sử dụng thay
thế ReLU.Nhưng hầu hết người ta sử dụng ReLU vì nó đem lại hiệu suất tốt

 Pooling Layer
Pooling layer sẽ giảm bớt số lượng tham số khi hình ảnh quá lớn, thường
được dùng giữa các convolutional layer, để giảm kích thước dữ liệu nhưng
vẫn giữ được các thuộc tính quan trọng. Kích thước dữ liệu giảm giúp giảm
việc tính toán trong model.
Hầu hết khi dùng pooling layer sẽ dùng size=(2,2), stride=2, padding=0.Khi
đó output height và width của dữ liệu giảm đi 1 nửa,depth được giữ nguyên .

18
Có 2 loại pooling layer phổ biến là : max pooling và average pooling

 Fully Connected Layer


Dùng để đưa ra kết quả

Sau khi ảnh được truyền qua nhiều convolutional layer và pooling layer thì
model đã học được tương đối các đặc điểm của ảnh (ví dụ mắt, mũi, khung
mặt,…) thì tensor của output của layer cuối cùng, kích thước H*W*D, sẽ

19
được chuyển về 1 vector kích thước (H*W*D).Vì vậy,để liên kết các đặc
điểm đó lại và cho ra output chúng ta sử dụng fully connected layer.

20
Cấu trúc của CNN
Mạng CNN là một tập hợp các lớp Convolution chồng lên nhau và sử dụng
các hàm nonlinear activation như ReLU và tanh để kích hoạt các trọng số trong các
node. Mỗi một lớp sau khi được kích hoạt sẽ tạo ra các kết quả trừu tượng hơn cho
các lớp tiếp theo.

Thông qua quá trình training,các lớp layer CNN tự động học các giá trị được
thể hiện qua các filer dựa mà cách thức mà chúng ta thực hiện.

Trong mô hình CNN có 2 điều cần quan tâm là: tính bất biến (Location
Invariance) và tính kết hợp (Compositionality).Với cùng một đối tượng,nếu được
chiếu theo các góc độ khác nhau (translation,rotation,sacling) thì độ chính xác sẽ bị
ảnh hưởng đáng kể

Pooling layer sẽ cho chúng ta tính bất biến đối với phép dịch chuyển
(translation), phép quay (rotation) và phép co giãn (scaling). Tính kết hợp cục bộ
cho ta các cấp độ biểu diễn thông tin từ mức độ thấp đến mức độ cao và trừu tượng
hơn thông qua convolution từ các filter.Đó chính là lý do CNN cho ra mô hình với
độ chính xác rất cao.

21
Cấu trúc cơ bản của CNN có 3 phần chính :

 Các trường tiếp nhận cục bộ (Location receptive field) : Giúp chúng ta
tách lọc các thông tin của ảnh và chọn ra những vùng ảnh có giá trị
nhất
 Trọng số chia sẻ (Shared weights and bias): Làm giảm tối đa số lượng
trọng số lượng các tham số trong CNN.
 Lớp tổng hợp (Pooling layer): Làm đơn giản hóa thông tin đầu ra để
có được kết quả dể hiểu và dễ dùng nhất.

Chọn tham số cho CNN


Để chọn tham số cho CNN cần chú ý đến các mục :

 Số convolution layer : layer này càng nhiều thì chương trình chạy
càng được cải thiện.Chỉ sau 3,4 layer cũng có thể đạt kết quả như
mong muốn
 Filter size : thường có kích thước là 3x3 hoặc 5x5
 Pooling size : thường là 2x2 hoặc 4x4 khi hình ảnh đầu vào lớn
 Train test : Thực hiện nhiều lần train test cho ra các parameter tốt nhất

22
Kiến trúc các mạng CNN tiêu biểu

Hầu hết các mạng CNN được thiết kế theo nguyên tắc chung : Sử dụng nhiều
convolutional layer chồng lên nhau,giảm dần kích thước output mỗi tầng, tăng số
lượng feature map

Một vài mạng CNN tiêu biểu

 LeNet-5 (1998)
Được tạo ra bởi Yann Lecun,để nhận diện chữ viết tay. Mô hình này là cơ sở
thiết kế cho các mạng sau này.
Tham số :khoảng 60000

 AlexNet (2012)
Tác giả : Alex Krizhevsky trong cuộc thi ImageNet 2012.Ý tưởng dựa trên
LeNet-5 và nhiều điểm cải tiến
Tham số: 60 triệu (gấp 1000 lần LeNet-5)

23
 VGG-16 (2014)
Tác giả : Karen Simonyan, Andrew Zisserman. University of Oxford, UK
Tham số : 138 triệu
Hình thành xu hướng cải thiện độ chính xác của các mạng học sâu thông qua
gia tăng độ sâu của chúng.

 Inception (GoogleNet)
Được các nhà nghiên cứu Google đưa ra năm 2014
Mạng gồm các đơn vị gọi là “inception cell” thực hiện convolution 1 input
với nhiều filter khác nhau rồi tổng hợp lại, theo nhiều nhánh.

24
Dạng của 1 cell :

Mạng được xây dựng từ việc ghép các inception cell lại với nhau

GoogleNet đã kết hợp nhiều bộ lọc có kích thước khác biệt vào cùng một
khối. Định hình kiến trúc khối cho các kiến trúc mạng CNN chuẩn sau này.

25
Chương 2: Mô hình YOLO nhận diện đối
tượng từ hình ảnh
2.1. Giới thiệu về YOLO
YOLO-You only look once là một mô hình mạng CNN để cung cấp khả năng
nhận diện đối tượng theo thời gian thực. Nó đã được sử dụng trong các ứng dụng
khác nhau để nhận diện tín hiệu giao thông,người,động vật ….
Cái tên nói rõ lên đặc điểm đặc điểm nổi bật của nó, chỉ nhìn một lần là có thể
nhận diện được vật thể.YOLO chỉ sử dụng một mạng CNN và áp dụng lên ảnh
input một lần duy nhất để học các đặc trưng trên ảnh .
Về độ chính xác thì YOLO có thể không phải là thuật toán tốt nhất nhưng nó là
thuật toán nhanh nhất trong các lớp mô hình Object Detection. Nó có thể đạt tốc độ
gần như real time mà độ chính xác không quá giảm so với các model top đầu.
YOLO được ứng dụng nhiều trong các bài toán nhận diện đối tượng cần thời gian
nhận diện nhanh mà không cần độ chính xác quá cao hoặc các đối tượng cần nhận
diện không quá khó.
2.2. Cách YOLO cải thiện so với các phương pháp Object
Detection trước
Các phương pháp Object Detection trước đó như R-CNN, bao gồm cả các biến
thể như Fast R-CNN, thực hiện nhận diện đối tượng trên các đề xuất khu vực
(region proposal). R-CNN tập trung vào một khu vực cụ thể và huấn luyện từng
thành phần riêng biệt. Quá trình này yêu cầu R-CNN phải phân loại 2000 vùng trên
mỗi hình ảnh, làm cho nó rất tốn thời gian (47 giây/hình). Do đó, nó không thể
thực hiện trong thời gian thực (real time). Ngoài ra, R-CNN sử dụng một thuật toán

26
chọn lọc cố định, có nghĩa là không có quá trình học tập nào xảy ra trong giai đoạn
này, do đó mạng có thể tạo ra một đề xuất vùng kém hơn.

YOLO có một cách tiếp cận hoàn toàn khác, chỉ sử dụng một neural network
cho để chạy tất cả thành phần tác vụ. Kiến trúc của YOLO giống với FCNN (Full
Convolution Neural Network), hình ảnh được truyền qua một lần duy nhất sau đó
trả về output.Dự đoán được đưa ra chỉ với một mạng đánh giá duy nhất, thay vì
hàng nghìn như R-CNN. Vì vậy tốc độ của YOLO là cực nhanh, nhanh gấp hàng
nghìn lần so với RCNN, hàng trăm lần so với Fast RCNN.
2.3. Kiến trúc mạng YOLO
Kiến trúc YOLO được tạo ra từ việc kết hợp giữa các Convolutional layers và
Fully connected layers.Trong đó, các convolutional layers sẽ trích xuất ra các
feature của ảnh ,còn fully connected layers sẽ dự đoán ra xác suất và tọa độ của đối
tượng trên hình.

Sơ đồ kiến trúc của YOLO

Xét hình trên : Thành phần DarkNet Architecture được gọi là base network gồm
nhiều convolution layers có tác dụng trích xuất feature. Output của base network
này là một feature map có kích thước 7x7x1024 sẽ được sử dụng làm input cho các

27
fully connected layer có tác dụng dự đoán nhãn và tọa độ bounding box của vật
thể.

2.4. Cách hoạt động của YOLO

Đầu tiên, hình ảnh đầu vào sẽ được chia thành một lưới SxS ô (grid of cells).

YOLO chia hình ảnh thành mạng lưới 7x7 ô

28
Mỗi ô (cell) sẽ phát hiện các đối tượng xuất hiện bên trong chúng .Nếu một
trung tâm của object nằm trong 1 ô lưới nhất định thì ô này sẽ chịu trách nhiệm
phát hiện ra nó.

Dự đoán các boungding box

Tại mỗi grid cell sẽ có trách nhiệm dự đoán một số lượng B bounding boxes có
kích thước khác nhau để bao phủ các đối tượng cần xác định trong hình và phân
phối xác suất của C classes của bài toán.

Mỗi một bounding box dự đoán được tạo thành có năm thành phần chính là: (x,
y, w, h, confidence). Trong đó (x, y) là các tọa độ đại diện cho tâm của bounding
box,liên quan đến vị trí gird cell. (w, h) lần lượt là các kích thước chiều rộng và
chiều cao của box. Chúng được chuẩn hóa để nằm trong khoảng [0;1].

Sau khi thuật toán được thực hiện, mỗi bounding box sẽ được gán những
confidence , là chỉ số đại diện cho việc boungding box có chứa một đối tượng nào
bên trong hay không, được tính với xác suất cụ thể. 

29
Confidence (độ tin cậy) được định nghĩa là Pr (Object) × IOU (pred, truth).

Pr(Object): Xác suất có một đối tượng được chứa bên trong bounding box
đó. IOU (pred,truth) (IOU - Intersection over union) là tỉ lệ trùng khớp của
bounding box được dự đoán với groundtruth của một đối tượng.

Nếu không có object nào tồn tại thì confidence bằng 0. Trong thực tế, ta không
có được groundtruth của đối tượng cho nên trong quá trình testing chỉ số
confidence sẽ chỉ còn là xác suất Pr(Object).

Một biểu diễn công thức IOU

Ta thấy mỗi bounding box dự đoán có 5 thành phần tham số, mỗi cell tạo ra B
box dự đoán,vì vậy sẽ có tổng số SxSxB*5 đầu ra liên quan đến các box dự
đoán.Mà YOLO chỉ dự đoán một tập xác suất của class trên mỗi ô nên tổng xác suất
của class là SxSxC (C là số lượng class của bài toán). Tổng kết lại,chúng ta nhận
được một ma trận khối 3 chiều (tensor) có SxSx(B*5+C) giá trị làm đầu ra (output).

30
S=3 ,B=2 ,C=3

Sau khi có được output này, ta nhận được rất nhiều bounding boxes được dự đoán
ra bởi mỗi cell. Nhưng phần lớn trong số chúng đều có chỉ số confidence thấp hoặc
bao phủ cùng một đối tượng trong ảnh. Vì vậy chúng ta cần phải loại bỏ hết những
bounding boxes “dư thừa” để xác định chính xác và chỉ còn lại 1 bounding box tốt
nhất cho 1 đối tượng tìm được. YOLO sử dụng Non-Max Suppresstion (NMS) để
có thể loại bỏ được hầu hết các bounding box bị trùng một đối tượng và những box
có confidence thấp hơn một ngưỡng nhất định.Giữ lại những bounding box có chỉ
số cao.

31
Non-max suppression

Các bước của NMS:

Bước 1: Đầu tiên chúng ta sẽ tìm cách giảm bớt số lượng các bounding box
bằng cách lọc bỏ toàn bộ những bounding box có xác suất chứa vật thể nhỏ hơn
một ngưỡng confidence nào đó, thường là 0.5.

Bước 2: Đối với các bouding box giao nhau, non-max suppression sẽ lựa chọn
ra một bounding box có xác xuất chứa vật thể là lớn nhất. Sau đó tính toán chỉ số
giao thoa IoU với các bounding box còn lại.

32
2.5. Hàm Loss Funtion
Hàm mất mát Loss Function trong YOLO được tính toán dựa trên việc sai số dự
đoán và gán nhãn mô hình để tính. Cụ thể hơn nó là tổng độ mất mát của 3 thành
phần con sau :

 Classifycation loss : Đo lường sai số của việc dự đoán loại nhãn của object -

 Localization loss : Đo lường sai số của dự đoán tọa độ tâm, chiều dài, rộng
của boundary box (x, y ,w, h)

 Confidence loss : Đo lường sai số của việc dự đoán bounding box đó chứa
object so với nhãn thực tế tại ô vuông đó - Confidence loss

Classifycation loss

Hàm này chỉ tính trên những ô vuông có xuất hiện object, còn những ô
vuông khác ta không cần quan tâm .

Classifycation loss có công thức tính là :

Localization loss

Giá trị hàm Localization loss được tính trên tổng giá trị lỗi dự đoán toạ độ
tâm (x, y) và (w, h) của predicted bounding box với grouth-truth bounding box.

33
Công thức

Confidence loss

Hàm này tính dựa vào cả những ô vuông có xuất hiện object và không xuất
hiện object.

Công thức :

Total loss

2.6. The Network


YOLO là một mô hình mạng CNN thông thường gồm các convolutional layers
kết hợp maxpooling layers và cuối cùng là 2 lớp fully connected layers,với hàm
kích hoạt cho layer cuối cùng là một linear activation function và tất cả các
layers khác sẽ sử dụng leaky RELU :

34
2.7. Hạn chế của YOLO
YOLO á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 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ướcnhỏ.

YOLO sử dụng các feature tương đối thô để predict bounding box, do model sử
dụng nhiều lớp downsampling từ ảnh đầu vào. Bởi các hạn chế này của model khi
huấn luyện để predict bounding box từ data, dẫn đến YOLO không thực sự tốt
trong việc nhận diện các object với tỉ lệ hình khối mới hoặc bất thường so với tập

35
data. YOLOv2 đã khắc phục phần nào vấn đề này, nhưng vẫn thua kém nhiều so
với FRCNN.

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

2.8. So sánh các phiên bản YOLO


Những người tạo ra YOLO đã thiết kế các phiên bản mới để thực hiện các cải
tiến so với các phiên bản trước, chủ yếu tập trung vào việc cải thiện độ chính xác
của phát hiện.

YOLOv1

Phiên bản đầu tiên của YOLO được giới thiệu vào năm 2015, nó sử dụng một
khung Darknet giới hạn được đào tạo trên tập dữ liệu ImageNet-1000. Bộ dữ liệu
này có nhiều hạn chế và hạn chế khả năng sử dụng của YOLO V1. Cụ thể, YOLO
V1 đã vật lộn để xác định các đối tượng nhỏ xuất hiện dưới dạng một cụm và
không hiệu quả trong việc tổng quát hóa các đối tượng trong hình ảnh có kích
thước khác với hình ảnh được đào tạo. Điều này dẫn đến việc bản địa hóa các đối
tượng trong hình ảnh đầu vào kém.

YOLOv2

YOLO V2 được phát hành vào năm 2016 với tên gọi YOLO9000. YOLO V2 đã
sử dụng darknet-19, một mạng 19 lớp với 11 lớp nữa được sạc để phát hiện vật
thể. YOLO V2 được thiết kế để sử dụng Máy dò đa hộp (SSD) R-CNN và Single
Shot nhanh hơn, cho thấy điểm số phát hiện đối tượng tốt hơn.

36
Các nâng cấp của YOLO V2 so với YOLO V1 bao gồm:

 Cải thiện độ chính xác trung bình trung bình (MAP) —công cụ


phân loại độ phân giải cao hơn mới đã tăng kích thước đầu vào từ 224
* 224 trong YOLO V1 lên 448 * 448 và cải thiện MAP.
 Phát hiện tốt hơn các đối tượng nhỏ hơn — chia hình ảnh thành các
ô lưới 13 * 13 nhỏ hơn để cải thiện bản địa hóa và nhận dạng các đối
tượng nhỏ hơn trong hình ảnh.
 Cải thiện khả năng phát hiện trong các hình ảnh có kích thước
khác nhau — đào tạo thuật toán với các hình ảnh ngẫu nhiên có kích
thước khác nhau để cải thiện độ chính xác dự đoán của mạng đối với
các đối tượng từ các hình ảnh đầu vào có kích thước khác nhau.
 Anchor boxes — cung cấp một khuôn khổ duy nhất để phân loại và
dự đoán các hộp giới hạn. Hộp neo được thiết kế cho các tập dữ liệu
cụ thể bằng cách sử dụng phân cụm k-means.

YOLOv3

YOLO V3 là một bản nâng cấp gia tăng so với YOLOv2, sử dụng một biến thể
khác của Darknet. Kiến trúc YOLOv3 này bao gồm 53 lớp được đào tạo trên
ImageNet và 53 lớp khác có nhiệm vụ phát hiện đối tượng với số lượng lên đến
106 lớp. Mặc dù điều này đã cải thiện đáng kể độ chính xác của mạng, nhưng nó
cũng đã giảm tốc độ từ 45 khung hình / giây xuống 30 khung hình / giây.

37
Các layer trong mạng DarkNet53

Các nâng cấp YOLOv3 so với YOLOv2 bao gồm:

 Dự đoán hộp giới hạn được cải thiện — sử dụng hồi quy logistic để
dự đoán nhằm đưa ra điểm dự đoán cho tất cả các đối tượng trong mỗi
hộp giới hạn.
 Dự đoán lớp chính xác hơn — softmax đã được sử dụng cho YOLO
V2 đã được thay thế bằng bộ phân loại hậu cần cho mỗi lớp cho mục
đích đa nhãn.
 Cải thiện khả năng ở các quy mô khác nhau — đưa ra 3 dự đoán
cho mọi vị trí trong hình ảnh đầu vào để cho phép lấy mẫu ngược từ
các lớp trước để có được thông tin chi tiết và thông tin ngữ nghĩa đầy
đủ và cải thiện chất lượng đầu ra.
38
2.9. Kết quả thực nghiệm
Ở đây em sử dụng YOLOv3 để cho ra kết quả :

39
40
41
42
Kết luận
Với tốc độ phát triển của cuộc cách mạng công nghiệp 4.0 ngày này,việc tìm hiểu
và ứng dụng các lĩnh vực Thị giác máy tính (Computer Vision) và Trí tuệ nhân tạo
(Artificial Intelligence) là sự lựa chọn hết sức phù hợp và vô cùng cần thiết.

Thông qua quá trình thực hiện và nghiên cứu về đồ án :”Ứng dụng YOLO trong
nhận diện đối tượng từ hình ảnh” em đã có thêm nhiều hiểu biết về Deep
Learning : Nhận diện đối tượng, Mạng Nơ-rin Tích chập, Mô hình YOLO…Sử
dụng YOLO trong Opencv để nhận diện đối tượng từ hình ảnh bằng python.

Từ những kết quả đạt được em có thêm những nền tảng kiến thức cho việc học tập
sau này, nảy ra nhiều ý tưởng về những dự án phát triển tiếp theo để có thể áp dụng
vào đời sống chúng ta hiện nay.Ví dụ như :Nhận diện xe cộ, con người, đèn giao
thông trong lĩnh vực lái tự động hay AI quét thân nhiệt con người trong ngành y tế
với tình hình Covid-19 hiện nay.

Em xin gửi lời cảm ơn chân thành đến cô Ngô Thị Hiền đã có nhiều góp ý,giúp đỡ
và tạo điều kiện để em có thể hoàn thành được đồ án này.

Do điều kiện thời gian có hạn cùng với khả năng còn hạn chế nên không thể tránh
khỏi những sai sót trong quá trình hoàn thành đồ án,em rất mong nhận được những
chỉ bảo và thông cảm từ quý thầy cô.

43
Tài liệu tham khảo
http://www.wildml.com/2015/11/understanding-convolutional-neural-networks-
for-nlp/

Deep Learning Cơ bản _ Nguyễn Thanh Tuấn

Machine Learning Cơ bản _ Vũ Hữu Tiệp

Pham Dinh Khanh – YOLO You Only Look Once

YOLO object detection YOLO - forum machine learning cơ bản

https://www.mathworks.com/videos/introduction-to-deep-learning-what-are-
convolutional-neural-networks--1489512765771.html

http://deepmachinelearningai.com/yolo-deep-learning-you-only-look-once/

http://deepmachinelearningai.com/yolo-deep-learning-you-only-look-once/

https://hackernoon.com/understanding-yolo-f5a74bbc7967

https://arxiv.org/pdf/1506.02640.pdf

https://ai.hblab.vn/2017/10/intersection-over-union-iou-cho-object.html

44

You might also like