Chƣơng trình nội suy ảnh mặt ngƣời với dữ liệu tự thu thập

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu kỹ thuật hồi quy trong học máy và ứng dụng nội suy trên ảnh mặt người (Trang 65)

5. Cấu trúc luận văn

3.2. Chƣơng trình nội suy ảnh mặt ngƣời với dữ liệu tự thu thập

# Dữ liệu tự thu thập là ảnh của một số nhân viên. Trong chương trình này tương tự chúng ta sẽ nội suy các điểm của nửa ảnh dưới (2048 điểm) từ dữ liệu của các điểm(2048) của nửa ảnh trên. Tập huấn luyện gồm 400 ảnh của bộ dữ liệu Olivetti. Tập kiểm tra gồm 4 ảnh nhân viên tự thu thập. Ảnh xám thu được từ các ảnh màu

# -*- coding: utf-8 -*-

"""

Created on Sun Jul 7 12:53:20 2019 @author: Pham Duy Son

"""

import numpy as np

import matplotlib.pyplot as plt import cv2

from sklearn.datasets import fetch_olivetti_faces

from sklearn.utils.validation import check_random_state from sklearn.ensemble import ExtraTreesRegressor from sklearn.neighbors import KNeighborsRegressor from sklearn.linear_model import LinearRegression from sklearn.linear_model import RidgeCV

from sklearn.metrics import mean_squared_error

# Load tập dữ liệu hình

data = fetch_olivetti_faces() targets = data.target

data = data.images.reshape((len(data.images), -1)) train = data[targets <= 39]

# Khai báo mảng chứa các ảnh để test

img=np.zeros((5,4096),dtype=float) test=img

# nạp các ảnh nhân viên vào mảng

mau=plt.imread('thanh64m.png')

gray = cv2.cvtColor(mau, cv2.COLOR_BGR2GRAY) data=gray.reshape(1,-1)

img[0]=data[0]

mau=plt.imread('thao64m.png')

gray = cv2.cvtColor(mau, cv2.COLOR_BGR2GRAY) data=gray.reshape(1,-1)

img[1]=data[0]

mau=plt.imread('nhu64m.png')

gray = cv2.cvtColor(mau, cv2.COLOR_BGR2GRAY) data=gray.reshape(1,-1)

img[2]=data[0]

mau=plt.imread('nam64m.png')

gray = cv2.cvtColor(mau, cv2.COLOR_BGR2GRAY) data=gray.reshape(1,-1)

img[3]=data[0]

mau=plt.imread('thuan64m.png')

gray = cv2.cvtColor(mau, cv2.COLOR_BGR2GRAY) data=gray.reshape(1,-1)

img[4]=data[0] test=img

# Test trên 4 ảnh nhân viên

n_faces = 4

rng = check_random_state(1)

test = test[face_ids, :] n_pixels = data.shape[1]

# Nửa hình trên làm biến độc lập

