1. Trang chủ
  2. » Luận Văn - Báo Cáo

Nhận diện khuôn mặt sử dụng phương pháp trích rút đặc trưng PCA và thực hiện phân lớp bằng naïve bayes

20 427 0

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 20
Dung lượng 387,97 KB

Nội dung

Trong bài toán này sẽ giải quyết bài toán nhận dạng mặt người dùng phương pháp trích chọn đặc trưng PCA(Principle Components Analysis) và phân lớp bằng Naïve bayes. Trong đó Phương pháp PCA sẽ dùng để trích chọn đặc trưng một tập cơ sở dữ liệu ảnh mặt người và một trong các ảnh test bất kỳ bên ngoài. Còn phương pháp Naïve bayes sẽ dùng để phân lớp ảnh test đã được trích chọn đặc trưng PCA thuộc vào lớp nào trong các lớp đã được học.

Trang 1

BỘ CƠNG NGHIỆP TRƯỜNG ĐẠI HỌC CƠNG NGHIỆP HÀ NỘI

KHOA CƠNG NGHỆ THƠNG TIN

======***======

Báo cáo bài tập lớn

Nhập mơn lý thuyết nhận dạng

Giáo viên:

Nhĩm - Lớp:

Thành viên:

Đề tài:

Nhận diện khuơn mặt sử dụng phương pháp trích rút đặc trưng PCA và thực hiện phân lớp bằng nạve bayes

Hà nội, Năm 2018

Trang 2

LỜI MỞ ĐẦU

Hiện nay, Cùng với sự phát triển của xã hội, vấn đề an ninh bảo mật đang được yêu cầu khắt khe tại mọi quốc gia trên thế giới Các hệ thống nhận dạng con người được ra đời với độ tin cậy ngày càng cao Một trong các bài tốn nhận dạng con người rất được quan tâm hiện nay là nhận dạng khuơn mặt Vì nhận dạng khuơn mặt là cách

mà con người dung để phân biệt nhau Bên cạnh đĩ, ngày nay việc thu thập xử lý thơng tin qua ảnh để nhận biết đối tượng đang được quan tâm và ứng dụng rộng rãi Với phương pháp này chúng ta cĩ thể thu thập được nhiều thơng tin từ đối tượng mà khơng cần tác động nhiều đến đối tượng nghiên cứu Sự phát triển của khoa học máy tính tạo mơi trường thuận lợi cho bài tốn nhận dạng mặt người từ ảnh số

Trong bài tốn này chúng em sẽ giải quyết bài tốn nhận dạng mặt người dùng phương pháp trích chọn đặc trưng PCA(Principle Components Analysis) và phân lớp bằng Nạve bayes Trong đĩ Phương pháp PCA sẽ dùng để trích chọn đặc trưng một tập cơ

sở dữ liệu ảnh mặt người và một trong các ảnh test bất kỳ bên ngồi Cịn phương pháp Nạve bayes sẽ dùng để phân lớp ảnh test đã được trích chọn đặc trưng PCA thuộc vào lớp nào trong các lớp đã được học

Trang 3

MỤC LỤC

Chương 1 Giới thiệu 4

1 Phương pháp trích chọn đặc trưng PCA(Principle Components Analysis) 4

2 phương pháp phân lớp bằng Nạve bayes 5

Chương 2 Áp dụng giải quyết bài tốn 8

1 Các bước giải quyết bài tốn 8

2 Tiếp nhận ảnh đầu vào và thực hiện phân lớp sử dụng nạve bayes trên tập huấn luyện 8 Chương 3 Chương trình và kết quả 9

1 Chương trình 9

2 Kết quả 18

Trang 4

Chương 1 Giới thiệu

1 Phương pháp trích chọn đặc trưng PCA(Principle Components Analysis)

1.1 Giới thiệu.

PCA(Principle Components Analysis) là một thuật toán được sử dụng để tạo ra một ảnh mới từ ảnh ban đầu Ảnh mới này có kích thước nhỏ hơn rất nhiều so với ảnh đầu vào và vẫn mang những đặc trưng cơ bản nhất của ảnh cần nhận dạng PCA không quan tâm đến việc tìm ra các đặc điểm cụ thể của thực thể cần nhận dạng và mối quan hệ giữa các đặc điểm đó Tất cả các chi tiết đó được thể hiện ở ảnh mới được tạo ra từ PCA

