ĐẠI HỌC QUỐC GIA TP. HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN
KHOA CÔNG NGHỆ PHẦN MỀM
BÁO CÁO ĐỒ ÁN 1
NHẬN DẠNG VẬT THỂ
Sinh viên thực hiện: Lê Thành Luân - 19520702
Lớp: SE121.M21
Giảng viên hướng dẫn: ThS. Mai Trọng Khang - Khoa CNPM
TP.Hồ Chí Minh, Ngày 22 tháng 6 năm 2022
LỜI CẢM ƠN
Lời đầu tiên, nhóm tác giả xin chân thành cảm ơn quý thầy cô khoa Công nghệ Phần
mềm, trường Đại Học Công Nghệ Thông Tin, ĐHQG TP.HCM, đã tận tình hướng dẫn
nhóm trong suốt thời gian qua. Những kiến thức mà thầy cô đã truyền đạt là nền tảng
quan trọng để có thể hoàn thành đề tài này.
Nhóm tác giả xin gửi lời cảm ơn đặc biệt sâu sắc và chân thành đến ThS. Mai Trọng
Khang, cảm ơn thầy đã tận tình hướng dẫn và tạo điều kiện tốt nhất để chúng em có thể
hoàn thành đề tài này. Những lời động viên, góp ý chân tình của thầy là động lực quý
báu để chúng em vượt qua những khó khăn khi tìm hiểu và thực hiện đề tài. Trong thời
gian hơn 3 tháng thực hiện đề tài, nhóm đã cố gắng vận dụng những kiến thức nền tảng
đã học, kết hợp với học hỏi và tìm hiểu công nghệ mới để ứng dụng xây dựng đề tài môn
học. Tuy nhiên trong quá trình thực hiện, do kiến thức và kinh nghiệm còn nhiều hạn chế,
khó tránh khỏi những thiếu sót. Chính vì vậy, nhóm tác giả rất mong nhận được sự góp
ý từ quý thầy cô để nhóm hoàn thiện thêm những kiến thức mà nhóm đã học tập, làm
hành trang quý báu cho nhóm trong công việc sau này.
Xin chân thành cảm ơn quý thầy cô!
MỤC LỤC
2
Mục lục
1 Giới thiệu
1.1 Trí tuệ nhân tạo và ứng dụng . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Giới thiệu đề tài và lý do chọn đề tài . . . . . . . . . . . . . . . . . . . . . .
1.3 Mục tiêu đề ra . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2 Các
2.1
2.2
2.3
2.4
2.5
2.6
khái niệm
Nhận dạng vật thể . . . . . . . . . .
Học sâu . . . . . . . . . . . . . . . .
Mạng thần kinh (Neural Network) .
Lớp tích chập (Convolutional Layer)
Lớp gộp (Pooling Layer): . . . . . .
Intersection Over Union (IOU) . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
5
6
.
.
.
.
.
.
6
. 6
. 8
. 9
. 11
. 16
. 17
3 YOLO (You Only Look Once)
3.1 Mạng YOLO là gì? . . . . . .
3.2 Kiến trúc mạng YOLO . . . .
3.3 Anchor box (hộp neo) . . . .
3.4 Non-max suppression . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
18
19
19
20
21
4 Các
4.1
4.2
4.3
4.4
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
22
22
22
22
22
5 Quá trình thực hiện
5.1 Bắt đầu với bài toán phân loại biển báo giao thông
5.1.1 Bộ dữ liệu . . . . . . . . . . . . . . . . . . .
5.1.2 Đọc và xử lý dữ liệu đầu vào . . . . . . . .
5.1.3 Mô hình học sâu sử dụng . . . . . . . . . .
5.1.4 Kết quả . . . . . . . . . . . . . . . . . . . .
5.2 Nghiên cứu về nhận diện vật thể sử dụng YOLOv5
5.2.1 Bộ dữ liệu . . . . . . . . . . . . . . . . . . .
5.2.2 Đọc và xử lý dữ liệu . . . . . . . . . . . . .
5.2.3 Tiến hành huấn luyện . . . . . . . . . . . .
5.2.4 Kết quả . . . . . . . . . . . . . . . . . . . .
5.3 Tạo ra API nhận diện vật thể trên đường phố . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
23
24
25
26
27
27
28
29
30
31
công nghệ sử dụng
TensorFlow . . . . . .
Keras . . . . . . . . .
YOLOv5 . . . . . . . .
Flask . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
6 Hướng dẫn cài đặt và sử dụng
34
6.1 Điều kiện yêu cầu: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
6.2 Các bước thực hiện: . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
7 Kết
7.1
7.2
7.3
luận
Ưu, nhược điểm . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Hướng phát triển trong tương lai . . . . . . . . . . . . . . . . . . . . . . . .
Lời kết . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
36
37
37
3
1
Giới thiệu
1.1
Trí tuệ nhân tạo và ứng dụng
Trong xã hội hiện đại, với sự phát triển nhanh chóng của ngành khoa học và công nghệ
thông tin, việc áp dụng những nền tảng công nghệ vào thực tiễn đã không còn là xa lạ.
Đặc biệt là các cuộc cách mạng trong lĩnh vực trí tuệ nhân tạo, học sâu, nhờ đó mà sự vận
dụng trí tuệ nhân tạo vào các sản phẩm phần mềm, tạo ra những ứng dụng thay thế con
người thực chất đã trở thành chuyện hết sức thực tế. Hơn hết, ngành công nghiệp phần
mềm cũng bắt kịp xu hướng đó. Ngày càng có nhiều ứng dụng được áp dụng trí tuệ nhân
tạo, đem đến vô số lợi ích cho người dùng. Lấy ví dụ, có những ứng dụng sử dụng trí tuệ
nhân tạo đã trở nên gắn liền với cuộc sống của nhiều người như: Google Assistant, Siri
của Apple, ELSA, Replika, Spotify... Thậm chí, việc sử dụng trí tuệ nhân tạo đã mang lại
sự tiện lợi, khiến các ứng dụng này trở nên nổi bật và có thể chiếm lĩnh thị trường. Ngày
nay, việc một ứng dụng có tích hợp trí tuệ nhân tạo sẽ trở thành lợi thế cạnh tranh tuyệt
vời cho các nhà phát triển. Từ đó, có thể thấy được, trí tuệ nhân tạo cùng với ứng dụng
là một sự kết hợp khôn khéo hết sức tuyệt vời của loài người. Vì thế, việc lập trình viên
được trang bị những kiến thức này là điều cần thiết để có thể chuẩn bị cho những bước
tiến xa hơn của xã hội trong tương lai.
Hình 1: Trong một chiếc điện thoại thông minh, có hàng chục ứng dụng tích hợp trí tuệ
nhân tạo đang được sử dụng hằng ngày bởi hàng triệu người dùng
Với sự cải thiện hằng ngày có thể thấy qua các công trình nghiên cứu liên tục được
công bố, trí tuệ nhân tạo đang hứa hẹn một tương lai tươi sáng cho loài người. Các lập
trình viên, những người luôn đón đầu xu hướng công nghệ, đã nghĩ ra rất nhiều cách để
sử dụng trí tuệ nhân tạo trong các ứng dụng, có thể kể đến như:
1. Máy học:
Máy học có thể nói là công nghệ trí tuệ nhân tạo phổ biến nhất trong công nghệ
thông tin. Máy học là khả năng máy tính và các sản phẩm phần mềm đưa ra các
quyết định có hiểu biết và đưa ra kết luận học hỏi từ kinh nghiệm trong quá khứ
của chúng.
Sở dĩ nó có thể đạt được hiệu quả như vậy là thông qua 2 kỹ thuật. Đầu tiên, mô
hình học tập có giám sát được huấn luyện để dự báo các phản ứng trong tương lai
đối với dữ liệu mới bằng cách phân tích các đầu vào và đầu ra. Kỹ thuật thứ hai
là học không giám sát, chỉ hoạt động trên các thông tin đầu vào và phát hiện các
mẫu liên tục (còn gọi là phân cụm). Cho dù chiến lược máy học được chọn là gì, nó
1.1
Trí tuệ nhân tạo và ứng dụng
4
sẽ mở ra những khung cảnh rộng lớn để triển khai chúng trong các ứng dụng được
sử dụng trong các lĩnh vực khác nhau - từ giáo dục và chăm sóc sức khỏe đến bán
hàng và sản xuất.
Một ví dụ về máy học được sử dụng trong ứng dụng là một giải pháp fintech tên
Oval. Ứng dụng này phân tích thói quen chi tiêu của tất cả người dùng để rút ra
chiến lược tiết kiệm cá nhân hóa cho từng khách hàng. Hơn nữa, là một sản phẩm
sử dụng máy học, ứng dụng này ngày càng được cải thiện với mỗi tập dữ liệu mới
mà người dùng cung cấp để đưa ra những khuyến nghị phù hợp và chính xác hơn.
2. Nhận diện giọng nói:
Con người ngày nay không chỉ nói chuyện thông qua điện thoại, mà còn thực sự
đang nói chuyện với chiếc điện thoại của mình. Việc trang bị trí cho thiết bị CUI
(Conversational User Interface - giao diện người dùng hội thoại) giúp chúng đủ thông
minh để tuân theo mệnh lệnh bằng giọng nói và hiểu giọng nói của con người bằng
cách chuyển đối nó thành định dạng mà máy tính có thể hiểu được. Phương pháp
ứng dụng trí tuệ nhân tạo này đã giúp các trợ lí ảo như Siri hoặc Cortana như đang
"sống"bên trong các thiết bị di động của chúng ta và giúp chúng ta các công việc
vặt hằng ngày như tìm chỗ đậu xe, phát bài nhạc yêu thích, đặt chỗ nhà hàng...
Bên cạnh việc cung cấp những trải nghiệm tiện lợi cho người dùng, ứng dụng nhận
diện giọng nói là thứ không thể thiếu cho những người có thị giác kém, cho phép
họ có cơ hội tương tác với chiếc điện thoại thông minh mà không cần nhìn vào màn
hình.
3. Tổng hợp giọng nói:
Công nghệ tổng hợp giọng nói cho phép trí tuệ nhân tạo trong thiết bị di động cũng
có thể nói chuyện với chúng ta. Tuy nhiên, trên thực tế, thiết bị di động không thực
sự "nói chuyện"với chúng ta mà chỉ phát âm lại các văn bản được nhập vào. Dịch
vụ này được hiển thị trong các tiện ích do Android hỗ trợ bởi tính năng gốc với đặc
điểm giọng nói có thể tùy chỉnh (tốc độ nói và cao độ giọng) và tùy chọn cài đặt
thêm ngôn ngữ, giới tính,...
Tuy nhiên, ứng dụng này có thể được cường đáng kể với các ứng dụng chuyên biệt
hiện hữu khá nhiều trên thị trường công nghệ thông tin hiện tại. Ví dụ: Narrator’s
Voice không chỉ đọc văn bản từ nhiều nguồn mà còn có nhiều lựa chọn giọng nói
để phát âm văn bản và tùy chọn thêm nhiều hiệu ứng âm thanh (tiếng vọng, hợp
xướng,...). Ngoài ra, trí tuệ nhân tạo có thể chạy văn bản chúng ta viết thông qua
bộ tổng hợp và lưu nó dưới dạng tệp MP3, trở thành công cụ mạnh mẽ để lồng tiếng
cho các bộ phim, thuyết trình,...
4. Chatbot:
Để tăng cường trải nghiệm cho khách hàng sử dụng ứng dụng di động, đòi hỏi các
doanh nghiệp phải tự động hóa một phần các dịch vụ tương tác với khách hàng.
Đây là lúc chatbot vào cuộc, giúp giảm bớt trọng trách cho các nhân viên đối với
việc phản hồi lại khách hàng yêu cầu những dịch vụ phổ biến như giúp điền vào biểu
mẫu, trả lời các câu hỏi điển hình, giúp đặt hàng,... Loại hình ứng dụng này của trí
tuệ nhân tạo hiện đang trở thành thứ cần thiết phải có đối với các doanh nghiệp
vừa và nhỏ, trong khi tất cả những "gã khổng lồ"trong giới kinh doanh (Apple,
Microsoft, Amazon, IBM,...) đều sử dụng công nghệ chatbot trên quy mô lớn trên
toàn hệ thống dịch vụ khách hàng của họ. Chatbot không chỉ mang lại trải nghiệm
tốt cho khách hàng khi không phải mệt mỏi chờ đợi phản hồi từ nhà cung cấp, mà
còn giúp các nhà cung cấp dịch vụ có thể cắt giảm bớt nhân lực và vốn dùng trong
việc phản hồi khách hàng.
5. Nhận diện hình ảnh:
Đây cũng chính là chủ đề được nghiên cứu trong đồ án này. Có thể nhận ra và phân
loại đối tượng trong một bức ảnh hoặc video là điều mà tưởng chừng như là không
1.2
Giới thiệu đề tài và lý do chọn đề tài
5
thể đối với máy móc cho đến khoảng thời gian gần đây. Ngày nay, các ứng dụng trí
tuệ nhân tạo thực hiện việc này với độ chính xác cao, thậm chí là cao hơn con người.
Khả năng này của trí tuệ nhân tạo được ứng dụng trong các lĩnh vực khác nhau từ xác định biển số xe vi phạm quy định giao thông đến giám sát chất lượng sản
phẩm trong quá trình sản xuất yêu cầu độ chính xác cao.
Một trong những ứng dụng thuộc loại này là Calorie Mama, giúp người dùng kiểm
soát lượng calo họ tiêu thụ bằng cách phân tích các bức ảnh về bữa ăn. Hơn nữa,
việc người dùng thêm các hình ảnh mới vào cơ sở dữ liệu giúp việc tính toán hàm
lượng dinh dưỡng của ứng dụng trở nên chính xác hơn theo thời gian.
6. Nhận dạng văn bản:
Đôi khi, chúng ta có thể cần trích xuất các chữ cái hoặc số (hoặc thậm chí một đoạn
văn bản lớn) từ một hình ảnh để nhập và sử dụng cho các mục đích khác nhau. Các
ứng dụng nhận dạng quang học (OCR) sẵn sàng trợ giúp chúng ta đối với tác vụ
này. Một trong những ứng dụng phổ biến nhất trong số đó là Google Keep, giúp ghi
lại văn bản từ ảnh và lưu trữ nó ở định dạng kỹ thuật số để chúng ta không phải
nhập bất cứ thứ gì theo cách thủ công và có thể xóa hoàn toàn hình ảnh, chỉ để lại
các ký tự. Không những thế, ứng dụng này của trí tuệ nhân tạo còn giúp chúng ta
trích xuất những thông tin quan trọng trong văn bản, tóm tắt một văn bản lớn,...
7. Sinh trắc học:
Các cơ chế được hỗ trợ bởi trí tuệ nhân tạo không chỉ có thể nhận dạng văn bản,
hình ảnh hoặc giọng nói mà còn cả các thông số sinh học trên cơ thể con người như
hình dạng khuôn mặt, kích thước cơ thể, dấu vân tay, cử chỉ...
Chủ yếu được sử dụng trong lĩnh vực tiếp thị, công nghệ này cũng có thể được tận
dụng trong các ngành công nghiệp khác. Ví dụ, các ngân hàng, cơ sở cải tạo và cơ
sở giáo dục có thể được hưởng lợi từ việc sử dụng công nghệ này cho các hệ thống
xác thực người dùng.
Ví dụ, Face2Gene là một ứng dụng chuyên biệt dành cho các bác sĩ và giúp họ chẩn
đoán các rối loạn di truyền. Nó được huấn luyện để phân tích khuôn mặt của bệnh
nhân, đưa ra phản hồi tức thì và cho phép các nhà cung cấp dịch vụ chăm sóc sức
khỏe chia sẻ kết quả trong các diễn đàn kín.
8. Phân tích cảm xúc và tình thái:
Đây là sự cải tiến của các công nghệ nhận dạng đã đề cập ở trên, nhưng tập trung
vào việc xác định cảm xúc của một người. Ngôn ngữ cơ thể, sự biến đổi trong giọng
nói và nét mặt là những dấu hiệu nhận biết đóng vai trò là chìa khóa để nhận biết
cảm xúc của một người. Việc phân tích chúng rất hữu ích để đánh giá thái độ của
người dùng đối với các sản phẩm hoặc quảng cáo cụ thể, đánh giá xếp hạng truyền
hình hoặc thậm chí xác định tội phạm ở sân bay, ngân hàng, sân vận động và các
địa điểm khác. Thị trường ứng dụng hiện đại có rất nhiều sản phẩm như vậy, trong
đó Face Reader của Noldus và Project Oxford của Microsoft là những sản phẩm nổi
bật đáng được nhắc đến.
1.2
Giới thiệu đề tài và lý do chọn đề tài
Với những kết quả nghiên cứu và ứng dụng của trí tuệ nhân tạo đối với việc phát triển
phần mềm, có thể thấy một tương lai đầy hứa hẹn khi mà hầu hết những ứng dụng trên
thế giới đều tích hợp trí tuệ nhân tạo. Là những lập trình viên, nhiệm vụ của chúng em là
phải đón đấu và nắm bắt xu hướng công nghệ, để có thể đem những công nghệ tiên tiến
đó phục vụ trải nghiệm người dùng. Chính vì vậy mà chúng em đã lựa chọn đề tài "Nhận
dạng vật thể". Đây vốn là một bài toán thuộc về công nghệ nhận diện hình ảnh đã đề cập
ở trên, và cũng là một trong số những bài toán được các nhà nghiên cứu khoa học đầu tư
chất xám để giải quyết nhất trong số những bài toán trong lĩnh vực trí tuệ nhân tạo. Đã
và đang có vô số những công trình nghiên cứu xoay quanh bài toán này, giúp cho độ hoàn
1.3
Mục tiêu đề ra
6
thiện của những mô hình giải quyết bài toán ngày càng tăng. Do giới hạn của môn học
nên chúng em chỉ nghiên cứu vận dụng những gì mà các nhà nghiên cứu trước đó đã đạt
được để đưa vào ứng dụng chứ không cải tiến hay thực hiện một công trình nghiên cứu
hoàn toàn mới.
1.3
Mục tiêu đề ra
Như đã đề cập ở trên, với giới hạn thời gian của môn học, cũng như do cơ sở vật chất
không thể đáp ứng được (không có máy tính cấu hình mạnh) và sự thiếu thốn tài nguyên
thông tin (không đủ dữ liệu để huấn luyện mô hình học sâu), nên nhóm chúng em chỉ có
thể dừng lại ở mức vận dụng thành quả nghiên cứu của những người đi trước, ứng dụng
nó vào việc phát triển sản phẩm phục vụ người dùng. Chính vì vậy, nhóm chúng em đã
đặt ra mục tiêu cho môn học này là nghiên cứu và phát triển một API ứng dụng thành
quả nghiên cứu trong bài toán "Nhận diện vật thể", cụ thể là API nhận dạng các vật thể
trên đường như xe cộ, đèn giao thông, biển báo,... Tuy nhiên, nếu chỉ có như vậy thì lại
khó mà đáp ứng được tiêu chí của môn học, thê nên nhóm quyết định thực hiện thêm việc
nghiên cứu và huấn luyện một phần mô hình học sâu để máy tính phát hiện vật thể bằng
phương pháp học chuyển giao (transfer learning) - sẽ được giải thích ở phần sau.
2
Các khái niệm
Phần này sẽ nói về những khái niệm mà chúng em đã tìm hiểu được trong quá trình
nghiên cứu, đồng thời cũng có đề cập đến sẽ được sử dụng để giải thích về mô hình học
sâu dùng để tạo nên API nhận diện vật thể trên đường phố.
2.1
Nhận dạng vật thể
Nhận dạng vật thể là một kỹ thuật trong thị giác máy tính để xác định các vật thể
trong hình ảnh hoặc video. Nhận dạng vật thể là đầu ra chính của các thuật toán học sâu
và học máy. Khi con người nhìn vào một bức ảnh hoặc xem một đoạn video, chúng ta có
thể dễ dàng phát hiện ra người, đồ vật, cảnh và các chi tiết trực quan khác. Mục đích của
nhận dạng vật thể là dạy máy tính làm được những gì đã được coi là bản năng của con
người: đạt được đến mức độ hiểu được nội dung của hình ảnh.
2.1
Nhận dạng vật thể
7
Hình 2: Ứng dụng nhận dạng đối tượng để xác định phân loại của đối tượng (ở đây là chó
và mèo).
Nhận dạng vật thể là một công nghệ quan trọng, được ứng dụng trong rất nhiều lĩnh
vực. Trong đó có thể kể đến nổi bật nhất chính là xe không người lái. Nhận dạng vật thể
cho phép những chiếc xe không người lái nhận ra biển báo dừng hoặc để phân biệt người
đi bộ với cột đèn. Ngoài ra, nó cũng được ứng dụng để xác định bệnh trong y học, kiểm
tra công nghiệp và thị giác robot (giúp robot nhận diện được các vật thể).
Hình 3: Nhận diện vật thể trên đường phố, được ứng dụng trong xe tự hành.
Bài toán nhận dạng vật thể sản sinh ra những bài toán con khác, cũng là những bài
toán nhận được sự quan tâm sâu sắc của giới nghiên cứu khoa học. Trong số đó có thể kể
đến như:
• Gán thẻ hình ảnh: Là quá trình thêm thẻ văn bản vào một hình ảnh dựa trên những
gì có trong hình ảnh đó. Mỗi hình ảnh có thể được gán nhiều hơn một thẻ.
– Đầu vào: Hình ảnh và các thẻ có thể được gán cho hình ảnh.
2.2
Học sâu
8
– Đầu ra: Các thẻ phù hợp để gán cho hình ảnh.
• Phân loại hình ảnh: Dự đoán loại hoặc lớp của đối tượng trong hình ảnh.
– Đầu vào: Một hình ảnh với một đối tượng duy nhất.
– Đầu ra: Nhãn phân loại đối tượng.
• Định vị đối tượng: Định vị sự hiện diện của các đối tượng trong một hình ảnh và
chỉ ra vị trí của chúng bằng một hộp giới hạn.
– Đầu vào: Một hình ảnh có một hoặc nhiều đối tượng.
– Đầu ra: Một hoặc nhiều hộp giới hạn (xác định bởi tọa độ một điểm tâm chính
giữa, chiều rộng và chiều cao).
• Phát hiện đối tượng: Định vị sự hiện diện của các đối tượng bằng hộp giới hạn và
các loại hoặc lớp của các đối tượng được định vị trong một hình ảnh.
– Đầu vào: Một hình ảnh có một hoặc nhiều đối tượng.
– Đầu ra: Một hoặc nhiều hộp giới hạn và nhãn phân loại cho từng hộp giới hạn.
• Phân đoạn đối tượng: Các đối tượng trong hình ảnh được nhận dạng bằng cách đánh
dấu các pixel cụ thể của đối tượng thay vì hộp giới hạn.
– Đầu vào: Một hình ảnh có một hoặc nhiều đối tượng.
– Đầu ra: Mảng các pixel được đánh dấu tương ứng với từng loại đối tượng.
Trong số các bài toán này, bài toán được biết đến nhiều nhất là phát hiện đối tượng. Nó
phổ biến đến mức mà khi một người nhắc đến nhận diện vật thể, ý của họ là đang chỉ đến
việc phát hiện đối tượng bằng các hộp giới hạn.
2.2
Học sâu
Việc sử dụng học sâu vào giải quyết bài toán nhận diện vật thể đang là một trong những
phương pháp phổ biến nhất mà các nhà nghiên cứu khoa học sử dụng. Các mô hình học
sâu như mạng thần kinh tích chập (Convolutional Neural Network - CNN) được sử dụng
để tự động tìm kiếm các đặc điểm của đối tượng hiện hữu trong hình ảnh nhằm xác định
đối tượng đó. Ví dụ: CNN có thể học cách xác định sự khác biệt giữa mèo và chso bằng
cách phân tích hàng nghìn hình ảnh và tìm hiều các đặc điểm khiến chó và mèo khác
nhau. Học sâu là một tập hợp con của học máy, khác biệt ở một số khía cạnh quan trọng
so với học máy truyền thống, cho phép máy tính giải quyết một loạt các vấn đề phức tạp
không giải quyết được.
Một ví dụ về các vấn đề phức tạp này là bài toán nhận dạng các chữ số viết tay. Để
giải quyết bài toán này, máy tính cần phải có khả năng đối phó với sự đa dạng trong cách
thức trình bày dữ liệu. Mỗi chữ số từ 0 đến 9 có thể được viết theo vô số cách: kích thước
và hình dạng chính xác của mỗi chữ số viết tay có thể rất khác nhau tùy thuộc vào người
viết và viết trong hoàn cảnh nào. Để đối phó với sự đa dạng này, việc sử dụng các phương
trình tính toán bình thường có độ phức tạp thấp là bất cả thi, mà đòi hỏi phải sử dụng
những phương trình tính toán với độ phức tạp cao. Những phương trình này được máy
tính học bằng phương pháp học sâu, mà cụ thể hơn là bằng mạng lưới thần kinh.
2.3
Mạng thần kinh (Neural Network)
9
Hình 4: Ví dụ về 100 cách viết tay chữ số 2 khác nhau được trích từ bộ dữ liệu MNIST
nổi tiếng.
2.3
Mạng thần kinh (Neural Network)
Mạng lưới thần kinh (tên tiếng Anh là neural network) là các mô hình tính toán có cấu
trúc được lấy cảm hứng từ cấu trúc mạng lưới thần kinh của con người. Mỗi neural trong
mạng thần kinh là một hàm toán học lấy dữ liệu thông qua các đầu vào, biến đổi dữ liệu
đó thành dạng dễ điều chỉnh hơn và sau đó đưa ra đầu ra để tiếp tục truyền vào đầu vào
ở lớp tiếp theo, hoặc tính toán để đưa ra đầu ra cuối cùng.
Tất cả các mạng thần kinh đều có một lớp đầu vào, trong đó dữ liệu ban đầu được đưa
vào, và một lớp đầu ra dự đoán cuối cùng. Nhưng không chỉ thế, thứ làm nên sức mạnh
của mạng thần kinh chính là các lớp ẩn nằm ở giữa các lớp đầu vào và đầu ra. Các lớp
này được kết nối với nhau bằng cách đầu ra của lớp đứng trước là đầu vào của lớp đứng
sau. Do đó, thuật ngữ học sâu có liên quan đến số lượng lớn các lớp ẩn nằm ở giữa đầu
vào và đầu ra của mạng thần kinh.
2.3
Mạng thần kinh (Neural Network)
10
Hình 5: Cấu trúc một mạng thần kinh đơn giản, với một lớp đầu vào, một lớp đầu ra và
hai lớp ẩn.
Sơ đồ đơn giản hóa ở trên hy vọng sẽ giúp cung cấp một ý tưởng về cấu trúc của một
mạng thần kinh đơn giản. Trong sơ đồ trên, mỗi nốt tròn đại diện cho một neural trong
mạng, với các neural được tổ chức thành các lớp thẳng đứng. Như có thể thấy, mỗi neural
được liên kết với mọi neural ở lớp trước nó, thể hiện rằng mỗi neural tạo ra một giá trị
đầu vào cho mỗi neural ở lớp tiếp theo. Các mũi tên liên kết giữa các neural cũng có ý
nghĩa quan trọng, chúng sẽ mang những giá trị khác nhau thể hiện tầm quan trọng khác
nhau của các liên kết giữa các neural. Những liêu kết có ý nghĩa lớn hơn sẽ khuếch đại giá
trị của neural khi nó được truyền qua các lớp. Đổi lại, sự khuếch đại giá trị này có thể
giúp kích hoạt tế bào neural mà giá trị đang được đưa vào. Có thể hiểu rằng, mỗi kết nối
giữa hai nốt trong mạng thần kinh chính là một hệ số của phương trình tính toán giá trị
của nốt tiếp theo.
Một neural được kích hoạt khi tổng các giá trị được đưa vào neural này vượt qua ngưỡng
nhất định. Ngưỡng này thường được xác định bởi các hàm kích hoạt ở mỗi lớp. Sự kích
hoạt này có ý nghĩa khác nhau qua từng lớp của mạng thần kinh. Ví dụ đối với mạng
thần kinh được xây dựng để giải quyết bài toán nhận dạng chữ số viết tay, lớp đầu vào là
những pixel hình ảnh chữ viết tay. Lớp ẩn đầu tiên có thể phát hiện những đường thẳng
và đường xiên theo các hướng khác nhau. Lớp ẩn thứ hai có thể phát hiện ra thêm những
đường gấp khúc, nét cong, nét chồng,... Neural được kích hoạt trong lớp đầu ra của mạng
thần kinh trong trường hợp này tương ứng với số lượng nhãn mà bài toán muốn phân loại,
ở đây là 10 nhãn tương ứng theo thứ tự từ 0 đến 9.
Từ đó, ta có thể đúc kết ra được giá trị của một nốt được tính bằng 2 công thức sau:
(l)
(l−1)
zi = Σlj=1 aj
(l)
(l)
(2.3.1)
(l)
(2.3.2)
ai = σ(zi )
Trong đó:
(l)
(l)
∗ wji + bi
• zi : là giá trị của nốt thứ i trong lớp thứ l.
2.4
Lớp tích chập (Convolutional Layer)
11
(l)
• aj : là giá trị của nốt thứ j trong lớp thứ l sau khi áp dụng hàm kích hoạt σ.
(l)
• wji : là giá trị hệ số của liên kết giữa nốt thứ i của lớp trước và nốt thứ j của lớp
hiện tại.
(l)
• bi : là hệ số tự do của phương trình tính toán nốt thứ i của lớp thứ l trong mạng
thần kinh, thường được liên kết với nốt có giá trị bằng 1 được thêm vào ở lớp đầu
vào và các lớp ẩn. Mục đích là để hạn chế việc kết quả huấn luyện cho ra phương
trình luôn đi qua gốc tọa độ.
• σ: là hàm kích hoạt.
Khi chuyển đổi về dạng vector và ma trận, ta có 2 công thức trên trở thành:
z (l) = (W (l) )T ∗ a(l) + b(2)
(2.3.3)
a(l) = σ(z (l) )
(2.3.4)
Mô hình học được các liên kết giữa các nơ-ron rất quan trọng trong việc đưa ra dự đoán
thành công trong quá trình huấn luyện. Ở mỗi bước trong quá trình huấn luyện, mạng sẽ
sử dụng một hàm toán học để xác định mức độ chính xác của dự đoán mới nhất của nó
so với dự kiến, được gọi là hàm mất mát. Hàm này tạo ra một loạt các giá trị lỗi, thường
được xác định bằng cách tính toán độ sai lệch giữa dự đoán của mô hình với giá trị đúng
của đầu ra và tìm cách tối thiểu hóa nó, do đó hệ thống có thể sử dụng để tính toán cách
mô hình nên cập nhật giá trị của các trọng số được gắn vào mỗi liên kết, với mục đích
cuối cùng là cải thiện độ chính xác của các dự đoán của mạng. Việc cải thiện độ chính
xác của dự đoán của mạng được thực hiện thông qua các bước tính toán đạo hàm để tìm
"điểm rơi"để giá trị hàm mất mát là nhỏ nhất. Mức độ mà các giá trị này sẽ được thay
đổi được tính bởi một hàm tối ưu hóa, chẳng hạn như giảm độ dốc và những thay đổi
đó được đẩy lùi trên toàn mạng vào cuối mỗi chu kỳ huấn luyện trong một bước gọi là
lan truyền ngược. Trải qua nhiều, rất nhiều chu kỳ huấn luyện và với sự trợ giúp của việc
điều chỉnh tham số thủ công, mạng sẽ tiếp tục tính toán để tạo dự đoán tốt hơn và tốt
hơn cho đến khi nó đạt gần với độ chính xác cao nhất.
Mỗi lớp ẩn còn được gọi với cái tên khác là lớp kết nối đủ (Fully Connected Layer)
và những mô hình mạng học sâu có cấu trúc chỉ gồm lớp đầu vào, lớp đầu ra và lớp ẩn
thường được gọi là mạng thần kinh kết nối đủ (Fully Connected Neural Network - FCN).
Nhược điểm của FCN xuất hiện khi ta sử dụng nó với những bài toán yêu cầu xử lý dữ
liệu đầu vào cực kỳ phức tạp, chẳng hạn như hình ảnh kích thước lớn, video, văn bản dài,
giọng nói,... Điều này dẫn đến sự xuất hiện của những cách tạo lớp khác, đi kèm đó là
những cấu trúc mạng thần kinh khác, chuyên biệt để giải quyết những bài toán đó.
2.4
Lớp tích chập (Convolutional Layer)
Đối với bài toán xử lý ảnh, giả sử chúng ta làm việc với tập dữ liệu huấn luyện gồm
các ảnh màu có kích thước 64*64 với 3 kênh màu R, G và B. Lúc này, để có thể truyền
dữ liệu vào mạng thần kinh thông qua lớp đầu vào với mỗi nốt đầu vào tương ứng với
một pixel trên ảnh thì lớp đầu vào cần phải có 64*64*3 = 12288 nốt. Giả sử số lượng nốt
trong lớp ẩn thứ nhất là 1000. Số lượng trọng số W giữa lớp đầu vào và lớp ẩn thứ 1 là
12288*1000 = 12288000, số lượng hệ số tự do là 1000. Khi đó, tổng số tham số của mô
hình là: 12289000. Đấy mới chỉ là số tham số giữa lớp đầu vào và lớp ẩn thứ 1, trong mô
hình còn nhiều lớp nữa, và nếu kích thước ảnh tăng, ví dụ 512*512 thì số lượng tham số
sẽ tăng cực kì nhanh. Vậy nên chúng ta cần một giải pháp tốt hơn để giải quyết những
bải toán liên quan đến dữ liệu đầu vào hình ảnh, và đây là lúc lớp tích chập vào cuộc.
2.4
Lớp tích chập (Convolutional Layer)
12
Lớp tích chập được xây dựng dựa trên phép toán tích chập. Phép toán tích chập giúp
giảm bớt chiều của một ma trận nhưng vẫn giữ được những điểm đặc trưng nhất định của
ma trận đó. Để lấy ví dụ, có thể nhìn vào hình sau:
Hình 6: Bắt đầu thực hiện phép toán tích chập.
Trong ví dụ trên, chúng ta sẽ thực hiện phép toán tích chập giữa một ma trận vuông
5*5 với một kernel kích thước 3*3. Một kernel là một ma trận vuông luôn có chiều là số
lẻ. Kernel sẽ đóng vai trò như một "cửa sổ trượt", trượt qua toàn bộ ma trận 5*5. Với
mỗi lần trượt, nó sẽ thực hiện phép toán nhân từng phần tử của ma trận kernel với khung
hình mà nó nhắm đến trong ma trận 5*5, và ghi lại kết quả vào một ma trận đầu ra. Như
trong hình trên có thể thấy phần tử đầu tiên của ma trận đầu ra được tính như sau:
1∗1+1∗0+1∗1+0∗0+1∗1+1∗0+0∗1+0∗0+1∗1=4
(2.4.1)
Và cứ tiếp tục như vậy, quá trình này được thực hiện cho đến khi kernel trượt qua hết ma
trận 5*5 đó.
Hình 7: Bước thứ 2 trong phép toán tích chập.
2.4
Lớp tích chập (Convolutional Layer)
13
Hình 8: Hoàn thành phép toán tích chập khi kernel đi hết ma trận 5*5.
Tổng quan cách thực hiện phép toán tích chập giữa ma trận XN
có kích thước m*n và
ma trận kernel W với kích thước k*k (k là số lẻ), với ký hiệu Y = X
W . Với mỗi phần tử
xij trong ma trận X lấy ra một ma trận có kích thước bằng kích thước của ma trận kernel
W có phần tử xij làm trung tâm (đây cũng chính là lý do vì sao kích thước của kernel
thường lẻ) gọi là ma trận A. Sau đó tính tổng các phần tử của phép tính element-wise
của ma trận A và ma trận W, rồi viết kết quả vào ma trận Y. Nếu để ý sẽ thấy kích
thước của ma trận kết quả Y nhỏ hơn ma trận X. Thật vậy, kích thước của ma trận Y là
(m − k + 1) ∗ (n − k + 1).
Thế thì sẽ xử lý thế nào với phần tử ở viền ngoài như x11 ? Bình thường khi thực hiện
phép toán tích chập sẽ bỏ qua các phần tử ở viền ngoài, vì không tìm được ma trận A
trong X. Cách giải quyết chính là thêm giá trị 0 ở viền ngoài ma trận X, để có thể thực
hiện nhân tích chập đối với viền của X.
2.4
Lớp tích chập (Convolutional Layer)
14
Hình 9: Ma trận X khi thêm viền 0 bên ngoài.
Lưu ý rằng khi nói padding = p, có nghĩa là thêm p vector 0 vào mỗi phía của ma
trận.
Như ở trên ta thực hiện tuần tự việc nhân tích chập với các phần tử trong ma trận X,
thu được ma trận Y cùng kích thước với ma trận X, lúc đó ta nói rằng phép nhân tích
chập đó có stride = 1.
Hình 10: Phép nhân tích chập được thực hiện khi stride=1, padding=1
Tuy nhiên, nếu stride = s (s>1) thì ta chỉ thực hiện phép nhân tích chập trên các
phần tử có dạng x1+i∗s,1+j∗s . Ví dụ như stride = 2 thì:
2.4
Lớp tích chập (Convolutional Layer)
15
Hình 11: Phép nhân tích chập được thực hiện khi stride=2, padding=1
Hiểu đơn giản là bắt đầu từ vị trí x11 , sau đó nhảy s bước theo chiều dọc và ngang
cho đến khi đi hết ma trận X. Kích thước của ma trận Y trong ví dụ trên khi bước nhảy
stride = 2 là 3*3, đã giảm đi đáng kể so với ma trận X. Vì vậy, stride thường được dùng để
giảm kích thước của ma trận sau phép tính nhân tích chập. Công thức tổng quát cho phép
tính nhân tích chập của ma trận X có kích thước m ∗ n với kernel có kích thước k ∗ k (với k
là số lẻ), stride = s, padding = p được ma trận Y có kích thước ( m−k+2p
+1)∗( n−k+2p
+1).
s
s
Lớp tích chập, theo như tên của nó, sẽ thực hiện phép toán tích chập trên ma trận pixel
của hình ảnh. Tuy nhiên, ảnh màu có đến 3 kênh R, G, B nên khi biểu diễn, ảnh sẽ ở
dưới dạng một tensor 3 chiều. Vì vậy, ta cũng sẽ định nghĩa kernel trong trường hợp này
là một tensor 3 chiều có kích thước k ∗ k ∗ 3.
Hình 12: Minh họa phép nhân tích chập trên ảnh màu với k=3
Ta định nghĩa kernel có cùng độ sâu (depth) với biểu diễn ảnh, rồi sau đó thực hiện
di chuyển khối kernel tương tự như khi thực hiện trên ma trận 2 chiều.
2.5
Lớp gộp (Pooling Layer):
16
Hình 13: Tensor X, W 3 chiều được viết dưới dạng 3 ma trận.
Với mỗi kernel khác nhau ta sẽ học được những đặc trưng khác nhau của ảnh, nên
trong mỗi lớp tích chập ta sẽ dùng nhiều kernel để học được nhiều thuộc tính của ảnh. Vì
mỗi kernel cho ra đầu ra là 1 ma trận nên k kernel sẽ cho ra k ma trận đầu ra. Ta kết hợp
k ma trận đầu ra này lại thành 1 tensor 3 chiều có độ sâu k.
Tổng quát, giả sử đầu vào của một lớp tích chập là tensor kích thước H ∗ W ∗ D, kernel
có kích thước F ∗ F ∗ D (kernel luôn có độ sâu bằng độ sâu của đầu vào và F là số lẻ),
stride là S và padding là P. Lớp tích chập áp dụng K kernel. Chúng ta có đầu ra của lớp
tích chập là tensor 3 chiều có kích thước ( H−FS+2P + 1) ∗ ( W −FS+2P + 1) ∗ K.
2.5
Lớp gộp (Pooling Layer):
Pooling layer 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. Gọi pooling size kích thước K ∗ K. Đầu vào của pooling layer
có kích thước H ∗ W ∗ D, ta tách ra làm D ma trận kích thước H ∗ W . Với mỗi ma trận,
trên vùng kích thước K ∗ K trên ma trận ta tìm giá trị lớn nhất hoặc giá trị trung bình
của dữ liệu rồi viết vào ma trận kết quả. Quy tắc về stride và padding áp dụng như phép
tính tích chập trên ảnh.
Hình 14: Max pooling layer với size=(3,3), stride=1, padding=0
Nhưng hầu hết khi dùng pooling layer thì sẽ dùng size=(2,2), stride=2, padding=0.
Khi đó chiều dài và chiều rộng của dữ liệu đầu ra giảm đi một nửa, trong khi độ sâu thì
được giữ nguyên. Có 2 loại pooling layer phổ biến là max pooling và average pooling.
2.6
Intersection Over Union (IOU)
17
Hình 15: Ví dụ về pooling layer
2.6
Intersection Over Union (IOU)
Intersection over union (IOU), là một thuật ngữ được sử dụng để mô tả mức độ trùng
lấp của 2 hộp giới hạn. Vùng chồng lấn càng lớn thì IOU càng lớn. IOU chủ yếu được sử
dụng trong các ứng dụng liên quan đến phát hiện đối tượng, khi chúng ta đào tạo một mô
hình học sâu cho ra kết quả là các hộp giới hạn bao xung quanh đối tượng. Ví dụ trong
hình dưới đây, chúng ta có 2 hộp gới hạn, một màu xanh lục và một màu xanh lam. Hộp
màu xanh lục là hộp chính xác và hộp màu xanh lam là dự đoán từ mô hình. Mục đích
của mô hình này là tiếp tục cải thiện dự đoán của nó, cho đến khi hộp màu xanh lanh và
hộp màu xanh lục trùng nhau hoàn toàn, tức là IOU giữa 2 hộp bằng 1.
Hình 16: Khi IOU bằng 1, tức 2 hộp xanh lục và xanh lam trùng nhau, thì mô hình dự
đoán chính xác nhất.
Vậy làm sao để tính IOU? Giả sử rằng chúng ta có 2 hộp: hộp thứ nhất được biểu diễn
bởi [x1, y1, x2, y2] và hộp thứ hai được biểu diễn bởi [x3, y3, x4, y4], chi tiết như trong
18
hình sau.
Hình 17: Ý nghĩa x1, y1, x2, y2, x3, y3, x4, y4 và vùng giao nhau giữa hai hộp
Hình 18: Biểu diễn hình học công thức tính toán IOU
Từ biểu diễn hình học của công thức tính toán IOU, ta có thể dễ dàng suy ra được
công thức tính IOU dựa trên tọa độ các hộp:
IOU =
Ainter
Ainter
=
Aunion
Abox1 + Abox2 − Ainter
Ainter = (min(x2, x4) − max(x1, x3)) ∗ (min(y2, y4) − max(y1, y3))
3
(2.6.1)
(2.6.2)
Abox1 = (x2 − x1) ∗ (y2 − y1)
(2.6.3)
Abox2 = (x4 − x3) ∗ (y4 − y3)
(2.6.4)
YOLO (You Only Look Once)
Đối với các khái niệm đã tìm hiểu, có lẽ người đọc đã được trang bị đủ kiến thức để
bước vào phần kiến thức trọng tâm của báo cáo đồ án này, đó là mạng học sâu YOLO.
3.1
3.1
Mạng YOLO là gì?
19
Mạng YOLO là gì?
YOLO là viết tắt của cụm từ "You Only Look Once", cũng chính là tiêu đề bài báo
nghiên cứu khoa học công bố YOLO. Nó có nghĩa là chúng ta chỉ cần nhìn một lần duy
nhất là có thể phát hiện ra vật thể. Nghe có vẻ rất nhanh phải không? Thật vậy, 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 phát hiện vật thể. Nó có thể đạt được tốc độ gần như
real-time mà độ chính xác không quá giảm so với các model thuộc top đầu.
YOLO là thuật toán phát hiện vật thể nên mục tiêu của mô hình không chỉ là dự đoán
nhãn cho vật thể như các bài toán phân loại mà nó còn xác định vị trí của vật thể. Do đó
YOLO có thể phát hiện được nhiều vật thể có nhãn khác nhau trong một bức ảnh thay
vì chỉ phân loại duy nhất một nhãn cho một bức ảnh.
3.2
Kiến trúc mạng YOLO
Kiến trúc YOLO gồm có mạng cơ sở là các các mạng tích chập làm nhiệm vụ trích
xuất đặc trưng. Phần phía sau là những lớp thêm vào để phát hiện vật thể trên feature
map của mạng cơ sở. Mạng cơ sở của YOLO sử dụng chủ yếu là các lớp tích chập và các
fully connected layer. Các kiến trúc YOLO cũng khá đa dạng và có thể tùy biến thành
các phiên bản cho nhiều dạng dữ liệu đầu vào khác nhau.
Hình 19: Sơ đồ kiến trúc mạng YOLO
Trong YOLOv3, các tác giả áp dụng một mạng trích xuất đặc trưng là darknet-53.
Mạng này gồm 53 lớp tích chập được được kết nối liên tục nhau, mỗi lớp được theo sau
bởi một batch normalization và một hàm kích hoạt Leaky Relu. Để giảm kích thước của
đầu ra sau mỗi lớp tích chập, các tác giả giảm chiều giữ liệu bằng các filter với kích thước
là 2. Việc này nhằm giảm thiểu số lượng tham số cho mô hình, từ đó tăng cường tốc độ
tính toán.
- Xem thêm -