1. Trang chủ
  2. » Luận Văn - Báo Cáo

Luận văn Thạc sĩ Khoa học máy tính: Xây dựng hệ thống phân tích hình ảnh trên ros cho robot hướng dẫn viên

57 10 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 57
Dung lượng 49,66 MB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

Với việc xây dựng bộ máy trạng thái hữu hạn và ứng dụng thuật toán phát hiện vẫy tay và nhận điện khuôn mặt đã giúp Fuso có thể phát hiện được người vẫy tay cần hỗ trợ, di chuyển đến để nhận diện đối tượng và chào người đó bằng tên nếu đã biết trước. Mời các bạn tham khảo!

Trang 1

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

Trần Ngọc Linh

XÂY DỰNG HỆ THỐNG PHÂN TÍCH HÌNH ẢNH TRÊN ROS CHO ROBOT HƯỚNG DẪN VIÊN

LUẬN VĂN THẠC SĨ: KHOA HỌC MÁY TÍNH

Hà Nội - 2020

Trang 2

ĐẠI HỌC QUỐC GIA HÀ NỘI

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ

TRẦN NGỌC LINH

XÂY DỰNG HỆ THỐNG PHÂN TÍCH HÌNH ẢNH TRÊN ROS CHO ROBOT HƯỚNG DẪN VIÊN

Ngành: Khoa học máy tính Chuyên ngành: Khoa học máy tính

Mã số: 8480101.01

LUẬN VĂN THẠC SĨ: KHOA HỌC MÁY TÍNH

NGƯỜI HƯỚNG DẪN KHOA HỌC: TS TRẦN QUỐC LONG

Trang 3

LỜI CAM ĐOAN

Tôi xin cam đoan các kết quả thực nghiệm và nghiên cứu mà được trình bày trong luận văn đều do tôi thực hiện dưới sự hướng dẫn của Tiến sĩ Trần Quốc Long

Tất cả những tham khảo và những nghiên cứu liên quan trong luận văn đều được trích dẫn nguồn gốc rõ ràng ở phần tài liệu tham khảo của cuối luận văn Tôi cam đoan rằng trong luận văn không có việc sao chép tài liệu và công trình nghiên cứu của người khác mà không ghi rõ nguồn gốc trích dẫn

TÁC GIẢ LUẬN VĂN

Trần Ngọc Linh

Trang 4

LỜI CẢM ƠN

Lời đầu tiên, tôi muốn gửi lời cảm ơn chân thành và sâu sắc đến giáo viên hướng dẫn của tôi, Tiến sĩ Trần Quốc Long đang công tác tại Khoa Công Nghệ Thông Tin của Trường Đại học Công nghệ - Đại học Quốc Gia Hà Nội Thầy đã tận tình hướng dẫn và cho tôi những lời khuyên bổ ích để giúp tôi có thể hoàn thành luận văn này

Bên cạnh đó, tôi cũng xin cám ơn Giáo sư, Tiến sĩ Chử Đức Trình và Phó giáo sư, Tiến sĩ Bùi Thanh Tùng đang công tác tại khoa Điện Tử Viễn Thông của Trường Đại học Công Nghệ - Đại học Quốc Gia Hà Nội, luôn luôn hỗ trợ đội nhóm phát triển Robot để có những trang thiết bị cần thiết phục vụ cho việc nghiên cứu phát triển thành công Fuso Tôi cũng chân thành cảm ơn hai em Nguyễn Đình Tuân, Phan Hoàng Anh và các em trong nhóm đề tài “QG.17.69-Nghiên cứu phát triển robot thuyết minh và hướng dẫn” đã luôn luôn giúp đỡ và hỗ trợ tôi trong quá trình nghiên cứu

Lời cuối cùng tôi xin cảm ơn gia đình và bạn bè đã ủng hộ, khích lệ tôi trên con đường học vấn

Hà Nội, Ngày 30 tháng 6 năm 2020

Trần Ngọc Linh

Trang 5

TÓM TẮT

Những năm gần đây, với sự phát triển mạnh mẽ và đột phá từ công nghệ, đặc biệt là trong lĩnh vực trí tuệ nhân tạo, nhiều công việc của con người mà máy tính đã làm rất tốt như nhận dạng mặt người hay có thể nói chuyện và tương tác giống như Sophia hoặc có thể

hỗ trợ các bác sĩ trong việc chẩn đoán, dự báo và điều trị bệnh Cùng với xu hướng phát triển của công nghệ nói chung hay robot trên toàn thế giới nói riêng, robot Fuso đã được nghiên cứu và phát triển để có thể thay thế con người làm hướng dẫn viên trong các phòng trưng bày, viện bảo tàng Robot được chia làm 4 phần khác nhau để phát triển độc lập: hệ thống xử lý chuyển động, hệ thống xử lý giao diện tương tác, hệ thống phân tích âm thanh

và hệ thống phân tích hình ảnh Luận văn này tập trung vào phát triển hệ thống phân tích hình ảnh cho robot, bao gồm 3 mô-đun nhỏ hơn Thứ nhất, xây dựng mô-đun bộ máy trạng thái hữu hạn trên ROS để dựng lên tất các trạng thái hoạt động của robot mà ở đó có thể giao tiếp, trao đổi dữ liệu với các phần khác trong robot cùng hoàn thành một chức năng cụ thể Thêm vào đó, xây dựng bộ máy trạng thái hữu hạn giúp cho việc mở rộng, nâng cấp các chức năng và gỡ lỗi trong quá trình phát triển sẽ dễ dàng hơn Mô-đun thứ hai là xây dựng phát hiện hành động vẫy tay dựa trên thông tin khung xương cánh tay được trích xuất

từ kết quả của thuật toán phát hiện khung xương người Openpose Với mô-đun này giúp robot có thể phát hiện người cần hỗ trợ qua hành động vẫy tay để tiếp cận và phục vụ Hiện tại, phát hiện vẫy tay đạt độ chính xác trung bình xấp xỉ 78% với khoảng cách đến robot từ

1 đến 5 mét Và cuối cùng là việc xây dựng mô-đun nhận diện mặt người dựa thuật toán Facenet với độ chính xác 97% giúp cho Fuso có khả năng ghi nhớ khuôn mặt người đã từng phục vụ để lần sau phục vụ tốt hơn Với việc xây dựng bộ máy trạng thái hữu hạn và ứng dụng thuật toán phát hiện vẫy tay và nhận điện khuôn mặt đã giúp Fuso có thể phát hiện được người vẫy tay cần hỗ trợ, di chuyển đến để nhận diện đối tượng và chào người đó bằng tên nếu đã biết trước Hiện tại, robot đã được chạy thử nghiệm ở phòng truyền thống của Đại Học Quốc Gia Hà Nội

