Trong phần nội dung này chúng ta sẽ tìm hiểu về phân tích thành phân chính PCA và ứng dụng của nó vào nhận diện khuôn mặt... Một số khái niệm Thành phần chính là thành phần thể hiện đượ
Trang 1ĐẠI HỌC QUỐC GIA TP.HCM TRƯỜNG ĐẠI HỌC BÁCH KHOA
KHOA CƠ KHÍ
BÁO CÁO BÀI TẬP LỚN
ĐẠI SỐ TUYẾN TÍNH
ĐỀ TÀI: CƠ SỞ LÝ THUYẾT VÀ ỨNG DỤNG CỦA PHÂN TÍCH
PCA VÀO NHẬN DIỆN KHUÔN MẶT
Lớp L10-Nhóm 8
Sinh viên thực hiện:
Phạm Văn Chánh 2012709
Dặng Huy Hoàng 2111227
Nguyễn Thanh Nhơn 2114328
Trương Tấn Phúc 2112059
Nguyễn Thái Sơn 2114664
Lê Quốc Thắng 2110549
Hoàng Anh Thư 2114951
Giáo viên hướng dẫn:
TS.Đặng Văn Vinh
Th.S Bùi Thị Khuyên
Thành phố Hồ Chí Minh, tháng 4/2022
Trang 2MỤC LỤC
CHƯƠNG 1: MỞ ĐẦU 3
CHƯƠNG 2: CƠ SỞ LÝ THUYẾT 4
I Một số khái niệm toán học sử dụng trong PCA 4
1 Các đặc trưng của vecto ngẫu nhiên 4
2 Trị riêng, vecto riêng của ma trận hiệp phương sai 4
II Cơ sở lý thuyết 5
1 Một số khái niệm 5
2 Các bước phân tích PCA: 6
CHƯƠNG 3: ỨNG DỤNG CỦA PCA VÀO NHẬN DIỆN KHUÔN MẶT 11
I Quy trình nhận dạng 11
1 Face detection (Phát hiện khuôn mặt): 11
2 Preprocessing (Tiền xử lý): 12
3 Feature extraction (Trích chọn đặc trưng): 12
4 Recognition (Nhận dạng): 12
II Ứng dụng PCA vào khuôn mặt 12
1 Ưu điểm 12
2 Nhược điểm 12
3 Ví dụ trong thực tế 12
4 Code 13
TÀI LIỆU THAM KHẢO 15
Trang 3CHƯƠNG 1: MỞ ĐẦU
Với sự phát triển không ngừng của kĩ thuật số, khoa học công nghệ, có rất nhiều thuật toán, máy móc giúp con người giải quyết các khó khăn, làm những công việc đòi hỏi tốc độ xử lí cao, độ chính xác cao, hiệu suất, độ hiệu quả gấp nhiều lần so với con người làm
Ứng dụng “Nhận diện khuôn mặt” chắc chắn là một ứng dụng mang lại giá trị to lớn Việc tìm kiếm thông tin một người như quê quán, ngày sinh, sẽ rất mất thời gian và công sức.Vậy giải quyết vấn đề này thế nào ? Chắc chắn ứng dụng “Nhận diện khuôn mặt” là một câu trả lời
Ứng dụng nhận diện khuôn mặt giúp việc tìm kiếm thông tin dễ hơn qua khuôn mặt, hiệu quả rất tốt Trong nhiều năm, có nhiều công trình nghiên cứu thuật toán tìm kiếm bằng ảnh đen trắng, khả năng nhận diện kém, nhận diện được một người trong một khung hình và chỉ nhìn thẳng Cho đến ngày nay ứng dụng này ngày càng mở rộng, phổ biến và phát triển không ngừng, khả năng nhận diện và phạm vi rộng hơn.Và chúng ta có thể dễ dàng bắt gặp ứng dụng này qua chức năng mở khóa khuôn mặt trên điện thoại, trong doanh nghiệp, trường học hay là tìm kiếm tội phạm,
Trong phần nội dung này chúng ta sẽ tìm hiểu về phân tích thành phân chính PCA và ứng dụng của nó vào nhận diện khuôn mặt
Trang 4CHƯƠNG 2: CƠ SỞ LÝ THUYẾT
I Một số khái niệm toán học sử dụng trong PCA
1 Các đặc trưng của vecto ngẫu nhiên
a) Kỳ vọng (mean, expected value)
Ý nghĩa: giá trị “mong muốn”, biểu diễn giá trị trung bình của một biến
Biểu diễn toán học:
Với biến x ngẫu nhiên rời rạc:
𝜇 = 𝑚𝑥 = 𝐸{𝑥} = 𝛴𝑝𝑖𝑥𝑖
b) Độ lệch chuẩn (Standard Deviation)
Ý nghĩa: đo tính biến động mang tính thống kê Nó cho thấy sự chênh
lệch về giá trị của từng thời điểm đánh giá so với giá trị trung bình
Biểu diễn toán học:
𝜎 = 𝑠 = 𝐸{𝑋(𝑡) − 𝑚𝑥(𝑡)}
c) Phương sai (variance)
Ý nghĩa: phương sai của một biến ngẫu nhiên là thước đo sự phân tán
thống kê của biến đó, nó hàm ý các giá trị của biến đó thường ở cách giá trị
kỳ vọng bao xa
Biểu diễn toán học:
𝑣𝑎𝑟(𝑋) = 𝜎2 = 𝑆2 = 𝐸 {(𝑋(𝑡) − 𝑚𝑥(𝑡))2}
d) Hiệp phương sai (covariance)
Ý nghĩa: 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)
Biễu diễn toán học:
𝑐𝑜𝑣(𝑋, 𝑌) = 𝐸 {(𝑋(𝑡) − 𝑚𝑥(𝑡)) (𝑌(𝑡) − 𝑚𝑦(𝑡))}
2 Trị riêng, vecto riêng của ma trận hiệp phương sai
a) Ma trận hiệp phương sai (covariance matrix)
Trang 5X là vecto cột, một thành phần 𝑥𝑖 là biến ngẫu nhiên có phương sai xác định và 𝐸{𝑥𝑖} = 𝜇𝑖
⇒ Xây dựng ma trận hiệp phương sai (matrix covariance) với các thành phần 𝑠𝑖,𝑗 là hiệp phương sai:
𝑠𝑖,𝑗 = 𝑐𝑜𝑣(𝑋𝑖, 𝑋𝑗) = 𝐸{(𝑋𝑖 − 𝜇𝑖)(𝑋𝑗 − 𝜇𝑗)}
b) Trị riêng, vecto riêng
Khái niệm:
Cho 𝐴 ∈ 𝐶𝑚𝑥𝑚 là một ma trận vuông
Vecto 𝑢 ∈ 𝐶𝑚 gọi là vecto riêng ứng với trị riêng 𝜆 ∈ 𝐶 nếu:
𝐴𝑢 = 𝜆𝑢
1 Một số khái niệm
Thành phần chính là thành phần thể hiện được tốt nhất sự khác biệt giữa các điểm dữ liệu trong bộ dữ liệu Có thể xét ví dụ sau trong không gian 3 chiều Ot1t2t3 Nếu chiếu 4 điểm A, B, C, D xuống 3 trục thì Ot1 là thành phần chính (vì toạ độ trên trục này của 4 điểm phân biệt)
Dimensionality Reduction (giảm chiều dữ liệu), nói một cách đơn giản, là việc đi tìm một hàm số, hàm số này lấy đầu vào là một điểm dữ liệu ban đầu
𝒙 ∈ ℝ𝑫 với D rất lớn, và tạo ra một điểm dữ liệu mới 𝒛 ∈ ℝ𝒌 có số chiều K<D là chỉ giữ lại K phần tử quan trọng nhất 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 xác định thành phần nào là thành phần quan trọng hơn Hoặc trong trường hợp xấu nhất, lượng thông tin
Trang 6mà mỗi thành phần mang là như nhau, bỏ đi thành phần nào cũng dẫn đến việc mất một lượng thông tin lớn
Tuy nhiê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 hệ cơ sở mới đó, 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
PCA chính là phương pháp đi tìm một hệ cơ sở mới sao cho thông tin của dữ
liệu chủ yếu tập trung ở một vài tọa độ, phần còn lại chỉ mang một lượng thông tin nhỏ Và để cho đơn giản trong tính toán, PCA sẽ tìm một hệ trực chuẩn mới để làm cơ sở
Hình 2.2.1 Ví dụ minh họa cho PCA trong phân tích hình ảnh
Cùng là 1 chú lạc đà, tuy nhiên với các góc nhìn khác nhau (trục thông tin), chúng ta lại có những cách thu nhận khác nhau và kết luận khác nhau
Giả sử ta có bảng dữ liệu X=(𝑥1|𝑥2|⋯ |𝑥𝑁), với 𝑥𝑘, k=1,2,…, N là các véctơ trong không gian Euclide V
Các véctơ 𝑥1; 𝑥2; … ; 𝑋𝑁 xếp theo cột
Mục tiêu của chúng ta là chọn một phép biển dổi tuyến tính 𝑃 của 𝑉 sao cho phương sai của ảnh của 𝑋 qua phép biến đổi là lớn nhất
Bước 1 Tính giá trị trung bình X̅ của 𝑋
𝑿̅ = 𝒙𝟏+ 𝒙𝟐… + 𝒙𝑵
𝑵
Bước 2 Tính vectơ X̂= X − X̅
𝑿̂ = 𝒙𝒏− 𝑿̅
Tính ma trận hiệp phương sai: S = 1
𝑁−1X𝑇X̂
Trang 7Để đơn giản, ta xét phép biến đổi 𝑃 lên không gian một chiều được sinh
ra bởi véctơ đơn vị 𝑢1, tức là 𝑢1𝑇𝑢1 = 1
Phương sai của ảnh của 𝑋 qua phép biến đổi là
1
𝑁−1∑𝑁𝑛−1{𝑢1𝑇𝑥𝑛 − 𝑢1𝑇𝑥̅}2 = 𝑢1𝑇𝑆𝑢1, với
𝑠 = 1
𝑁−1∑𝑁𝑛−1(𝑥𝑛 − 𝑋̅)𝑇(𝑥𝑛 − 𝑋̅)
Bước 3 Tìm trị riêng của S và sắp xếp theo giá trị giảm dần
𝜆1 > 𝜆2 > ⋯ 𝜆𝑚 và tìm các véctơ riêng đơn vị ứng với các trị riêng
Bước 4 Chọn 𝑘 trị riêng ban đầu và 𝑘 véctơ riêng đơn vị ứng với trị riêng
này Lập ma trận A có các cột là các véc tơ riêng đã chọn Ma trận A là phép đổi cần tìm
Bước 5 Tính ảnh 𝐴𝑇X𝑇 của véctơ X̂
Dữ liệu X ban đầu được xấp xỉ bởi X≈ AX̂ +X̂
Mỗi cột của AX𝑇 chứa tọa độ của các hàng của ma trận X̂ trong cơ sở từ
các cột của ma trận P
Lưu ý:
1/ Ma trận S là ma trận đối xứng thực và các trị riêng của S là các số thực
không âm
2/ Ma trận S luôn chéo hóa trực giao được
3/ Trên đường chéo của S là các phương sai của các véc tơ 𝑥1;𝑥;2; … ; 𝑥𝑁 Phần tử 𝑠𝑖𝑗 là hiệp phương sai của 𝑥𝑖và 𝑥𝑗
Tổng các phần tử trên đường chéo của S là phương sai của bảng dữ liệu Giả sử S=PDPT Trên đường chéo của D là các giá trị riêng của S Tổng các giá trị riêng của S bằng tổng các phần tử của S (bằng vết của S) 4/ Ma trận P là ma trận trực giao Mỗi ma trận trực giao tương ứng với một phép quay
Các cột của ma trận P tạo nên hệ trực chuẩn Nếu ta chọn cơ sở trực chuẩn
là họ véctơ cột của ma trận P, thì ta xây dựng được hệ trục tọa độ mới dựa trên các véctơ này và có một phép quay từ hệ trục tọa độ ban đầu sang hệ trục tọa độ mới
5/ Nếu dữ liệu mẫu (sample data), thì S = 1
𝑁−1 ∙X𝑇X Nếu dữ liệu dân số (population data), thì S= 1
𝑁X𝑇X̂
Ví dụ phương pháp:
Trang 8Cho một bộ dữ liệu Đổi hệ trục mới (gốc toạ độ
là kỳ vọng)
Tìm phương có phương sai lớn nhất Thực hiện tương tự với trục
vuông góc, ta có hệ trục toạ độ mới có phương sai lớn nhất:
Chiếu các điểm xuống trục hoành để giảm độ phức tạp của dữ liệu (bằng cách bỏ đi tung độ của điểm dữ liệu)
Ví dụ cụ thể:
Trang 11CHƯƠNG 3: ỨNG DỤNG CỦA PCA VÀO NHẬN DIỆN
KHUÔN MẶT
1 Face detection (Phát hiện khuôn mặt):
Trang 12Ảnh đầu vào là ảnh chứa đối tượng gồm một hoặc nhiều người, với gương mặt chính diện hoặc tương đối chính diện để
hệ thống có thể phát hiện Sau khi phát hiện được ví trí và kích thước của một hoặc nhiều khuôn mặt, những khuôn hình chứa mặt sẽ được cắt ra để tiến hành quá trình tiền xử lý
2 Preprocessing (Tiền xử lý):
Khối tiền xử lý sẽ xử lý những khuôn ảnh chứa mặt,chuẩn hóa kích thước ảnh trong cơ sở dữ liệu và ảnh cần nhận dạng cùng một kích thước đã định trước, làm giảm nhiễu, điều chỉnh độ sáng tối làm tăng chất lượng ảnh thuận tiện cho quá trình trích thuộc tính được chính xác và dễ dàng hơn
3 Feature extraction (Trích chọn đặc trưng):
Tìm ra các đặc trưng chính của ảnh mặt, từ các đặc trưng này hình thành các vector đặc trưng,các vector này sẽ được sử dụng để đối sánh sự giống nhau giữa ảnh mặt cần tìm và ảnh mặt trong CSDL
4 Recognition (Nhận dạng):
Bước này thực hiện việc so sánh giữa các vector đặc trưng để
chọn ra độ tương tự giữa ảnh cần tìm và ảnh trong CSDL
1 Ưu điểm
- Tìm được các đặc tính tiêu biểu của đối tượng cần nhận dạng
mà không cần phải xác định các thành phần và mối quan hệ giữa các thành phần đó
- Thuật toán có thể thức hiện tốt với các ảnh có độ phân giải cao, do PCA sẽ thu gọn ảnh thành một ảnh có kích thước nhỏ hơn
- PCA có thể kết hợp với các phương pháp khác như mạng Noron, Support Vector Machine … để mang lại hiệu quả nhận
dạng cao hơn
2 Nhược điểm
- PCA phân loại theo chiều phân bố lớn nhất của tập vector Tuy nhiên, chiều phân bố lớn nhất không phải lúc nào cũng mang lại hiệu quả tốt nhất cho bài toán nhận dạng Đây là nhược
điểm cơ bản của PCA
- PCA rất nhạy với nhiễu
3 Ví dụ trong thực tế
- Khóa khuôn mặt trên điện thoại
- Tìm kiếm, ngăn chặn tội phạm
- Hỗ trợ người khiếm thị
- Ứng dụng mạng xã hội
Trang 13- Hỗ trợ điều tra pháp y
- Tìm người thân mất tích
4 Code
%% PCAexam.m
%% Principal Components Analysis
%% Step 1: Get some data
disp( '%% Step 1: Get some data' );
x0 = ([2.2 1 2 1.9 3 2.3 5 1.6 1.5 1.1])';
y0 = ([2 0.6 2.9 2.2 3.8 2.7 1.6 3.2 1.6 0.8])';
x = ([x0, y0]);
% plot data
subplot(2,2,1)
plot(x0,y0, 'k+' );
title( 'Original PCA data' );
line([0 0],[-1 4], 'Color' , 'r' , 'LineStyle' , ':' );
line([-1 4],[0 0], 'Color' , 'r' , 'LineStyle' , ':' );
grid on ;
axis([-1 4 -1 4]);
%% Step 2: Normal PCA
disp( '%%%%%%%%%%%%%%%%%%%%%%%%' );
disp( '%% Step 2: Normal PCA' );
mu_x0 = mean(x0); % mean of the x0 values
mu_y0 = mean(y0); % mean of the y0 values
std_x0 = std(x0); % std of the x0 values
std_y0 = std(y0); % std of the y0 values
n = size(x0); % n(1) number of the sample
x1 = (x0 - mu_x0)/(std_x0*sqrt(n(1)));
%normal PCA
y1 = (y0 - mu_y0)/(std_y0*sqrt(n(1)));
Xnorm = ([x1, y1]);
%% Step 3: Calculate the covariance matrix
disp( '%%%%%%%%%%%%%%%%%%%%%%%' );
disp( '%% Step 3: Calculate the covariance matrix' );
covar = cov(x1,y1);
%% Step 4: Calc the eigenvectors and eigenvalues
disp( '%%%%%%%%%%%%%%%%%%%%%%%' );
disp( '%% Step 4: Calculate the eigenvec and eigenval' );
[eivec, eival]=eig(covar);
% Plot data
subplot(2,2,2)
% new coordinates
t = -1:1;
tval1 = eivec(1,2)/eivec(1,1)*t;
tval2 = eivec(2,2)/eivec(2,1)*t;
plot(t,tval1, t, tval2)
legend( 'eivec1' , 'eivec2' );
hold on ;
% normal PCA data
plot(x1, y1, 'k+' );
title( 'Normal PCA data' );
line([0 0],[-1 1], 'Color' , 'r' , 'LineStyle' , ':' );
line([-1 1],[0 0], 'Color' , 'r' , 'LineStyle' , ':' );
grid on
hold off
axis([-1 1 -1 1]);
%% Step 5: Choosing components and forming a feature vector
disp( '%%%%%%%%%%%%%%%%%%%%%' );
disp( '%% Step 5: Choosing components and forming a feature
vector' );
Trang 14respone = input( 'Number of new coordinates (1 or 2): ' );
dim = respone(1);
if (dim == 1)
eivalmax = max(diag(eival));
if eivalmax == eival(1,1)
fea_vector = eivec(:,1);
else
fea_vector = eivec(:,2);
end
end
if (dim == 2)
eivalmax = max(diag(eival));
if eivalmax == eival(1,1)
fea_vector = [eivec(:,1),eivec(:,1)];
else
fea_vector = [eivec(:,2),eivec(:,1)];
end
end
%% Step 6: Deriving the new data set
disp( '%%%%%%%%%%%%%%%%%%%%%%' );
disp( '%% Step 6: Deriving the new data set' );
Xfinal = ((fea_vector).')*((Xnorm).');
x2 = Xfinal(1,:);
if (dim == 1)
y2 = 0;
else
y2 = Xfinal(2,:);
end
%% (continue )
% Plot data when chosing one eigvalue
subplot(2,2,3)
plot(x1,0, 'k+' );
title( 'Final data when chosing one eigvalue' );
line([0 0],[-1 1], 'Color' , 'r' , 'LineStyle' , ':' );
line([-1 1],[0 0], 'Color' , 'r' , 'LineStyle' , ':' );
grid on ;
axis([-1 1 -1 1]);
% Plot data when chosing two eigvalues
subplot(2,2,4)
plot(x2,y2, 'k+' );
title( 'Final data when chosing two eigvalues ' );
line([0 0],[-1 1], 'Color' , 'r' , 'LineStyle' , ':' );
line([-1 1],[0 0], 'Color' , 'r' , 'LineStyle' , ':' );
grid on ;
axis([-1 1 -1 1]);
Trang 15Hình ảnh sau khi chạy code
TÀI LIỆU THAM KHẢO
[1] Tuan Remy (24-5-2017) Thuat toan pca full Slideshare.net
[2] Đặng Văn Vinh (2019) GIÁO TRÌNH ĐẠI SỐ TUYẾN TÍNH NXB
Đại Học Quốc Gia Thành phố Hồ Chí Minh
[3] machinelearningcoban.com (2017) Bài 27: Principal Component
Analysis (phần 1/2)
[4] Thai Le Hoang (2021) Bài 4: Phân tích thành phần chính - Trí tuệ
nhân tạo - Nhận dạng youtube.com
[5]tapit.vn-https://tapit.vn/image-processing-he-thong-nhan-dang-khuon-mat-su-dung-pca/
[6] stackoverflow