Thông qua đề tài này nhóm chúng em sẽ nghiên cứu và thiết kế hệ thống nhận dạng hành động có đáp ứng được với mọi nhu cầu của người sử dụng và áp dụng vào nhiều công việc trong nhiều ngà
Trang 1HỌC VIỆN HÀNG KHÔNG VIỆT NAM
KHOA CÔNG NGHỆ THÔNG TIN
BÁO CÁO TIỂU LUẬN TRÍ TUỆ NHÂN TẠO
“ỨNG DỤNG MẠNG LSTM ĐỂ
NHẬN DẠNG HÀNH ĐỘNG
CON NGƯỜI ” HỌC KỲ 1 – NĂM HỌC: 2023 - 2024
MÃ LỚP HỌC PHẦN: 010100085801 Giảng viên hướng dẫn: TS Bùi Mạnh Quân Nhóm sinh viên thực hiện: Nguyễn Công Giới
Nguyễn Thị Mỹ Tâm Trần Thị Anh Thư Huỳnh Nguyễn Nhi Nguyễn Mai Thủy Tiên
TP.HCM, tháng 11 năm 2023
Trang 2MỤC LỤC
LỜI NÓI ĐẦU 1
CHƯƠNG I GIỚI THIỆU 2
1.1 Lý do chọn đề tài 2
1.2 Đối tượng và phạm vi nghiên cứu của đề tài 2
1.3 Phương pháp nghiên cứu của đề tài 2
1.4 Bố cục của đề tài 2
CHƯƠNG II CƠ SỞ LÝ THUYẾT VÀ CÔNG NGHỆ ỨNG DỤNG 3
2.1 CƠ SỞ LÝ THUYẾT 3
2.1.1 Tổng quan về ngôn ngữ Python 3
2.1.2 Mạng LSTM - Long short term memory 3
2.1.3 Một số thuật toán học máy 10
2.2 CÔNG NGHỆ ỨNG DỤNG 11
2.2.1 Thư viện Open Computer Vision (OpenCV) 11
2.2.2 Thư viện Mediapipe Pose 12
2.2.3 Thư viện Keras 14
CHƯƠNG III: SẢN PHẨM ĐỒ ÁN 15
3.1 Thu thập dữ liệu 15
3.2 Huấn luyện mô hình 20
3.2.1 Xây Dựng Mô Hình 20
3.2.2 Biên Dịch và Huấn Luyện 21
3.2.3 Lưu Mô Hình 21
3.3 Dự đoán và hiển thị 22
CHƯƠNG IV: KẾT LUẬN 24
TÀI LIỆU THAM KHẢO 25
Trang 3NHẬN XÉT CỦA GIẢNG VIÊN
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
ĐÁNH GIÁ: -
ĐIỂM SỐ: -
ĐIỂM CHỮ: -
Chữ ký giảng viên
Trang 4LỜI NÓI ĐẦU
Lời đầu tiên, xin trân trọng cảm ơn thầy Bùi Mạnh Quân đã tận tình hướng dẫn chúng
em trong quá trình học tập cũng như trong việc hoàn thành bài tiểu luận cuối kỳ
Xin chân thành cảm ơn các thầy, cô thuộc khoa CNTT Học viện Hàng không Việt Nam
đã tận tình giảng dạy cho chúng em trong thời gian học tập
Xin cảm ơn các thầy, cô đã đọc bài báo cáo và cho chúng em những nhận xét quý báu, chỉnh sửa những sai sót của chúng em Do khả năng lý luận và kinh nghiệm lập trình còn hạn chế nên chúng em sẽ không tránh khỏi những thiếu sót, kính mong sự chỉ dẫn và đóng góp của các thầy cô để bài tiểu luận của chúng em được hoàn thiện hơn
Chúng em xin cam đoan tiểu luận này do các thành viên trong nhóm thực hiện Chúng
em không sao chép, sử dụng bất kỳ tài liệu, mã nguồn,… của người khác mà không ghi nguồn Chúng em xin chịu hoàn toàn trách nhiệm nếu vi phạm đạo văn
Chúng em xin chân thành cảm ơn!
Trang 5CHƯƠNG I GIỚI THIỆU 1.1 Lý do chọn đề tài
Ngày nay con người đang ngày càng tạo ra nhiều công nghệ trí tuệ nhân tạo với nỗ lực thay thế con người bằng máy móc, giúp giảm thiểu chí phí, nhân lực, mang đến tỷ lệ chính xác cao hơn Trong những năm gần đây, nhờ vào sự tiến bộ của công nghệ và các nhu cầu ứng dụng, nghiên cứu về nhận dạng hoạt động người đã có được sự phát triển mạnh mẽ
Do đó, nhóm chúng em chọn đề tài “Ứng dụng mạng LSTM để nhận dạng hành động con người” Thông qua đề tài này nhóm chúng em sẽ nghiên cứu và thiết kế hệ thống nhận
dạng hành động có đáp ứng được với mọi nhu cầu của người sử dụng và áp dụng vào nhiều công việc trong nhiều ngành nghề lĩnh vực, nền tảng sử dụng khác nhau
1.2 Đối tượng và phạm vi nghiên cứu của đề tài
Đối tượng nghiên cứu của đề tài này là thuật toán máy học và ứng dụng mạng LSTM
để nhận dạng hành động con người
Phạm vi nghiên cứu của đề tài tập trung ứng dụng nhận dạng hành động con người không chỉ nhận dạng những thao tác cơ bản như vẫy tay, lắc người
1.3 Phương pháp nghiên cứu của đề tài
Đề tài sử dụng phương pháp nghiên cứu phân tích, triển khai và kế thừa những nghiên cứu trước để đề xuất cách tiếp cận mới trong việc giải quyết vấn đề
1.4 Bố cục của đề tài
Đề tài gồm 4 chương chính:
Chương I: Giới thiệu
Chương II: Cơ sở lý thuyết và Công nghệ ứng dụng
Chương III: Sản phẩm đồ án
Chương IV: Kết luận
Trang 6CHƯƠNG II CƠ SỞ LÝ THUYẾT VÀ CÔNG NGHỆ ỨNG DỤNG
2.1 CƠ SỞ LÝ THUYẾT
2.1.1 Tổng quan về ngôn ngữ Python
Python là một ngôn ngữ lập trình được sử dụng rộng rãi trong các ứng dụng web, phát triển phần mềm, khoa học dữ liệu và máy học (ML) Các nhà phát triển sử dụng Python vì
nó hiệu quả, dễ học và có thể chạy trên nhiều nền tảng khác nhau Phần mềm Python được tải xuống miễn phí, tích hợp tốt với tất cả các loại hệ thống và tăng tốc độ phát triển
Ứng dụng của Python
Python là ngôn ngữ có mục đích chung, nghĩa là nó có thể được sử dụng để tạo nhiều chương trình khác nhau và không chuyên biệt cho bất kỳ vấn đề cụ thể nào.Vì tương đối dễ học, Python đã được sử dụng vào nhiều mục đích khác nhau, phần lớn:
✔ Phát triển web
✔ Tự động hóa và phát triển phần mềm
✔ Phân tích dữ liệu và máy học
2.1.2 Mạng LSTM - Long short term memory
Mạng trí nhớ ngắn hạn định hướng dài hạn (viết tắt là LSTM) là một kiến trúc đặc biệt của mạng thần kinh hồi quy (RNN-Recurrent Neural Network) có khả năng học được sự phục thuộc trong dài hạn (long-term dependencies) được giới thiệu bởi Hochreiter & Schmidhuber (1997) Kiến trúc này đã được phổ biến và sử dụng rộng rãi cho tới ngày nay LSTM đã tỏ ra khắc phục được rất nhiều những hạn chế của RNN trước đây về triệt tiêu đạo hàm Tuy nhiên cấu trúc của chúng có phần phức tạp hơn gồm 4 tầng tương tác với nhau mặc dù vẫn dữ được tư tưởng chính của RNN là sự sao chép các kiến trúc theo dạng chuỗi
Về mặt lý thuyết mạng RNN có thể giải quyết được những sự phụ thuộc trong dài hạn Tuy nhiên trên thực tế RNN lại cho thấy khả năng học trong dài hạn kém hơn Một phiên bản mới của mạng RNN là mạng LSTM ra đời nhằm khắc phục hiện tường này nhờ một cơ chế đặc biệt
Trang 7Hình 1: Sự lặp lại kiến trúc module trong mạng LSTM chứa 4 tầng ẩn (3 sigmoid và
1 tanh) tương tác
⮚ Kiến trúc LSTM
Ở mức độ cao, LSTM hoạt động rất giống một tế bào RNN Đây là hoạt động nội bộ của mạng LSTM Kiến trúc mạng LSTM bao gồm ba phần, như trong hình bên dưới và mỗi phần thực hiện một chức năng riêng lẻ
Hình 2: Kiến trúc mạng LSTM
⮚ Thứ tự các bước của LSTM
Bước đầu tiên trong LSTM sẽ quyết định xem thông tin nào chúng ta sẽ cho phép đi qua ô trạng thái (cell state) Nó được kiểm soát bởi hàm sigmoid trong một tầng gọi là tầng
Trang 8quên (forget gate layer) Đầu tiên nó nhận đầu vào là 2 giá trị ht−1 và xt và trả về một giá trị nằm trong khoảng 0 và 1 cho mỗi giá trị của ô trạng thái Ct-1 Nếu giá trị bằng 1 thể hiện
‘giữ toàn bộ thông tin’ và bằng 0 thể hiện ‘bỏ qua toàn bộ chúng’
Trở lại ví dụ về ngôn ngữ, chúng ta đang cố gắng dự báo từ tiếp theo dựa trên toàn bộ những từ trước đó Trong những bài toán như vậy, ô trạng thái có thể bao gồm loại của chủ ngữ hiện tại, để cho đại từ ở câu tiếp theo được sử dụng chính xác
Bước tiếp theo chúng ta sẽ quyết định loại thông tin nào sẽ được lưu trữ trong ô trạng thái Bước này bao gồm 2 phần Phần đầu tiên là một tầng ẩn của hàm sigmoid được gọi là tầng cổng vào (input gate layer) quyết định giá trị bao nhiêu sẽ được cập nhật Tiếp theo, tầng ẩn hàm tanh sẽ tạo ra một véc tơ của một giá trị trạng thái mới C~t mà có thể được thêm vào trạng thái Tiếp theo kết hợp kết quả của 2 tầng này để tạo thành một cập nhật cho trạng thái
Chúng ta nhân trạng thái cũ với ft tương ứng với việc quên những thứ quyết định được phép quên sớm Phần tử đề cử it∗C~t là một giá trị mới được tính toán tương ứng với bao nhiêu được cập nhật vào mỗi giá trị trạng thái
Cuối cùng cần quyết định xem đầu ra sẽ trả về bao nhiêu Kết quả ở đầu ra sẽ dựa trên
ô trạng thái, nhưng sẽ là một phiên bản được lọc Đầu tiên, chúng ta chạy qua một tầng sigmoid nơi quyết định phần nào của ô trạng thái sẽ ở đầu ra Sau đó, ô trạng thái được đưa qua hàm tanh (để chuyển giá trị về khoảng -1 và 1) và nhân nó với đầu ra của một cổng sigmoid, do đó chỉ trả ra phần mà chúng ta quyết định
Ví dụ về hoạt động của LTSM:
Hãy lấy một ví dụ để hiểu LSTM hoạt động như thế nào Ở đây chúng ta có hai câu cách nhau bằng dấu chấm Câu đầu tiên là “Bob là một người tốt” và câu thứ hai là “Dan, mặt khác, là ác quỷ” Rất rõ ràng, trong câu đầu tiên, chúng ta đang nói về Bob, và ngay khi gặp dấu chấm(.), chúng ta bắt đầu nói về Dan
Trang 9Khi chúng ta chuyển từ câu đầu tiên sang câu thứ hai, mạng của chúng ta sẽ nhận ra rằng chúng ta không còn nói về Bob nữa Bây giờ chủ đề của chúng ta là Dan Ở đây, cổng Quên của mạng cho phép nó quên nó đi Hãy hiểu vai trò của các cổng này trong kiến trúc LSTM
⮚ LSTM có ba loại cổng để kiểm soát luồng thông tin: cổng đầu vào, cổng quên và cổng đầu ra
❖ Cổng quên
Trong một ô của mạng nơ-ron LSTM, bước đầu tiên là quyết định xem chúng ta nên giữ thông tin từ bước thời gian trước đó hay quên nó đi Đây là phương trình cho cổng quên
Chúng ta hãy cố gắng hiểu phương trình ở đây
Xt: nhập dấu thời gian hiện tại
Uf: trọng lượng liên quan đến đầu vào
Ht-1: Trạng thái ẩn của dấu thời gian trước đó
Wf: Đây là ma trận trọng số liên quan đến trạng thái ẩn
Sau đó, hàm sigmoid được áp dụng cho nó Điều đó sẽ tạo ra ft một số từ 0 đến 1 ft này sau đó được nhân với trạng thái ô của dấu thời gian trước đó, như hiển thị bên dưới
Trang 10Bây giờ hãy nghĩ về nó, dựa trên ngữ cảnh được đưa ra trong câu đầu tiên, thông tin nào trong câu thứ hai là quan trọng? Đầu tiên, anh ta dùng điện thoại để kể, hoặc anh ta phục vụ trong hải quân Trong bối cảnh này, việc anh ta sử dụng điện thoại hay bất kỳ phương tiện liên lạc nào khác để truyền thông tin không thành vấn đề Việc anh ấy ở trong hải quân là thông tin quan trọng và đây là điều chúng tôi muốn mô hình của mình ghi nhớ
để tính toán trong tương lai Đây là nhiệm vụ của cổng vào
Cổng đầu vào được sử dụng để định lượng tầm quan trọng của thông tin mới được mang theo đầu vào Đây là phương trình của cổng đầu vào
Xt: Nhập vào dấu thời gian hiện tại t
Ui: ma trận trọng số của đầu vào
Ht-1: Trạng thái ẩn ở dấu thời gian trước đó
Wi: Ma trận trọng số của đầu vào liên quan đến trạng thái ẩn
Trang 11Một lần nữa chúng ta đã áp dụng hàm sigmoid lên nó Kết quả là giá trị của I tại dấu thời gian t sẽ nằm trong khoảng từ 0 đến 1
Thông tin mới
Bây giờ thông tin mới cần được chuyển đến trạng thái ô là hàm của trạng thái ẩn ở dấu thời gian t-1 trước đó và nhập x ở dấu thời gian t Hàm kích hoạt ở đây là tanh Do hàm tanh nên giá trị của thông tin mới sẽ nằm trong khoảng từ -1 đến 1 Nếu giá trị của Nt âm thì thông tin sẽ bị trừ khỏi trạng thái ô, còn nếu giá trị là dương thì thông tin sẽ được thêm vào ô trạng thái tại dấu thời gian hiện tại
Tuy nhiên, Nt sẽ không được thêm trực tiếp vào trạng thái ô Đây là phương trình được cập nhật:
Ở đây, Ct-1 là trạng thái ô ở dấu thời gian hiện tại và các trạng thái khác là các giá trị chúng tôi đã tính toán trước đó
❖ Cổng đầu ra
Bây giờ hãy xem xét câu này
“Bob đã một mình chiến đấu với kẻ thù và chết vì đất nước của mình Vì những đóng góp của anh ấy, dũng cảm.”
Trong nhiệm vụ này, chúng ta phải hoàn thành câu thứ hai Bây giờ, ngay khi chúng ta nhìn thấy từ dũng cảm, chúng ta biết rằng chúng ta đang nói về một người Trong câu chỉ
có Bob dũng cảm, không thể nói địch dũng cảm, hay đất nước dũng cảm Vì vậy dựa trên
dự đoán hiện tại, chúng ta phải đưa ra một từ thích hợp để điền vào chỗ trống Từ đó là đầu
ra của chúng ta, và đây là chức năng của cổng Đầu ra của chúng ta
Trang 12Đây là phương trình của Cổng đầu ra, khá giống với hai cổng trước
Giá trị của nó cũng sẽ nằm trong khoảng từ 0 đến 1 do hàm sigmoid này Bây giờ để tính trạng thái ẩn hiện tại, chúng ta sẽ sử dụng Ot và tanh của trạng thái ô được cập nhật Như hình dưới đây:
Hóa ra trạng thái ẩn là một hàm của Bộ nhớ dài hạn (Ct) và đầu ra hiện tại Nếu bạn cần lấy đầu ra của dấu thời gian hiện tại, chỉ cần áp dụng kích hoạt SoftMax ở trạng thái ẩn
LSTM hai chiều bao gồm hai lớp LSTM, một lớp xử lý chuỗi đầu vào theo hướng thuận
và lớp kia theo hướng ngược Điều này cho phép mạng truy cập đồng thời thông tin từ các bước thời gian trong quá khứ và tương lai Do đó, LSTM hai chiều đặc biệt hữu ích cho các tác vụ đòi hỏi sự hiểu biết toàn diện về chuỗi đầu vào, chẳng hạn như các tác vụ xử lý ngôn ngữ tự nhiên như phân tích tình cảm, dịch máy và nhận dạng thực thể được đặt tên
Trang 13Bằng cách kết hợp thông tin từ cả hai hướng, LSTM hai chiều nâng cao khả năng của
mô hình trong việc nắm bắt các mối phụ thuộc dài hạn và đưa ra dự đoán chính xác hơn trong dữ liệu tuần tự phức tạp
2.1.3 Một số thuật toán học máy
Học máy (Machine learning) là một tập con của trí tuệ nhân tạo, tập trung chủ yếu vào việc tạo ra các thuật toán cho phép máy tính tự động học từ dữ liệu và các kinh nghiệm trước đó
Học máy là khoa học phát triển các thuật toán cho phép máy tính tự động cải thiện hiệu năng giải quyết vấn đề thông qua dữ liệu
Các bài toán cơ bản trong machine learning: Bài toán phân loại (classification), Bài toán hồi quy (regression), Bài toán Phân cụm (clustering), Hoàn thiện dữ liệu – data completion
Machine learning được phân thành các loại như sau:
Học có giám sát (supervised learning): được định nghĩa bằng cách sử dụng các tập dữ
liệu được gắn nhãn để tạo các thuật toán nhằm phân loại dữ liệu hoặc dự đoán kết quả một cách chính xác
Học không giám sát (unsupervised learning): sử dụng các thuật toán học máy để phân
tích và phân cụm các tập dữ liệu không được gắn nhãn Các thuật toán này phát hiện ra các mẫu hoặc nhóm dữ liệu ẩn mà không cần sự can thiệp của con người
Học bán giám sát (semi-supervised learning): cung cấp một phương tiện kết nối giữa
Machine Learning có giám sát và không giám sát Trong quá trình đào tạo, nó sử dụng một tập dữ liệu có nhãn nhỏ hơn để hướng dẫn phân loại và trích xuất tính năng từ một tập dữ liệu lớn hơn mà không được gắn nhãn Semi-supervised Learning có thể giải quyết vấn đề không có đủ dữ liệu được gắn nhãn để đào tạo thuật toán học có giám sát
Trang 14Học củng cố (Reinforcement Learning): là mô hình máy tính được huấn luyện để tự
động tìm hiểu và ra quyết định để tối ưu hóa một nhiệm vụ hoặc mục tiêu cụ thể thông qua tương tác với môi trường
2.2 CÔNG NGHỆ ỨNG DỤNG
2.2.1 Thư viện Open Computer Vision (OpenCV)
❖ Computer Vision là gì?
Computer Vision (CV) - Thị giác máy tính là ngành học nghiên cứu cách tái tạo, ngắt
và hiểu một cảnh 3D từ các hình ảnh 2D của nó, xét về các đặc tính của cấu trúc có trong cảnh đó
Thị giác máy tính được chia thành ba loại cơ bản như sau:
● Low-level vision : Nó bao gồm hình ảnh quy trình để trích xuất tính năng
● Intermediate-level vision : Nó bao gồm nhận dạng đối tượng và giải thích cảnh 3D
● High-level vision : Nó bao gồm mô tả khái niệm về một cảnh như hoạt động, ý định
và hành động
❖ Thư viện OpenCV
OpenCV là một thư viện mã nguồn mở hàng đầu cho thị giác máy tính (computer vision), xử lý ảnh và máy học, và các tính năng tăng tốc GPU trong hoạt động thời gian thực OpenCV được phát hành theo giấy phép BSD, do đó nó hoàn toàn miễn phí cho cả học thuật và thương mại Nó có các interface C++, C, Python, Java và hỗ trợ Windows, Linux, Mac OS, iOS và Android OpenCV được thiết kế để tính toán hiệu quả và với sự tập trung nhiều vào các ứng dụng thời gian thực Được viết bằng tối ưu hóa C/C++, thư viện
có thể tận dụng lợi thế của xử lý đa lõi
⮚ Ứng dụng
OpenCV được sử dụng rộng rãi và đa dạng cho nhiều mục đích khác nhau, bao gồm: