Khoa Khoa Học Máy Tính ĐỒ ÁN CHUYÊN NGÀNH 2

34
i TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN & TRUYỀN THÔNG VIỆT HÀN Khoa Khoa Học Máy Tính ĐỒ ÁN CHUYÊN NGÀNH 2 XÂY DỰNG ỨNG DỤNG NHẬN BIẾT THÔNG TIN SINH VIÊN VKU Sinh viên thực hiện: Nguyễn Bảo Minh Hoàng Nguyễn Đình Trọng Lớp: 17IT1 17IT2 Giảng viên hướng dẫn: PGS.TS Huỳnh Công Pháp Đà Nẵng, tháng 05 năm 2021

Transcript of Khoa Khoa Học Máy Tính ĐỒ ÁN CHUYÊN NGÀNH 2

i

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN &

TRUYỀN THÔNG VIỆT HÀN

Khoa Khoa Học Máy Tính

ĐỒ ÁN CHUYÊN NGÀNH 2

XÂY DỰNG ỨNG DỤNG NHẬN BIẾT

THÔNG TIN SINH VIÊN VKU

Sinh viên thực hiện: Nguyễn Bảo Minh Hoàng

Nguyễn Đình Trọng

Lớp: 17IT1 – 17IT2

Giảng viên hướng dẫn: PGS.TS Huỳnh Công Pháp

Đà Nẵng, tháng 05 năm 2021

ii

TRƯỜNG ĐẠI HỌC CÔNG NGHỆ THÔNG TIN &

TRUYỀN THÔNG VIỆT HÀN

Khoa Khoa Học Máy Tính

ĐỒ ÁN CHUYÊN NGÀNH 2

XÂY DỰNG ỨNG DỤNG NHẬN BIẾT

THÔNG TIN SINH VIÊN VKU

Sinh viên: Nguyễn Bảo Minh Hoàng - 17IT142

Nguyễn Đình Trọng – 17IT112

Giảng viên hướng dẫn: PGS.TS Huỳnh Công Pháp

Đà Nẵng, tháng 05 năm 2021

iii

NHẬN XÉT CỦA GIẢNG VIÊN HƯỚNG DẪN

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

................................................................................................................................

Ký, ghi rõ họ tên

iv

LỜI CẢM ƠN

Trong xã hội loài người phát triển, trong thời đại đang diễn ra cuộc cách mạng

công nghiệp lần thứ 4, con người đang đòi hỏi nhiều hơn từ sự trợ giúp của máy móc

trong nhiều lĩnh vực như: y tế, kinh doanh, học tập,... Và dưới sự phát triển của AI, thế

giới đang có bước chuyển mình đột phá trong nhiều lĩnh vực, một trong số đó là giao

thông với việc ra đời của xe tự lái. Và để phát triển hoàn thiện xe tự lái thì không thể

thiếu sự hiện diện của xử lý ảnh, thị giác máy tính trong việc xử lý các tín hiệu xung

quanh, từ con người, vật cản, các biển báo,... Chính vì lẽ đó nên chúng em quyết định

chọn đề tài “Xây dựng ứng dụng nhận biết thông tin sinh viên VKU” để hiểu rõ hơn về

các công nghệ áp dụng AI nói chung và xử lý ảnh nói riêng.

Trong quá trình thực hiện đề tài vẫn còn những hạn chế về kiến thức và công

nghệ, nếu có chỗ nào sai sót, mong quý thầy cô nhận xét để đề tài hoàn thiện hơn nữa

trong tương lai.

Đặc biệt em xin chân thành gửi lời cảm ơn sâu sắc đến thầy giáo PGS. TS.

Huỳnh Công Pháp và ThS. Nguyễn Anh Tuấn, người đã tận tình hướng dẫn, trực tiếp

chỉ bảo và tạo mọi điều kiện giúp đỡ em trong suốt quá trình làm đồ án học phần Đồ

án chuyên ngành 2.

Em xin chân thành cảm ơn.

Sinh viên,

Nguyễn Bảo Minh Hoàng

Nguyễn Đình Trọng

v

MỤC LỤC

DANH MỤC CÁC TỪ VIẾT TẮT ........................................................................... VI

DANH MỤC HÌNH VẼ ............................................................................................ VII

MỞ ĐẦU ........................................................................................................................ 1

1. GIỚI THIỆU ......................................................................................................... 1

2. MỤC TIÊU CỦA ĐỀ TÀI ........................................................................................ 1

3. NỘI DUNG VÀ KẾ HOẠCH THỰC HIỆN .................................................................. 1

4. BỐ CỤC BÁO CÁO ............................................................................................... 2

CHƯƠNG 1. TỔNG QUAN VỀ LÝ THUYẾT ...................................................... 3

1. GIỚI THIỆU VỀ PYTHON ..................................................................................... 3

2. GIỚI THIỆU VỀ AI, MACHINE LEARNING VÀ DEEP LEARNING ............................ 4

3. GIỚI THIỆU VỀ KERAS ........................................................................................ 7

4. GIỚI THIỆU VỀ TRANSFER LEARNING ............................................................... 12

5. GIỚI THIỆU VỀ NHẬN DIỆN KHUÔN MẶT ........................................................... 14

6. GIỚI THIỆU VỀ MTCNN .................................................................................. 15

7. GIỚI THIỆU VỀ VGG16 MODEL ........................................................................ 15

8. GIỚI THIỆU VỀ PYQT5 ..................................................................................... 15

9. KẾT CHƯƠNG 1 ................................................................................................ 16

CHƯƠNG 2. PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG ................................... 17

1. YÊU CẦU BÀI TOÁN .......................................................................................... 17

2. TRIỂN KHAI ...................................................................................................... 17

3. KẾT CHƯƠNG 2 ................................................................................................ 21