Từ khóa: Fuso, robot hướng dẫn viên, phân tích hình ảnh

Trang 6

MỤC LỤC

Danh mục hình vẽ vi

Danh mục các kí hiệu, viết tắt viii

Chương 1 1

Giới thiệu vấn đề và bài toán cần giải quyết 1

1.1 Lịch sử hình thành và phát triển của robot 1

1.2 Giới thiệu bài toán 2

1.3 Những đóng góp chính 6

1.4 Cấu trúc luận văn 7

Chương 2 8

Cơ sở lý thuyết 8

2.1 Hệ điều hành Robot – Robot Operating System 8

2.2 Vectơ hỗ trợ hồi qui (Support Vector Machine - SVM) 12

2.3 Thuật toán xác định khung xương người - OpenPose 15

2.4 Thuật toán hỗ trợ nhận diện mặt người FaceNet 17

Chương 3 22

Thiết kế và cài đặt hệ thống 22

3.1 Kiến trúc tổng quan hệ thống phân tích hình ảnh 22

3.2 Mô-đun phát hiện vẫy tay 29

3.3 Mô-đun nhận dạng mặt người 32

3.4 Xây dựng kịch bản 34

Chương 4 40

Kết quả thử nghiệm, ứng dụng và tổng kết 40

4.1 Kết quả phát hiện vẫy tay 40

4.2 Kết quả nhận diện mặt người 41

Trang 7

4.3 Ứng dụng thực tiễn 43 4.4 Tổng kết 45

Tài liệu tham khảo 46

Trang 8

Danh mục hình vẽ

Hình 1-1-Camera Intel Realsense D435 [15] 6

Hình 2-1-Trao đổi thông tin giữa các node qua Topic 11

Hình 2-2-Trao đổi thông tin giữa các node qua Service 12

Hình 2-3-Các đường phân chia hai lớp 13

Hình 2-4-Điểm nhiễu nằm gần mặt phân tách (trái) và điểm nhiễu nằm bên mặt phân tách lớp còn lại (phải) 14

Hình 2-5-So sánh các thuật toán với OpenPose 16

Hình 2-6-Sơ đồ tổng quát thuật toán OpenPose 16

Hình 2-7-Cấu trúc mô hình của FaceNet [14] 17

Hình 2-8-Mạng học sâu Inception ResNet V1 [19] 20

Hình 3-1-Thành phần chính của hệ thống 23

Hình 3-2-Sơ đồ chuyển trạng thái của máy trạng thái hữu hạn 24

Hình 3-3-Thiết kế tệp cài cho việc tự động xây dựng bộ máy trạng thái hữu hạn 25

Hình 3-4-Thiết kế các lớp cho việc tự động xây dựng bộ máy trạng thái hữu hạn 26

Hình 3-5-Mô hình kế thừa của các bài toán phân tích hình ảnh 27

Hình 3-6-Các tác vụ đăng kí nhận dữ liệu từ Realsense D435 28

Hình 3-7-Sơ đồ tổng quan thuật toán vẫy tay 29

Hình 3-8-Góc tạo thành giữa cánh tay và mặt phẳng ngang khi vẫy 30

Hình 3-9-Định danh người qua trục hoành Ox 31

Hình 3-10-Sơ đồ tổng quát nhận dạng khuôn mặt người 32

Hình 3-11-Tìm mặt người vẫy tay 33

Hình 3-12-Sơ đồ chuyển trạng thái qua các kịch bản 34

Trang 9

Hình 3-13-Sơ đồ chuyển trạng thái qua kịch bản phát hiện người vẫy tay 35

Hình 3-14-Sơ đồ chuyển trạng thái qua kịch bản nhận diện khuôn mặt người 37

Hình 4-1-Kết quả thử nghiệm phát hiện vẫy tay 40

Hình 4-2-Kết quả huấn luyện nhận dạng mặt người K-Fold 42

Hình 4-3-Ảnh nhận diện mặt người trong thực tế 42

Hình 4-4-Một số hình ảnh của robot Fuso tại triển lãm và trong phòng trưng bày của Đại học Quốc Gia Hà Nội 44

Trang 10

Danh mục các kí hiệu, viết tắt

ROS Robot Operating System – Hệ điều hành Robot

MTCNN Multi-task Cascaded Convolutional Networks

SVM Support Vector Machine

SLAM Simultaneous Localization and Mapping

LFW Labeled Faces in the Wild

Trang 11

Chương 1

Giới thiệu vấn đề và bài toán cần giải quyết

1.1 Lịch sử hình thành và phát triển của robot

Những năm gần đây, với sự phát triển mạnh mẽ của công nghệ và thời đại 4.0 được

mở ra, con người ngày càng quan tâm đặc biệt đến việc tự động hóa, làm máy móc trở nên thông minh lên giống như con người để nâng cao hiệu quả sản xuất, phục vụ những nhu cầu cơ bản cho con người Và robot đã dần được đưa vào trong các xưởng, trong đời sống thường ngày Vậy từ “robot” xuất hiện từ bao giờ? Lịch sử hình thành, phát triển và những thành tựu nổi bật như thế nào? Phần này sẽ giới thiệu một cách tổng quan nhất về robot Từ

“robot” được sử dụng đầu tiên vào năm 1921 trong vở kịch “Rossum’s Universal Robots” của Karel Čapek (1890-1938) – một nhà văn lừng danh người cộng hòa Séc đầu thế kỉ XX

Từ này xuất phát từ từ “robota” mà theo tiếng địa phương nghĩa là “việc nặng nhọc” hay

“lao động cưỡng bức” Ngoài ra, một từ khác cũng được sử dụng nhiều là “robotics” Từ này lần đầu tiên được dùng bởi nhà văn Isaac Asimov (1920-1992) trong truyện ngắn

“Runaround” Trong chuyện nhà văn đã định nghĩa ba luật liên quan đến hành vi của robot

mà tương tác với con người mà về sau đã được đặt tên là “Luật của Robotics” (Laws of Robotics) Dù là từ robot hay robotics thì mục đích chung của hai từ này đều chỉ đến những công cụ, máy móc có thể thực những công việc một cách tự động để phục vụ cho con người Robot ngày càng đóng vai trò quan trọng công nghiệp giúp thúc đẩy sản xuất Với sự phát triển của robot, người ta đã chia robot thành 4 thế hệ: Robot thế hệ 1 (1950-1967), robot thế hệ 2 (1968-1977), robot thế hệ 3 (1978-1999), robot thế hệ 4 (2000-nay) [1] Robot thế hệ 1 có đặc điểm là được điều khiển bởi những thuật toán đơn giản lập trình sẵn

Trang 12