X_train = train[:, :(n_pixels + 1) // 2] X_train.shape[1]

# Nửa hình dưới làm biến phụ thuộc

y_train = train[:, n_pixels // 2:] y_train.shape[1]

X_test = test[:, :(n_pixels + 1) // 2] X_test.shape[1]

y_test = test[:, n_pixels // 2:]

# định nghĩa một directory các công cụ nội suy hình ảnh

ESTIMATORS = {

"Extra trees": ExtraTreesRegressor(n_estimators=10, max_features=32, random_state=0),

"K-nn": KNeighborsRegressor(n_neighbors=5), "Linear regression": LinearRegression(),

"Ridge": RidgeCV(), }

# khai báo mảng chứa các giá trị đánh giá

n=[0.1,0.1,0.1,0.1,0.1] i=1

y_test_predict = dict()

for name, estimator in ESTIMATORS.items(): estimator.fit(X_train, y_train)

y_test_predict[name] = estimator.predict(X_test) y_test_predict[name]

n[i]=mean_squared_error(y_test,y_test_predict[name]) print('MSE của hồi quy '+name +' là \n ',n[i])

i=i+1

# Trình bày khuôn mặt sau dự đoán image_shape = (64, 64)

image_shape

n_cols = 1 + len(ESTIMATORS) n_cols

# định nghia các khung và trình bày các hình

plt.figure(figsize=(2. * n_cols, 2.26 * n_faces))

plt.suptitle("Dự đoán mặt ngƣời nhờ các công cụ học máy hồi quy ", size=16)

for i in range(n_faces):

true_face = np.hstack((X_test[i], y_test[i])) if i:

sub = plt.subplot(n_faces, n_cols, i * n_cols + 1) else:

sub = plt.subplot(n_faces, n_cols, i * n_cols + 1, title="true faces") sub.axis("off") sub.imshow(true_face.reshape(image_shape), cmap=plt.cm.gray, interpolation="nearest")

for j, est in enumerate(sorted(ESTIMATORS)):

completed_face = np.hstack((X_test[i], y_test_predict[est][i])) if i:

sub = plt.subplot(n_faces, n_cols, i * n_cols + 2 + j) else:

sub = plt.subplot(n_faces, n_cols, i * n_cols + 2 + j, title=est); sub.axis("off") sub.imshow(completed_face.reshape(image_shape), cmap=plt.cm.gray, interpolation="nearest") plt.show()

Hình 3-2 Kết quả dự đoán ảnh tự thu thập nhờ các công cụ học máy hồi quy

MSE của hồi quy Extra trees là 0.03036982655372624

MSE của hồi quy K-nn là 0.027879311604158397

MSE của hồi quy Linear regression là 0.07198885565842184

0.03023722849380927

Đánh giá độ chính xác của các thuật toán

Giá trị MSE của hồi quy K-nn là nhỏ nhất vì thế có thể nói thuật toán hồi quy K-nn trong trong bài toán này cho kết quả chính xác nhất.

3.3. Kết luận

Chƣơng 3 đã trình bày rõ nội dung chƣơng trình “Nội suy ảnh mặt ngƣời”, cài đặt các chƣơng trình và thực hiện chƣơng trình với các dữ liệu thử nghiệm: dữ liệu ảnh mặt ngƣời Olivetty, dữ liệu ảnh nhân viên tự thu thập, đánh giá đƣợc hiệu quả của các kỹ thuật hồi quy, nêu ra đƣợc phƣơng pháp có kết quả tốt nhất đối với dữ liệu đã cho.

Việc gọi các mô hình đã có từ các thƣ viện giúp cho việc giải quyết bài toán ít phức tạp hơn. Có thể cùng lúc áp dụng nhiều kỹ thuật hồi quy khác nhau để tính toán và qua đó có thể đánh giá các mô hình có độ chính xác cao nhất. Đó cũng là ƣu điểm của phƣơng pháp này so với các phƣơng pháp xử lý ảnh khác.

Một số ảnh tự thu thập và các chƣơng trình “Nội suy ảnh mặt ngƣời” trên các ảnh này đƣợc chép vào đĩa CD của luận văn.

Nội dung tiếp theo: các kết quả đạt đƣợc trong quá trình nghiên cứu luận văn, những hạn chế và hƣớng phát triển.

KẾT LUẬN VÀ KIẾN NGHỊ

Kết quả đạt đƣợc từ nghiên cứu

Qua thời gian học tập và nghiên cứu, đặc biệt là trong khoảng thời gian làm luận văn, tác giả đã hoàn thiện đƣợc đề tài với các mục tiêu đặt ra ban đầu. Cụ thể luận văn đã đạt đƣợc những kết quả sau:

- Tổng quan những kiến thức cơ bản về học máy.

- Trình bày các thuật toán hồi quy tuyến tính, hồi quy Ridge, cây quyết định, K-nn

- Cài đặt ứng dụng bằng ngôn ngữ Python và đánh giá độ chính xác của mô hình thu đƣợc. Ứng dụng đã giúp nội suy ảnh mặt ngƣời từ các ảnh đã mất 50% dữ liệu.

Ứng dụng đƣợc xây dựng có thể góp phần giải quyết một số vấn đề từ thực tiễn:

- Hiệu chỉnh lại ảnh mặt ngƣời bị hƣ hại

- Trong ngành an ninh có thể tái tạo lại ảnh ngƣời để phục vụ cho công tác nhận dạng

- Là minh họa cho việc sử dụng học máy trong công tác dự đoán dự báo dựa trên một cơ sở dữ liệu đã có.

Hạn chế của đề tài

Vì thời gian có hạn đề tài chƣa nghiên cứu sâu vào các kỹ thuật đƣợc kết hợp đi kèm với cây quyết định để minh họa rõ hơn bài toán với các biến là số thực.

Dữ liệu thu thập chƣa nhiều, chƣa bao quát đƣợc tất cả các trƣờng hợp về dữ liệu trong thực tế.

Hƣớng phát triển

Luận văn cần phát triển sâu để có thể đáp ứng cho bài toán sửa hình và xa hơn là bài toán nhận dạng mặt ngƣời.

Cần bổ sung dữ liệu cho tập huấn luyện để có thể thực hiện nội suy ảnh mặt ngƣời theo các hƣớng khác nhau

Tìm hiểu thêm các nhu cầu từ thực tế để từ đó cải tiến chƣơng trình, cài đặt lại bài toán theo các thuật toán đã nghiên cứu để làm việc tốt hơn với các cơ sở dữ liệu lớn.

DANH MỤC TÀI LIỆU THAM KHẢO

[1]. Hoàng Xuân Huấn (2015), Giáo trình Học máy, NXB Đại học quốc gia, Hà Nội.

[2]. Lê Xuân Vinh (2017), Bài giảng trí tuệ nhân tạo nâng cao, Trƣờng Đại

học Quy Nhơn.

[3]. Lê Xuân Vinh (2018), Machine Learning, Trƣờng Đại học Quy Nhơn [4]. Ông Xuân Hồng (2015), Đánh giá hình,

https://ongxuanhong.wordpress.com/2015/08/25/danh-gia-mo-hinh- model-evaluation/, [Truy cập ngày 1/6/2019].

[5]. Một số blog về Machine Learning: Machine Learning cơ bản

(keyword: blog machine learning Việt Nam)

[6]. Andew Ng (2018), CS229 Lecture Notes, Stanford University,USA. [7]. Andrew Fitzgibbon (2012), Computer vision: models, learning and

inference, Simon Prince; published by Cambridge University Press.

Địa chỉ: http://www.computervisionmodels.com/ [Truy cập ngày 2/6/2019]

[8]. Alvira Swalin (2018), Choosing the Right Metric for Evaluating Machine Learning Models, University of San Francisco. Địa chỉ: https://medium.com/usf-msds/choosing-the-right-metric-for-

machine-learning-models-part-1-a99d7d7414e4 [ Truy cập ngày 12/5/2019]

[9]. Aditya Singh (2019), Ridge Regression, NCSS Statistical Software,

https://www.academia.edu/24067601/NCSS_Statistical_Software_ Ridge_Regression, [Truy cập ngày 20/5/2019]

[10]. Aishwarya Singh (2018), A Practical Introduction to K-Nearest Neighbors

https://www.analyticsvidhya.com/blog/2018/08/k-nearest-neighbor- introduction-regression-python/

[11]. Christopher M. Bishop (2006), Pattern Recognition and Machine Learning, Springer Science + Business Media

http://users.isr.ist.utl.pt/wurmd/Livros/school, [Truy cập ngày 22/5/2019]

[12]. Jake VanderPlas (2016), Python data science handbook, O’Reilly Media

Inc, USA.

[13]. Một số video bài giảng của MIT, Stanford (Keyword: Patrick H. Winston MIT, Andrew Ng. Stanford machine learning)

[14]. MathWorks (2019), Ridge , The MathWorks Inc. Địa chỉ:

https://in.mathworks.com/help/stats/ridge.html, [Truy cập ngày 20/6/2019]

[15]. Putcha Vaishanavi (2017), Ridge regresion, MindMajix Technology Inc, Địa chỉ: https://mindmajix.com/ridge-regression, [Truy cập ngày 25/5/2019]

[16]. Saed Sayad (2019), Decision Tree Regression, An Introduction To Data Science. Địa chỉ: https://www.saedsayad.com/decision_

tree_reg.htm, [Truy cập 30/4/2019]

[17]. Scikit-learn developers (2019), Model evaluation: quantifying the quality of predictions. Scikit-learn. Địa chỉ: https://scikit- learn.org/stable/modules/ model_evaluation.html #regression - metrics, [Truy cập ngày 15/6/2019]

[18]. Scikit-learn developers (2019), Linear Regression Example, Scikit-learn. Địa chỉ: https://scikit-learn.org/stable/auto_examples/linear_ model/plot_ols.html #sphx-glr-auto-examples-linear-model-plot- ols-py [Truy cập ngày 25/5/2019]

[19]. Scikit-learn developers (2019), The Olivetti faces dataset, Scikit-learn. Địa chỉ: https://scikit-learn.org/0.19/datasets/olivetti_faces.html

[Truy cập ngày 15/6/2019]

[20]. Wikipedia (2019), Superviced learning, Wikipedia Foundation, Inc. Địa

chỉ: https://en.wikipedia.org/wiki/Supervised_learning, [Truy cập ngày 15/6/2019]

Một phần của tài liệu (LUẬN văn THẠC sĩ) nghiên cứu kỹ thuật hồi quy trong học máy và ứng dụng nội suy trên ảnh mặt người (Trang 65)