CHƯƠNG 3. XÂY DỰNG ỨNG DỤNG ............................................................... 22

1. GIAO DIỆN ....................................................................................................... 22

2. CHỨC NĂNG ..................................................................................................... 23

3. KẾT CHƯƠNG 3 ................................................................................................ 23

CHƯƠNG 4. KẾT LUẬN ....................................................................................... 24

1. KẾT QUẢ ĐẠT ĐƯỢC......................................................................................... 24

2. HƯỚNG NGHIÊN CỨU ....................................................................................... 25

PHỤ LỤC .................................................................................................................... 27

vi

DANH MỤC CÁC TỪ VIẾT TẮT

VIẾT TẮT NỘI DUNG

CNN Convolutional Neural Network

AI Artificial Intelligence

ML Machine Learning

DL Deep Learning

vii

DANH MỤC HÌNH VẼ

Hình 1-1 Mô hình CNN ........................................................................................ 6

Hình 1-2 Mối liên hệ giữa AI, ML và DL ............................................................ 7

Hình 1-3 So sánh mô hình ML truyền thống và Transfer Learning ................... 13

Hình 1-4 Kiến trúc của mạng VGG16................................................................ 15

Hình 2-1 Các bước thực hiện ............................................................................. 17

Hình 3-1 Giao diện ứng dụng 1 .......................................................................... 22

Hình 3-2 Giao diện ứng dụng nhận dạng khuôn mặt ......................................... 23

Hình 4-1 Biểu đồ loss ......................................................................................... 24

Hình 4-2 Biểu đồ accuracy ................................................................................. 25

1

MỞ ĐẦU

1. Giới thiệu

Mỗi năm, trường Đại học Công nghệ thông tin và Truyền thông Việt Hàn tuyển

sinh hàng nghìn sinh viên. Với số lượng sinh viên lớn như vậy, việc học tập và làm

việc của các sinh viên cũng như các giảng viên diễn ra gần như thường xuyên, mỗi

ngày đón hàng trăm lượt sinh viên đến học tập, và với đội ngũ quản lý có hạn thì việc

nhận biết được đối tượng ra vào trường không hề dễ dàng, thậm chí việc quẹt thẻ ra

vào cũng mang tính tương đối và mất thời gian trong một số trường hợp.

Và đối với một trường công nghệ thông tin thì việc áp dụng khoa học kĩ thuật

để hỗ trợ quản lý trong trường hợp này là điều nên có. Với sự phát triển của AI,

Machine Learning, Data Processing trong những năm gần đây chính là công cụ cần

thiết để áp dụng vào bài toán lần này. Vì lẽ đó nhóm chúng em quyết định thực hiện đề

tài “Xây dựng ứng dụng nhận biết thông tin sinh viên VKU” với sự hỗ trợ của Deep

Learning để nhận dạng khuôn mặt đối tượng và cho ra thông tin của đối tượng đó

nhằm biết được một đối tượng có phải là sinh viên của trường VKU hay không.

2. Mục tiêu của đề tài

Từ vấn đề đặt ra ở trên, mục tiêu của chúng em chính là tạo 1 sản phẩm ứng

dụng nhằm kiểm soát hay theo dõi được quá trình ra/vào của các sinh viên(sau này có

thể mở rộng ra gồm CBVC) trong trường.

3. Nội dung và kế hoạch thực hiện

Đầu tiên phải tìm hiểu các phương pháp nhận biết/nhận dạng khuôn mặt phổ

biến hiện nay. Ưu và nhược điểm của mỗi loại. Sau đó chọn phương pháp thích hợp,

tối ưu nhất cho bài toán.

Thực nghiệm trên máy tính cá nhân trước với số face ít. Sau khi thu được kết

quả tốt mới tăng số lượng data.

2

Chương trình được viết hoàn toàn bằng ngôn ngữ lập trình Python. Giao diện

được xây dựng trên nền tảng PyQt5.

4. Bố cục báo cáo

Sau phần Mở đầu, báo cáo được trình bày trong ba chương, cụ thể như sau:

Chương 1. Tổng quan về lý thuyết: Trong chương này, báo cáo trình bày các

khái niệm, đặc điểm,

Chương 2. Phân tích thiết kế hệ thống

Chương 3. Xây dựng ứng dụng

Cuối cùng là Kết luận, Tài liệu tham khảo và Phụ lục liên quan đến đề tài.

3

Chương 1. TỔNG QUAN VỀ LÝ THUYẾT

1. Giới thiệu về Python

1.1. Khái niệm

Python là một ngôn ngữ lập trình thông dịch (interpreted), hướng đối tượng

(object-oriented), và là một ngôn ngữ bậc cao (high-level) ngữ nghĩa động (dynamic

semantics). Python hỗ trợ các module và gói (packages), khuyến khích chương trình

module hóa và tái sử dụng mã. Trình thông dịch Python và thư viện chuẩn mở rộng có

sẵn dưới dạng mã nguồn hoặc dạng nhị phân miễn phí cho tất cả các nền tảng chính và

có thể được phân phối tự do.

1.2. Đặc điểm

Ngữ pháp đơn giản, dễ đọc.

Vừa hướng thủ tục (procedural-oriented), vừa hướng đối tượng (object-oriented)

Hỗ trợ module và hỗ trợ gói (package)

Xử lý lỗi bằng ngoại lệ (Exception)

Kiểu dữ liệu động ở mức cao.

Có các bộ thư viện chuẩn và các module ngoài, đáp ứng tất cả các nhu cầu lập

trình.

Có khả năng tương tác với các module khác viết trên C/C++ (Hoặc Java cho

Jython, hoặc .Net cho IronPython).

1.3. Ưu điểm