và không có khả năng lấy thông tin từ môi trường Nổi bật trong robot thế hệ đầu là cánh tay robot có tên UNIMATE Đây là robot công nghiệp đầu tiên được công nhận do 2 nhà sáng chế George Devol và Joe Engelberger tạo ra và được lắp ráp sử dụng trong dây chuyền lắp ráp của hãng sản xuất ô tô General Motors năm 1969 UNIMATE đã giúp hãng cải thiện khả năng sản xuất Robot thế hệ thứ 2 với những cảm biến xung quanh đã có thể lấy được thông tin từ môi trường và đáp ứng lại những thông tin đó Shakey [2] là robot di động có cảm biến đầu tiên được nhà nghiên cứu trong viện nghiên cứu của Stanford phát triển Robot thế hệ thứ 3 đã có những bộ điều khiển chuyên dụng (những chiếc máy tính) và có những ngôn ngữ mới cho lập trình điều khiển robot Đây là thời đại của robot với sự đầu tư lớn từ các công ty để có thể tự động hóa các việc cơ bản trong dây chuyền lắp ráp Các robot phổ biến tự động hóa trong các hoạt động như sơn, di chuyển, lắp ráp Ngoài ra, robot được mở rộng sang các lĩnh vực khác như robot giải trí của Sony, AIBO (1999) [3] Robot thế hệ thứ 4 có khả năng tính toán vượt trội, không chỉ làm việc với dữ liệu mà nó còn có khả năng suy luận logic và học hỏi hơn nữa trí tuệ nhân tạo được đưa vào để có thể giải quyết những bài toán khó trước đây mà lập trình truyền thống khó có thể giải quyết được với độ chính xác cao Nổi bật trong thế hệ này có robot ASIMO của tập đoàn Honda hay robot Roomba là robot hút bụi đầu tiên được giới thiệu hay là xe tự hành của Tesla Trải qua các thế hệ robot dần được nâng cấp, sự tự động hóa được nâng cao và sự thông minh dần được đưa vào để robot có thể phục vụ cho con người trong đời sống thường ngày và trong công nghiệp có thể nâng cao năng lực sản xuất với những sản phẩm có độ tin cậy cao Với tiềm năng phát triển trong tương lai của robot bài toán xây dựng robot thông minh đã được nghiên cứu và xây dựng

1.2 Giới thiệu bài toán

Với sự phát triển của tuệ nhân tạo như cuộc cách mạng lần thứ tư (1 – động cơ hơi nước, 2 – năng lượng điện, 3 – công nghệ thông tin) đã dần biến những điều tưởng rằng chỉ

có trong khoa học viễn tưởng thành hiện thực Năm 2011, Watson [4] – Một chương trình phần mềm trí tuệ nhân tạo do IBM phát triển, đã chiến thắng cuộc thi trong chương trình hỏi đáp trên truyền hình có tên Jeopardy Còn trong sản phẩm thương mại có trợ lý ảo Siri của Apple có thể hiểu các câu hỏi của người dùng và phản hồi chính xác điều người dùng muốn tương tác trên điện thoại di động Công nghệ xe tự hành của những công ty lớn như Apple, Tesla, Google, Toyota cũng có những bước tiến vượt bậc nhờ vào những cảm biến xung quanh ô tô và được huấn luyện với mạng nơ-ron giúp ô tô có khả năng tự học hỏi

Trang 13

được những kĩ năng lái xe Ngoài ra, năm 2016, AlphaGo do Google DeepMind phát triển

đã làm chấn động thế giới khi đánh bại kỳ thủ cờ vây chuyên nghiệp người Hàn Quốc, Lee Sedol Khác với cờ vua là với sức mạnh máy tính hiện nay có thể tính toán được hết số nước trong cờ vua đi để tìm ra được nước đi tối ưu nhất và dành chiến thắng thì trong cờ vây số nước đi lớn hơn rất nhiều Giới hạn dưới về số lượng vị trí nước đi hợp lệ trên bàn

cờ trong cờ vây được ước tính là 2 ∗ 10%&', đó là một con số rất lớn để mà máy tính có thể tính toán được Chính vì vậy AlphaGo đã được huấn luyện qua mạng nơ-ron học sâu có giám sát với chuyên gia và học tăng cường Theo như bài báo [5] thì AlphaGo đạt tỉ lệ chiến thắng lên đến 99,8% Đặc biệt hơn hết vào tháng 10 năm 2017, tại Ả Rập Xê Út đã cấp quyền công dân cho robot đầu tiên trên thế giới có tên là Sophia [6] Sophia có lớp da được làm bằng silicon trông giống như da người Robot có khả năng biểu hiện tổng 62 sắc thái trên khuôn mặt (như giận, vui, buồn, v.v), hay có khả năng tương tác nói chuyện gần như con người Những minh chứng trên cho thấy rằng việc đưa trí tuệ nhân tạo vào robot là một bước tiến lớn trong quá trình phát triển robot làm cho robot thông minh hơn, gần gũi với con người hơn để có thể giúp ích cho con người trong đời sống thường ngày như để phục

vụ, tư vấn, chăm sóc sức khỏe, trong giáo dục và trong các ứng dụng dịch vụ chăm sóc khách hàng

Đối với nước ta việc sản xuất và ứng dụng robot thông minh vào trong các lĩnh vực vẫn còn hạn chế Chủ yếu là trong công nghiệp với những cánh tay robot trong dây truyền sản xuất được chuyển giao công nghệ từ nước ngoài Từ những tiềm năng của sự phát triển robot trên thế giới và những hạn chế trong nước, robot Fuso đã được nghiên cứu, xây dựng

và phát triển để có thể đóng góp một phần nhỏ trong sự phát triển robot của đất nước và đó cũng là cơ sở nền tảng quan trọng để phát triển các thế hệ robot thông minh sau này Với mục tiêu xây dựng robot Fuso có hình dáng giống con người có khả năng làm hướng dẫn viên trong viện bảo tàng, khu trưng bày hoặc trong các bệnh viện hay siêu thị, trung tâm thương mại thì robot Fuso cần nhận diện được cử chỉ vẫy tay của con người từ xa và phản ứng lại những cử chỉ đó, nhận diện được mặt người đã từng gặp và có khả năng di chuyển linh hoạt đến các địa điểm được yêu cầu của người dùng bằng giọng nói Về tổng quan robot được chia thành các phần nhỏ hơn phát triển độc lập: Phần về phân tích hình ảnh để nhận diện các cử chỉ hành động, khuôn mặt của người dùng; phần về phân tích âm thanh sẽ phân tích để hiểu các câu, mệnh lệnh; phần về xử lý chuyển động cơ học sẽ nhận các mệnh lệnh để có thể di chuyển mượt và đúng đến địa điểm yêu cầu; phần xây dựng giao diện người dùng giúp người dùng có thể tương tác qua màn hình cảm ứng Và tất các các phần

