Máy tính mini NUC

Một phần của tài liệu NGHIÊN CỨU, PHÁT TRIỂN HỆ THỐNG NHẬN DIỆN KHUÔN MẶT PHỤC VỤ KIỂM SOÁT AN NINH TRONG TÒA NHÀ (Trang 33 - 60)

6. Thời gian và địa điểm thực hiện

2.4.2 Máy tính mini NUC

NUC (Next Unit of Computing) là máy tính thế hệ mới do Intel dẫn đầu phát triển. Thiết bị này vẫn sử dụng hệ điều hành Windows và Linux, tương thích với

mọi ứng dụng, phần mềm nhưng về mặt kích thước đã được tinh giảm đáng kể, chỉ giống như một quyển sách dày mà thôi. Đáng nói, dù hết sức nhỏ gọn nhưng số lượng cổng kết nối trên thiết bị vẫn đầy đủ, có thêm cả kết nối bluetooth để người dùng có thể linh hoạt ứng dụng trong cuộc sống.

Hình 2. 3 Máy tính mini NUC [12]

Về mặt cấu hình, NUC không gói gọn ở một tùy chọn nhất định mà có thể thay đổi tùy theo nhu cầu người sử dụng, tối đa hoặc tối thiểu. Nhưng do kích thước quá nhỏ mà NUC thường không có card đồ họa rời mà thay vào đó là card đồ họa tích hợp. Tuy nhiên, gần đây Intel đã ra mắt model mới nhất NUC 9 Extreme được trang bị card đồ họa rời RTX2070, cho nên trong tương lai tới hiệu năng của NUC hứa hẹn sẽ được tăng lên đáng kể.

Ưu điểm đầu tiên của Intel NUC chính là thiết kế nhỏ gọn, không những tiết kiệm không gian phòng mà thậm chí bạn có thể mang theo kè kè bên người. Chỉ với một hộp nhỏ kích cỡ 5 x 5inch là bạn đã có một thiết bị mạnh ngang ngửa máy tính truyền thống cách đây 1 – 2 năm. Quan trọng là nó đáp ứng đầy đủ nhu cầu cho hầu hết người dùng.

Ưu điểm thứ 2 là mức tiêu thụ điện. Phần cứng của NUC hoạt động với mức tiêu thụ cực ít.

Thứ ba là khả năng tùy biến. Do cấu hình của NUC là không cố định, ta có thể dễ dàng tháo lắp và nâng cấp phần cứng tùy theo nhu cầu sử dụng. Trong hầu hết trường hợp, bo mạch và CPU/APU của NUC khá là khó nâng cấp, cần có sự hiểu biết về máy tính nhất định và một chút tay nghề nhưng RAM và ổ cứng thì có thể thay thế rất linh hoạt.

Nhược điểm: Do thiết kế quá nhỏ mà phần cứng của NUC cũng gặp nhiều hạn chế. Các model phổ biến, giá rẻ chỉ đủ dùng cho các nhu cầu phổ biến như lướt web, gõ văn bản, xem video, chơi một số game nhẹ trong khi đó các model có thể xử lý tác vụ nặng lại có giá khá cao.

2.5Phần mềm và các thuật toán sử dụng

a) Ngôn ngữ lập trình

Để giải quyết bài toán nhận dạng khuôn mặt sử dụng thư viện OpenCV, chúng ta có thể sử dụng các ngôn ngữ lập trình như: .NET C#, VB, IronPython, Java, C++… Trong đồ án này ngôn ngữ lập trình được sử dụng là .NET C#, viết trên phần mềm Visual Studio.

Hình 2. 4 Ngôn ngữ lập trình C# [13]

b) Tìm hiểu về SSD (Single Shot Detector) trong bài toán phát hiện đối tượng (Object Detection)

Hình 2. 5 SSD trong bài toán phát hiện đối tượng [14]

