Khoa Khoa Học Máy Tính ĐỒ ÁN CHUYÊN NGÀNH 2
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