- Ưu điểm của phương pháp PCA

 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 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

 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ả cao

- Nhược điểm của phương pháp PCA

 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ả lớn nhất cho bài toán nhận dạng

 PCA rất nhạy với nhiễu

1.2 Thuật toán.

Input: Bảng Dữ liệu X cấp n × p ứng với n mẫu và p thuộc tính

Output: Bảng dữ liệu Y cấp n × d ứng với n mẫu và d thuộc tính(d<p)

Bước 1: Tiền xử lý dữ liệu: Chuẩn hóa X theo phương pháp Z-scores.

Z-Score là một trong những kỹ thuật phổ biến liên quan đến kỳ vọng và độ lệch chuẩn của X = (x1,… , x n)

- Giá trị kỳ vọng μ(còn gọi là giá trị trung bình) và độ lệch chuẩn σ tính :

μ=1

n

i=1

n

x i

σ =√1

n

i=1

n

(x iμ)2

- Dữ liệu sau chuẩn Z-Score X new = (x1new,…,x n new),x i new tính theo công thức:

x i new= x iμ

σ

Trang 5

Bước 2: Tính ma trận hiệp phương sai C cấp p x p.

Cij ¿ 1

n−1

t =1

n

¿ ¿i

t - µi)(xjt -µj)

Bước 3: Tìm các giá trị riêng λi và các véc tơ riêng tương ứng ui,

λ1 >=λ2 >=…>= λp >= 0

Bước 4: Chọn d véc tơ đầu tiên lập thành W cấp d×p

Bước 5: Tính Yn x d = X × W’

2 phương pháp phân lớp bằng Nạve bayes 2.1 Giới thiệu.

Naive Bayes Classification (NBC) là một thuật tốn dựa trên định lý Bayes

về lý thuyết xác suất để đưa ra các phán đốn cũng như phân loại dữ liệu dựa trên các dữ liệu được quan sát và thống kê Naive Bayes Classification là một trong những thuật tốn được ứng dụng rất nhiều trong các lĩnh vực Machine learning dùng để đưa các dự đốn chính xác nhất dự trên một tập dữ liệu đã được thu thập, vì nĩ khá dễ hiểu và độ chính xác cao Nĩ thuộc vào nhĩm Supervised Machine Learning Algorithms (thuật tốn học cĩ hướng dẫn), tức là máy học từ các ví dụ từ các mẫu dữ liệu đã cĩ

Định lý Bayes cho phép tính xác suất xảy ra của một sự kiện ngẫu nhiên A

khi biết sự kiện liên quan B đã xảy ra Xác suất này được ký hiệu là P(A|B), và

đọc là “xác suất của A nếu cĩ B” Đại lượng này được gọi xác suất cĩ điều kiện hay xác suất hậu nghiệm vì nĩ được rút ra từ giá trị được cho của B hoặc phụ thuộc vào giá trị đĩ

Theo định lí Bayes, xác suất xảy ra A khi biết B sẽ phụ thuộc vào 3 yếu tố:

Xác suất xảy ra A của riêng nĩ, khơng quan tâm đến B Kí hiệu là P(A) và đọc

là xác suất của A Đây được gọi là xác suất tiên nghiệm, nĩ là “tiên nghiệm” theo nghĩa rằng nĩ khơng quan tâm đến bất kỳ thơng tin nào về B

Xác suất xảy ra B của riêng nĩ, khơng quan tâm đến A Kí hiệu là P(B) và đọc

là “xác suất của B” Đại lượng này cịn gọi là hằng số chuẩn hĩa (normalising constant), vì nĩ luơn giống nhau, khơng phụ thuộc vào sự kiện A đang muốn biết

Xác suất xảy ra B khi biết A xảy ra Kí hiệu là P(B|A) và đọc là “xác suất của B

nếu cĩ A” Đại lượng này gọi là khả năng xảy ra B khi biết A đã xảy ra

2.2 Dữ liệu huấn luyện