sẽ giao tiếp với nhau thông qua kênh truyền thông tin topic và service của hệ điều hành

Trang 14

ROS – Robot Operating System [7] Trong luận văn này, tôi xin trình bày bày hệ thống phân tích hình ảnh cho robot Phân tích hình ảnh được chia ra làm các 3 mô-đun nhỏ: mô-đun xây dựng bộ máy trạng thái hữu hạn để dựng lên tất các trạng thái hoạt động của robot

mà ở đó có thể giao tiếp, trao đổi dữ liệu với các phần khác trong robot cùng hoàn thành một chức năng cụ thể Việc xây dựng bộ máy trạng thái hữu hạn cũng giúp cho việc mở rộng, nâng cấp của chức năng và gỡ lỗi sẽ dễ dàng hơn; mô-đun nhận diện cử chỉ vẫy tay

sử dụng thuật toán OpenPose tìm khung xương người từ đó tính toán để phát hiện ra dấu hiệu cử chỉ vẫy tay; mô-đun nhận dạng khuôn mặt dựa trên thuật toán Facenet để tìm vectơ embedding, vectơ này tiếp tục được đưa vào mô hình SVM [8] đã được huấn luyện trước

để tìm ra tên người vẫy

Trong quá trình xây dựng phát triển hệ thống thống phân tích hình ảnh cho robot có một số vấn đề gặp phải:

• Hệ thống phân tích hình ảnh cho robot gồm có các thuật toán khác nhau để thực hiện các chức năng khác nhau trong việc phân tích hình ảnh trích xuất và biến đổi thông tin cần thiết để cung cấp cho các bộ phận khác cho robot (như bộ phận điều khiển di chuyển, bộ phận phân tích âm thanh) Các chức năng trong hệ thống phân tích hình ảnh không chỉ được thực hiện tuần tự mà còn có thể thực hiện song song chính vì vậy cần xây dựng hệ thống tổng có thể quản lý, điều khiển các thuật toán khi nào được thực thi, khi nào dừng lại để đồng nhất trong hành động với các bộ phận khác của robot Mặt khác, việc tìm ra lỗi dễ dàng và nhanh chóng cũng cần thiết trong quá trình phát triển mà bị xảy ra lỗi Vậy nên bộ máy trạng thái hữu hạn cần được đưa vào trong việc xây dựng hệ thống tổng quát cho phân tích hình ảnh

• Trong quá trình tương tác với con người, robot cần phản ứng nhanh chóng nhất để đáp ứng mệnh lệnh của con người Vì vậy các thuật toán vừa cần độ chính xác cao

và phản hồi nhanh Thêm vào đó là những giới hạn phần cứng trên robot đã được thiết lập sẵn nên trong quá trình phát triển một chức năng thì cần thử nghiệm nhiều thuật toán khác nhau để so sánh và tìm thuật toán phù hợp nhất, đồng nhất với môi trường với các thuật toán đã cài đặt trước đó và thiết bị phần cứng xây dựng nên robot

1.2.1 Bo mạch Jetson TX2

Bo mạch Jetson TX2 [16] được Nvidia cho ra mắt vào tháng 3 năm 2017 Đây là một

bo mạch có tính toán mạnh mẽ có thể thực hiện được hơn một nghìn tỷ phép tính trong một

Trang 15

giây (1,3 TFLOPS) và sức mạnh tính toán gấp đôi so với Jetson Nano (0,5 TFLOPS) Thiết

bị sinh ra nhằm mục đích chính cho việc phát triển các ứng dụng trí tuệ nhân tạo trên đó nên phù hợp với định hướng xây dựng robot thông minh như trên đã đề ra Ngoài ra, nhà sản xuất Nvidia hỗ trợ bộ công cụ phát triển JetPack SDK mà tích hợp các công cụ và thư viện cho việc xây dựng nhanh chóng các ứng dụng trí tuệ nhân tạo như:

TensorRT: Có tác dụng tối ưu hiệu năng chạy cho các mạng học sâu như phân loại

ảnh, phân vùng ảnh và nhận diện đối tượng

cuDNN: Viết tắt của từ CUDA Deep Neural Network là một thư viện cung cấp các

thiết lập được tinh chỉnh cho các thủ tục chuẩn như forward/backward convolution, pooling, normalization và activation layer từ đó giúp hiệu năng của các ứng dụng trí tuệ nhân tạo tốt hơn

CUDA: Là công cụ phát triển cung cấp môi trường phát triển thích hợp cho các nhà

phát triển C/C++ xây dựng các ứng dụng được tăng tốc bởi GPU Nó bao gồm các thư viện toán học, công cụ cho gỡ lỗi, tối ưu hiệu năng cho ứng dụng

ComputerVision(CV): gồm có các gói, thư viện như VisionWorks, OpenCV Đây là

những gói, thư viện cho thị giác máy, xử lý ảnh và học máy

Bo mạch Jetson TX2 nhỏ gọn mạnh mẽ và tích hợp nhiều các công cụ, thư viện và các gói giúp cho việc phát triển các ứng dụng dễ dàng hơn Bên cạnh bo mạch nhỏ gọn, mạnh mẽ thì camera có chất lượng hình ảnh tốt rất cần thiết cho bài toán phân tích hình ảnh cho robot

3 camera với 2 camera màu ở 2 bên và 1 camera hồng ngoại 2 camera màu giúp RealSense sinh ra những bức ảnh độ sâu còn camera hồng ngoại giúp tinh chỉnh để tăng chất lượng những bức ảnh độ sâu Thành phần chính của camera được mô tả như Hình 1-1

Trang 16

Hình 1-1-Camera Intel Realsense D435 [15]

Ngoài ra, Intel có hỗ trợ bộ công cụ RealSense SDK 2.0 để có thể dễ dàng làm việc với RealSense, giúp tinh chỉnh để cho ra được hình ảnh có chất lượng tốt ứng với từng môi trường, lấy các thông số và hình ảnh của camera

1.3 Những đóng góp chính

Như ở phần giới thiệu bài toán đã đề cập để xây dựng và phát triển được Fuso thì các phần được phát triển độc lập nhau và luận văn tập trung chủ yếu xây dựng nên hệ thống phân tích hình ảnh trên ROS cho robot hướng dẫn viên Trong đó có 3 mô-đun chính và đó cũng là những đóng góp chính trong luận văn này Thứ nhất, xây dựng mô-đun bộ máy trạng thái hữu hạn mà định nghĩa các trạng thái hoạt động của robot Với việc xây dựng nên mô-đun này sẽ giúp hệ thống dễ dàng mở rộng sau này và dễ dàng kiểm soát lỗi khi hệ thống hoạt động không như mong muốn Thứ hai, xây dựng mô-đun phát hiện người vẫy tay dựa trên phương pháp tìm khung xương người OpenPose Thứ ba, xây dựng mô-đun nhận dạng khuôn mặt sử dụng mô hình SVM đã được huấn luyện với đầu vào là các vectơ embedding được trả về từ thuật toán FaceNet