Trước khi bắt đầu vào việc tìm hiểu về cách mà SSD làm việc, ta cùng điểm qua những đặc điểm chính của SSD. Tại mỗi vị trí trên biểu đồ tính năng, SSD đặt các khung hình mặc định với kích thước, tí lệ khác nhau. Trong quá trình xử lí, SSD sẽ đánh giá và tìm đối tượng trên các khung hình này nhằm tìm ra khung hình phù hợp nhất với đối tượng cần tìm kiếm. Thêm vào đó, bằng việc tìm kiếm trên các biểu đồ tính năng khác nhau, SSD có thể tìm kiếm các đối tượng với kích thước khác nhau mà không cần thay đổi kích thước của các khung hình. Thực nghiệm cho thấy, SSD đạt 74.3% mAP trên tập kiểm tra của VOC2007, đạt 59 FPS khi sử dụng Nvidia Titan X với kích thước ảnh đầu vào 512 x 512, nhanh hơn Faster R-CNN.

- Hướng tiếp cận

Ý tưởng chính của SSD đến từ việc sử dụng các khung hình, bằng việc khởi tạo sẵn các khung hình tại mỗi vị trí trên ảnh, SSD sẽ tính toán và đánh giá thông tin tại mỗi vị trí xem vị trí đó có vật thể hay không, nếu có thì là vật thể nào, và dựa trên kết quả của các vị trí gần nhau, SSD sẽ tính toán được một khung hình phù hợp nhất bao trọn vật thể.

Ngoài ra, bằng việc tính toán khung hình trên các biểu đồ tính năng khác nhau, tại mỗi tầng biểu đồ tính năng, một khung hình sẽ ôm trọn một phần hình ảnh với các kích thước khác nhau. Như trên ví dụ trên, con mèo và con chó có thể được phát hiện ở 2 tầng biểu đồ tính năng khác nhau, 2 kích thước và tỉ lệ khác nhau. Thay vì sử dụng một khung hình và thay đổi kích thước khung hình cho phù hợp với vật thể, thì SSD sử dụng nhiều khung hình trên nhiều tầng, từ đó tổng hợp ra vị trí và kích thước khung hình kết quả. Bằng việc loại trừ các region proposal, SDD có thể đạt được tốc tộ xử lí cao hơn Faster R-CNN.[3]

- Kiến trúc SSD

Hình 2. 7 Kiến trúc SSD [14]

Các bộ dự đoán phù hợp để phát hiện

SSD sử dụng VGG16 để trích xuất các tính năng, tại các tầng tính năng được sử dụng để phát hiện vật thể, SSD sử dụng các bộ lọc có kích thước 3 x 3 x p trên các lớp được sử dụng để dự đoán thay vì được sử dụng đầy đủ lớp kết nối như trên YOLO.

Biểu đồ tính năng đa tỷ lệ để phát hiện

Bằng việc sử dụng các bộ lọc, kích thước của bản đồ tính năng sẽ giảm dần theo độ sâu của mạng, hỗ trợ cho việc phát hiện vật thể ở các kích thước và tỷ lệ khác nhau. - Khung hình mặc định

Trên một biểu đồ tính năng kích cỡ m x n, tại mỗi vị trí cell hay tại mỗi pixel, khởi tạo các khung hình mặc định, các khung hình này có vai trò giống như các anchor của Faster R-CNN. Tuy nhiên, vì vị trí mỗi cell cố định nên các khung hình này cũng sẽ được cố định. Tại mỗi cell, giả sử khởi tạo k khung hình, SSD tính toán phân loại c lớp và đồng thời tính toán xem hình dáng của khung hình như thế nào như toạ độ (cx, cy), dài và rộng (w, h). Vậy tổng số tính toán là (c+4).k x m x n.

Hình 2. 9 Cách tính jaccard overlap [14]

- Huấn luyện

Việc huấn luyện SSD yêu cầu cung cấp thông tin về các giá trị thực của vật thể bao gồm các thông tin về lớp hình dạng.

Hình 2. 10 Một số hình ảnh chạy thực nghiệm của SSD [14]

- Tìm các khung phù hợp

