You are on page 1of 19

TRƯỜNG ĐẠI HỌC BÁCH KHOA HÀ NỘI

VIỆN ĐIỆN TỬ - VIỄN THÔNG

BÁO CÁO BÀI TẬP LỚN


TRÍ TUỆ NHÂN TẠO VÀ ỨNG DỤNG
NHÓM 10
ĐỀ TÀI: FACE MASK DETECTOR

Sinh viên thực hiện MSSV


Nguyễn Ngọc Đức
Nguyễn Thị Nga 20182703

Giảng viên hướng dẫn: TS. Võ Lê Cường

Hà Nội,2022
LỜI MỞ ĐẦU
Phát hiện khuôn mặt là một trong những lĩnh vực mới của xử lý ảnh. Và ngày nay
được sử dụng rộng rãi trong nhiều lĩnh vực của đời sống như nhận dạng trong lĩnh vực
thương mại, hay phát hiện trong lĩnh vực an ninh, hay trong xử lý video, hình ảnh.
Với sự phát triển không ngừng của khoa học và công nghệ, đặc biệt là với những
chiếc điện thoại thông minh (smarphone) ngày càng hiện đại và được sử dụng phổ
biến trong đời sống con người đã làm cho lượng thông tin thu được bằng hình ảnh
ngày càng tăng. Theo đó, lĩnh vực xử lý ảnh cũng được chú trọng phát triển, ứng dụng
rộng rãi trong đời sống xã hội hiện đại. Không chỉ dừng lại ở việc chỉnh sửa, tăng chất
lượng hình ảnh mà với công nghệ xử lý ảnh hiện nay chúng ta có thể giải quyết các
bài toán nhận dạng chữ viết, nhận dạng dấu vân tay, nhận dạng khuôn mặt... Một
trong những bài toán được nhiều người quan tâm nhất của lĩnh vực xử lý ảnh hiện nay
đó là nhận dạng khuôn mặt (Face Recognition).
Có rất nhiều ứng dụng trong bài toán nhận dạng khuôn mặt bên cạnh đó bài toán nhận
dạng đeo khẩu trang đang vô cùng hữu ích trong tình hình dịch bệnh hiện tại. Như
chúng ta đã biết, tình hình dịch bệnh vẫn đang tiếp diễn gây ảnh hưởng không nhỏ tới
đời sống của chúng ta, vì vậy việc phòng bệnh là rất cần thiết. Việc đeo khẩu trang nơi
công cộng đã góp phần hạn chế được sự lây lan của dịch bệnh Covid 19 trên toàn cầu.
Tuy nhiên không ít người không thực hiện việc đeo khẩu trang này. Do đó, bài toán
nhận dạng đeo khẩu trang tự động đóng vai trò quan trọng việc giám sát người dân
thực hiện đúng của Nhân chủ trương, chính sách của Nhà nước trong việc đeo khẩu
trang nơi công cộng.
Trong bài tập lớn này nhóm em đã thực hiện đề tài FACE MASK DETECTOR
(nhận diện khuôn mặt). Dưới sự hướng dẫn của thầy Võ Lê Cường, nhóm em đã hoàn
thành bài tập lớn, tuy nhiên trong quá trình thực hiện đề tài, nhóm em vẫn còn nhiều
sai sót và mong muốn nhận được sự góp ý của thầy để có thể thực hiện bài tập lớn tốt
hơn cũng như học hỏi được nhiều kiến thức hơn trong học phần Trí tuệ nhân tạo.
Chúng em xin chân thành cảm ơn!
MỤC LỤC
PHẦN 1: Tìm hiểu về Keras/Tensorflow và OpenCV.........................................7
I. Tìm hiểu về Keras/Tensorflow.................................................................7
1. Keras.........................................................................................................7
1.1 Tổng quan về Keras............................................................................7
1.2 Đặc trưng........................................................................................7
1.3 Lợi ích của Keras............................................................................7
2. Tensorflow............................................................................................8
2.1 Tổng quan...........................................................................................8
2.2 Ưu điểm...........................................................................................8
2.3 Kiến trúc Tensorflow......................................................................8
2.4 Thuật toán TensorFlow.......................................................................9
II. Tìm hiểu về Open Cv..............................................................................10
1. Opencv là gì?......................................................................................10
2. Ứng dụng thực tế của Open Cv..........................................................10
3. Những ngôn ngữ nên sử dụng để lập trình opencv hiệu quả..............10
III. Môi trường triển khai..........................................................................11
1. Giới thiệu về Google Colab................................................................11
2. Google Colab có ưu điểm:..................................................................11
3. Thao tác cơ bản trên Google Colab....................................................12
IV. Mạng MobilenetV2.............................................................................13
4.1 . Giới thiệu.......................................................................................13
4.2 . Mô hình kiến trúc mạng Mobile Net.............................................13
4.3 . Depthwise Separable Convolution................................................14
PHẦN 2: THỰC HIỆN ĐỀ TÀI.........................................................................16
1. Tổng quan về đề tài.................................................................................16
2. Thuật toán của chương trình...................................................................16
3. Thuật toán huấn luyện mô hình..............................................................17
4. Thuật toán phát hiện người đeo khẩu trang trong thời thực...................18
5. Kết quả....................................................................................................18
DANH MỤC HÌNH ẢNH
Hình 1.1: Tổng quan về Keras..............................................................................6
Hình 1.2: Khởi chạy Colab.................................................................................11
Hình 1.3: Một chương trình ví dụ.......................................................................12
Hình 1.4. Mô hình mạng MobileNet...................................................................13
Hình 1.5. Depthwise convolution........................................................................14
Hình 1.6. Pointwise Convolution........................................................................14
Hình 1.7. Convolution truyền thống (Trái), Depthwise separable convolution
với BN và ReLU (Phải).......................................................................................14
Hình 2.1. Cấu trúc chương trình........................................................................15
Hình 2.2. Thuật toán huấn luyện mô hình..........................................................16
Hình 2.3. Thuật toán phát hiện người đeo khẩu trang trong thời gian thực......17
PHÂN CÔNG CÔNG VIỆC