Trang 17

1.4 Cấu trúc luận văn

Phần còn lại của chương đầu là cấu trúc của luận văn

Chương 1: Giới thiệu vấn đề và bài toán cần giải quyết

Giới thiệu về tổng quan về robot, lịch sử hình thành và phát triển qua các thế hệ robot

Từ đó, giới thiệu bài toán xây dựng phát triển robot, cụ thể hơn là bài toán phân tích hình ảnh đầu vào cho robot Bên cạnh đó, các thiết bị phần cứng và thư viện hỗ trợ để giải quyết bài toán cũng được giới thiệu

Chương 2: Cơ sở lý thuyết

Trong chương này tập trung vào giải thích những kiến thức nền tảng Đầu tiên giới thiệu về ROS – Robot Operating System gồm có các thành phần cơ bản cấu tạo nên ROS

và những phương thức trao đổi dữ liệu giữa các Node trong ROS hoạt động ra sao Sau đó

là nêu ra ý tưởng chính và phương pháp của các thuật toán SVM – Support Vector Machine, OpenPose và FaceNet

Chương 3: Cài đặt thiết kế hệ thống

Trình bày về thiết kế tổng quan hệ thống với các mô-đun để xây dựng nên bộ phân tích hình ảnh cho robot Trình bày về thuật toán, cài đặt cho từng mô-đun Với OpenPose

để nhận diện khung xương người và những cải tiến để nhận diện hành động vẫy tay của con người Với mô-đun nhận dạng mặt người, thuật toán FaceNet của Google được áp dụng để nhận diện mặt người vẫy tay Và cuối cùng là những kịch bản xây dựng để chạy robot

Chương 4: Kết quả thử nghiệm, ứng dụng và tổng kết

Trình bày những kết quả đạt được trong quá trình phát triển và kết quả triển khai trong thực tiễn Tóm tắt lại những đóng góp chính trong luận văn, những hạn chế chưa giải quyết được và định hướng phát triển trong tương lai

Trang 18

Chương 2

Cơ sở lý thuyết

2.1 Hệ điều hành Robot – Robot Operating System

ROS – Robot Operating System [7] là một hệ điều hành mã nguồn mở cung cấp một nền tảng cho việc nghiên cứu và phát triển robot được dễ dàng được tạo bởi phòng nghiên cứu Willow Garage và đang được phát triển bởi quỹ mã nguồn mở Robotics Mặc dù gọi là

hệ điều hành tuy nhiên ROS không quản lý các tài nguyên, tiến trình và lập lịch tiến trình

mà ROS cung cấp một lớp gửi nhận dữ liệu có cấu trúc giữa các ứng dụng với nhau, công

cụ giả lập trực quan và kết nối với cộng đồng nghiên cứu robot trên toàn thế giới Với những đóng góp lớn từ cộng đồng đặc biệt là từ các viện nghiên cứu và trường đại học hàng đầu trên thế giới thì việc xây dựng ứng dụng trên robot trên nền ROS sẽ giảm đi một lượng đáng

kể công việc lập trình cơ bản và tập trung được vào công việc nghiên cứu chuyên sâu Thêm nữa, ROS hỗ trợ nhiều ngôn ngữ như C\C++, Python nên việc bắt đầu tiếp cận và lập trình với ROS trở nên đơn giản hơn

2.1.1 Cấu trúc thư mục và các thành phần trong ROS

2.1.1.1 Cấu trúc thư mục trong ROS

Trong ROS, đơn vị chính cho việc tổ chức phần mềm là các package [17] Mỗi một package có thể gồm các chương trình gọi là nodes, thư viện phụ thuộc ROS, các tập dữ liệu,

Trang 19

các tệp cấu hình và các dữ liệu khác cần thiết trong hệ thống Mục đích chính của các package là cung cấp các chức năng để các phần mềm khác có thể tái sử dụng Trong thư mục package thông thường gồm có các thành phần chính: tệp package manifest, các message type, các service type Tệp package manifest cung cấp thông tin ngắn gọn về package như tên package, tác giả, phiên bản, mô tả và các gói phụ thuộc Các message type định nghĩa cấu trúc dữ liệu gửi nhận tin qua topic trong ROS Các service type định nghĩa cấu trúc dữ liệu gửi nhận cho service trong ROS

2.1.1.2 Các thành phần trong ROS

Master: là thành phần quan trọng quản lý kết nối truyền tin giữa các nodes Mọi node

đều phải đăng kí với master khi khai báo, giúp cho master cung cấp thông tin cho các node còn lại có thể tra cứu, nó giống như một máy chủ DNS Nếu không có master thì các node không thể tìm thấy nhau và việc trao đổi thông tin giữa các node đều không thể thực hiện được

Nodes: là đơn vị tính toán, xử lý dữ liệu và thực hiện một chức năng cụ thể nào đó

Thông thường một hệ điều khiển robot thường sẽ bao gồm nhiều nodes mà mỗi nodes lại chuyên biệt một công việc Ví dụ như một node điều khiển động cơ bánh xe, một node định

vị, một node lập kế hoạch định hướng đường đi Mỗi node ROS được xây dựng nhờ sử dụng thư viện ROS client (roscpp, rospy) Và các node trao đổi dữ liệu với nhau gửi nhận

dữ liệu qua topic hay services Mỗi node đều có một tên duy nhất trong toàn bộ hệ thống

và tên này chính là định danh để các node khác biết mà có thể giao tiếp với nhau được ROS cũng cung cấp công cụ để làm việc dễ dàng với ros qua dòng lệnh rosnode Ví dụ như

“rosnode list” để liệt kê các node đang hoạt động trong hệ thống, hay “rosnode info node”

để in những thông tin về node

Messages: Để cho các node có thể trao đổi được dữ liệu cho nhau thì dữ liệu cần có

định dạng thống nhất và messages chính là thành phần quy định định dạng cấu trúc của dữ liệu mà các node dùng để trao đổi Trong một message bao gồm một hay nhiều cặp kiểu dữ liệu và tên dữ liệu đi cùng với nhau Kiểu dữ liệu có thể là kiểu nguyên thủy mà trong ROS

đã định nghĩa sẵn (như bool, int8, string) hay kiểu người dùng đã định nghĩa trước giống như kiểu struct trong C/C++ Message được chia ra làm hai dạng chính Thứ nhất là message trao đổi qua topic sẽ được định nghĩa trong một tệp riêng có đuôi mở rộng là msg Thứ hai

