- Phân tích thành phần chính là thuật toán tìm một không gian mới với số chiều nhỏ hơn để biểu diễn dữ liệu.. Mục đích của nó là giảm một tập hợp các biến lớn hơn thành một tập hợp các b
Trang 1ĐẠI HỌC QUỐC GIA THÀNH PHỐ HỒ CHÍ MINH
TRƯỜNG ĐẠI HỌC BÁCH KHOA
BÁO CÁO BÀI TẬP LỚN ĐẠI SỐ TUYẾN TÍNH
ĐỀ TÀI PHÂN TÍCH PCA ĐỂ NHẬN DIỆN KHUÔN MẶT
LỚP – NHÓM – HK241 Giảng viên hướng dẫn: TS Nguyễn Xuân Mỹ
Thành phố Hồ Chí Minh - 2024
Trang 2MỤC LỤC
LỜI MỞ ĐẦU 1
YÊU CẦU ĐỀ TÀI 2
PHẦN 1: CƠ SỞ LÝ THUYẾT 3
1.Đặt vấn đề 3
2.Khái niệm 3
3.Sơ lược về thành phần chính (PCA) 3
4.Các bước phân tích thành phần chính 6
5.Ưu điểm và nhược điểm của PCA 6
PHẦN 2: SỬ DỤNG PCA TRONG NHẬN DIỆN KHUÔN MẶT 6
1.Biểu diễn khuôn mặt 6
2.Tìm trung bình ảnh và ảnh trung bình chuẩn hóa 7
3.Tìm ma trận hiệp phương sai 7
4.Không gian khuôn mặt riêng 8
5.Bước nhận diện ảnh 8
PHẦN 3: THỰC HÀNH NHẬN DIỆN KHUÔN MẶT 8
1.Thu thập dữ liệu khuôn mặt sinh viên từ trường đại học Bách Khoa 8
2.Xử lí và chuẩn bị dữ liệu cho PCA 9
3.Áp dụng PCA để giảm chiều dữ liệu 9
4.Xây dựng và huẩn luyện mô hình nhận diện khuôn mặt 9
5.Kiểm tra và đánh giá hiệu suất mô hình 9
PHẦN 4: SẢN PHẨM CODE MATLAB 9
1.Code MATLAB 9
2.Kết quả 12
PHẦN KẾT LUẬN 13
Trang 3TÀI LIỆU THAM KHẢO 14
Trang 4LỜI MỞ ĐẦU:
Trong thời đại phát triển mạnh mẽ của kỹ thuật số và mạng Internet, vấn đề đảm bảo an toàn thông tin và tài sản vật chất ngày càng trở nên cấp thiết và phức tạp Những sự cố như đánh cắp thông tin, xâm nhập tài khoản ngân hàng, thẻ tín dụng hay tấn công các hệ thống máy tính quan trọng của chính phủ không còn hiếm gặp Chỉ riêng tại Mỹ, hơn 100 triệu đô la đã bị thất thoát vào năm 1998
do các vụ xâm nhập bất hợp pháp này.
Phần lớn các vụ vi phạm an ninh đều khai thác các lỗ hổng cơ bản trong hệ thống truy cập và kiểm soát thông tin Điều này phần nào xuất phát từ cách các
hệ thống xác thực người dùng Thay vì dựa trên những yếu tố đặc trưng nhận diện bản thân người dùng (như dấu vân tay, khuôn mặt), chúng thường chỉ kiểm tra các yếu tố mà người dùng “sở hữu”, như chứng minh nhân dân, mật khẩu,
mã số thẻ tín dụng hoặc chìa khóa Những yếu tố này không mang tính độc nhất
và dễ bị đánh cắp hoặc sao chép Kẻ gian có thể lợi dụng chúng để truy cập dữ liệu hoặc tài sản một cách dễ dàng.
Hiện nay, sự phát triển của công nghệ hiện đại đã mở ra các phương pháp xác thực tiên tiến hơn, dựa vào những đặc trưng sinh học độc nhất của con người, như khuôn mặt, giọng nói hay dấu vân tay.
Trong chương này, chúng ta sẽ tìm hiểu về một số phương pháp nhận dạng khuôn mặt đã và đang được ứng dụng rộng rãi Đặc biệt, chúng ta sẽ tập trung vào phương pháp phân tích thành phần chính (Principal Component Analysis - PCA), một kỹ thuật quan trọng trong lĩnh vực này.
Trang 5YÊU CẦU ĐỀ TÀI
- Mô tả cơ sở lý thuyết của PCA.
- Nêu các bước chi tiết dùng PCA để nhận diện khuôn mặt.
- Thực hành: Nhận diện sinh viên vào trường Bách Khoa tp HCM.
- Sản phẩm: Là một phần mềm (code matlab, hoặc python, ) có khả năng nhận biết được sinh viên của trường.
Trang 6PHẦN 1: CƠ SỞ LÝ THUYẾT.
1.Đặt vấn đề:
- Cùng là 1 tờ giấy, tuy nhiên với 2 góc nhìn khác
nhau sẽ cho ra 2 hình ảnh khác nhau
- Phân tích thành phần chính là thuật toán tìm một
không gian mới với số chiều nhỏ hơn để biểu diễn dữ
liệu Các trục tọa được xây dựng sao cho trên mỗi
trục, độ biến thiên dữ liệu lớn nhất có thể Tuy nhiên,
việc làm này chắc chắn chưa phải tốt nhất vì chúng ta chưa biết thành phần nào
là quan trọng hơn hoặc có thể lượng thông tin của mỗi thành phần là như nhau,
bỏ đi thành phần nào cũng sẽ mất một lượng thông tin lớn Nếu chúng ta có thể biểu diễn các vector dữ liệu ban đầu trong một hệ cơ sở mới mà trong đó, tầm quan trọng giữa các thành phần là khác nhau rõ rệt, thì chúng ta có thể bỏ qua những thành phần ít quan trọng nhất
Ví dụ: Có hai camera chụp một người, một cái đặt phía trước người và một cái
đặt trên đầu người đó Rõ ràng hình ảnh từ camera đặt phía trước người mang nhiều thông tin hơn so với hình ảnh nhìn từ phía trên đầu Vì vậy, bức ảnh chụp
từ phía trên đầu có thể được bỏ qua
2.Khái niệm:
Phân tích thành phần chính (viết tắt là PCA) là một kỹ thuật giảm biến có nhiều điểm tương đồng với phân tích nhân tố khám phá Mục đích của nó là giảm một tập hợp các biến lớn hơn thành một tập hợp các biến 'nhân tạo' nhỏ hơn, được gọi là 'thành phần chính', chiếm phần lớn phương sai trong các biến ban đầu
Hình minh họa khi sử dụng PCA để phân tích dữu liệu.
3.Sơ lược về phân tích thành phần chính (PCA):
a.Đặc tính của PCA:
- Giúp giảm số chiều dữ liệu khi dữ liệu có quá nhiều chiều thông tin.
Trang 7- Do dữ liệu ban đầu có số chiều lớn (nhiều biến) thì PCA giúp chúng ta xoay trục tọa độ, xây một tọa độ mới đảm bảo độ biến thiên của dữ liệu và giữ lại được nhiều thông tin nhất mà không ảnh hưởng đến chất lượng của các mô hình
dự báo (Maximize the variability)
- Do PCA giúp tạo 1 hệ trục toạ độ mới nên về mặt ý nghĩa toán học, PCA giúp chúng ta xây dựng những biến factor mới là tổ hợp tuyến tính của những biến factor ban đầu
- Trong không gian mới, có thẻ giúp chúng ta khám phá thêm những thông tin mới mà tại chiều thông tin cũ những thông tin này bị che mất (như ví dụ tờ giấy
ở trên)
b Cơ sở toán học của PCA:
- Kỳ vọng (mean): Là giá trị mong muốn, nó đơn giản là trung bình cộng của toàn bộ các giá trị Cho N giá trị x1, x2,…, xn:
- Phương sai (variance): Là trung bình cộng của bình phương khoảng cách từ mỗi điểm tới kỳ vọng, phương sai càng nhỏ thì các điểm dữ liệu càng gần với kỳ vọng, tức các điểm dữ liệu càng giống nhau Phương sai càng lớn thì ta nói dữ liệu càng có tính phân tán
- Hiệp phương sai (covariance): Là độ đo sự biến thiên cùng nhau của hai biến ngẫu nhiên (phân biệt với phương sai – đo mức độ biến thiên của một biến) Nếu
2 biến có xu hướng thay đổi cùng nhau (nghĩa là, khi một biến có giá trị cao hơn giá trị kỳ vọng thì biến kia có xu hướng cũng cao hơn giá trị kỳ vọng), thì hiệp phương sai giữa hai biến này có giá trị dương Mặt khác, nếu một biến nằm trên giá trị kỳ vọng còn biến kia có xu hướng nằm dưới giá trị kỳ vọng, thì hiệp phương sai của hai biến này có giá trị âm Nếu hai biến này độc lập với nhau thì giá trị bằng 0
- Ma trận hiệp phương sai:
Cho n điểm dữ liệu được biểu diễn bởi các vector x1, x2, , xn, khi đó, vector
kỳ vọng và ma trận hiệp phương sai của toàn bộ dữ liệu được định nghĩa là:
Trang 8Trong đó:
- Ma trận hiệp phương sai là một ma trận đối xứng, hơn nữa, nó là một ma trận nửa
xác định dương
- Mọi phần tử trên đường chéo của ma trận hiệp phương sai là các số không âm
Chúng cũng chính là phương sai của từng chiều của dữ liệu
- Các phần tử ngoài đường chéo Sij, i ≠ j thể hiện sự tương quan giữa thành phần thứ i
và thứ j của dữ liệu, còn được gọi là hiệp phương sai Giá trị này có thể dương, âm hoặc
bằng 0 Khi nó bằng 0, ta nói rằng hai thành phần i, j trong dữ liệu là không tương quan
(uncorrelated)
- Nếu ma trận hiệp phương sai là ma trận đường chéo, ta có dữ liệu hoàn toàn không
tương quan giữa các chiều
- Minh hoạ ma trận hiệp phương sai:
S = [ var (x) cov (x , y)
cov (x , y) var ( y) ]
- Trị riêng, vector riêng của ma trận hiệp phương sai:
Cho ma trận vuông , nếu số vô hướng và vector
thoả mãn:
thì λ được gọi là một trị riêng của A và x được gọi là vectơ riêng tương ứng với trị riêng đó
+ Trị riêng là nghiệm của phương trình đặc trưng
+ Một trị riêng có thể có nhiều vector riêng
+ Mỗi vector riêng chỉ ứng với một trị riêng duy nhất
+ Nếu là một vector riêng của ứng với thì cũng là vector riêng ứng với trị riêng đó
Trang 9+ Mọi ma trận vuông bậc n đều có n trị riêng (kể cả lặp) và có thể là các số phức Với ma trận đối xứng, tất cả các trị riêng đều là các số thực
+ Với ma trận xác định dương, tất cả các trị riêng của nó đều là các số thực dương Với ma trận nửa xác định dương, tất cả các trị riêng của nó đều là các số thực không âm
4.Các bước phân tích thành phần chính:
Bước 1: Tìm kỳ vọng mean (giá trị trung bình cộng).
Bước 2: Tìm ma trận hiệp phương sai.
Bước 3: Tìm trị riêng rồi sắp xếp theo thứ tự giảm dần và tìm các vecto riêng
ứng với các trị riêng đó
Bước 4: Chọn trị riêng ban đầu và vecto riêng ứng với các trị riêng này Lập ma
trận có các cột là các vecto riêng đã chọn
Bước 5: Tính ảnh của vecto.
5.Ưu điểm và nhược điểm của PCA:
a.Ưu điểm:
- PCA là một kỹ thuật có lợi cho việc giảm chiều dữ liệu, vì nó làm giảm độ phức tạp tính toán và yêu cầu lưu trữ
- Nó có thể làm giảm đa cộng tuyến hoặc tương quan giữa các tính năng, dẫn đến cải thiện hiệu suất và tính ổn định của các mô hình hồi quy hoặc phân loại
- PCA tăng cường khả năng trực quan hóa và diễn giải dữ liệu, cho phép xác định các mẫu hoặc cụm dễ dàng hơn
- Bảo toàn hầu hết thông tin và phương sai trong dữ liệu bằng cách xếp hạng PC theo mức độ quan trọng và loại bỏ những PC ít quan trọng nhất
b.Nhược điểm:
- Chỉ làm việc với dữ liệu numeric
-Nhạy cảm với các điểm outlier (là một điểm dữ liệu sai khác đáng kể so với các điểm dữ liệu khác)
- Không phù hợp với các mô hình phi tuyến tính, do PCA hoàn toàn dựa trên các biến đổi tuyến tính
- Thiếu sót thông tin: vì phân tích PCA chỉ giữ lại những chiều quan trọng nhất đối với bộ dữ liệu, nên đôi lúc sẽ có sai sót trong việc chọn số chiều giữ lại dẫn đến lượng thông tin mà ta đánh mất sau đó khá lớn
- Độ quan trọng của dữ liệu: không phải lúc nào chiều phân bố dữ liệu lớn nhất cũng mang lại tốt nhất cho việc phân tích dữ liệu
PHẦN 2: CÁC BƯỚC DÙNG PCA ĐỂ NHẬN DIỆN KHUÔN MẶT.
1.Biểu diễn lại khuôn mặt:
- Tập huấn luyện với m ảnh có kích thước M× N được biểu diễn lại thành các vector kích thướcM×N Để đảm bảo tính chính xác, mỗi khuôn mặt được chụp nhiều ảnh ở các góc độ khác nhau
Trang 10- Mỗi khuôn mặt được kí hiệu: x1, x2, , x n.
2.Tìm trung bình ảnh và ảnh trung bình chuẩn hóa:
- Ảnh khuôn mặt trung bình σ được tính bằng trung bình cộng của tất cả các ảnh trong tập huấn luyện:
i=1
n
x i=x1+x2+ +x n
n
Với n là tổng số ảnh trong tập dữ liệu
- Ảnh trung bình chuẩn hóa được xác định là sự khác biệt giữa ảnh gốc và ảnh trung bình:
φ i =x i −σ
Trong đó:
+ x i là ảnh gốc
+φ i là ảnh sau khi chuẩn hóa
3.Tìm ma trận hiệp phương sai:
- Mỗi ảnh trong tập dữ liệu được coi là một vector Giả sử tập dữ liệu chứa n
ảnh, mỗi ảnh đã chuẩn hóa là một vector φ Tập hợp tất cả các vector này tạo
thành ma trận A:
A =[φ1, φ2, , φ n].
Khi đó ma trận hiệp phương sai sẽ được tính bằng:
C = A A T
Trong đó:
+ Ma trận Acó kích thước M×N, với M là số pixel của mỗi ảnh và N là số ảnh trong tập dữ liệu
+ Ma trận C có kích thước M×N, gây khó khăn trong tính toán
Do đó ta phải giảm kích thước tính toán:
- Thay vì tính vecto riêng của C = A A T, ta tính vecto riêng của A A T, với A A T
có kích thước nhỏ hơn M ×N.
- Gọi ϑ i là vecto riêng của A A T và λ ilà các trị riêng tương ứng:
A A T ϑ i = λ i ϑ i
- Khi đó vecto riêng u i của C được tính:
u i = A ϑ i
Trang 11Bằng cách này vecto riêng của C được xây dựng từ vecto riêng của A A T giúp
ta đơn giản hóa việc tính toán
4.Không gian khuôn mặt riêng:
- Các vecto riêng của ma trận A A T là A ϑ i được kí hiệu là U i Khi người ta biến đổi lại kích thước của U i ngược lại thành kích thước ảnh, nó giống như một ảnh khuôn mặt nhưng khó nhìn hơn và được gọi là khuôn mặt riêng Mỗi vector ứng với một khuôn mặt riêng trong không gian khuôn mặt, các vector riêng bằng vector 0 được loại bỏ do đó cũng làm hạn chế không gian khuôn mặt tới một mức độ nào đó Một ảnh khuôn mặt có thể được chiếu vào không gian khuôn mặt riêng bằng công thức:
θ =U T φ
Trong đó:
+ U là ma trận chuyển đổi có các cột là các vecto riêng A ϑ i đã tìm được
+ φ là ảnh trung bình chuẩn hóa của ảnh khuôn mặt cần chiếu
5 Bước nhận diện ảnh:
- Ảnh kiểm tra x được chiếu vào không gian khuôn mặt để thu được vecto θ.
(x−φ)
- Khoảng cách từ vecto θ tới mỗi vecto khuôn mặt riêng θ k được gọi là khoảng cách Ơ-clit có công thức:
ϵ k2 =‖θ −θ k‖2
Với: k = 1,2,3, ,n
θ k là một vecto mô tả lớp khuôn mặt thứ k Một khuôn mặt được xác định là thuộc lớp k nếu ϵ k là nhỏ nhất và dưới một ngưỡng T chọn trước Ngược lại được coi là không thuộc lớp k
- Để giảm nhầm lẫn khi nhận diện, nếu có nhiều ảnh giống nhau dưới ngưỡng, ta dùng thuật toán láng giềng gần nhất Cụ thể, tính khoảng cách từ ảnh cần nhận dạng đến các ảnh dưới ngưỡng Mỗi khuôn mặt là một lớp, đếm số ảnh dưới ngưỡng trong từng lớp Ảnh cần nhận dạng sẽ thuộc lớp có nhiều ảnh dưới ngưỡng nhất
PHẦN 3: THỰC HÀNH NHẬN DIỆN KHUÔN MẶT.
1.Thu thập dữ liệu khuôn mặt sinh viên từ trường đại học Bách Khoa:
Thu thập ảnh khuôn mặt của sinh viên từ các nguồn khác nhau, đa dạng góc chụp và biểu hiện khuôn mặt để tăng độ chính xác
2.Xử lí và chuẩn bị dữ liệu cho PCA:
Trang 12- Chuẩn bị ảnh: chuyển đổi ảnh về cùng kích thước và hình dạng.
- Chuẩn hóa dữ liệu: đưa các giá trị pixel về cùng khoảng giá trị
- Biểu diễn thành dữ liệu số: chuyển đổi mỗi ảnh thành vector hoặc
ma trận để sử dụng cho PCA
3 Áp dụng PCA để giảm chuyền dữ liệu:
- Tính ma trận hiệp phương sai từ dữ liệu ảnh
- Lựa chọn số lựa thành phần chính cần giữ lại
4 Xây dựng và huấn luyện mô hình nhận dạng khuôn mặt:
- Chọn thuật toán để nhận dạng khuôn mặt: Lựa chọn một thuật toán như K-nearest neighbors (KNN), Support Vector Machines (SVM), hoặc Convolutional Neural Networks (CNN) để nhận dạng khuôn mặt
- Chia tập dữ liệu: phân chia dữ liệu thành tập huấn luyện và tập kiểm tra
- Huấn luyện mô hình: sử dụng dữ liệu đã được giảm chiều từ PCA để huấn luyện mô hình
5 Kiểm tra và đánh giá hiệu suất mô hình:
- Kiểm tra trên tập kiểm tra: sử dụng dữ liệu kiểm tra để đánh giá hiệu suất mô hình
-Đánh giá kết quả: Sử dụng các độ đo như độ chính xác (accuracy), precision, recall và F1-score để đánh giá hiệu suất của mô hình nhận dạng
PHẦN 4: SẢN PHẨM CODE MATLAB.
1.Code MATLAB:
% Khởi tạo bộ dò khuôn mặt
faceDetector = vision.CascadeObjectDetector;
% Đường dẫ( n file anh đẫ+ u vào
input_image = 'khuonmat/the1.jpg' ; % File anh gô3 c output_folder = 'khuonmat' ; % Thư mục lưu anh
khuôn mặt
% Tạo thư mục lưu nế3 u chưa tô+ n tại
if ~exist(output_folder, 'dir' )
Trang 13mkdir(output_folder); % Tạo thư mục nế3 u chưa tô+ n tại
end
% Đọc anh
img = imread(input_image);
% Dò khuôn mặt
bboxes = step(faceDetector, img);
% Kiếm tra nế3 u có ít nhẫ3 t 1 khuôn mặt
if isempty(bboxes)
disp( 'Không tìm thẫ3 y khuôn mặt nào trong anh!' );
else
% Sô3 lượng khuôn mặt cẫ+ n lưu
c = 50; % Giới hạn sô3 khuôn mặt
temp = 0; % Bộ đế3 m anh đã lưu
for j = 1:size(bboxes, 1) % Lặp qua từng khuôn mặt được phát hiện
if temp >= c
disp( 'Đã đạt giới hạn sô3 lượng anh khuôn mặt cẫ+ n
xư lý.' );
break ;
end
% Cắ3 t khuôn mặt và resize
face = imcrop(img, bboxes(j, :)); % Cắ3 t khuôn mặt
227x227
Trang 14% Lưu anh
filename = fullfile(output_folder,
strcat(num2str(temp), '.jpg' ));
imwrite(face, filename);
temp = temp + 1;
disp([ 'Đã lưu: ' , filename]);
end
end
% Hiến thị anh gô3 c và vùng nhận diện khuôn mặt figure;
imshow(img);
if ~isempty(bboxes)
hold on ;
for k = 1:size(bboxes, 1)
rectangle( 'Position' , bboxes(k, :), 'EdgeColor' ,
'r' , 'LineWidth' , 2);
end
hold off ;
title( 'Các khuôn mặt được phát hiện' );
end
disp( 'Hoàn thành việc cắ3 t và lưu các khuôn mặt.' );