STT Công việc Người thực hiện


1 Tìm hiểu về Keras/Tensorflow Độ, Vân Anh
2 Tìm hiểu về OpenCV Độ, Vân Anh
3 Code Nga, Đức
4 Side và báo cáo Vân Anh
PHẦN 1: Tìm hiểu về Keras/Tensorflow và OpenCV
I.Tìm hiểu về Keras/Tensorflow
1. Keras
1.1 Tổng quan về Keras
Keras là một open source cho Neural Network được viết bởi ngôn ngữ Python.
Nó là một thư viện được phát triển vào năm 2005 bởi Francois Chollet, là một kỹ sư
nghiên cứu Deep Learning. Keras có thể sử dụng chung với các thư viện nổi tiếng như
Tensorflow, CNTK, Theano. Theano là một thư viện python được sử dụng cho các tác
vụ tính toán số nhanh. TensorFlow là thư viện toán học biểu tượng nổi tiếng nhất được
sử dụng để tạo mạng nơ-ron và mô hình học sâu. TensorFlow rất linh hoạt và lợi ích
chính là tính toán phân tán. CNTK là khung học sâu được phát triển bởi Microsoft. Nó
sử dụng các thư viện như Python, C #, C ++ hoặc các bộ công cụ học máy độc lập.
Theano và TensorFlow là những thư viện rất mạnh nhưng khó hiểu để tạo mạng nơ-
ron.
Keras dựa trên cấu trúc tối thiểu, cung cấp một cách dễ dàng và dễ dàng để tạo
các mô hình học sâu dựa trên TensorFlow hoặc Theano. Keras được thiết kế để xác
định nhanh các mô hình học sâu, là một lựa chọn tối ưu cho các ứng dụng học sâu.

Hình 1.1: Tổng quan về Keras


1.2 Đặc trưng
Keras tận dụng các kỹ thuật tối ưu hóa khác nhau để làm cho API mạng thần kinh
cấp cao dễ dàng hơn và hiệu quả hơn. Nó hỗ trợ các tính năng sau
 API nhất quán, đơn giản và có thể mở rộng.
 Cấu trúc tối thiểu - dễ dàng đạt được kết quả mà không cần rườm rà.
 Hỗ trợ nhiều nền tảng và backend.
 Thân thiện với người dùng chạy trên cả CPU và GPU.
 Khả năng mở rộng tính toán cao.