Có thể nhúng vào ứng dụng như một giao tiếp kịch bản (scripting interface).

Python dễ dàng kết nối với các thành phần khác:

Python có thể kết nối với các đối tượng COM, .NET (Ironpython, Python for .net),

và CORBA, Java… Python cũng được hỗ trợ bởi Internet Communications Engine

(ICE) và nhiều công nghệ kết nối khác.

Có thể viết các thư viện trên C/C++ để nhúng vào Python và ngược lại.

4

Python là ngôn ngữ có khả năng chạy trên nhiều nền tảng.

Python có cho mọi hệ điều hành: Windows, Linux/Unix, OS/2, Mac, Amiga, và

những hệ điều hành khác. Thậm chí có cả những phiên bản chạy trên .NET, máy ảo

Java, và điện thoại di động (Nokia Series 60). Với cùng một mã nguồn sẽ chạy

giống nhau trên mọi nền tảng.

Python rất đơn giản và dễ học

Python có cộng đồng lập trình rất lớn, hệ thống thư viện chuẩn, và cả các thư viện

mã nguồn mở được chia sẻ trên mạng.

Python là ngôn ngữ mã nguồn mở

Cài đặt Python dùng giấy phép nguồn mở nên được sử dụng và phân tối tự do,

ngay cả trong việc thương mại. Giấy phép Python được quản lý bởi Python

Software Foundation.

1.4. Nhược điểm

Python không có các thuộc tính như :protected, private hay public, không có vòng

lặp do…while và switch….case.

Tốc độ xử lý của Python không nhanh bằng các ngôn ngữ khác như JAVA và C++.

2. Giới thiệu về AI, Machine Learning và Deep Learning

2.1. Giới thiệu về AI

AI có thể được định nghĩa như một ngành của khoa học máy tính liên quan đến

việc tự động hóa các hành vi thông minh. AI là một bộ phận của khoa học máy tính và

do đó nó phải được đặt trên những nguyên lý lý thuyết vững chắc, có khả năng ứng

dụng được của lĩnh vực này. Nói nôm na cho dễ hiểu: đó là trí tuệ của máy móc được

tạo ra bởi con người. Trí tuệ này có thể tư duy, suy nghĩ, học hỏi,... như trí tuệ con

người. Xử lý dữ liệu ở mức rộng lớn hơn, quy mô hơn, hệ thống, khoa học và nhanh

hơn so với con người.

Tuy nhiên hiện nay, công nghệ AI vẫn đang còn rất nhiều hạn chế. Đơn cử như

Alexa - một quản gia tuyệt vời, một trong những biểu tượng phổ biến nhất về ứng

dụng của trí thông minh nhân tạo nhưng vẫn không thể vượt qua bài kiểm tra Turing.

5

Tóm lại, những gì chúng ta đang thực hiện với AI hiện nay nằm trong khái

niệm “AI hẹp” (Narrow AI). Công nghệ này có khả năng thực hiện các nhiệm vụ cụ

thể một cách tương tự, hoặc tốt hơn con người. Ví dụ về “AI hẹp” trong thực tế như

công nghệ phân loại hình ảnh của Pinterest hay nhận diện khuôn mặt để tag bạn bè

trên Facebook.

2.2. Giới thiệu về Machine Learning

Machine Learning là một thuật ngữ rộng để chỉ hành động bạn dạy máy tính cải

thiện một nhiệm vụ mà nó đang thực hiện. Cụ thể hơn, machine learning đề cập tới bất

kỳ hệ thống mà hiệu suất của máy tính khi thực hiện một nhiệm vụ sẽ trở nên tốt hơn

sau khi hoàn thành nhiệm vụ đó nhiều lần. Hay nói cách khác, khả năng cơ bản nhất

của machine learning là sử dụng thuật toán để phân tích những thông tin có sẵn, học

hỏi từ nó rồi đưa ra quyết định hoặc dự đoán về một thứ gì đó có liên quan. Thay vì tạo

ra một phần mềm với những hành động, hướng dẫn chi tiết để thực hiện một nhiệm vụ

cụ thể, máy tính được “huấn luyện” bằng cách sử dụng lượng dữ liệu và các thuật toán

để học cách thực hiện nhiệm vụ.

Nếu không có machine learning, AI hiện tại sẽ bị hạn chế khá nhiều bởi nó

mang lại cho máy tính sức mạnh để tìm ra mọi thứ mà không được lập trình rõ ràng.

Ví dụ về một loại machine learning, giả sử bạn muốn một chương trình có thể xác định

được mèo trong các bức ảnh:

Đầu tiên, chúng ta cung cấp cho AI một tập hợp các đặc điểm của loài mèo để

máy nhận dạng, ví dụ như màu sắc lông, hình dáng cơ thể, kích thước…

Tiếp theo, chúng ta sẽ cung cấp một số hình ảnh cho AI, trong đó một số hoặc

tất cả các hình ảnh có thể được dán nhãn "mèo" để máy có thể chọn hiệu quả hơn các

chi tiết, đặc điểm có liên quan đến mèo.

Sau khi máy đã nhận được đủ dữ liệu cần thiết về mèo, nó phải biết cách tìm

một con mèo trong một bức tranh - “Nếu trong hình ảnh có chứa các chi tiết X, Y,

hoặc Z nào đó, thì 95% khả năng đó là một con mèo”.

6

2.3. Giới thiệu về Deep Learning

Deep Learning là một phương pháp của Học máy. Nó cho phép chúng ta huấn

luyện một AI có thể dự đoán được các đầu ra dựa vào một tập các đầu vào. Cả hai

phương pháp có giám sát và không giám sát đều có thể sử dụng để huấn luyện.

Mạng nơ ron

Cũng giống động vật, bộ não của AI cũng có các nơ ron. Chúng được biểu diễn