là message được sử dụng qua service cũng được định nghĩa trong một tệp riêng có đuôi mở rộng là srv Điều khác biệt trong message có đuôi srv là định nghĩa cả cấu dữ liệu trả về

Trang 20

của service Hình 2-1 và Hình 2-2 có hình ảnh mô tả message với hình hộp chữ nhật màu cam không viền

Topics: Các message có đuôi mở rộng là msg được trao đổi giữa các node thông qua

topic Mỗi topic có một tên để định danh và cấu trúc định dạng message tương ứng Bất kì node nào trong mạng muốn nhận thông tin thì có thể đăng kí nhận thông tin từ topic Hay node nào cần đẩy thông tin lên topic thì cũng có thể đăng kí đẩy thông tin cho topic Vậy trong một mạng, một node có thể đăng kí nhận thông tin từ nhiều topic và cũng có thể đăng

kí đẩy thông tin cho nhiều topic Điều này giúp cho ROS có thể tách biệt nguồn tạo ra thông tin với bộ phận sử dụng thông tin đó Topic được xem như là một kênh truyền thông tin định kiểu mà mỗi kênh truyền có được định danh bởi một tên riêng Node nào cũng có thể kết nối để gửi/nhận thông tin qua kênh này, miễn là thông tin cùng kiểu với topic đã định nghĩa từ trước

Services: Mô hình truyền thông tin theo qua topic như ở trên trình bày là mô hình rất

linh hoạt tuy nhiên trong một số trường hợp các node cần tương tác theo kiểu yêu cầu/đáp ứng (request/response) thì mô hình qua topic lại không còn phù hợp nữa Do vậy, kiểu truyền dữ liệu service được sinh ra nhằm thực hiện kiểu tương tác yêu cầu/đáp ứng (request/response) Một node trong mạng sẽ đóng vai trò là service để thực hiện các yêu cầu từ các node khác gửi lên Ví dụ, một node A có cung cấp service tính tổng 2 số Một node khác là B có thể gửi yêu cầu cho node A với dữ liệu để cho node A tính tổng 2 số và trả về cho node B Trong thực tế những yêu cầu thường phức tạp hơn rất nhiều

Bags: Là một định dạng dùng để lưu và phát lại dữ liệu Đây là một cơ chế quan trọng

trong việc lưu trữ dữ liệu Ví dụ như trong phòng lab thiếu thiết bị camera, ta có thể lưu dữ liệu camera thu được thành tệp bag và tệp này có thể sử dụng bởi nhiều người mà không

cần đến thiết bị thật trong việc phát triển và kiểm thử robot

2.1.2 Trao đổi thông tin giữa các node trong ROS

2.1.2.1 Trao đổi thông tin giữa các node qua topics

Để các nodes có thể trao đổi thông tin với nhau qua topics thì các node phải khai báo với ROS master Thông thường, một node có vai trò đẩy thông tin lên topic và nhiều node

sẽ đăng kí nhận thông tin từ topic đó Để một node có thể đẩy thông tin lên thì node đó cần phải đăng kí thông tin tên topic cần đẩy lên và định dạng dữ liệu đẩy lên (Ví dụ trong Python: “pub = rospy.Publisher(‘chatter’, String, queue_size=10)”) Trong ví dụ trên, node

Trang 21

muốn đẩy thông tin lên topic có tên là chatter và kiểu định dạng message gửi lên là String Còn để một node có thể đăng kí thông tin thì node đó cần đăng kí tên topic nào mà muốn nhận thông tin, định dạng kiểu dữ liệu nhận về và quan trọng nhất là một hàm trả về dữ liệu khi có thông tin mới trên topic được đưa lên (Ví dụ trong Python:

“rospy.Subscriber(‘chatter’, String, callback)”) ở đây callback là một hàm với một tham

số là dữ liệu mà topic trả về Hình 2-1 mô tả toàn bộ quá trình trao đổi thông tin giữa các node qua topics

Hình 2-1-Trao đổi thông tin giữa các node qua Topic

2.1.2.2 Trao đổi thông tin giữa các node với services

Để có thể trao đổi được thông tin giữa các node với services thì cần một node đóng vai trò là service để tính toán xử lý các yêu cầu từ các node khác Cũng giống như topic, node đóng vai trò là service cũng cần phải đăng kí với master tên service, kiểu dữ liệu service sẽ nhận và hàm xử lý tính toán để trả về yêu cầu (Ví dụ: “serv = rospy.Service(‘add_two_ints’, AddTwoInts, handle_add_two_ints)”) Trong đó tên service là ‘add_two_ints’, kiểu dữ liệu nhận là AddTwoInts và hàm handle_add_two_ints

là hàm xử lý yêu cầu và trả về dữ liệu cho các node yêu cầu Node yêu cầu cũng phải đăng

kí với master (Ví dụ: “add_two_ints = rospy.ServiceProxy(‘add_two_ints’, AddTwoInts)”)

và gửi lên yêu cầu như resp = add_two_ints(1, 2) Hình 2-2 mô tả quá trình trao đổi thông tin với services

Trang 22

Hình 2-2-Trao đổi thông tin giữa các node qua Service

2.2 Vectơ hỗ trợ hồi qui (Support Vector Machine - SVM)

2.2.1 Máy vectơ hỗ trợ hồi quy

Trong bài toán phân lớp nhị phân với dữ liệu gồm có hai lớp và hai lớp này được phân tách hoàn toàn Nghĩa là, có một đường thẳng (trong không gian 2 chiều), một mặt phẳng (trong không gian 3 chiều) hay một siêu phẳng (trong không gian 𝑛 ≥ 3) phân tách tách

dữ liệu của 2 lớp sao cho các điểm dữ liệu nằm cùng một phía so với mặt phân tách thuộc cùng một lớp Tuy nhiên, sẽ có vô số đường thẳng, mặt phẳng, siêu phẳng có thể phân tách được dữ liệu thành 2 lớp thỏa mãn điều kiện như Hình 2-3 mô tả Vậy câu hỏi đặt ra rằng: Đâu là mặt phân tách tốt nhất theo một tiêu chuẩn nào đó? Từ trực quan ta thấy rằng, khoảng cách từ điểm gần nhất của hai lớp tới mặt phân tách càng xa càng tốt Và đó cũng chính là

tư tưởng chính của thuật toán SVM [8, 18], tìm mặt phân tách sao cho lề là lớn nhất Với

lề được định nghĩa là khoảng cách từ điểm dữ liệu gần mặt phân tách nhất tới mặt phân tách

Trang 23

Hình 2-3-Các đường phân chia hai lớp