1.3 Lợi ích của Keras
Keras năng động , mạnh mẽ và có những ưu điểm sau
 Cộng động lớn hỗ trợ
 Dễ dàng để kiểm tra.
 Mạng nơ-ron Keras được viết bằng Python giúp mọi thứ đơn giản hơn.
 Keras hỗ trợ cả mạng convolution và recurrent.
 Mô hình học sâu là các thành phần rời rạc, do đó, bạn có thể kết hợp thành
nhiều cách.
 Chạy được trên cả CPU và GPU.
2. Tensorflow
2.1 Tổng quan
TensorFlow là một nền tảng mã nguồn mở end-to-end dành cho học máy. Nó
có một hệ sinh thái toàn diện, linh hoạt gồm các công cụ, thư viện và tài nguyên cộng
đồng cho phép các nhà nghiên cứu thúc đẩy tính năng tiên tiến trong ML và các nhà
phát triển dễ dàng xây dựng và triển khai các ứng dụng hỗ trợ ML. Nó có thể được sử
dụng trong nhiều ngôn ngữ lập trình khác nhau, đáng chú ý nhất là Python, cũng như
Javascript, C ++ và Java.Tính linh hoạt này cho phép một loạt các ứng dụng trong
nhiều lĩnh vực khác nhau.
Tensorflow là một thư viện toán học biểu tượng được sử dụng cho mạng Nơ-
ron và phù hợp nhất để lập trình luồng dữ liệu trên một loạt các tác vụ. Nó cung cấp
nhiều cấp độ trừu tượng để xây dựng và đào tạo các mô hình.
Hiện tại, thư viện học sâu nổi tiếng nhất trên thế giới là TensorFlow của
Google. Sản phẩm của Google sử dụng công nghệ máy học trong tất cả các sản phẩm
của mình để cải thiện công cụ tìm kiếm, bản dịch, chú thích hình ảnh hoặc các đề
xuất.
Ví dụ về TensorFlow: người dùng Google có thể trải nghiệm tìm kiếm nhanh
hơn và tinh tế hơn với AI. Nếu người dùng nhập từ khóa vào thanh tìm kiếm, Google
sẽ đưa ra đề xuất về từ tiếp theo có thể là từ khóa nào.
Cách hoạt động của TensorFlow: TensorFlow cho phép bạn xây dựng biểu đồ
và cấu trúc luồng dữ liệu để xác định cách dữ liệu di chuyển qua biểu đồ bằng cách
lấy đầu vào là một mảng đa chiều được gọi là Tensor. Nó cho phép bạn xây dựng một
sơ đồ các hoạt động có thể được thực hiện trên các đầu vào này, đi ở một đầu và đến ở
đầu kia là đầu ra.
2.2 Ưu điểm
 Xây dựng mô hình dễ dàng:Dễ dàng xây dựng và đào tạo các mô hình ML
bằng cách sử dụng các API cấp cao trực quan như Keras với khả năng thực thi
nhanh chóng, giúp lặp lại mô hình ngay lập tức và gỡ lỗi dễ dàng.
 Sản xuất ML mạnh mẽ ở mọi nơi: Dễ dàng đào tạo và triển khai các mô hình
trên đám mây, tại chỗ, trong trình duyệt hoặc trên thiết bị bất kể bạn sử dụng
ngôn ngữ nào.
2.3 Kiến trúc Tensorflow
 Kiến trúc Tensorflow hoạt động trong ba phần:
 Xử lý trước dữ liệu
 Xây dựng mô hình
 Đào tạo và ước tính mô hình
Nó được gọi là Tensorflow vì nó nhận đầu vào là một mảng đa chiều, còn
được gọi là tensor . Bạn có thể xây dựng một loại lưu đồ hoạt động (được gọi là
Đồ thị) mà bạn muốn thực hiện trên đầu vào đó. Đầu vào đi vào một đầu, và
sau đó nó chảy qua hệ thống gồm nhiều hoạt động này và đi ra đầu kia dưới
dạng đầu ra.
Đây là lý do tại sao nó được gọi là TensorFlow bởi vì tensor đi trong nó chảy qua
một danh sách các hoạt động, và sau đó nó đi ra phía bên kia.
 Các thành phần TensorFlow
 Tensor
 Tên của Tensorflow có nguồn gốc trực tiếp từ khung cốt lõi của nó:
Tensor . Trong Tensorflow, tất cả các phép tính liên quan đến các tensor.
Một tensor là một vectơ hoặc ma trận có n chiều đại diện cho tất cả các loại
dữ liệu. Tất cả các giá trị trong một tensor giữ kiểu dữ liệu giống hệt nhau
với hình dạng đã biết (hoặc đã biết một phần) . Hình dạng của dữ liệu là
kích thước của ma trận hoặc mảng.
 Một tensor có thể được bắt nguồn từ dữ liệu đầu vào hoặc kết quả của một
phép tính. Trong TensorFlow, tất cả các hoạt động được tiến hành bên trong
một biểu đồ . Biểu đồ là một tập hợp các phép tính diễn ra liên tiếp. Mỗi
thao tác được gọi là một nút op và được kết nối với nhau.
 Biểu đồ phác thảo các hoạt động và kết nối giữa các nút. Tuy nhiên, nó
không hiển thị các giá trị. Cạnh của các nút là tensor, tức là, một cách để
điền hoạt động với dữ liệu.
 Đồ thị
TensorFlow sử dụng khung đồ thị. Biểu đồ tập hợp và mô tả tất cả các phép tính
chuỗi được thực hiện trong quá trình đào tạo. Biểu đồ có rất nhiều ưu điểm:
 Nó đã được thực hiện để chạy trên nhiều CPU hoặc GPU và thậm chí cả hệ
điều hành di động
 Tính di động của đồ thị cho phép duy trì các tính toán để sử dụng ngay lập
tức hoặc sau này. Biểu đồ có thể được lưu lại để thực hiện trong tương lai.
 Tất cả các tính toán trong biểu đồ được thực hiện bằng cách kết nối các
tenxơ với nhau
 Một tenxơ có một nút và một cạnh. Nút thực hiện phép toán và tạo ra kết
quả đầu cuối. Các cạnh Các cạnh giải thích các mối quan hệ đầu vào / đầu
ra giữa các nút
2.4 Thuật toán TensorFlow
Hiện tại, TensorFlow 1.10 có một API tích hợp cho:
 Hồi quy tuyến tính: Linear Regressor
 Phân loại:Linear Classifier
 Phân loại học sâu: DNN Classifier
 Deep learning wipe and deep: DNN Linear Combined Classifier
 Hồi quy cây tăng cường: Boosted Trees Regressor
 Phân loại cây tăng cường: Boosted Trees Classifier
II. Tìm hiểu về Open Cv
1. Opencv là gì?
OpenCV (Open Computer Vision) là một thư viện mã nguồn mở hàng đầu cho
xử lý về thị giác máy tính, machine learning, xử lý ảnh. OpenCV đươc viết bằng C/C+
+, vì vậy có tốc độ tính toán rất nhanh, có thể sử dụng với các ứng dụng liên quan đến
thời gian thực. Opencv có các interface cho C/C++, Python Java vì vậy hỗ trợ được
cho Window, Linux, MacOs lẫn Android, iOS OpenCV có cộng đồng hơn 47 nghìn
người dùng và số lượng download vượt quá 6 triệu lần.
Ai sẽ sử dụng OpenCV?
 Đầu tiên chúng ta phải hiểu: OpenCV là mã nguồn mở và chúng ta
không phải trả bất cứ một đồng nào cho nó.
 Tất cả chúng ta đều có thể sử dụng OpenCV tùy theo việc chúng ta sử
dụng nó như thế nào vào việc gì.
Sử dụng OpenCV để :
 Xử lí ảnh, quan sát, an ninh, robots, ... Tất cả những gì mà bạn nghĩ rằng liên
quan đến thị giác máy tính thì bạn có thể sử dụng OpenCV để làm.
 Thay vì lập trình cho các thuật toán xử lí ảnh thì bạn đã có sẵn trong tay một
thư viện về các hàm đó. Công việc của bạn chỉ là sử dụng nó. Và bạn có thể lập
trình cho các thiết bị máy móc để cho nó có thể “nhìn”,...
 Phục hồi hình ảnh/video
 Thực tế ảo
 Phát hiện vật thể(Objdetect, Features2d, Nonfree )
2. Ứng dụng thực tế của Open Cv
 Chế độ xem phố hình ảnh
 Kiểm tra và tự động giám sát
 Robot và xe hơi tự lái
 Phim - 3D cấu trúc từ chuyển động
 Nghệ thuật sắp xếp tương tác