bằng các vòng tròn. Các nơ ron này đều đã được liên kết.

Hình 1-1 Mô hình CNN

Các nơ ron được nhóm vào 3 loại layer khác nhau:

Input layer: nhận các dữ liệu đầu vào

Hidden layer: thực hiện các phép tính toán cho các đầu vào. Thử thách lớn nhất

trong việc tạo mạng nơ ron là quyết định số lượng các hidden layer này, cũng như số

các nơ ron cho mỗi layer.

Output layer: trả về dữ liệu đầu ra

7

Hình 1-2 Mối liên hệ giữa AI, ML và DL

3. Giới thiệu về Keras

Keras là một library được phát triển vào năm 2015 bởi François Chollet, là một

kỹ sư nghiên cứu deep learning tại google. Nó là một open source cho neural network

được viết bởi ngôn ngữ python. keras là một API bậc cao có thể sử dụng chung với các

thư viện deep learning nổi tiếng như Tensorflow(được phát triển bởi Google),

CNTK(được phát triển bởi Microsoft), Theano(người phát triển chính Yoshua

Bengio). Keras có một số ưu điểm như:

Dễ sử dụng,xây dựng model nhanh.

Có thể run trên cả cpu và gpu

Hỗ trợ xây dựng CNN , RNN và có thể kết hợp cả 2.

Xây dựng bộ xương cho model

Gồm 2 module nhỏ:

Models sub-module

8

Layers sub-module chứa các layers chuyên dụng để ta build các model như

CNN,RNN,GANs… Có rất nhiều layers nên ta chỉ quan tâm đến một số layer

thường sử dụng.

Core layer : chứa các layer mà hầu như model nào cũng sử dụng đến nó.

o Dense layer này sử dụng như một layer neural network bình

thường. Các tham số quan tâm.

units chiều output

activation dùng để chọn activation.

input_dim chiều input nếu là layer đầu tiên

use_bias có sử dụng bias ko,true or false

kernel_initializer khởi tạo giá trị đầu cho tham số trong

layer trừ bias

bias_initializer khởi tạo giá trị đầu cho bias

kernel_regularizer regularizer cho coeff

bias_regularizer regularizer cho bias

activity_regularizer có sử dụng regularizer cho output

không?

kernel_constraint,bias_constraint có ràng buộc về weight

không?

Activation dùng để chọn activation trong layer(có thể dùng tham số

activation thay thế)

Dropout layer này dùng như regularization cho các layer hạn chế

overfiting. Tham số cần chú ý :

o rate tỉ lệ dropout

o noise_shape cái này chưa tìm hiểu

o seed random seed bình thường

Flatten dùng để lát phằng layer để fully connection

Input layer này sử dụng input như 1 layer

Reshape

Lambda dùng như lambda trong Python

9

Convolutional Layers: chứa các layer trong mạng nơ ron tích chập ha

o Conv1D, Conv2D là convolution layer dùng để lấy feature từ

image. tham số cần chú ý:

filters số filter của convolution layer

kernel_size size window search trên image

strides bước nhảy mỗi window search

padding same là dùng padding, valid là không

data_format format channel ở đầu hay cuối

o UpSampling1D, UpSampling2D: ngược lại với convolution layer

size

o ZeroPadding1D,ZeroPadding2D dùng để padding trên image

Pooling Layers : Chứa các layer dùng trong mạng CNN.

o MaxPooling1D, MaxPooling2D dùng để lấy feature nổi bật(dùng

max) và giúp giảm parameter khi training

pool_size size pooling

o AveragePooling1D,AveragePooling2D giống như maxpooling

nhưng dùng Average

o GlobalMaxPooling1D,GlobalMaxPooling2D

Recurrent Layers chứa các layers dùng trong mạng RNN

o RNN layer RNN cơ bản

o GRU khắc phục hạn chế RNN tránh vanish gradient.

o LSTM Long Short-Term Memory layer

Embedding layer : Embedding dùng trong nhiều trong nlp mục đích

embbding sang một không gian mới có chiều nhỏ hơn và được learning from

data thay cho one-hot lad hard code.

o input_dim size của vocabulary

o output_dim size của word embbding

o input_length chiều dài mỗi sequence

Merge Layers : chứa các layers giúp chúng ta cộng, trừ hoặc nối các

layer như các vector

10

o Add: cộng các layers

o Subtract: trừ các layers

o Multiply: nhân các layer

o Average tính trung bình các layers

o Maximum lấy maximun giữa các layers

o Concatenate nối các layer

o Dot: Nhân matrix giữ 2 layers

Own Keras layers : Giúp chúng ta có thể xây dựng layer như theo ý

muốn, gồm 3 method chúng ta cần chú ý là build,call và compute_output_shape

Tiền xử lý dữ liệu

Sequence Preprocessing tiền xử lý chuỗi .

o TimeseriesGenerator dùng để tạo dữ liệu cho time series

o pad_sequences dùng để padding giúp các chuỗi có độ dài bằng nhau

o skipgrams tạo data trong model skip gram,kết quả trả về 2 tuple nếu

word xuất hiện cùng nhau là 1 nếu ko là 0.

Text Preprocessing tiền xử lý dữ liệu kiểu văn bản

o Tokenizer giống kỹ thuật tokenizer trong nlp, tạo tokenizer từ

documment

o one_hot tạo data dạng one hot encoding

o text_to_word_sequence covert text thành sequence

Image Preprocessing tiền xử lý image

o ImageDataGenerator tạo thêm data bằng cách scale, rotation…

Function trong bộ xương của model

Các hàm loss functions thường dùng :

o mean_squared_error thường dùng trong regression tính theo eculic

o mean_absolute_error tính theo trị tuyệt đối

o categorical_crossentropy dùng trong classifier nhiều class