Để xây dựng và giải bài toán phân lớp nhị phân qua thuật toán SVM, chúng ta giả sử rằng có tập dữ liệu (𝑋, y) = 2(x%, 𝑦%), (x5, 𝑦5), … (x7, 𝑦7)8 với vectơ x9 ∈ 𝑅< là điểm dữ liệu đầu vào và 𝑦9 ∈ {−1, 1} là nhãn với 𝑦9 = 1 nếu điểm x9 thuộc lớp thứ nhất và 𝑦9 = −1 nếu điểm x9 thuộc lớp thứ hai Gọi 𝑊Ax + 𝑏 = 𝑤%𝑥%+ 𝑤5𝑥5+ ⋯ + 𝑤7𝑥7+ 𝑏 = 0 là mặt phẳng phân chia 2 lớp Vậy khoảng cách từ một điểm đến mặt phẳng phân tách là 𝑑 = |IJxK L M|

‖I‖O Hơn nữa, lớp thứ nhất thuộc lớp dương, và lớp thứ 2 thuộc lớp âm nên chúng ta

có thể viết lại công thức khoảng cách từ một điểm đến mặt phẳng 𝑑 = PK (I J xKL M)

‖I‖O Nếu lớp thứ nhất mà là lớp âm, lớp thứ 2 là lớp dương ta chỉ cần đổi dấu 𝑊 và 𝑏 Vậy khoảng cách

lề của một lớp được tính bởi 𝑚𝑎𝑟𝑔𝑖𝑛 = minPK (I J xKL M)

‖I‖O Như vậy bài toán tối ưu trong SVM chính là tìm 𝑊 và 𝑏 sao cho:

Trang 24

từ điểm dữ liệu gần nhất của hai lớp đến mặt phân tách là lớn nhất Tuy nhiên trên thực tế

có dữ liệu thường có nhiễu ảnh hưởng đến kết quả tìm mặt phân tách sao cho lề đạt cực đại

vậy nên thuật toán lề mềm SVM được sinh ra để khắc phục những nhược điểm đó

2.2.2 Lề mềm SVM (Soft margin SVM)

Trên thực tế, các điểm dữ liệu ở 2 lớp phân tách nhau hoàn toàn là rất ít mà các lớp sẽ

có các điểm dữ liệu nhiễu như trong Hình 2-4 Những điểm dữ liệu nhiễu này có thể nằm ở gần mặt phân tách (như Hình 2-4 bên trái) hoặc tệ hơn là có thể nằm ở nửa mặt phẳng của lớp còn lại (như Hình 2-4 bên phải) dẫn đến việc tìm ra nghiệm tối ưu của bài toán SVM bị ảnh hưởng hoặc không có nghiệm nếu hai lớp không phân tách tuyến tính Chính vì vậy, có thể hi sinh một số điểm nhiễu gần mặt phân tách hoặc nằm ở mặt phẳng của lớp còn lại để

có thể có được lề rộng hơn Tuy nhiên, không thể hi sinh phần lớn các điểm để có thể có một lề cực lớn được Vậy mục tiêu của lề mềm SVM chính là tìm mặt phân cách tối ưu sao cho có lề cực đại và sự hi sinh tối thiểu

Hình 2-4-Điểm nhiễu nằm gần mặt phân tách (trái) và điểm nhiễu nằm bên mặt phân tách lớp còn lại (phải)

Gọi 𝛿9 đo độ hi sinh tương ứng với mỗi điểm x9 trong tập toàn bộ dữ liệu Nếu điểm

dữ liệu x9 nằm trong vùng an toàn (bên ngoài lề) thì 𝛿9 = 0 Nếu điểm dữ liệu x9 nằm trên

Trang 25

lề nhưng không vượt qua mặt phân cách thì 0 < 𝛿9 ≤ 1 Nếu điểm dữ liệu x9 nằm khác phía so với mặt phân cách thì 𝛿 > 1 Như vậy, với 𝑦9 = ±1 thì 𝛿9 = |𝑊Ax9+ 𝑏 − 𝑦9| Hàm mục tiêu bây giờ ngoài việc tối thiểu hóa như công thức (2.3) chúng ta còn phải tối thiểu các 𝛿9 để giảm thiểu sự hi sinh Vậy hàm mục tiêu trở thành

(𝑊, 𝑏, 𝛿) = 𝑎𝑟𝑔𝑚𝑖𝑛

I,M

%

5\|𝑊|\55+ 𝐶 ∑c9d%𝛿9 (2.4)

Với điều kiện 1 + 𝛿9− 𝑦9(𝑊Ax9+ 𝑏) ≤ 0 và −𝛿9 ≤ 0

Trong đó, 𝐶 là một hằng số dương để điều chỉnh điều chỉnh tầm quan trọng giữa khoảng cách lề cực đại với sự hi sinh Khi 𝐶 lớn, thì hàm mục tiêu tập trung giảm ∑c9d%𝛿9dẫn đến 𝛿9 nhỏ có nghĩa là không có điểm nào phải hi sinh Ngược lại 𝐶 nhỏ dẫn đến 𝛿9lớn nghĩa là sự hi sinh lớn Để tìm được 𝐶 tối ưu, người ta thường sử dụng phương pháp kiểm định chéo (cross-validation) Cũng giống như bên trên người ta có thể giải được bằng

phương pháp tối ưu để tìm ra nghiệm thỏa mãn công thức (2.4)

2.3 Thuật toán xác định khung xương người - OpenPose

2.3.1 Giới thiệu OpenPose

OpenPose [9] là một thuật toán xác định khung xương của nhiều người trong một bức ảnh Khác với các thuật toán xác định khung xương người trước đó [21, 22], tiếp cận theo hướng từ trên xuống, nghĩa là để tìm khung xương của nhiều người trong một bức ảnh thì thuật toán sẽ tìm khung xương từng người trong bức ảnh đó Với phương pháp tiếp cận theo hướng từ trên xuống có hai nhược điểm rất lớn Thứ nhất, phải biết trước số lượng người trong một bức ảnh Thứ hai, độ phức tạp thời gian chạy để xác định ra tất cả khung xương người trong một bức ảnh sẽ tăng tuyến tính theo số lượng người có trong bức ảnh Do đó, OpenPose đã tiếp cận theo hướng từ dưới lên bằng cách tách được độ phức tạp thời gian chạy không còn phụ thuộc với số lượng người có trong ảnh OpenPose xây dựng kiến trúc

để có thể học được mức độ liên kết giữa các khớp trong cơ thể qua các vectơ 2 chiều mà

mã hóa thông tin vị trí và hướng của các khớp cơ thể trên miền ảnh Sau đó, sử dụng thuật toán tham lam để xác định cơ thể người mà các khớp đó thuộc về Với những cải tiến trên, OpenPose đã có độ chính xác và thời gian vượt xa với các thuật toán xác định khung xương người đứng đầu trước đó