3. Những ngôn ngữ nên sử dụng để lập trình opencv hiệu quả
Ngôn ngữ lập trình hiện nay rất đa dạng và mỗi một ngôn ngữ khác nhau thì lại
có những ưu và nhược điểm riêng. Với opencv, hiện nay thư viện này tích hợp và hỗ
trợ cho rất nhiều các loại ngôn ngữ. Vì thế mà các bạn hoàn toàn có thể lựa chọn được
dễ dàng ngôn ngữ để thực hiện việc lập trình opencv thành công. Tuy nhiên, sẽ có
những ngôn ngữ đem lại sự hiệu quả một cách tối ưu hơn cả.
Thực tế thì việc lựa chọn ngôn ngữ để lập trình opencv nên lựa chọn dựa trên
nhu cầu của mỗi người lập trình. Bởi mỗi một ngôn ngữ lập trình sẽ có thế mạnh phù
hợp với những mục đích riêng. Lựa chọn dựa trên nhu cầu sẽ giúp bạn có được một
opencv hoàn hảo và đáp ứng được sự mong chờ của mình.
- Ngôn ngữ C++: Là ngôn ngữ được lựa chọn nhiều nhất cũng như có mức độ
phổ biến lớn nhất trong tất cả các ngôn ngữ lập trình ở thời điểm hiện tại. C++
giúp cho việc lập trình opencv được thực hiện nhanh hơn, có nhiều option để
lựa chọn, nhất là khi bạn sở hữu IDE là một visual studio. Những thiết lập dựa
trên ngôn ngữ C++ sẽ mang lại rất nhiều điều hữu ích với các ứng dụng trong
tương lai. Tuy nhiên, khi mới tiếp xúc thì việc làm quen sẽ có phần cảm thấy
hơi phức tạp.
- Ngôn ngữ Python: Là ngôn ngữ được lựa chọn cho việc sử dụng để demo hay
test opencv. Sử dụng python mang lại những điều tiện lợi cho lập trình viên
như sự ngắn gọn và các thiết lập cần được thực hiện cũng ít hơn. Điều đặc biệt
nữa là sử dụng ngôn ngữ python cho phép các lập trình viên có thể thực hiện
việc code ở trên các hệ điều hành đa dạng khác nhau.
- Ngôn ngữ Java: Tương tự như ngôn ngữ C++,. ngôn ngữ Java giúp thực hiện
việc lập trình được nhanh hơn và trên các nền tảng phổ biến khác nhau.
- Ngôn ngữ Android: Việc tích hợp và có sẵn với camera đã đem lại sự tiện lợi
cho quá trình opencv. Điều này giúp cho các tính năng được mở rộng hơn và
test dễ dàng hơn. Đây hứa hẹn sẽ nhanh chóng trở thành xu hướng trong tương
lai.
- Ngôn ngữ C#: C# giúp cho việc code được thuận lợi và trở nên dễ dàng hơn
rất nhiều. Nhất là khi ngôn ngữ này có sự hỗ trợ của thư viện với tính chất đa
nền tảng hỗ trợ đó là EmguCV. Điểm trừ duy nhất của ngôn ngữ này đó là khi
sử dụng EmguCV thì các lập trình viên sẽ cần phải copy tất cả file. Do đó mà
dung lượng sẽ khiến cho ứng dụng nặng hơn.
Mỗi ngôn ngữ sẽ có những điểm mạnh riêng, tùy theo tính chất của dự án cũng
như ứng dụng đòi hỏi mà các bạn có thể kết hợp trong việc sử dụng các loại ngôn ngữ
lập trình opencv. Trong bài tập lớn chúng em sử dụng Python để thực hiện.
III. Môi trường triển khai
Chúng em sử dụng Google Colab để triển khai.
1. Giới thiệu về Google Colab
Google Colaboratory (gọi tắt là Google Colab hay Colab) là một sản phẩm của
Google Research. Colab dựa trên Jupyter Notebook, người dùng có thể viết và thực thi
đoạn mã python thông qua trình duyệt và đặc biệt rất phù hợp với data analysis,
machine learning và giáo dục.
2. Google Colab có ưu điểm:
 Cung cấp GPU miễn phí