o binary_crossentropy dùng trong classifier 2 class

o kullback_leibler_divergence dùng để tính loss giữa phân phối thực tế và

thực nghiệm

11

metrics nó là thước đo để ta đánh giá accuracy của model.

o binary_accuracy nếu y_true==y_pre thì trả về 1 ngược lại 0,dùng cho 2

class

o categorical_accuracy tương tự binary_accuracy nhưng cho nhiều class

optimizers dùng để chọn thuật toán training.

o SGD Stochastic gradient descent optimizer

o RMSprop RMSProp optimizer

o Adam Adam optimizer

activations để chọn activation function

o linear như trong linear regression

o softmax dùng trong multi classifier

o relu max(0,x) dùng trong các layer cnn,rnn để giảm chi phí tính toán

o tanh range (-1,1)

o Sigmoid range (0,1) dùng nhiều trong binary class

Callbacks : khi model chúng ta lớn có khi training thì gặp sự cố ta muốn lưu lại

model để chạy lại thì callback giúp t làm điều này.

o ModelCheckpoint lưu lại model sau mỗi epoch

o EarlyStopping stop training khi training ko cải thiện model

o ReduceLROnPlateau giảm learning mỗi khi metrics ko được cải thiện

Datasets. Keras hỗ trợ một số dataset theo công thức :

o cifar100 gồm 50,000 32x32 color training images, labeled over 100

categories, and 10,000 test images.

o mnist data 70k image data hand written.

o fashion_mnist Dataset of 70k 28x28 grayscale images of 10 fashion

categories

o imdb 25,000 movies reviews from IMDB, label đánh theo pos/neg

o reuters 11,228 newswires from Reuters, labeled over 46 topics

o boston_housing data giá nhà ở boston theo 13 features

12

Applications chứa các pre-training weight của các model deep learning nổi

tiếng.Xception,VGG16,VGG19,resnet50,inceptionv3,

InceptionResNetV2,MobileNet,DenseNet,NASNet cẩu trúc chung như sau :

o preprocess_input dùng để preprocessing input custom same với input của

pretraining

o decode_predictions dùng để xem label predict

backends thay vì keras xây dựng từ đầu các công thức từ đơn giản đến phức tạp,

thì nó dùng những thư viện đã xây dựng sẵn rồi và dùng thôi. Giúp tiết kiệm dc

thời gian và chí phí. Trong keras có hỗ trợ 3 backend là tensorflow,theano và

CNTK.

initializers khởi tạo giá trị weight của coeff và bias trước khi training lần lượt

kernel_initializer and bias_initializer. mặc định là glorot_uniform phân phối

uniform với giá trị 1/căn(input+output).

regularizers Dùng để phạt những coeff nào tác động quá mạnh vào mỗi layer

thường dùng là L1 và L2

constraints dùng để thiết lập các điều kiện ràng buộc khi training

visualization giúp chúng ta plot lại cấu trúc mạng neral network.

Utils chứa các function cần thiết giúp ta xử lý data nhanh hơn.

o normalize chuẩn hóa data theo L2

o plot_model giúp chúng ta plot model

o to_categorical covert class sang binary class matrix

4. Giới thiệu về Transfer Learning

Transfer learning là việc ứng dụng kỹ năng/tri thức mình học được từ vấn đề

này, với ứng dụng này sang vấn đề khác với ứng dụng khác có liên quan.

Transfer learning nhằm cải thiện việc học hàm cho ứng dụng.

13

Hình 1-3 So sánh mô hình ML truyền thống và Transfer Learning

Trong Machine Learning và Deep Learning, thì transfer learning là kỹ thuật cho

phép tận dụng những gì mình học được từ tập dữ liệu/ứng dụng/kiến trúc này sang tập

dữ liệu/ứng dụng/kiến trúc khác. Khác với học máy thông thường, từng nhiệm vụ sẽ có

một hệ thống học riêng như ở hình ví dụ trên.

Tại sao nên dùng Transfer Learning?

Không đủ dữ liệu: DL cần rất nhiều dữ liệu, và ngốn rất nhiều tài nguyên để

học trên tập dữ liệu và ứng dụng đó và việc huấn luyện DL trên tập dữ liệu ít phần

nhiều là không hiệu quả. Vậy ngoài kỹ thuật data augmentation trước đó, transfer

learning cũng là một giải pháp cho vấn đề này.

Không đủ tài nguyên: Việc học trên tập dữ liệu lớn rất ngốn nhiều tài nguyên.

Transfer learning sẽ góp phần giảm phần nào thời lượng training.

Cải thiện chất lượng: Rất nhiều trường hợp transfer learning cải thiện chất

lượng dự đoán của Target Task so với việc train lại từ đầu. Lý do có thể do Source

Network được train với dữ liệu lớn và học được tính khái quát hóa tốt hơn, hay việc

train với Target Task trong khi mạng vẫn có thông tin của Source Task cho tách động

của multi-task learning.

Phương thức Transfer Learning

14

Transfer learning as a starting point: Dùng kết quả của mạng pre-trained như

VGG19, InceptionNet, ResNet101 làm kết quả dự đoán ban đầu. Thiết kế thuật toán

fusion kết quả của nhiều mạng pre-trained.

Transfer learning for representation: Lấy đầu ra của layer gần cuối và coi như

là feature vector. Trong bài toán nhận dạng vật thể, mạng neural network có thể coi

như một thuật toán tự học cách biểu diễn dữ liệu cho bài toán nhận dạng (learned

representation) với phần nhận dạng đơn giản (thường dùng Softmax và one-hot

coding). Vector biểu diễn đó có thể đưa vô các thuật toán phân loại phức tạp hơn như

SVM.

Warm restart via fine tuning: Sử dụng mạng đã train từ tập dữ liệu lớn như