Trang 26

Ngoài ra, tác giả cũng đã thực hiện cài đặt thực tế các thuật toán khác (Alphapose [23]

và HRNet [24]) trên bo mạch Jetson TX2 và kết quả của việc cài đặt được thể hiện qua Hình 2-5 bên dưới

(fps)

Độ chính xác (khuỷu tay)

Độ chính xác (cổ tay)

Hình 2-5-So sánh các thuật toán với OpenPose

Việc lựa chọn thuật toán tìm khung xương người trong ảnh được đánh giá qua 3 tiêu chí: tốc độ khung hình, độ chính xác khửu tay, độ chính xác cổ tay Vì phần cứng của robot đang sử dụng là bo mạch Jetson TX2 vậy nên cần thiết một mô hình thuật toán có thể xử lý nhanh trên bo mạch đó Vậy nên tiêu chí tốc độ khung hình sau khi xử lý được đưa vào Thêm nữa, sau khi tìm khung xương người thì 2 vị trí khớp cổ tay, và khớp khuỷu tay được

sử dụng để phát hiện ra hoạt động vẫy tay nên độ chính xác của khuỷu tay và cổ tay cần được quan tâm Qua Hình 2-5 thấy được rằng tốc độ khung hình của Openpose cao hơn 2 thuật toán còn lại và độ chính xác của khớp cổ tay và khuỷu tay cao nên Openpose phù hợp trong việc cài đặt trên Jetson TX2 Ngoài ra, trong quá trình cài đặt, tác giả thấy rằng việc cài đặt Openpose cũng đơn giản hơn các thuật toán AlphaPose và HRnet vậy nên Openpose được đưa mô-đun phát hiện hành động vẫy tay mà trong mục 3.2 bên dưới sẽ mô tả chi tiết

2.3.2 Tổng quan phương pháp xác định khung xương người

Sơ đồ tổng quan của thuật toán OpenPose – xác định khung xương người, được mô tả qua Hình 2-6

Hình 2-6-Sơ đồ tổng quát thuật toán OpenPose

Trang 27

Thuật toán nhận đầu vào là một bức ảnh kích cỡ 𝑤 × ℎ và sinh ra vị trí các khớp của

cơ thể cho từng người trong ảnh (Hình 2-6) Bức ảnh đầu vào sẽ được đưa qua 10 lớp đầu của mạng VGG-19 [10] đã được tinh chỉnh để trích xuất ra các bản đồ đặc trưng (feature maps) Những bản đồ đặc trưng tiếp tục được đưa vào một mạng tích chập để dự đoán đồng thời một tập các bản đồ tin cậy (confidence maps) 𝑆 của vị trí các khớp trên cơ thể và một tập các vectơ 2 chiều 𝐿 mà mã hóa mức độ liên kết giữa các khớp của một bộ phận cơ thể Tập 𝑆 = 2𝑆%, 𝑆5, … , 𝑆j8 có 𝐽 bản đồ tin cậy, trong đó 𝑆l ∈ ℝn × o, 𝑗 ∈ {1 … 𝐽} Mà mỗi khớp tương ứng với một bản đồ tin cậy Ví dụ như tương ứng với khớp cổ tay của tất cả mọi người trong ảnh sẽ có một bản đồ tin cậy, tương ứng khớp khuỷu tay của tất cả mọi người trong ảnh sẽ có một bản đồ tin cậy khác Tập 𝐿 = (𝐿%, 𝐿5, … , 𝐿q}) có 𝐶 các trường vectơ 2 chiều, trong đó 𝐿r ∈ ℝn × o × 5, 𝑐 ∈ {1 … 𝐶}, mỗi vị trí trong trường vectơ 𝐿r là một vectơ

2 chiều Mà mỗi trường vectơ 2 chiều ứng với một bộ phận cơ thể Ví dụ, cánh tay dưới được kết nối bởi 2 khớp (khớp cổ tay và khớp khuỷu tay) của tất cả mọi người trong ảnh sẽ

có trường vectơ 2 chiều tương ứng Cuối cùng các bản đồ tin cậy 𝑆 và các trường vectơ 𝐿

sẽ được sử dụng để suy luận bởi thuật toán tham lam để sinh ra khung xương của từng người trong một bức ảnh Thông tin về khung xương người mà thuật toán trả về sẽ được dùng để nhận diện hành động vẫy tay trong bài luận văn

2.4 Thuật toán hỗ trợ nhận diện mặt người FaceNet

FaceNet [14] được các kĩ sư Google giới thiệu vào năm 2015, thuật toán tìm cách xây dựng một không gian vectơ để ánh xạ các ảnh mặt người thành các vectơ trong không gian

mà ở không gian đó thì khoảng cách giữa các vectơ chính là mức độ tương đồng giữa các khuôn mặt Khi khoảng cách giữa hai vectơ càng nhỏ nghĩa là hai ảnh mặt khả năng cao cùng là một người và ngược lại Kiến trúc tổng quan mạng nơ-ron của FaceNet được thể hiện trong Hình 2-7

Hình 2-7-Cấu trúc mô hình của FaceNet [14]

Trang 28

y𝑓(𝑥9w) − 𝑓2𝑥9x8y55+ 𝛼 < ‖𝑓(𝑥9w) − 𝑓(𝑥97)‖55, ∀ |𝑓(𝑥9w), 𝑓2𝑥9x8, 𝑓(𝑥97)} ∈ 𝒯 (2.5)

Trong đó 𝛼 là khoảng cách bắt bắt buộc giữa cặp ảnh của cùng một người và cặp ảnh của hai người khác nhau 𝒯 là tập bộ ba có thể có trong tập huấn luyện và 𝑁 là số lượng tập bộ ba Mục tiêu cần tối thiểu hóa hàm mất mát 𝐿:

2.4.2 Chiến lược lựa chọn bộ ba

Việc lựa chọn bộ ba rất quan trọng trong việc để mô hình huấn luyện có thể hội tụ nhanh Chiến lược để lựa chọn bộ ba này sẽ tìm bộ ba sao cho ảnh khuôn mặt của cùng một người là khác nhau nhất và ảnh của hai người khác nhau là giống nhau nhất Điều này tương

tự như việc chọn ảnh khuôn mặt của một người khi hồi nhỏ và khi lớn để tăng độ khó cho việc học nhưng nếu mô hình có thể học để nhận biết được hai khuôn mặt là cùng một người thì nó sẽ thông minh hơn Mặt khác, khi lựa chọn ảnh khuôn mặt của hai người khác nhau

Ngày đăng: 13/06/2021, 16:54

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w