- Machine Learning và Deep Learning đã phát triển rất mạnh mẽ trong những
năm gần đây với việc cho ra các thuật toán và mô hình tân tiến. Không dừng lại
ở đó, phần cứng của nó cũng không ngừng phát triển, đặc biệt là sản phẩm
GPU.
- Trước đây, việc sử dụng CPU để tính toán cho Deep Learning về toán học tiêu
tốn rất nhiều thời gian. Tuy nhiên giờ đây đã có GPU với việc gán những tính
toán cho nó bạn có thể thực hiện nhanh hơn.
- Việc sử dụng CPU để train Neural Network cũng không được khuyến khích.
Đối với những công việc đòi hỏi tính toán mức độ cao thì GPU là rất cần thiết.
- Các nền tảng đám mây như GCP và AWS có giá rất cao và GPU cũng như thế.
- Colab đã tung ra một con quái vật thật sự để giải quyết vấn đề về hiệu suất và
giá lại hoàn toàn miễn phí. Đó chính là GPU Nvidia Tesla K80, nó có giá tầm
khoảng 53 triệu VND.
- Nó cũng giúp tiết kiệm được thời gian hàng giờ phải đợi để gỡ lỗi hay điều
chỉnh cho các mô hình và tập trung vào các vấn đề hơn.
- Hỗ trợ TPU có sẵn cũng được thêm vào Colab. Mặc dù chưa được ổn định,
nhưng hiện nay Google Colab cũng đang cung cấp TPU.
3. Thao tác cơ bản trên Google Colab
Google Colab rất dễ dàng sử dụng, chỉ cần truy cập Link, tạo sổ tay mới và run
đoạn mã python mà bạn muốn. Nhưng trước hết nên setup GPU .
Chọn: Thời gian chạy > Thay đổi loại thời gian chạy > GPU

Hình 1.2: Khởi chạy Colab


Giống như trình soạn thảo Jupyter Notebook, Colab thực thi mã python theo từng
ô từ trên xuống và từng dòng trong ô. Việc import library cũng trở nên vô cùng
đơn giản.
Hình 1.3: Một chương trình ví dụ

IV. Mạng MobilenetV2


4.1 . Giới thiệu
MobileNet được phát triển bởi đội ngũ Google, mô hình sử dụng cách tính
chập tích mang tên DSC (Depthwise Separable Convolution) nhằm giảm
kích thước mô hình và giảm độ phức tạp tính toán. Do đó, MobileNet thường
được sử dụng cho các ứng dụng Computer Vision trên các thiết bị nhỏ gọn
như điện thoại thông minh hay thiết bị nhúng.
4.2 . Mô hình kiến trúc mạng Mobile Net
Mạng Mobile có kiến trúc 30 lớp:
Lớp 1: Convolution layer với stride bằng 2
Lớp 2: Depthwise layer
Lớp 3: Pointwise layer
Lớp 4: Depthwise layer với stride bằng 2 (khác với bước 2, dw lớp 2 có stride
size bằng 1)
Lớp 5: Pointwise layer
...
Lớp 30: Softmax, dùng để phân lớp.
Hình 1.4. Mô hình mạng MobileNet
4.3 . Depthwise Separable Convolution
Ý tưởng của Depthwise Separable Convolution là chia phép convolution làm 2
phần: Depthwise convolution & Pointwise convolution
Depthwise convolution là một loại tích chập trong đó chúng ta áp dụng một bộ lọc
tích chập duy nhất cho mỗi kênh đầu vào. Trong phép tích chập 2D thông thường
được thực hiện trên nhiều kênh đầu vào, bộ lọc cũng sâu như đầu vào và cho phép
chúng ta tự do trộn các kênh để tạo ra từng phần tử trong đầu ra. Ngược lại, sự biến
đổi theo chiều sâu giữ cho mỗi kênh riêng biệt. Các bước thực hiện:
1. Tách đầu vào và lọc thành các kênh. 
2. Chuyển đổi từng đầu vào với bộ lọc tương ứng. 
3. Xếp chồng các kết quả đầu ra được biến đổi với nhau.
Hình 1.5. Depthwise convolution

Tức là thay vì sử dụng một convolutional layer cho 3 kênh RGB, thì ta sử dụng 1 bộ


lọc cho mỗi kênh riêng biệt. Sau khi thực hiện ta sẽ có kết quả như Convolution cũ với
số lượng layer là N với N là số chiều của ảnh.
Vậy độ phức tạp tính toán sẽ là: D*D*K*K*N