ImageNet, rồi train lại với dữ liệu khác ở learning rate nhỏ hơn.

5. Giới thiệu về nhận diện khuôn mặt

Công nghệ AI nhận dạng khuôn mặt là công nghệ cho phép nhận dạng một

người cụ thể từ ảnh hoặc 1 đoạn video. Cách thức làm việc của công nghệ này là so

sánh hình ảnh khuôn mặt với những hình ảnh sẵn có trong cơ sở dữ liệu để đưa ra kết

quả.

Hệ thống này thường được sử dụng trong các hệ thống an ninh và có thể được

so sánh với các dạng sinh trắc học khác như các hệ thống nhận dạng vân tay hay tròng

mắt.

Quá trình mà sinh trắc học nhận diện khuôn mặt hoạt động bao gồm:

1. Lấy mẫu: Trước hết, để có thể phân tích khuôn mặt và nhận diện, cần

phải tách khuôn mặt ra khỏi khung cảnh còn lại trước đã

2. Phân tích: Chúng ta nhận diện gương mặt mọi người qua các đặc điểm,

hệ thống nhận diện cũng vậy, nhưng nó thực hiện đánh giá các đặc điểm ở 1 mức độ

cao hơn

3. So sánh: Mỗi khuôn mặt đều có nhiều điểm mốc, những phần lồi lõm tạo

nên các đặc điểm của khuôn mặt. Các hệ thống nhận diện gương mặt định nghĩa những

điểm này là những điểm nút

4. Kết quả: Hệ thống sau đó sẽ quyết định kết quả so sánh có phù hợp hay

không.

15

6. Giới thiệu về MTCNN

MTCNN(Multi-Task Cascaded Convolutional Neural Networks) là một mạng

neuron dùng để phát hiện khuôn mặt và face landmark trên hình ảnh.

MTCNN được giới thiệu lần đầu tiên trên bài báo khoa học của Zhang - 2016 .

MTCNN bao gồm 3 mạng CNN xếp chồng hoạt động một cách đồng thời. Mỗi

mạng có cấu trúc khác nhau và đảm nhiệm vai trò khác nhau. Đầu ra của MTCNN là

vị trí khuôn mặt và các điểm trên mặt như mắt, mũi, miệng,…

Đây là 1 trong những công cụ được sử dụng rộng rãi với độ chính xác cao.

7. Giới thiệu về VGG16 model

VGG16 là mạng convolutional neural network được đề xuất bởi K. Simonyan

and A. Zisserman, University of Oxford1.

Model sau khi train bởi mạng VGG16 đạt độ chính xác 92.7% top-5 test trong

dữ liệu ImageNet gồm 14 triệu hình ảnh thuộc 1000 lớp khác nhau.

Hình 1-4 Kiến trúc của mạng VGG16

8. Giới thiệu về PyQt5

Qt là tập hợp các thư viện C ++ đa nền tảng triển khai các API cấp cao để truy

cập nhiều nơi của hệ thống máy tính và thiết bị di động hiện đại. Chúng bao gồm các

dịch vụ định vị, đa phương tiện, kết nối NFC và Bluetooth, trình duyệt web dựa trên

Chromium, cũng như phát triển giao diện người dùng truyền thống.

PyQt5 là một bộ liên kết Python toàn diện cho Qt v5. Nó được triển khai dưới

dạng hơn 35 mô-đun mở rộng và cho phép Python được sử dụng làm ngôn ngữ phát

1 https://arxiv.org/abs/1604.02878

16

triển ứng dụng thay thế cho C ++ trên tất cả các nền tảng được hỗ trợ bao gồm

Windows, iOS và Android.

PyQt5 cũng có thể được nhúng trong các ứng dụng dựa trên C ++ để cho phép

người dùng các ứng dụng đó định cấu hình hoặc nâng cao chức năng của các ứng dụng

đó.

Ưu điểm

o Tính linh hoạt của các dòng lệnh - Lập trình GUI với Qt được thiết kế dựa trên

khái niệm tín hiệu (signals) và khe cắm (slots) để thiết lập giao tiếp giữa các đối

tượng. Điều đó cho phép sự linh hoạt khi xử lý các sự kiện GUI và codebase

mượt mà hơn.

o Hơn cả một framework - Qt sử dụng một loạt các APIs nền tảng gốc cho mục

đích kết nối mạng, tạo cơ sở dữ liệu và nhiều thứ khác. Nó cung cấp quyền truy

cập chính vào chúng thông qua một API duy nhất.

o Các thành phần giao diện người dùng khác nhau - Qt cung cấp một số tiện ích

con, chẳng hạn như các nút (button) hoặc menu, tất cả đều được thiết kế với

giao diện cơ bản trên tất cả các nền tảng được hỗ trợ.

o Dễ dàng sử dụng - PyQt đi kèm với chức năng API đơn giản, thân thiện với

người dùng, cùng với các lớp cụ thể được liên kết với Qt C ++. Điều này cho

phép người dùng sử dụng kiến thức trước đó từ Qt hoặc C ++, làm cho PyQt dễ

hiểu.

Nhược điểm

o Thiếu tài liệu dành riêng cho Python cho các lớp trong PyQt5.

o Nó đòi hỏi nhiều thời gian để hiểu tất cả các chi tiết của PyQt, có nghĩa lập

trình viên cần bỏ thời gian để nghiên cứu vì PyQt khá rộng và mới mẻ.

9. Kết chương 1

Thông qua tìm hiểu lý thuyết, cơ sở đề xuất giải pháp sẽ được trình bày trong

chương tiếp theo.

17

Chương 2. PHÂN TÍCH VÀ THIẾT KẾ HỆ THỐNG

1. Yêu cầu bài toán