Trong quá trình huấn luyện, ta tiến hành tìm các khung hình giới hạn trên các biểu đồ tính năng phù hợp với giá trị thực bằng cách tìm các khung hình có jaccard

overlap cao. Công thức tính jaccard overlap dựa trên tỉ lệ giữa diện tích vùng trùng nhau giữa 2 tập và diện tích của cả 2 tập hợp lại.

Các khung hình được lọc có chỉ số jaccard overlap lớn hơn mức ngưỡng 0.5. - Hàm mất mát (Loss)

Hàm mất mát của SSD được xây dựng bằng vị trí mất mát để đánh giá việc phát hiện và điểm tự tin để đánh giá việc phân lớp đối tượng.[3]

c) Tìm hiểu về thuật toán SVMs (Support Vector Machines)

Hệ thống vector hỗ trợ (SVM) là một lớp thuật toán được giám sát đặc biệt mạnh mẽ và linh hoạt cho cả phân loại và hồi quy.

- Giới thiệu

Hệ thống vector hỗ trợ (SVM) liên quan đến một cách mới để ước lượng một hàm phi tuyến tính bằng cách sử dụng một số lượng hạn chế các ví dụ đào tạo.[4] - Gặp khó khăn không có minima cục bộ

- Nó cho thấy khả năng khái quát hóa tốt hơn.

- Nó đạt được sự cân bằng phù hợp giữa độ chính xác đạt được trên một tập huấn luyện cụ thể và "năng lực" của máy, tức là khả năng của máy để học bất kỳ tập huấn luyện nào mà không bị lỗi.

- Một chiếc máy có quá nhiều công suất giống như việc ghi nhớ tất cả các hình thức đào tạo. Điều này không đạt được lỗi đào tạo.

- Một máy có công suất quá thấp giống như việc gán ngẫu nhiên một nhãn lớp. Hoặc chỉ tính đến các xác suất trước. Hay đại loại là nói "cây xanh là cây".

Có rất nhiều phần mở rộng cho SVM cơ bản, như SVM thô, cụm vectơ hỗ trợ, SVM có cấu trúc, hệ thống vectơ hỗ trợ chuyển đổi, Bayesian SVM, v.v.

- Trực giác đằng sau SVMs

Perceptron “Trong học máy, perceptron là một thuật toán để học có giám sát các phân loại nhị phân. Trình phân loại nhị phân là một hàm có thể quyết định đầu vào hay không, được biểu thị bằng một vectơ số, thuộc về một số lớp cụ thể - Wikipedia”

- Perceptron là tên được đặt cho bộ phân loại tuyến tính.

- Nếu tồn tại một Perceptron phân loại chính xác tất cả các ví dụ huấn luyện, thì chúng ta nói rằng tập huấn luyện có thể phân tách tuyến tính.

- Có sẵn các kỹ thuật học Perceptron khác nhau.

Hình 2. 11 Bộ phân loại tuyến tính [15]

Hình 2. 12 Phân tích tuyến tính [15]

Perceptron - bắt đầu với dữ liệu có thể phân tách tuyến tính:

Đối với dữ liệu có thể phân tách tuyến tính, nhiều Perceptron có thể phân loại chính xác tập huấn luyện.

SVM tuyến tính cứng: Perceptron tốt nhất cho dữ liệu có thể phân tách tuyến tính được gọi là "SVM tuyến tính cứng"

 Đối với mỗi hàm tuyến tính, chúng ta có thể xác định lề của nó.  Hàm tuyến tính có biên lớn nhất là hàm tốt nhất.

Hình 2. 13 SVM tuyến tính cứng [15]

Vectơ hỗ trợ:

- Các vectơ (trường hợp) xác định siêu phẳng là các vectơ hỗ trợ.

Hình 2. 14 Vector hỗ trợ [15]

Điều gì sẽ xảy ra nếu dữ liệu không thể phân tách tuyến tính

Vì vậy có một giải pháp cho điều đó chính là Kernel Trick.

d) Kernel Trick