Pointwise Convolution là một kiểu tích chập sử dụng một nhân 1x1: một nhân lặp lại
qua từng điểm đơn lẻ. Kernel này có độ sâu bằng nhiều kênh mà hình ảnh đầu vào có.

Hình 1.6. Pointwise Convolution


Độ phức tạp tính toán sẽ là: D*D*N*M
Vậy tổng độ phức tạp của Depthwise Separable Convolution là: D*D*K*K*N+
D*D*N*M
Qua độ phức tạp trên ta cũng có thể thấy nó giảm hơn độ phực tạp tính toán đi khá
nhiều, tuy nhiên để biết rõ nó giảm bao nhiêu lần ta tiến hành tính tỉ lệ của độ phức
tạp của Convolution truyền thống với Depthwise Separable Convolution. Vậy tỉ lệ độ
phức tạp tính toán sẽ là:
D∗D∗K∗K∗N + D∗D∗N∗M 1 1
= + 2
D∗D∗K∗K∗N∗M M K

MobileNet dùng rất nhiều lớp Depthwise Separable Convolution để giảm số lượng


parameter đi nhiều lần khoảng 9 lần.
    
Một chú ý nhỏ về kiến trúc ở đây, là sau mỗi convolution MobileNet sẽ sử dụng Batch
Normalization (BN) và ReLU như hình bên dưới:

Hình 1.7. Convolution truyền thống (Trái), Depthwise separable convolution với BN và


ReLU (Phải)
PHẦN 2: THỰC HIỆN ĐỀ TÀI

1. Tổng quan về đề tài


Nhóm chúng em thực hiện đề tài Nhận diện khuôn mặt, sử dụng ngôn ngữ Python để
thực hiện.
Nhận dạng khuôn mặt là lập bản đồ các đặc điểm trên khuôn mặt và giúp xác định một
người dựa trên dữ liệu khuôn mặt được lưu trữ. Công nghệ sinh trắc học này sử dụng
các thuật toán học sâu để so sánh bản in trên khuôn mặt được lưu trữ với hình ảnh trực
tiếp. Thực hiện nhận diện khuôn mặt cũng so sánh hình ảnh chụp được với cơ sở dữ
liệu hình ảnh để tìm ra sự trùng khớp.
Nhận dạng khuôn mặt đã được sử dụng trong nhiều ứng dụng để tăng cường an ninh ở
các sân bay, giúp các cơ quan thực thi pháp luật phát hiện tội phạm, phân tích pháp y
và các hệ thống giám sát khác.
Bài toán nhận diện khuôn mặt là một bài toán phổ biến trong AI
- Input: 1 ảnh chứa mặt người (có thể là một người hoặc nhiều hơn)
- Output: xuất ra tên của người tương ứng có trong k người ở cơ sở dữ liệu.
Nhóm em thực hiện triển khai bài toán trên Open CV.
2. Thuật toán của chương trình

Cấu trúc chương trình gồm 3 bước được thực hiện như sau:

Hình 2.1. Cấu trúc chương trình


Bước 1: Thu thập dữ liệu: Dữ liệu được thu thập trên Internet dưới dạng file
ảnh .jpg sẽ được lưu trữ ở hai file riêng biệt: Một file chứa 690 bức ảnh mô tả
khuôn mặt đeo khẩu trang và file còn lại chứa 690 bức ảnh mô tả khuôn mặt
không đeo khẩu trang. Mỗi file dữ liệu trên sẽ được chia làm hai phần chính
nhờ hàm split trong python, bao gồm:

• Tập dữ liệu phục vụ quá trình thử nghiệm cuối cùng - Testing set (chiếm
20%);

• Tập dữ liệu phục vụ quá trình huấn luyện (chiếm 80%), trong đó tập dữ liệu
huấn luyện này sẽ tiếp tục được chia thành 2 thành phần trai Training set
(chiếm 80% của tập huấn luyện) và Validation set (chiếm 20% của tập huấn
luyện) để kiểm thử độ chính xác của mô hình trong quá trình huấn luyện. Trong
quá trình thu thập dữ liệu, điều kiện về ánh sang của bức ảnh cũng làm ảnh
hưởng tới tọ mô hình sau này.