Tổ chức thông tin dữ liệu cho toàn bộ sinh viên toàn trường kết hợp với dữ liệu

khuôn mặt của các sinh viên đó.

Chương trình nhận diện khuôn mặt từ nguồn là các camera nhằm mục đích theo

dõi quá trình ra/vào trường của sinh viên.

Quá trình xử lý nhận dạng phải đảm bảo các yếu tố nhanh và chính xác.

2. Triển khai

Môi trường phát triển

Thiết bị: máy tính có webcam

Ngôn ngữ Python với thư viện Keras Tensorflow

IDE hoặc Editor tùy chọn

Hình 2-1 Các bước thực hiện

Chuẩn bị dữ liệu

Đầu tiên, về phần phát hiện khuôn mặt ta cần cài đặt MTCNN qua pip module

$ pip install mtcnn

>>> from mtcnn import MTCNN

>>> detector = MTCNN()

>>> img = get_current_frame()

>>> img = normalized(img) // Preprocessing

>>> detector.detect_faces(img)

[

{

18

‘box’: [200, 29, 50, 80],

‘keypoint’: {}

}

]

Với mỗi frame nhận được từ nguồn(cụ thể ở đây là webcam), ta tiến hành phát

hiện những khuôn mặt có trong khung hình, sau đó cắt khuôn mặt và lưu vào folder có

Face ID tương ứng.

>>> for face in faces:

face.save(‘/path/to/face_id’)

Train dữ liệu

Khởi tạo model

>>> model = Sequential()

>>> model.add(ZeroPadding2D((1,1),input_shape=(224,224, 3)))

>>> model.add(Convolution2D(64, (3, 3), activation='relu'))

>>> model.add(ZeroPadding2D((1,1)))

>>> model.add(Convolution2D(64, (3, 3), activation='relu'))

>>> model.add(MaxPooling2D((2,2), strides=(2,2)))

>>> model.add(ZeroPadding2D((1,1)))

>>> model.add(Convolution2D(128, (3, 3), activation='relu'))

>>> model.add(ZeroPadding2D((1,1)))

>>> model.add(Convolution2D(128, (3, 3), activation='relu'))

>>> model.add(MaxPooling2D((2,2), strides=(2,2)))

>>> model.add(ZeroPadding2D((1,1)))

>>> model.add(Convolution2D(256, (3, 3), activation='relu'))

>>> model.add(ZeroPadding2D((1,1)))

>>> model.add(Convolution2D(256, (3, 3), activation='relu'))

>>> model.add(ZeroPadding2D((1,1)))

>>> model.add(Convolution2D(256, (3, 3), activation='relu'))

>>> model.add(MaxPooling2D((2,2), strides=(2,2)))

>>> model.add(ZeroPadding2D((1,1)))

19

>>> model.add(Convolution2D(512, (3, 3), activation='relu'))

>>> model.add(ZeroPadding2D((1,1)))

>>> model.add(Convolution2D(512, (3, 3), activation='relu'))

>>> model.add(ZeroPadding2D((1,1)))

>>> model.add(Convolution2D(512, (3, 3), activation='relu'))

>>> model.add(MaxPooling2D((2,2), strides=(2,2)))

>>> model.add(ZeroPadding2D((1,1)))

>>> model.add(Convolution2D(512, (3, 3), activation='relu'))

>>> model.add(ZeroPadding2D((1,1)))

>>> model.add(Convolution2D(512, (3, 3), activation='relu'))

>>> model.add(ZeroPadding2D((1,1)))

>>> model.add(Convolution2D(512, (3, 3), activation='relu'))

>>> model.add(MaxPooling2D((2,2), strides=(2,2)))

>>> model.add(Convolution2D(4096, (7, 7), activation='relu'))

>>> model.add(Dropout(0.5))

>>> model.add(Convolution2D(4096, (1, 1), activation='relu'))

>>> model.add(Dropout(0.5))

>>> model.add(Convolution2D(2622, (1, 1)))

>>> model.add(Flatten())

>>> model.add(Activation('softmax'))

Tải và load file weight. File weight này đã được train sẵn nên ở đây áp dụng kĩ

thuật Transfer Learning để tăng hiệu quả bài toán.

$ gdown

https://drive.google.com/uc?id=1Obs4GsKhUXSWrYhnzWAxI79cblwqkR_

R

>>> model.load_weights('vgg_face_weights.h5')

>>> model.summary() // View model

>>> # Drop two last layer

20

>>>

vgg_face=Model(inputs=model.layers[0].input,outputs=model.layer

s[-2].output)

Duyệt qua tất cả folder, load, normalized ảnh và lưu feature/label dưới dạng

numpy array

>>> for folder in train_folder:

for image in folder:

load_img()

normalized_img()

get_img_feature()

add_feature_to_numpy_array()

add_label_to_numpy_array()

Giải thích 1 chút ở hàm get_img_feature():

>>> def get_img_feature(image):

img_encode = vgg_face(image)

return np.squeeze(K.eval(img_encode)).tolist()

Kết quả trả về của hàm trên là vector đặc trưng của khuôn mặt với độ dài 2622.

Thao tác tương tự với test_folder

Định nghĩa mô hình classifier khuôn mặt

>>> classifier_model=Sequential()

>>>

classifier_model.add(Dense(units=100,input_dim=x_train.shape[1]

,kernel_initializer='glorot_uniform'))

>>> classifier_model.add(BatchNormalization())

>>> classifier_model.add(Activation('tanh'))

>>> classifier_model.add(Dropout(0.3))

>>>

