Trong quá trình nghiên cứu, các phương pháp trích xuất đặc trưng được sử dụng để tạo ra biểu diễn số học của dữ liệu ảnh.. TỔNG QUAN 1.1 Lý do chọn đề tài Trong thời đại Cách mạng Công
TỔNG QUAN
Lý do chọn đề tài
Trong thời đại Cách mạng Công nghệ 4.0, trí tuệ nhân tạo đang dần xuất hiện trong mọi mặt của cuộc sống, từ các những trợ lý ảo, chatbot được tạo ra để phục vụ cho công việc, học tập và nghiên cứu cho đến những ứng dụng, hệ thông được tích hợp các công nghệ hiện đại như nhận diện khuôn mặt để xác thực người dùng trong việc chuyển tiền ngân hàng, định danh cá nhân trong hệ thống dữ liệu dân cư quốc gia
Một trong những lĩnh vực nổi bật của trí tuệ nhân tạo là thị giác máy tính (Computer Vision) Lĩnh vực này tập trung vào việc tái tạo lại hệ thống thị giác của con người Từ đó cho phép máy tính xách định và xử lý các đối tượng trong hình ảnh và video giống như cách của con người Ngày này, nhờ có lượng dữ liệu khổng lồ được chia sẻ trực truyến liên tục và áp dụng học sâu (Deep Learning) đã làm cho việc đào tạo những mô hình thị giác máy tính trở nên dễ dạng và có thể đạt được độ chính xác cao Đặc biệt là khi việc chuyển đổi số ngày càng nhanh chóng sẽ tạo ra lượng lưu trữ lớn về hình ảnh khuôn mặt, do đó việc phát triển những phương pháp hiệu quả để truy xuất thông tin từ những bộ dữ liệu lớn về hình ảnh khuôn mặt có ý nghĩa rất lớn trong nhiều lĩnh vực như an nình, y tế, giáo dục Từ các yếu tố trên, đề tài “Facial Image Retrieval in Large-scale Datasets” là một chủ đề hấp dẫn vì tính ứng dụng cao của nó.
Mục tiêu
Mục tiêu của đề tài là ứng dụng và phát triển được các công nghệ về trí tuệ nhân tạo, xử lý dữ liệu lớn để tạo ra mô hình có khả năng nhận diện và truy xuất thông tin từ tập dữ liệu lớn một cách nhanh chóng và chính xác Cụ thể, để xây dựng được hệ thống như vậy ta cần đạt được những mục tiêu sau trong quá trình thực hiện:
- Xây dụng được hệ thống nhận diện hình ảnh khuôn mặt chính xác: Sử dụng các mô hình (model) đã được đào tạo sẵn và thay đổi để phù hợp với yêu cầu là có khả năng nhận diện khuôn mặt một cách chính xác
- Tối ưu hóa khả năng truy xuất thông tin: Thử nghiệm những thuật toán truy xuất dữ liệu, từ đó chọn ra được mô hình có khả năng truy xuất nhanh chóng thông tin từ tập dữ liệu lớn
- Xử lý dữ liệu đa dạng và phức tạp: Hệ thống phải có khả năng xử lý và truy xuất thông tin từ các bộ dữ liệu với đa dạng khuôn mặt, điều kiện khuôn mặt là chính diện và được chụp vào ban ngày
- Ứng dụng thực tiển: Áp dụng kết quả nghiên cứu vào các lĩnh vực thực tế như giáo dục, y tế, an ninh, để tiết kiệm thời gian và công sức, cải thiện hiệu suất làm việc của trong người trong việc quản lý và truy xuất thông tin từ dữ liệu khuôn mặt.
Ý nghĩa
Đề tài này không chỉ mang tính nghiên cứu mà nó còn có thể mang lại những ảnh hưởng sâu rộng đối với các lĩnh vực khác nhau Trong lĩnh vực an nình, các hệ thống truy xuất hình ảnh có thể được áp dụng để giám sát và phát hiện các hành động bất thường của phạm nhân, của những người có ý định phạm tội Nó cũng giúp việc tìm kiếm người mất tích trở nên dễ dàng hơn với việc lấy được thông tin từ những người đã tiếp xúc với họ Đề tài này còn có ý nghĩa trong việc quản lý thông tin giúp tiết kiệm thời gian và công sức Công nghệ truy xuất hình ảnh có thể giúp tự động hóa quy trình quản lý dữ liệu, giúp cải thiện hiệu xuất làm việc, giảm thiểu sai sót Đề tài này cũng mở ra cách cửa cho các ứng dụng tiềm năng như theo dõi tình trạng sức khỏe, cải thiện trải nghiệm người dùng
Tóm lại, không chỉ có ý nghĩa trong việc nghiên cứu, đề tài này còn mạng lại những lợi ích to lớn cho xã hội từ những ứng dụng của nó trong các lĩnh vực thực tế.
CƠ SỞ LÝ THUYẾT
Thị giác máy tính và bài toán Face Recognition
Thị giác máy tính (Computer Vision - CV) là một lĩnh vực trong khoa học máy tính nhằm làm cho máy tính có thể tái tạo lại khả năng nhìn và xác định các vật thể như thị giác con người Lĩnh vực này tập trung vào việc cho phép máy tính có thể trích xuất, phân tích và hiểu được các thông tin hữu ích một các tự động từ hình ảnh hoặc một chuỗi các hình ảnh Hiểu trong trường hợp này có nghĩa là máy tính có thể chuyển đổi các hình ảnh đầu vào thành những mô tả có ý nghĩa và hữu ích với con người Để làm được điều này cần phải những phát triển về cơ sở lý thuyết và thuật toán, từ đó tạo ra sự hiểu biết trực quan và tự động từ máy tính Nhờ vào việc có nhiều ứng dụng trong thực tế, CV đang dần trở thành một phần trong trung tâm của những công nghệ về trí tuệ nhân tạo
Hình 2.1: Phương thức hoạt động của thị giác máy tính
CV hoạt động dựa trên đầu vào là các hình ảnh, chuỗi hình ảnh từ những thiết bị cảm biến ảnh, các mô hình trí tuệ nhân tạo, học máy, khác Sau đó, các hình ảnh này sẽ được đưa đến thiết bị phiên dịch để xử lý bằng những mô hình được huấn luyện với những mục đích khác nhau như nhận diện khuôn mặt, nhận diện một đối tượng nào đó Hình ảnh đã qua xử lý sẽ được dùng nhằm truy xuất thông tin để xem có thể tìm được bất kỳ nội dụng nào trùng khớp với nội dung hình ảnh hay không Điều này được thực hiện thông qua các thuật toán tìm kiếm, truy vấn cùng với kết hợp những phương thức lưu trữ dư liệu hiện đại nhằm đạt được hiệu xuất tìm kiếm tốt nhất Sau đó những thông tin truy xuất được sẽ được trả về cho phía người dùng nhằm cung cấp những thông tin phục vụ cho công việc, mục đích nào đó
2.1.1.3 Lịch sử của thị giác máy tính
Trong những năm 1960, các nhà khoa học bắt đầu nghiên cứu những thuật toán để xử lý và phân tích dữ liệu trực quan nhưng vẫn còn một số hạn chế về khả năng tính toán của máy tính Đến năm 1970, những thuật toán phức tạp hơn phục vụ cho xử lý hình ảnh và phát hiện đối tượng đã được phát triển Trong đó phép biến đổi Hough (Hough transform) là một bước đột phá nhờ việc phát hiện được những đường thẳng và các dạng hình học khác nhau trong ảnh Từ năm 1980 đến năm 1990, các nhà khoa học tiếp tục phát triển những thuật toán học máy cho CV có khả năng cải thiện độ chính xác theo thời gian Thuật toán phát hiện khuôn mặt đầu tiên là Viola- Jones được phát triển vào năm 2001 là điểm nhấn quan trọng nhất trong thời điểm bấy giờ Đến khoảng năm 2010, các thuật toán học sâu đã tạo ra đợt cách mạng hóa trong ngành CV khi máy tính có thể học cách biểu diển dữ liệu theo cấp bậc Tiếp đến là sự phát triển về các mạng nơ ron tích chập (Convolutional Neural Networks - CNN) kết hợp với lượng dữ liệu lớn là sự bùng nổ khi mà máy tính đã có thể phát hiện đối tượng, theo dõi chuyển động với hiệu xuất và kết quả cho độ chính xác cao hơn bao giờ hết Ngày nay, CV là một lĩnh vực quan trọng và phát triển nhanh chóng với các ứng dụng vào lĩnh vực an ninh, y tế, Cùng với sự tiến bộ của trí tuệ nhân tạo, CV dự kiến sẽ tiếp tục phát triển và tạo ra những bước đột phá góp phần làm thay đổi cách chúng ta tương tác với dữ liệu hình ảnh trong tương lai
2.1.1.4 Ứng dụng của thị giác máy tính
Hiện nay, có nhiều nghiên cứu đang được thực hiện trong lĩnh vực CV, nhưng hơn hết là các ứng dụng thực tế trong cuộc sống như công việc, y tế, cuốc sống hằng ngày, đã chứng mình tầm quan trọng của CV Một trong những động lức chính cửa sự phát triển này là dòng dữ liệu được lưu trữ, tạo ra từ các ứng dụng, thiết bị như điện thoại, hệ thống camera an nình, các hệ thống giám sát khác Các dữ liệu này đóng vai trò trong nhiều ngành, từ đó tạo ra nền tảng để huấn luyền các mô hình CV và giúp các mô hình này trở thành một phần không thể thiếu trong hoạt động của con người
Các ứng dụng nổi bật hiên nay có thể kể đến như là Google Translate có thể sử dụng ảnh một ngôn ngữ lấy từ camera của điện thoại và có thể dịch ra gần như ngay lập tức Ngoài ra còn có xe tự lái được phát triển dựa vào CV bằng việc xử lý dữ liệu đầu vào các hình ảnh xung quanh, cảm biến vật thể từ đó đưa ra những phân tích về thông tin trên đường
2.1.1.5 Những gì thị giác máy tính có thể làm
Mặc dù có được tài nguyên là lượng dữ liệu lớn được tạo ra hằng ngày cùng với sự trợ giúp của học sâu giúp cho việc phát triển các ứng dụng một cách dễ dàng Nhưng ta cần biết chính xác CV có thể làm được những gì, từ đó đưa ra quyết định sẽ áp dụng những công nghệ, mô hình, thuật toán vào dự án Một số tác vụ chính của thị giác máy tính là:
- Phân loại hình ảnh (Image classification): máy tính có thể thấy những vật thể trong hình ảnh và phân loại những vật thể, hình ảnh đó vào một lớp nhất định Ví dụ: một mạng xã hội có thể xử dụng hệ thống phân loại để xác định những hình ảnh có nội dung phản cảm mà người dùng đưa lên
- Theo dõi đối tượng (Object tracking): máy tính theo dõi một đối tường nào đó từ đó xác định được hành vị, vị trí của đối tượng đó Ví dụ: xe tự lái sẽ theo dõi các hình ảnh của các vật thể xung quanh từ đó xác định vị trí của các vật thể đó
- Phát hiện đối tượng (Object detection): máy tính sử dụng phân loại hình ảnh để xác định những đối tượng được quy định sẵn trong hình ảnh đó Ví dụ: hệ thống nhận diện biển số xe trong các hầm xe
Face Recognition (DR) là một trong những bài toán phổ biến nhất trong CV, đây là bài toán nhận dạng và xác thực người dựa vào khuôn mặt của họ Cho đến tận ngày nay đây đã có nhiều nghiên cứu, mô hình được đưa ra để giải quyết bài toán này Trong đó nổi tiếng nhất là hệ thống nhận diện khuôn mặt để mở khóa điện thoại của Apple hay là hệ thống gắn tag mặt bạn bè trên Facebook Các ứng dụng khác có thể kể đến như là nhận diện khuôn mặt để xác thực thanh toán, hệ thống điểm danh bằng cách sử dụng khuôn mặt, Tuy nhiên, việc áp dụng bài toán này vào thực tế ở Việt Nam vẫn chưa được thực hiện triệt để Điển hình là các hệ thống nhận diện khuôn mặt để truy vấn thông tin trong tập dữ liệu dân cư vẫn chưa mang lại tiếng vang lớn
Bài toán FR có thể được xem là kết hợp của hai bài toán:
- Nhận diện khuôn mặt (Face identification): đây là bài toán sẽ trả lời cho câu hỏi “Người này là ai?” với input là ảnh khuôn mặt và output là nhãn của tên người trong ảnh
- Xác thực khuôn mặt (Face verification): đây là bài toán trả lời cho câu hỏi
“Hai ảnh khuôn mặt đầu vào có phải là của một người không”
Có nhiều cách thức để giải quyết bài toán này như là dùng các thuật toán One- shot learning, Learning similarity để tạo ra mô hình có thể nhận diện khuôn mặt Tuy nhiên, trong nghiên cứu này chúng ta sẽ sử dụng phương pháp khác đó là kỹ thuật trích xuất đặc trưng (Feature Extraction) Ta sẽ sử dụng tập dữ liệu ảnh khuôn mặt người để tạo ra mô hình phân loại hình ảnh Sau đó ta lại sử dụng mô hình đã được đào tạo để mã hóa tập dữ liệu đó và lưu vào cơ sở dữ liệu Mỗi khi cần nhận dạng khuôn mặt ta đưa ảnh là đầu vào cho mô hình đã train và đầu ra là một vector đã được mã hóa Tiếp đến vector đó sẽ được truy vấn trong cơ sở dữ liệu bằng các thuật toán Locality Sensitive Hashing (LSH) để tìm ra những vector có khoảng cách gần nhất với Vector đã được mã hóa
2.1.2.3 Trích xuất đặc trưng (Feature extraction)
Việc trích xuất đặc trưng từ hình ảnh là một bước quan trọng trong quá trình phân tích và xử lý dữ liệu hình ảnh Trích xuất đặc trưng giúp ta chuyển đổi dữ liệu hình ảnh từ định dạng ban đầu sang một không gian đặc trưng có thể dùng để huấn luyện các mô hình học sâu
Trích xuất đặc trưng giúp tạo ra biểu diễn số học của dữ liệu hình ảnh từ đó giúp cho việc phân tích và xử lý trở nên dễ dàng hơn Trích xuất đặc trưng cũm giúp giảm chiều dữ liệu, từ đó giảm bớt việc xử lý và lưu trữ dữ liệu Điều này đặc biệt hữu ích khi phải xử lý các tập dữ liệu lớn trên các thiết bị có phần cứng hạn chế như điện thoại di động Các đặc trưng được trích xuất thường chứa thông tin quan trọng cho quá trình huấn luyện Các mô hình có thể cải thiện hiệu xuất và độ chính xác khi trích xuất các đặc trưng phù hợp dùng cho viẹc huấn luyện
Trích xuất đặc trưng đóng vai trò quan trọng trong xử lý dữ liệu hình ảnh Bằng cách chọn lọc và tối ưu hóa các đặc trưng phù hợp, ta có thể tạo ra các biểu diễn chất lượng cao của dữ liệu, từ đó cải thiện hiệu xuất cho các mô hình huấn luyện.
Học sâu
Học sâu là một nhánh nhỏ hơn của học máy (Machine Leaning) chủ yếu sử dụng các thuật toán phúc tạp hơn gọi là mạng nơ ron nhân tạo (Artificial Neural Netword) được lấy cảm hứng từ cấu trúc và chức năng của não người nhằm tái lạo lại các khả năng tư duy và suy nghĩ của con người Các khái niệm về mạng nơ ron nhân tạo và học sâu đã được phát triển vào những năm 60 của thế kỉ trước nhưng nó lại bị giới hạn về khả năng tính toán và lượng dữ liệu tại thời điểm đó Với sự tiến bộ của việc phân tích dữ liệu lớn trong khoảng thời gian gần đây đã cho phép ta tận dụng tối đa được khả năng của mạng nơ ron nhân tạo Học sâu đang là một trong những lĩnh vực phát triển nhất và là xu thế phát triển trong tương lai của ngành học máy
Các mô hình học sâu hoạt động dựa vào mạng nơ ron để mô phỏng khả năng của bộ não con người nên ta có thể mô tả cách hoạt động của học sâu như sau:
Mạng nơ ron được cấu tạo từ nhiều lớp (layer) khác nhau, mỗi lớp là một tập hơp những điểm gọi là nút (node) Các lớp được xây dựng dựa trên những lớp trước đó để tinh chỉnh là thực hiện các chứng năng khác nhau Nghĩa là một lớp sẽ nhận dữ liệu đầu vào từ đầu ra của lớp trước nó, sau dó lớp này thực hiện những phân tích trên dữ liệu dựa vào trọng số được gán ở mỗi lớp, tiếp đến dữ liệu sẽ được trả ra để làm đầu vào cho lớp kế tiếp Dữ liệu ban đầu sẽ được người dùng đưa vào lớp đầu tiên gọi là lớp đầu vào (Input layer), sau khi được xử lý lớp cuối cùng gọi là lớp đầu ra (Output layers) sẽ thực hiện việc trả ra kết quả cho người dùng
Quá trình này sẽ được thực hiện cả lan truyền thuận và lan truyền ngược, từ đó mô hình có thể tìm được các lỗi sai và thực hiện tinh chỉnh trọng số ở mỗi lớp Bằng phương pháp trên mô hình có thể tìm ra các kết quả sai trong kết quả trả về và thực hiện sữa chửa nó, điều này giúp cho mô hình có thể tự cải thiện độ chính xác theo thời gian
Hình 2.2: Mô hình mạng nơ ron nhân tạo
2.2.2 Mạng nơ ron (Nerual Network)
Nơ-ron là mô hình toán học mô phỏng nơ-ron trong hệ thần kinh của con người Mô hình đó biểu diễn các chức năng của nơron thần kinh con người
Hình 2.3: Cấu tạo mạng nơ ron và mô hình toán học của mạng nơ ron
Mô hình nơ-ron được mô phỏng như tính chất di truyền thông tin trên nơron, khi nơron nhận tín hiệu từ dendrite, nếu tín hiệu vượt quá một ngưỡng gọi là threshold thì tín hiệu sẽ được truyền qua nơron khác thông qua axon Việc tính toán đầu ra của mô hình Neural cũng vậy:
𝑦 = 𝑎(𝜔 1 𝑥 1 + 𝜔 2 𝑥 2 + 𝜔 3 𝑥 3 − 𝜃) Trong dó y là đầu ra và 𝑤 là trọng số được quyết định bởi mức độ quan trọng của thông tin
Mạng nơ-ron là sự kết hợp từ nhiều nơ-ron để tạo ra một mạng lưới thần kinh Tín hiệu sẽ được sử lý theo từng tầng và tầng sau sẽ nhận giá trị y đã tính toán ở trên để tiến hành xử lý
Cấu trúc của mạng nơ-ron được chia làm 3 phần gọi là lớp (Hình 1.2), hai lớp ở ngoài cùng gọi là lớp đầu vào và lớp đầu ra, các tầng ở giữa được gọi là lớp ẩn Một mạng nơ-ron có thể chưa nhiều tầng Hidden layer để phục vụ cho việc giải quyết từng bài toán
2.2.2.2 Các dạng của mạng nơ ron
Trải qua thời gian dài phát triển, các nhà nghiên cứu đã phát triển ra nhiều dạng biến thể của mạng nỏ ron nhân tạo với các tính chất khác nhau, phục vụ cho cho các mục đích khác nhau Một số dạng của mạng nơ ron nhân tạo có thể kể dến như:
Mô hình Perceptron là một trong những cái niệm cơ bản những vô cùng quan trọng của học máy Nó là mạng nơ ron lâu đòi nhất được Frank Rosenblatt tạo ra vào năm 1958 và cũng là dạng mạng nơ ron đơn giản nhất với chỉ một lớp nỏ ron duy nhất
Hình 2.4: Mô hình mạng perceptron
Perceptron hoạt động bằng cách khi có một dữ liệu được đưa vào, các đầu vào này sẽ được điều chỉnh tầm ảnh hưởng bởi trọng số được gán ở từng kết nối giữa đầu vào và nơ ron Sau đó tổng các giá trị đã được điều chỉnh thông qua trọng số sẽ được so sánh với ngưỡng đã quy định từ trước đẻ cho ra kết quả cuối cùng Đầu vào và đầu ra của mạng nơ ron này thường là các giá trị nhị phân nên ta cần đùng một giá trị ngưỡng để xác định kết quả của đầu ra
Percemtron thường được xử dụng trong các bài toán phân loại dữ liệu như là phân loại ảnh, văn bản Nó cũng có thể được sử dụng để phát hiện các phân đoạn ảnh, thậm chí được sử dụng trong việc xử lý dữ liệu tín hiệu như tín hiệu số hoặc xử lý tiếng nói
Mô hình Perceptron là một công cụ mạnh mẽ và lình hoạt trong xử lý dữ liệu và học sâu Mặc dù đơn giản những nó có thể được xử dụng trong nhiều bài toán thuộc nhiều lĩnh vực khác nahu Việc hiểu biết về cấu trúc và cách thức hoạt động của Perceptron cũng là nền tảng quan trọng trong việc nghiên cứu các mô hình phức tạp hơn của học sâu
Mạng nơ ron hồi quy (Recurent neural network)
Với các mạng nơ-ron truyền thống, cấu trúc của nó chỉ có ba phần bao gồm lớp đầu vào, lớp đầu ra, lớp ẩn Việc này làm cho đầu ra và đầu vào của mạng nơ-ron này là độc lập với nhau, do đó mô hình này không phù hơp với một số bài toán như đoán từ tiếp theo, hoàn thành câu,
Mạng nơ-ron hồi quy (Recurent neural network) ra đời với ý tưởng sử dụng bộ nhớ để lưu lại thông tin của những bước tính toán trước đó, nhờ đó nó có thể đưa ra những dự đoán chính xác Về mặt lý thuyết RNN có thể lưu trữ thông tin của một chuỗi rất dài, tuy nhiên trong thực tế nó chỉ có thẻ nhớ vài bước trước đó Mô hình RNN thường có cấu trúc như sau:
Hình 2.5: Mô hình mạng RNN
Về cơ bản, với mỗi lớp đầu vào 𝑥 đi qua lớp ẩn ℎ ta sẽ được lớp đầu ra 𝑦 Gọi
Dữ liệu phân tán
Hadoop là một mã nguồn mở dùng để lưu trữ và quản lý các tập dữ liệu lớn từ hàng gigabyte đến hàng terabyte Các tập dữ liệu này thay vì được lưu ở một máy chủ để thực hiện việc truy vấn và xử lý thì ta có thể tạo nhiều máy con chạy lưu trữ dữ liệu và chạy xong xong với nhau
Kiến trúc của Hadoop được chia thành nhiều cụm Mỗi cụm gồm 1 master node và nhiều worker node Trong một cụm sẽ chứa các thành phần bao gồm: MapReduce, HDFS, YARN Framework, Common Utillities
Hình 2.9: Các thành phần trong một cụm Hadoop
- Hadoop Distributed File System (HDFS): Là hệ thống tệp phân tán có thể chạy được trên các hệ thống giá rẻ HDFS có khả năng chịu lỗi cao do các tệp sẽ được tự động chia thành các mảnh nhỏ và lưu trữ trên nhiều máy chủ Ngoài ra HDFS cung cấp thông lượng dữ liệu tốt hơn các hệ thống thông thường khác
- MapReduce: Là hệ thống dùng để xử lý xong xong các tập dữ liệu lớn Tập dữ liệu sẽ được chia thành nhiều phần nhỏ và lưu trữ trên nhiều máy chủ Việc xử lý dữ liệu này sẽ được thực hiện tại từng máy chủ và gửi kết quả về máy chủ chính
- YARN Framework: Có nhiệm vụ giám sát và phân phối tài nguyên trên các cụm
- Hadoop Common: Thư viện java dùng để thao tác với Hadoop
Spark là một mã nguồn mở cung cấp các Computing Engine và Libraries cho việc xử lý dữ liệu xong xong trên hệ thống dữ liệu phân tán với hàng ngàn server Spark ra đời khi nhu cầu phát triển các mô hình học máy ngày càng cấp thiết Do các thuật toán học máy đa số là các thuật toán thuộc dạng cần phải lặp đi lặp lại nên Hadoop không thể đáp ứng được điều này do sàu mỗi lần thao tác với dữ liệu, Hadoop sẽ lưu dữ liệu này lại bộ nhớ do đó ta phải đọc lại toàn bộ dữ liệu từ bộ nhớ nếu muốn sử dụng chúng
Nhằm khắc phục những nhược điểm của Hadoop, Spark đưa ra một khái niệm Resilient Distributed Dataset (RDD) là một dạng cấu trúc dữ liệu trong Spark RDD được định nghĩa là tập hợp các phần tử chỉ có thể đọc được lưu trên các ô nhớ và phân vùng, do đó chúng có thể tác động song song với nhau Vì thế dữ liệu chỉ cần load một lần và lưu trữ trên RAM, các thao tác sau đó sẽ chỉ xử dụng dữ liệu đã được lưu trữ
Kiến trúc của Spark bao gồm các thành phần sau:
- Spark Core: Là nền tảng thực thi cho toàn bộ các thành phần khác trong Spark, nó cung cấp khả năng tính toán trên bộ nhớ RAM và các hệ thống External Storage
- SparkSQL: Cung cấp SchemaRDD để hỗ trợ các kiểu dữ liệu và có thể sử dụng trong các ngôn ngữ khác nhau
- Spark Streaming: Có nhiệm vụ theo dõi các stream mini batches và xử lý các kỹ thuật trong biến đổi RDD
- Mllib: Là framework cung cấp khả năng xử lý các thuật toán về học máy trên Spark
- GraphX: Có nhiệm vụ cung cấp các API tạo ra các đồ thị trên hệ thống
Hình 2.10: Các thành phần của Spark 2.3.2.2 PySpark
PySpark là một thư viện kết hợp giữa python và Apache Spark, PySpark cung cấp khả năng phân tích, xử lý dữ liệu một cách tuyệt vời với API DataFrame của Spark Do được tạo ra từ API của Spark nên PySpark cũng kế thừa những ưu điểm của Spark về tốc độ, khả năng mở rộng, khả năng chịu lỗi, PySpark là nền tảng mạnh mẽ để xử lý dữ liệu lớn và có thể mở rông dễ dàng Cùng với đó là tính chất dễ học, dễ dùng của python nên PySpark còn có thể được sử dụng trong các lĩnh vực khác nhau như tài chính, sức khỏe,
Thuật toán Locality Sensitive Hashing (LSH )
2.4.1 Bài toán Nearest Neighbor Search (NNS) Đây là một trong những bài toán phổ biến và có ứng dụng nhiều nhất trong lĩnh vực học máy Bài toán có thể phát biểu như sau:
- Trong một không gian D có k chiều gồm n điểm và số thực r Cho một điểm p thuộc không gian D Tìm một hoặc nhiều điểm q thuộc không gian
D sao cho khoảng cách từ p đến q bé hơn r
Dễ dàng nhận thấy, cách dễ nhất để giải quyết bài toán là tính khoảng cách giữa mọi cặp điểm và lưu vào một ma trận hai chiều Khi có một yêu cầu, ta sẽ duyệt qua lần lượt các điểm khác và đưa ra kết quả Việc này sẽ tốn rất nhiều thời gian để tính toán ma trận lưu trữ khoảng cách và thời gian truy vấn khi mà số chiều của của không gian tăng lên Việc thực hiện theo phương pháp trên gần như là bất khả thi khi mà số chiều tăng lên quá lớn
Trong thời đại hiện nay, việc số chiều có thể tăng lên vô cùng lớn là điều bình thường có thể xảy ra Thuật toán Locality Sensitive Hashing được giới thiệu bởi Indyk và Motwani dã giải quyết vấn đề này một cách hiệu quả
2.4.2 Locality Sensitive Hashing (LSH) Ý tưởng của LSH là băm các điểm dữ liệu trong tập dữ liệu bằng hàm băm h vào bảng T Nếu hai điểm p,q gần nhau thì khả năng hai điểm được băm vào cùng một ô sẽ cao hơn, ngược lại nếu hai điểm q,p càng xa nhau thì tỉ lệ được băm vào khác ô sẽ cao hơn Khi truy vấn, ta chỉ việc tìm các điểm trong ô có chứa điểm truy vấn
Cho hai số thực 𝑥 > 0 và 𝐶 ≥ 1 Nếu ta chọn một hàm băm h trong một họ các hàm băm (𝑟, 𝐶𝑟, 𝑝 close , 𝑝 far ), với hai điểm 𝑝, 𝑞 ∈ 𝑅 𝑑 ,ta có:
Theo định nghĩa trên, nếu ta muốn hai điểm gần nhau được băm vào cùng một ô và hai điểm xa nhau được băm vào khác ô thì ta cần 𝑝 far gần 0 còn 𝑝 close gần 1
Frontend
Trong thời đại công nghệ hiện nay, ứng dụng di động đã trở thành thiết bị không thể thiếu trong cuộc sống của chúng ta Nó không còn chỉ là một thiết bị giải trí hay kết nối mạng xã hội mà còn có nhiều ứng dụng trong cuộc sống thực tế Cùng với sự phát triển của công nghệ là sự phát triển của phần cứng Ngày nay các thiết bị di động được trang bị những cấu hình mạnh mẽ giúp chúng có thể chạy được các ứng dụng phức tạp, thậm chí có thể chạy được các mô hình học sâu như MobileNet
Nhờ đó, việc ứng dụng thị giác máy tính vào các thiết bị di động đã trở nên phổ biến hơn bao giờ hết Các ứng dụng ngân hàng hiện nay đã có thể xác thực giao dịch bằng phương pháp nhận diện khuông mặt Nhận diện văn bản cũng như vật thể trên thiết bị di động cũng trở nên đơn giản hơn bao giờ hết điển hình là tính năng tìm ảnh tương đồng, dịch văn bản từ camera của google
Android Studio là IDE được phát hành vào năm 2014 được sử dụng để phát triển các ứng dụng Android dựa trên InteliiJ IDE.Android Studio cung cấp các tính năng hỗ trợ cho việc phát triển phần mềm di đông Ngôn ngữ lập trình được sử dụng trong Android Studio là Java, chúng ta chỉ việc viết các tệp Java và Android Studio sẽ thực hiện nhiệm vụ còn lại, nó sẽ kết nối các tệp lại và thực hiện chạy các mã lập trình trên trình giả lập hoặc các thiết bị thực tế kết nối vào
Theo đó, quy trình làm việc đẻ phát triển ứng dụng di động cũng tuong tự như các quy trình phát triển ứng dụng khác Android Studio cung cấp cho lập trình viên các công cụ phục vụ cho từng bước trong quy trình Có năm quy trình trong việc phát triển phần mềm di động như sau:
Hình 2.11: Quy trình phát triển ứng dụng di động Tuy hiện tại có nhiều môi trường giúp các nhà phát triển có thể phát triển ứng dụng di động nhưng Android Studio vẫn là ứng dụng đáng sử dụng và không thể thay thế được Công cụ này hỗ trợ gần như tất cả các tính năng trong quy trình phát triển ứng dụng di động Người dùng có thể biên dịch, gỡ lỗi, quản lý dự án, thiết kế giao diện ngay trên ứng dụng Công cụ này được phát triển bởi Google, chủ sở hữu của hệ điều hành Android do đó các tài liệu tham khảo được viết rất chi tiết và có đầy đủ các hướng dẫn sử dụng Cùng với đó là lượng người dùng khổng lồ giúp ta có thể dễ dàng học tập từ các khóa học, các nguồn tài liệu trực tuyến khác.
Backend
API (Application Programming Interface) là giao thức mà các ứng dụng khác biệt dùng để giao tiếp với nhau API cung cấp khả năng trao đổi dữ liệu giữa các ứng dụng thông qua các giao thức HTTP, HTTPS
API thường có các ứng dụng sau:
- Web API: Là các hệ thống website sử dụng API cho phép ứng dụng khác có thể sử dụng các chức năng ứng dụng gốc bằng cách gọi API
- API trên hệ điều hành: Các hệ điều hành như Windows hay Linux cũng cung cấp các API giúp lập trình viên có thể tạo ra các phàn mềm có thể tương tác với hệ điều hành
- API của các thư viện: Các thư viện, framework được viết dựa trên một ngôn ngữ duy nhất nên các ngôn ngữ khác không thể sử dụng hoặc ứng dụng các tính năng của thư viện đó Do dó, các API được cung cấp để các lập trình viên có thể thực hiện những thao tác trên thư viện họ muốn Việc sử dụng API giúp ta có thể truy cập vào bất cứ website hoặc ứng dụng nào đó và sử dụng các chức năng trên đó Ngoài ra tính dễ duy trì và mở rộng của API cũng giúp nó trở thành công nghệ được sử dụng ở khắp mọi nơi trong lĩnh vực ứng dụng
Là một web framework được viết bằng python đùng để xây dựng web API Đây là một framework mạnh mẽ giúp các nhà phát triễn viết mã ít hơn, triển khai ứng dụng nhanh hơn, cải thiện khả năng tích hợp API với sự hỗ trợ về tài liệu được viết đầy đủ Đây là framework tốt nhất khi cần xây dựng một dự án vừa và nhỏ trong thời gian ngắn Fastapi có các ưu điểm giúp chúng ngày càng được tin dùng trong việc phát triển web API như sau: nhanh, code nhanh và ít lỗi hơn, dễ dàng sử dụng cùng với lượng code trùng lặp ít giúp ít lỗi hơn,
MÔ HÌNH TRÍCH XUẤT ĐẶC TRƯNG KHUÔN MẶT
Tổng quan và tiền sử lý dữ liệu
Để thực mô hình encode khuôn mặt, nhóm đã sử dụng tập dữ liệu FaceScrub bao gồm 105830 ảnh của 530 diễn viên nổi tiếng Để sử dụng tập dữ liệu trên cho bài toán Face recognition, nhóm đã thực hiện các bước tiền xử lý dữ liệu như sau:
Hình 3.1: Các bước tiền xử lý dữ liệu
Bước 1: Sử dụng mô hình face detection tiến hành xác định các tọa độ khuôn mặt trong ảnh Do có nhiều ảnh có chứa từ hai người trở lên nên ta không thể xác định được gương mặt chính xác của diễn viên, do đó ta sẽ loại bỏ những bức ảnh có từ hai người trở lên
Bước 2: Thực hiện cắt khuôn mặt ra khỏi ảnh theo tọa độ đã lưu
Bước 3: Ta chọn ngẫu nhiên 40 ảnh cho tập huấn luyện, 10 ảnh cho tập xác thực, 5 ảnh cho tập kiểm tra Cuối cùng ta loại bỏ những tập dữ liệu không đủ số lượng ảnh và còn lại 447 khuôn mặt
Hình 3.2: Ảnh được lấy từ tập huấn luyện
Xây dựng mô hình
Sau khi thực hiện quá trình tiền xử lý dữ liệu, nhóm tiến hành xây dựng các mô hình học xâu cho bài toán Face recognition Nhằm mục đích so sánh và đối chiếu, nhóm đã sử dụng ba mô hình là Resnet50, MobileNet, Inception để tìm ra được mô hình có chất lượng tốt nhất Các mô hình này sẽ được cài đặt bằng kỹ thuật fine tuning và thêm một số lớp vào sau mô hình gốc để phù hợp với bài toán
Lớp Tham số Lớp Tham số Lớp Tham số
Monitor val_los Dropout p = 0.5 Dropout p = 0.5 Dropout p = 0.5 Output classD7 Output classD7 Output classD7
Bảng 3.1: Kiến trúc và tham số của mô hình Tiếp đến là cấu trúc của tập dữ liệu, dữ liệu sẽ được chia thành ba phần bao gồm: tập huấn luyện, tập kiểm tra, tập xác thực Cấu trúc của mỗi tập bao gồm các thư mục có tên của diễn viên và cũng là tên lớp khi huấn luyện mô hình Trong mỗi folder sé là các bức ảnh với số lượng khác nhau đã được nhắc ở quá trình xử lý dữ liệu Đầu vào của các mô hình này là các bức ảnh 224x224 đã được rescale và chuyển hóa thành các ma trận mà mô hình có thể đọc được Sau khi trải qua quá trình tính toán, đầu ra của mô hình sẽ trả về một mảng có chứa phần trăm xác xuất ảnh thuộc lớp có vị trí là vị trí trong mảng.
Đánh giá
Sau khi tiến hành huấn luyện mô hình, từ lịch sử huấn luyện, ta chọn vẽ được các biểu đồ so sánh accuracy và val_loss của các mô hình:
Hình 3.3: Giá trị accurary trong quá trình huấn luyện mô hình Inception
Hình 3.4: Giá trị của loss trong quá trình huấn luyện mô hình Inception
Hình 3.5: Giá trị của accuracy trong quá trình huấn luyện mô hình MobileNet
Hình 3.6: Giá trị của loss trong quá trình huấn luyện mô hình MobileNet
Hình 3.7: Giá trị của accuracy trong quá trình huấn luyện mô hình Resnet50
Hình 3.8: Giá trị của loss trong quá trình huấn luyện mô hình Resnet50
Sau khi thực hiện đánh giá và chọn ra epoch tốt nhất ở mỗi mô hình, nhóm đã có bảng đánh giá sau:
Bảng 3.2: Giá trị F1-score của mỗi mô hình ở epoch tốt nhất
Từ F1-score ta có thể thấy mô hình Inception cho ra kết quả tốt nhất khi có giá gị cao nhât Ta mang mô hình vừa đào tạo thử nghiệm với tập dữ liệu ngẫu nhiên được lấy từ kiểm tra được kết quả như sau:
Hình 3.9: Kết quả kiểm tra mô hình Inception
Có thể thấy mô hình vẫn có thể đưa ra những kết qua sai lệch nhưng vẫn rất khả quan Điều này có thể là do kiến trúc của mô hình vẫn còn chưa tốt hoặc do tập dữ liệu chưa đủ tốt khi mà số ảnh của mỗi người trong tập dữ liệu có số tuổi không trải đều mà vẫn có nhiều trường hợp chỉ có ảnh của diễn viên đó ở độ tuổi trung niên hoặc thiếu niên Điều này làm hạn chế khả năng của mô hình khi mà tập dữ liệu này đã được thu thập khoảng 10 năm trước dẫn đến có thẻ xuất hiện sai xót khi kiểm tra với ảnh ở thời điểm hiện tại Trong tương lai, nhóm có thể cải thiện lại hiểu xuất mô hình bằng cách bổ sung thêm lượng dữ liệu ở các độ tuổi còn thiếu.
Trích xuất đặc trưng véc to ảnh
Sau khi chọn được mô hình tốt nhất để trích xuất đặc trưng của ảnh, việc ta cần làm chỉ là đưa ảnh qua mô hình đã được loại bỏ lớp phấn lớp ảnh Khi này ta sẽ có đầu ra là một vector chứa các đặc trưng của gương mặt diễn viên đó Ơ đây, do mặt hạn chế về tài nguyên và phần cứng nên ta chỉ sử dụng 10 bức ảnh của mỗi diễn viên để trích xuất đặc trưng và đưa vào cơ sở dữ liệu Dữ liệu này sẽ được phục vụ cho bước tiếp theo là truy vấn ảnh.
MÔ HÌNH TRUY VẤN ẢNH SỬ DỤNG LSH
Thuật toán Bucketed Random Projection
Giả sử trong một không gian nhiều chiều, có hai điểm A và B Ta có thể xây dựng một siêu mặt phẳng ngẫu nhiên có nhiệm vụ ngăn cách hai điểm A, B năm ở hai phần của mặt phẳng Nếu ta xem mặt phẳng chia không gian ra làm hai phần âm và dương, ta có thể gọi điểm ở phần âm có giá trị là 0 và điểm ở phần dương có giá trị là 1 Để xác định một vector nằm ở mặt nào của mặt phẳng, ta dùng tính chất của đại số tuyến tính là nếu các tích vô hướng của các vector và vector pháp tuyến lớn hơn 0 sẽ nằm ở cùng một phía Ngược lại, các vecto có tích vô hướng với vector pháp tuyến sẽ nằm cùng một phía Do đó, một siêu phẳng trong không gian nhiều chiều sẽ luôn chia các vector trong không gián đó thành hai phần
Với việc có nhiều siêu phẳng trong không gian, việc chỉ dùng một giá trị nhị phân để xác định vector đó là không đủ Do đó, ta sẽ xác định vector đó dựa trên các giá trị 0 và 1 được xác định bằng vị trí tương của vertor đó với các siêu phẳng ngẩu nhiên khác Việc các vector có các giá trị được gán bằng nhau rất có thể là do không có một siêu phẳng nào cắt ngang hai vector đó trong không gian Điều này có nghĩa hai vector đó có thể rất gần nhau trong thực tế Để tìm kiếm các vector gấn nhất cho một truy vấn, ta chỉ cần mã hóa vector truy vấn bằng cách gán các giá trị 0 và 1 dựa vào vị trí của vector đó với các siêu phẳng Việc so sánh vector truy vấn với các vector khác có thể được xác định bằng khoảng cách Hamming, đây là khoảng cách có giá trị bằng số vị trí mà tại đó giá trị của hai vector khác nhau
Việc các siêu phẳng được tạo ra ngẫu nhiên nằm hạn chế khả năng overfitting khi không thể khái quát hóa bài toán Việc tạo các siêu phẳng ngẫu nhiên cũng giúp thuật toán không phụ thuộc vào tập dữ liệu đầu vào Điều này có thể hạn chế việc gây ảnh hưởng lên hệ thống nếu một ai đó biết về thuật toán và luôn đưa các dữ liệu đầu vào ở cấu trúc xấu nhất cho thuật toán.
Cài đặt
PySpark là một framework tuyệt vời khi nó cung cấp cho ta tất cả các công cụ để có thể cài đặt thuật toán Bucketed Random Projection một cách dễ dàng Ta chỉ việc tạo một DataFrame từ các các vector đặc trưng ở bước trước Nhiệm vụ kế tiếp là tìm ra các tham số sao cho mô hình truy vấn đạt kết quả tốt nhất Từ mô hình đã được đào tạo, ta có thể tìm kiếm những vector gần với vector truy vấn Thông qua quá trình tìm kiếm các bộ siêu tham số phù hợp, nhóm đã tìm ra được mô hình có độ chính xác lớn nhất khoảng 70,04% dựa trên tập dữ liệu test gồm 447 bức ảnh với mỗi bức ảnh là một diễn viên khác nhau
Hình 4.1: Cài đặt LSH bằng PySpark
Hình 4.2: Truy vấn kết quả với mô hình LSH Với kết quả 70.04%, đây là một con số khá tốt khi với sự hạn chế về tài chính, nhân lực, phần cứng Nhóm sẽ tiếp tục tìm kiếm những bộ siêu tham số tốt hơn hoặc tăng số lượng dữ liệu huấn luyện mô hình để có thể cho ra kết quả tốt nhất nhằm ứng dụng hệ thống nhận diện khuôn mặt này vào cuộc sống thực tế.
HỆ THỐNG ỨNG DỤNG
Quy trình hoạt động tổng quát
Ứng dụng truy vấn ảnh là một ứng dụng di động kết hợp với mô hình truy vấn hình ảnh, trích xuất đặc trưng gương mặt Do sự hạn chế về mặt phần cứng nên ta không thể đặt trực tiếp các mô hình trên vào ứng dụng Việc sử dụng framework fastapi để tạo ra web API nhằm cung cấp việc giao tiếp giữa ứng dụng và các mô hình
Quy trình hoạt động của ứng dụng theo các bước như trong sơ đồ sau: frontend sẽ nhận ảnh từ người dùng thông qua ảnh chụp hoặc ảnh từ trong thư viện, Ảnh này sau đó sẽ được mã hóa và gửi đến backend Ảnh sau khi đưa qua backend sẽ được đưa qua mô hình trích xuất đặc trưng Vector đặc trưng sẽ tiếp tục được đưa vào mô hình truy vấn dữ liệu và lấy được các id ảnh của kết quả trả về Thông qua id ảnh, backend sẽ gửi về fontend đường link tương ứng với id ảnh Frontend sẽ sử dụng đường link được trả về và gắn vào các thẻ hiển thị hình ảnh thông qua đường mạng Ở đây nhóm sử dụng dịch vụ lưu trữ Google Cloud Storage để lưu trữ dữ liệu ảnh Điều này giúp tiết kiệm được thời gian trả về truy vấn, tiết kiệm bộ nhớ cho ứng dụng
Hình 5.1: Quy trình hoạt động của ứng dụng di động
Nền tảng sử dụng
Frontend Ứng dụng sử dụng Java tạo ra giao diện người dùng bao gồm các chức năng chọn ảnh từ bộ sưu tập hoặc ảnh chụp Nhiệm vụ tiếp theo là hiển thị ảnh từ Google Storage với đường link được trả về
Hình 5.2: Giao diện ứng dụng di động
Hệ thống backend sử dụng fastapi kết hợp với các mô hình đã được đào tạo để xử lý ảnh đầu vào
Hình 5.3: Dữ liệu trả về khi truy vấn đến API
Triển khai
Do hệ thống sử dụng backend riêng biệt với ứng dụng nên cần triển khai lên hệ thống có khả năng chịu tải được các mô hình đồng thời phải hỗ trợ Âpche Spark Ở thời điểm triển khai, nhóm sử dụng server có cấu hình như sau: hệ điều hành Window, CPU AMD Ryzen 7 4800H, GPU 1660ti Về khả năng chịu tải, server có khả năng xử lý nhiều request cùng lúc nhưng chỉ ở mức độ nhất định Trải qua quá trình điều chỉnh và tối ưu việc tích hợp các công nghệ, thời gian trung bình để một request được hoàn thành nằm trong khoảng 15 giây.