Bước 2: Sử dụng nguồn dữ liệu đã thu thập được ở bước 1 để huấn luyện mô
hình dựa trên mô hình mạng mobilenetv2

Bước 3: Phát hiện người đeo khẩu trang hay không. Bước này sẽ tiến hành so
sánh dữ liệu được trích xuất từ camera (sau khi đã được xử lý dữ liệu đầu vào)
với dữ liệu đã được huấn luyện để trích xuất kết quả
3. Thuật toán huấn luyện mô hình

Hình 2.2. Thuật toán huấn luyện mô hình


 Import các thư viện cần thiết: Nhập các thư viện cần thiết như OpenCV, Keras,
Numpy (để xử lý dữ liệu), Os (để quản lý file), …
 Xử lý tiền dữ liệu và xử lý dữ liệu: Việc tiền xử lý dữ liệu nhằm đưa tất cả các
ảnh về cùng kích thước, sau đó các ảnh sẽ được chuyể đổi để phục vụ cho quá
trình xứ lý ảnh ở bước sau.
 Xây dựng các lớp cho mô hình
 Biên dịch mô hình: Thực hiện các thuật toán tối ưu và biên dịch chương trình.
4. Thuật toán phát hiện người đeo khẩu trang trong thời thực

Hình 2.3. Thuật toán phát hiện người đeo khẩu trang trong thời gian thực
Để phát hiện khuôn mặt, nhóm tác giả sử dụng thuật toán phát hiện khuôn mặt Viola-
Jones. Sau khi ảnh được cắt từ video, nó sẽ được định dạng lại kích thước giống với
kích thước của dữ liệu trong mô hình huấn luyện. Sau đó, ảnh này sẽ được chuyển đổi
thành những tham số có định danh giống mô hình mẫu. Khi đó các tham số sinh ra
được từ tập dữ liệu huấn luyện sẽ được sử dụng để thẩm định lại tính thích hợp của
mô hình trên tập dữ liệu của hình ảnh vừa được trích xuất. Dựa vào kết quả thu được
ta tiến hành hiển thị lên màn hình kết quả người dân có đeo khẩu trang hay không.
5. Kết quả
Tài liệu tham khảo
[1]https://www.researchgate.net/publication/
316184205_MobileNets_Efficient_Convolutional_Neural_Networks_for_Mobil
e_Vision_Applications
[2] https://viblo.asia/p/tim-hieu-ve-opencv-Do754NrXZM6
[3] https://www.simplilearn.com/keras-vs-tensorflow-vs-pytorch-article
[4] https://www.hindawi.com/journals/wcmc/2022/1536318/
[5] https://phamdinhkhanh.github.io/2020/09/19/MobileNet.html
[6] https://trituenhantao.io/lap-trinh/lam-quen-voi-google-colab/
[7] https://developers.google.com/vision/documentation/face-detection-concepts
[8] https://blog.roboflow.com/how-to-train-mobilenetv2-on-a-custom-dataset/
[9] https://www.mygreatlearning.com/blog/viola-jones-algorithm/
[10]https://paperswithcode.com/method/mobilenetv2#:~:text=MobileNetV2%20is
%20a%20convolutional%20neural,are%20between%20the%20bottleneck%20layers.
KẾT LUẬN

Trong báo cáo trên giới thiệu cơ bản Keras/Tensorflow ,Open Cv và quá trình
thực hiện đề tài Nhận diện khuôn mặt sử dụng ngôn ngữ Python cua nhóm.Qua quá
trình học tập và tìm hiểu, cùng với sự dẫn dắt nhiệt tình của thầy Võ Lê Cường nhóm
em đã hoàn thành Bài Tập Lớn theo đúng tiến độ đề ra và đạt được kết quả như mong
muốn. Sau Bài Tập Lớn này thì các thành viên đã hiểu rõ hơn về việc sử dụng ngôn
ngữ Python cũng như ứng dụng AI vào thực tế cuộc sống.Tuy đã cố gắng và nỗ lực để
hoàn thành đề tài nhưng do thời gian và kiến thức có hạn nên trong quá trình thực
hiện, chúng em không thể tránh khỏi sai sót và hạn chế. Vì vậy, chúng em kính mong
nhận được sự cảm thông, ý kiến đóng góp và sự giúp đỡ của thầy để đề tài của em
được hoàn thiện hơn.
Chúng em xin trân thành cảm ơn thầy!

You might also like