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
Chun ngành: Tốn Tin
Chun 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
2
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
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 ngồ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 khn
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 q thầy cơ.
Em xin chân thành cảm ơn ạ
4
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.
1.2. Nhận diện đối tượng
Nhận diện đối tượng (Object Detection) là một bài tố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.
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 RCNN
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.
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 tố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 tồ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.
Kiến trúc của Neural Network
ANN hoạt đông theo hướng mô tả lại cách hoạt đôṇ g của hê t ̣ hầ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 ln 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 qt Neural Netword
Input layer đóng vai trị đưa các giá trị được truyền vào sau đó qua q
trình tính tố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
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))
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.
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
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
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.
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 tố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
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.
Để hồn tất được q trình tích chập,chúng ta phải lặp lại hành động
trên.Q 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 q 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 q
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 tố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
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 tố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
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.
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 tố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 .
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ẽ
đượ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.
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 q 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.
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
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)
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.