Ánh xạ dữ liệu sang không gian có chiều cao nơi dễ dàng phân loại hơn với các bề mặt quyết định tuyến tính: định dạng lại vấn đề để dữ liệu được ánh xạ ngầm tới không gian này.

Hãy xem một ví dụ cho điều đó, cách nó ánh xạ đến một thứ nguyên cao hơn và chuyển đổi thành dữ liệu có thể phân tách tuyến tính.

Hình 2. 16 Chuyển đổi dữ liệu phân tách tuyến tính[16]

Do đó, không cần thực hiện ánh xạ này một cách rõ ràng.

- Đối với một số ánh xạ, tích số chấm trong không gian đặc trưng có thể được biểu thị dưới dạng một hàm trong không gian đầu vào:

Ф(X1). Ф(X2) = k.( X1 , X2 )

Vì vậy, nếu giải pháp sẽ chỉ liên quan đến các sản phẩm chấm thì nó có thể được giải quyết bằng cách sử dụng thủ thuật hạt nhân (tất nhiên, phải chọn chức năng hạt nhân thích hợp).

Vấn đề là, với các hạt nhân mạnh mẽ như "hạt nhân Gaussian", có thể học một bộ phân loại phi tuyến tính hoạt động rất tốt trên tập huấn luyện.

Hình 2. 17 Hàm phân biệt phi tuyến tính [16]

Điều này không mắc lỗi với tập huấn luyện.

Các vấn đề quan trọng khác

Bộ phân loại này đang hoạt động rất tốt đối với dữ liệu huấn luyện được xem xét, nhưng điều này không đảm bảo rằng bộ phân loại hoạt động tốt với phần tử dữ liệu không có trong tập huấn luyện (nghĩa là với dữ liệu không nhìn thấy).

Điều này đang trang bị quá nhiều bộ phân loại với dữ liệu đào tạo. Có thể chúng ta cũng đang tôn trọng tiếng ồn (Có thể có sai sót khi thực hiện các phép đo). Khả năng "hoạt động tốt hơn với các mẫu thử nghiệm không nhìn thấy" được gọi là khả năng tổng quát hóa của bộ phân loại.

Khả năng khái quát hóa:

- Có ý kiến cho rằng cái đơn giản sẽ có khả năng khái quát hóa tốt hơn. - Làm thế nào để định lượng điều này?

- (Lỗi huấn luyện + thước đo độ phức tạp) cần được tính đến khi thiết kế bộ phân loại.

- Hệ thống vectơ hỗ trợ được chứng minh là có khả năng tổng quát hóa tốt hơn

Điều này có một số lỗi đào tạo, nhưng đây là một lỗi tương đối đơn giản.

SVM tuyến tính mềm: Nó cho phép một số sai lầm với tập huấn luyện. Tuy nhiên, điều này là để đạt được lợi nhuận tốt hơn.

Vì vậy, nói một cách chính thức về SVM:

- Bề mặt quyết định là một siêu phẳng (đường trong 2D) trong không gian đặc trưng (tương tự như Perceptron).

Hình 2. 19 Một số lỗi đào tạo đơn giản [16]

Tóm lại:

 Ánh xạ dữ liệu đến một không gian rất cao được xác định trước thông qua một hàm nhân

 Tìm siêu phẳng tối đa hóa lề giữa hai lớp

 Nếu dữ liệu không tách biệt được, hãy tìm siêu phẳng tối đa hóa lề và giảm thiểu (hình phạt liên quan đến) phân loại sai.[4]

Hình 2. 20 SVM tuyến tính mềm [16]

Thuật toán k-láng giềng gần nhất (KNN) là một thuật toán học máy có giám sát đơn giản, dễ thực hiện, có thể được sử dụng để giải quyết cả vấn đề phân loại và hồi quy.

Thuật toán học máy được giám sát (trái ngược với thuật toán học máy không được giám sát) là một thuật toán dựa vào dữ liệu đầu vào được gắn nhãn để học một hàm tạo ra đầu ra thích hợp khi được cung cấp dữ liệu mới chưa được gắn nhãn.