Trang 6

- Xét tập dữ liệu huấn luyện X gồm n mẫu cĩ m thuộc tính(thuộc tính thực)

và một thuộc tính lớp => X Rn x m + 1

- Ký hiệu C = {c1,…,ck}là tập ký hiệu các lớp(k lớp)

- Mỗi phần tử x X là một vector m+1 chiều, ký hiệu x = ( x1,…,xm,y )’

y C là giá trị của thuộc tính lớp

- Cho một mẫu thử z Rm

cần dự đốn giá trị của thuộc tính y, hay nĩi cách khác là cần xác định lớp c C cho mẫu z (z chỉ thuộc về một lớp duy nhất)

2.3 Ý tưởng của thuật tốn

- Để xác định lớp của mẫu z ta tính xác xuất cĩ điều kiện để z được phân vào lớp ci , ký hiệu P(ci | z) với i = 1 … k

- Theo định lý bayes:

P( ci | z) = P (z∨C i)× P(C i)

P (z) (1)

- Trong Nạve Bayes sử dụng giả thiết các thuộc tính của dữ liệu độc lập nhau, nên theo lý thuyết xác suất ta cĩ:

p(z∨C i)= ∏

j=1

m

p(Z j|C i¿ ¿ (2)

- Thay (2) vào (1) ta cĩ :

P( ci | z) = ∏

j=1

m

p(Z j|C i¿× P (C i) ¿

P(z)

- Mẫu z sẽ được phân vào lớp ci cĩ P( ci | z) max

- Trong cơng thức (1) do P(z) là hằng số với mọi ci nên P( ci | z) max khi: ∏

j=1

m

p(Z j|C i¿ ¿× P(C i) max 2.4 Thuật tốn Nạve bayes

Bước 1: Với mỗi lớp ci C ta tính :

- Xác suất tiên nghiệm P( ci): xác suất tiên nghiệm xấp xỉ tỷ số giữa số lượng mẫu của X thuộc lớp ci trên tổng số lượng mẫu.

Trang 7

- Đối với mỗi giá trị Z jtính xác suất p(Z j|C i¿ : xác suất xảy ra giá trị Z j

trong lớp ci. Giá trị p(Z j|C i¿được tính xấp xi bằng tỷ lệ số mẫu cĩ giá trị bằng Z j trong lớp ci với số lượng mẫu thuộc lớp ci.

Bước 2: Phân mẫu thử Z vào ci lớp thỏa mãn

j=1

m

p(Z j|C i¿ ¿× P(C i) max

2.5 Phương pháp Nạve Bayes trong trường hợp thuộc tính cĩ kiểu liên tục

 Trong trường hợp thuộc tính cĩ kiểu liên tục Ta cĩ thể rời rạc hĩa trước khi áp dụng Nạve Bayes

 Xét thuộc tính A cĩ kiểu liên tục, ta cần tính giá trị kỳ vọng (µ) và phương sai(σ2) của thuộc tính A với mỗi lớp ci

 Ký hiệu Di là gồm các mẫu huấn luyện của lớp ci, d(A) là giá trị tại thuộc tính A của mẫu huấn luyện d khi đĩ:

µ =¿D1

i∨¿ ¿ ∑

d ∈ D i

d ( A) ,

σ2 =¿D1

i∨−1 d∈ D i

¿ ¿)2

 Giá trị p(Z j|C i¿= p(Z j|C i¿gọi là phân bố xác suất của Z j vào lớp ci tính:

p(Z j|C i¿= 1

2 π σ2 exp (−(Z jμ)2

2 σ2 )

Trang 8

Chương 2 Áp dụng giải quyết bài tốn

1 Các bước giải quyết bài tốn

- Bước 1: Tiếp nhận ảnh đầu vào với số lượng ảnh là 25 ảnh của 5 cầu thủ nổi

tiếng thế giới đã được chia thành 5 lớp khác nhau

- Bước 2: Xác định khuơn mặt cầu thủ và khống chế kích thước của ảnh sao

cho các ảnh cĩ kích thước bằng nhau 80x70

- Bước 3: Thực hiện duỗi ảnh kích thước 80x70 thành 1 mảng 5600 phần tử để

biểu diễn bức ảnh đĩ Kết hợp các mảng của các ảnh ta cĩ 1 ma trận gồm 25 cột

và 5600 dịng

- Bước 4: Thực hiện PCA trên ma trận tập ảnh ta vừa cĩ Sau quá trình trích rút

đặc trưng ta thu được ma trận kích thước 25x25

2 Tiếp nhận ảnh đầu vào và thực hiện phân lớp sử dụng nạve bayes trên tập huấn luyện

- Bước 1: Xác định khuơn mặt trên bức ảnh đầu vào và khống chế kích thước

ảnh bằng với kích thước ảnh tập huấn luyện

- Bước 2: Sử dụng PCA trước đĩ được sử dụng để trích rút tập huấn luyện để

trích rút với bức ảnh mới ta thu được 1 mảng gồm 25 phần tử

- Bước 3: Tính kỳ vọng và và phương sai đối của bức ảnh với từng lớp ảnh đã

được trích rút trong tập huấn luyện

- Bước 4: Tính giá trị phân bố xác suất của từng thuộc tính của ảnh trên thuộc

tính của từng lớp ảnh huấn luyện

- Bước 5: Lấy giá trị phân bố xác suất lớn nhất xuất hiện và phân bức ảnh vào

lớp đĩ

3 Các cơng cụ cần cĩ để cài đặt chương trình.

• Visual studio 2017

• SQL server

• Nuget package manager cần tải về:

• Accord NET

• EmguCV

Chương 3 Chương trình và kết quả

1 Chương trình

Trang 9

{

{ /// <summary>

/// Bien Private

/// </summary>

#region

double[][] features;

int[] outputs;

int NBC = 0;

MinimumMeanDistanceClassifier classifier;

NaiveBayes<NormalDistribution> bayes;

double[][] kmean;

PrincipalComponentAnalysis pca;

private CascadeClassifier _cascadeClassifier;

#endregion

public Form1() {

InitializeComponent();

} /// <summary>

/// Load anh vao form

/// </summary>

#region

private void Form1_Load(object sender, EventArgs e) {

var path = new

int currentClassLabel = 0;

// For every class folder

foreach (var classFolder in

path.EnumerateDirectories())

Trang 10

{ string name = classFolder.Name;

// For each file in the class folder

FileInfo[] files = GetFilesByExtensions(classFolder, ".PNG").ToArray();

for (int i = 0; i < files.Length; i++) {

FileInfo file = files[i];

Bitmap image =

List<Image<Bgr, byte>> L1 = new

L1 = Dection(image);

dataGridView1.Rows.Add(name, currentClassLabel, image);

dataGridView2.Rows.Add(name, currentClassLabel, L1[0].ToBitmap());

} currentClassLabel++;

} NBC = currentClassLabel;

}

private IEnumerable<FileInfo>

GetFilesByExtensions(DirectoryInfo dir, params string[] extensions)

{

if (extensions == null) throw new

IEnumerable<FileInfo> files = dir.EnumerateFiles();

return files.Where(f =>

extensions.Contains(f.Extension));

}

#endregion

/// <summary>

/// TP ben trong Region: xu lys button1_click : xu

ly PCA;

///

-

/// Method:

/// extrac: chuyen

du lieu ve ma tran ;

Trang 11

/// Dection: nhan dien khuon mat vowi kich thuoc:70x70

///

-

/// B1: Anh datagridview 2 duoc xac dinh mat bang anh cua datagridview 1

/// B2: PCA bang anh cua datagridview 2

/// B3: hien thi anh sau PCA len datagridview 3 va chi so Properson

/// </summary>

#region

private void button1_Click(object sender, EventArgs

e) {

dataGridView3.Rows.Clear();

#region

// Vecto ma trận aJnh

double[][] hands1 = extract();

double[][] hands = Accord.Statistics.Tools.ZScores(hands1);

// Tạo mới đốPi tượng Principal Component Analysis

pca = new PrincipalComponentAnalysis() {

Method = PrincipalComponentMethod.Center, ExplainedVariance = 0.9

//độ lợi phương sai

};

// Học chúng

pca.Learn(hands);

// ChuyểJn đốJi các vector riểng thành hình aJnh tương ứng

ArrayToImage reverse = new ArrayToImage(80, 70); // duyet Pca da co

for (int i = 0; i < pca.Components.Count; i++) {

// Vector aJnh

double[] vector = pca.Components[i].Eigenvector;

reverse.Max = vector.Max();

reverse.Min = vector.Min();

// Vector và aJnh vector

Bitmap eigenHand; reverse.Convert(vector,

out eigenHand);

dataGridView3.Rows.Add(eigenHand, pca.Components[i].Proportion);

}

Trang 12

ImageToArray converter = new ImageToArray(min:

-1, max: +1);

int rows = dataGridView2.Rows.Count;

double[][] inputs = new double[rows][];

features = new double[rows][];

kmean = new double[rows][];

outputs = new int[rows];

int index = 0;

foreach (DataGridViewRow row in

dataGridView2.Rows) {

Bitmap image = row.Cells["ImageActor"].Value

int label = (int)row.Cells["CollCorl"].Value;

double[] input;

converter.Convert(image, out input);

double[] feature = pca.Transform(input); //ProjectPCA.Add(feature);

row.Tag = feature;

inputs[index] = input;

features[index] = feature;

kmean[index] = feature;

outputs[index] = label;

row.Cells["Projection"].Value = feature.ToString("N2");

index++;

} classifier = new

#endregion

}

double[][] extract() {

double[][] hands = new

ImageToArray converter = new ImageToArray(min:

-1, max: +1);

int index = 0;

foreach (DataGridViewRow row in

dataGridView1.Rows) {

Trang 13

List<Image<Bgr, byte>> L1 = new

Bitmap image = row.Cells["Image"].Value as

L1 = Dection(image);

converter.Convert(L1[0].ToBitmap(), out

hands[index]);

index++;

}

return hands;

}

private List<Image<Bgr, byte>> Dection(Bitmap image) {

List<Image<Bgr, byte>> l = new List<Image<Bgr,

byte>>();

Image<Bgr, byte> imageAnh = new Image<Bgr,

byte>(image);

_cascadeClassifier = new CascadeClassifier("E:\\ Lab_C++++\\Nhandangmat\\Nhandangmat\\

using (var imageFrame = imageAnh) {

if (imageFrame != null) {

var grayframe = imageFrame;

var faces = _cascadeClassifier.DetectMultiScale(grayframe, 1.1, 10,

Size.Empty);

foreach (var face in faces) {

imageFrame.ROI = new

l.Add(imageFrame.Copy());

} } } return l;

}

#endregion

/// <summary>

/// Trong region gom: button2_Click: chon anh tu file Test

/// button3_Click: Hient hien anh se PCA len Datagridview 4 va PCA no

/// Dection1 : Xac dinh khuon mat

Trang 14

///

-

///

/// </summary>

#region

private void button2_Click(object sender, EventArgs

e) { OpenFileDialog file = new OpenFileDialog();

file.ShowDialog();

Bitmap Image = new Bitmap(file.FileName);

pictureBox1.Image = Image;

}

private void button3_Click(object sender, EventArgs

e) { dataGridView4.Rows.Clear();

Bitmap Image = new Bitmap(pictureBox1.Image); Bitmap Face = Dection1(Image)[0].ToBitmap(); dataGridView4.Rows.Add(Face);

ImageToArray converter = new ImageToArray(min:

-1, max: +1);

int index1 = 0;

double[] feature = new

foreach (DataGridViewRow row in

dataGridView4.Rows) {

Bitmap image = row.Cells["UpImage"].Value as

double[] input;

converter.Convert(image, out input);

feature = pca.Transform(input);

row.Cells["ProPertion"].Value = feature.ToString("N2");

index1++;

}

//double[][] Fmau = Accord.Math.Matrix.Transpose(features);

//var teacher = new NaiveBayesLearning<NormalDistribution>();

//bayes = teacher.Learn(features, outputs);

//double[] sa = bayes.Probabilities(feature);

//lblClass.Text = bayes.Decide(feature).ToString();

#region

Ngày đăng: 02/04/2019, 23:12

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

w