classifier_model.add(Dense(units=10,kernel_initializer='glorot_

uniform'))

>>> classifier_model.add(BatchNormalization())

21

>>> classifier_model.add(Activation('tanh'))

>>> classifier_model.add(Dropout(0.2))

>>>

classifier_model.add(Dense(units=6,kernel_initializer='he_unifo

rm'))

>>> classifier_model.add(Activation('softmax'))

>>>

classifier_model.compile(loss=tf.keras.losses.SparseCategorical

Crossentropy(),optimizer='nadam',metrics=['accuracy'])

Fit model

>>>

classifier_model.fit(x_train,y_train,epochs=100,validation_data

=(x_test,y_test))

Sau khi hoàn thành, lưu lại model để tiện sử dụng sau này

>>> tf.keras.models.save_model(classifier_model,'model.h5')

Nhận dạng khuôn mặt

>>> load_img()

>>> faces = detector.detect_faces(img)

>>> for face in faces:

normalized()

get_img_feature()

predict()

Ở hàm predict ta sử dụng công thức Euclid để tính khoảng cách và trả về tỉ lệ

chính xác của mỗi khuôn mặt. Từ vị trí của tỉ lệ cao nhất, đối chiếu với dữ liệu đã

được lưu lúc train ta có kết quả là thông tin của khuôn mặt được nhận diện.

3. Kết chương 2

Việc train dữ liệu tốn khá nhiều thời gian. Để giảm thời gian cho việc này ta có

thể sử dụng các thư viện sử dụng GPU.

Sau khi đã có code được các công đoạn trên, ta tiến hành build giao diện và tích

hợp code nhận dạng.

22

Chương 3. XÂY DỰNG ỨNG DỤNG

1. Giao diện

Bao gồm 2 ứng dụng:

Ứng dụng 1: dùng để thu thập dữ liệu khuôn mặt của người dùng. Ở ứng dụng

này người dùng phải nhập thông tin của mình vào textbox sau đó nhấn nút “Take

photo now”. Chương trình sẽ lần lượt chụp khuôn mặt người dùng ở các góc chính

diện, bên phải, bên trái, bên trên và bên dưới. Sau khi tiến hành thu thập dữ liệu xong,

ta tiến hành train toàn bộ dữ liệu như đã trình bày ở chương 3.

Hình 3-1 Giao diện ứng dụng 1

Ứng dụng 2: dùng để nhận diện khuôn mặt. Camera sẽ nhận biết được các

khuôn mặt có trong khung hình, sau đó tiến hành nhận diện và trả về thông tin của các

khuôn mặt đó.

23

Hình 3-2 Giao diện ứng dụng nhận dạng khuôn mặt

2. Chức năng

App hiện tại đã chạy được, tỉ lệ nhận dạng chính xác khá cao

1. Chụp hình ảnh để làm dataset, phục vụ cho việc training.

2. Training dataset để cho ra model phục vụ cho việc nhận dạng đối tượng

3. Hiển thị thông tin đối tượng được nhận dạng trên khung hình camera

3. Kết chương 3

Những chức năng đã làm được ở chương này là cơ sở để chúng em rút ra được

kết luận cuối cùng được đề cập ở chương tiếp theo.

24

Chương 4. KẾT LUẬN

1. Kết quả đạt được

Về lý thuyết

Tiếp thu thêm các kiến thức về AI, ML và DL

Biết được thêm về các bài toán nhận dạng khuôn mặt, ưu và nhược điểm của

mỗi loại

Về thực nghiệm

Trải qua 1000 epochs ta có kết quả như sau:

Hình 4-1 Biểu đồ loss

25

Hình 4-2 Biểu đồ accuracy

Từ 2 biểu đồ trên ta nhận thấy được mô hình cho tỉ lệ khá là chuẩn xác.

Tuy nhiên quá trình phát hiện khuôn mặt chậm dẫn đến các hiện tượng giật, lag,

FPS thấp trên ứng dụng.

Về trải nghiệm

Rèn luyện khả năng tự học và tự nghiên cứu

Tăng kỹ năng làm việc nhóm

2. Hướng nghiên cứu

Với những hạn chế và tồn tại nêu trên, hướng nghiên cứu của đề tài dự kiến như

sau:

- Tích hợp với API bên phía nhà trường nhằm đảm bảo tính nhất quán về

thông tin của sinh viên.

- Cần lưu checkpoint khi train để có thể train bổ sung. Tránh trường hợp phải

train lại từ đầu khi thêm mới dữ liệu.

- Tìm hiểu thêm về FastMTCNN, giúp tăng tốc độ phát hiện khuôn mặt nhờ

chạy trên GPU.

- Khai thác thế mạnh của GPU vào bài toán.

26

TÀI LIỆU THAM KHẢO

Website

[1] [Face Recog 2.0] Nhận diện khuôn mặt trong video bằng MTCNN và

Facenet: https://www.miai.vn/2019/09/11/face-recog-2-0-nhan-dien-khuon-

mat-trong-video-bang-mtcnn-va-facenet/

[2] Convolutional Neural Network: https://nttuan8.com/bai-6-convolutional-

neural-

network/#:~:text=VGG16%20l%C3%A0%20m%E1%BA%A1ng%20convo

lutional%20neural,thu%E1%BB%99c%201000%20l%E1%BB%9Bp%20kh

%C3%A1c%20nhau.

[3] Face Recognition with Facenet and MTCNN:

https://arsfutura.com/magazine/face-recognition-with-facenet-and-mtcnn/

[4] PyQt5 on Pypi: https://pypi.org/project/PyQt5

[5] Python GUI, PyQt vs Tkinter: https://dev.to/amigosmaker/python-gui-

pyqt-vs-tkinter-5hdd

[6] Tổng hợp Transfer Learning:

https://forum.machinelearningcoban.com/t/tong-hop-transfer-learning/5388

27

PHỤ LỤC

Mã nguồn: https://github.com/trongnotsave/vku-pyqt-camera-app