Hãy tưởng tượng máy tính là một đứa trẻ, chúng ta là người giám sát nó (ví dụ: cha mẹ, người giám hộ hoặc giáo viên) và chúng ta muốn đứa trẻ (máy tính) học được hình dáng của một con lợn. Chúng ta sẽ cho trẻ xem một số hình ảnh khác nhau, một số hình là lợn và phần còn lại có thể là hình ảnh của bất cứ thứ gì (mèo, chó, v.v.).

Khi ta nhìn thấy một con lợn, chúng ta hét lên "lợn!" Khi nó không phải là một con lợn, chúng ta hét lên "không, không phải là lợn!" Sau khi làm điều này vài lần với trẻ, chúng ta cho trẻ xem một bức tranh và hỏi "con lợn?" và chúng sẽ nói chính xác (hầu hết thời gian) nói "con lợn!" hoặc "không, không phải lợn!" tùy thuộc vào hình ảnh là gì. Đó là học máy có giám sát.

Các thuật toán học máy được giám sát được sử dụng để giải quyết các vấn đề phân loại hoặc hồi quy.

Một bài toán phân loại có một giá trị rời rạc làm đầu ra của nó. Ví dụ: "thích dứa trên bánh pizza" và "không thích dứa trên bánh pizza" là rời rạc. Sự tương tự ở trên về việc dạy một đứa trẻ xác định một con lợn là một ví dụ khác về bài toán phân loại.

Bảng 2. 1 Bảng hiển thị dữ liệu được tạo ngẫu nhiên

Tuổi Thích dứa trong bánh pizza

42 1 65 1 50 1 76 1 96 1 50 1 91 0 58 1

25 1 23 1 75 1 46 0 87 0 96 0 45 0 32 1 63 0 21 1 26 1 93 0 68 1 96 0

Bảng này cho thấy một ví dụ cơ bản về dữ liệu phân loại có thể trông như thế nào. Ta có một công cụ dự đoán (hoặc một tập hợp các công cụ dự đoán) và một nhãn. Trong hình ảnh, chúng ta có thể đang cố gắng dự đoán xem ai đó thích dứa (1) trên bánh pizza của họ hay không (0) dựa trên tuổi của họ (chỉ số dự đoán). Thông lệ tiêu chuẩn là biểu diễn đầu ra (nhãn) của thuật toán phân loại dưới dạng số nguyên như 1, -1 hoặc 0. Trong trường hợp này, những con số này hoàn toàn là biểu diễn. Không nên thực hiện các phép toán trên chúng vì làm như vậy sẽ vô nghĩa. Hãy suy nghĩ một chút. "Thích dứa" + "không thích dứa" là gì? Chính xác. Chúng ta không thể thêm chúng, vì vậy chúng ta không nên thêm các biểu diễn số của chúng. Một bài toán hồi quy có một số thực (một số có dấu thập phân) làm đầu ra của nó. Ví dụ: chúng ta có thể sử dụng dữ liệu trong bảng dưới đây để ước tính cân nặng của một người nào đó dựa trên chiều cao của họ.

Bảng 2. 2 Bảng thống kê một phần của tập dữ liệu chiều cao và cân nặng SOCR

Chiều cao (Inches) Cân nặng (Pounds)

65.78 112.99

69.40 153.03 68.22 142.34 67.79 144.30 68.70 123.30 69.80 141.49 70.01 136.46 67.90 112.37 66.78 120.67 66.49 127.45 67.62 114.14 68.30 125.46 67.12 122.46

Dữ liệu được sử dụng trong phân tích hồi quy sẽ giống với dữ liệu được hiển thị trong hình trên. Chúng ta có một biến độc lập (hoặc tập hợp các biến độc lập) và

Một phần của tài liệu NGHIÊN CỨU, PHÁT TRIỂN HỆ THỐNG NHẬN DIỆN KHUÔN MẶT PHỤC VỤ KIỂM SOÁT AN NINH TRONG TÒA NHÀ (Trang 33 - 60)

w