TOM TAT KHÓA LUẬN
Chuong 2. CƠ SỞ LÝ THUYET
2.1. Thuật toán phát hiện buồn ngủ.
2.1.1. Mối liên hệ giữa sự buồn ngủ và hành vi chớp mắt.
Giấc ngủ là tình trạng nghỉ ngơi tự nhiên theo chu ky của thé xác và tinh than. Trong tình trạng này người ta thường nhắm mắt và mắt ý thức một phan hay hoàn toàn do đó sẽ giảm các vận động và phản ứng đối với các kích thích bên ngoài. Giấc ngủ không phải là một lựa chọn, nó là cần thiết và không thể tránh khỏi để giúp cơ thể nghỉ ngơi và phục hồi năng lượng. Vì vậy một con người cần phải
ngủ.
Có một thuật ngữ gọi là "Microsleep", định nghĩa là một giai đoạn ngủ ngắn và ngoài ý muốn của giấc ngủ, có thé xảy ra bat cứ lúc nào do mệt mỏi hay một sự
nỗ lực của ý thức kéo dai nào đó. Microsleep có thé kéo dài trong một vài giây (có thể khoảng từ 1 đến 30 giây). Nghiên cứu cho thấy rằng microsleep có thé xảy
ra bất cứ lúc nào, não rơi vào trạng thái ngủ nhanh chóng và không kiểm soát được, tình trạng này có thê vô cùng nguy hiểm, đặc biệt là nếu bạn đang ngồi sau tay lái hay trong các tình huống yêu cầu sự chú ý tập trung [2].
Một nghiên cứu khoa hoc mang tên “Blinks and saccades as indicators of fatigue
in sleepiness warners: looking tired?” cua cac tac gia R. Schleicher, N. Galley, S.
Briest và L.Galley năm 2008, đã chi ra mối liên hệ giữa việc chớp mắt va dấu hiệu mệt mỏi, ở đây chính là sự buồn ngủ. Tần suất và thời gian chớp mắt cũng như kích thước khe hở giữa hai mí mắt (khoảng cách giữa mí mắt trên và mí mắt dưới)
là các chỉ số kiểm tra tốt nhất về trạng thái tỉnh táo ở hiện tại và khả năng phản
ứng của người lái xe với các kích thích môi trường.
Các nhà nghiên cứu đã tiến hành thử nghiệm với 129 tình nguyện viên, sử dụng phương pháp EOG và Thang đo độ buồn ngủ Karolinska (KSS) để đo đạc và tính toán, được trình bày trong bảng 2.1, bao gồm 9 mức độ buồn ngủ riêng biệt.
15
Bảng 2.1: Thang KSS.
Mức độ buồn ngủ Mô tả
1 Cực ky tinh tao
2 Rat tinh tao
3 Tinh tao
4 Kha tinh tao
5 Không tinh táo hoặc buồn ngủ
6 Có dấu hiệu buồn ngủ
7 Buôn ngủ, nhưng không cần nỗ lực dé giữ tinh táo
8 Buôn ngủ, cần một số nỗ lực dé giữ tỉnh táo
9 Rat buồn ngủ, rất nỗ lực dé giữ tinh táo
Kết quả phân tích trên MATLAB của nghiên cứu cho thấy thời gian chớp mắt của
các tình nguyện viên ở trạng thái bình thường trung bình rơi vào khoảng 200-400
mili giây. Theo đó, nếu khoảng thời gian chớp mắt lớn hơn 500 mili giây thì người lái xe không thê theo dõi tình trạng giao thông một cách đầy đủ trong khoảng thời
gian đó và được xem như là đang ở trạng thái “Microsleep”, lúc này thì có lẽ đã
quá trễ vì microsleep chủ yếu xuất hiện trong các giai đoạn buồn ngủ nghiêm trọng và khó có thể được dự đoán như các sự kiện đơn lẻ nhưng xảy ra gần như
ngẫu nhiên trong giai đoạn đó [10].
Hình dưới đây là biểu dé chỉ rõ các ngưỡng thời gian chớp mắt va trạng thái của tài xế mà nghiên cứu phân tích. Có thể thấy vùng tỉnh táo (alert) sẽ giảm dần từ
16
trái qua phải. Và mức tinh táo lớn hơn | khi thời gian chớp mắt trong khoảng 0->
400 mili giây.
sleepy (self-rating < 4)
285397 fixations
.„„elaxed (self-rating 4-6)
253936 fixations
= >
= is) ==——8lert (self-rating > 6)
216618 fixations
percentage of fixations ° œad a
Hình 2.1: Kết qua phan tích trên MATLAB.
2.1.2. Phát triển thuật toán.
Dựa vào kết quả của nghiên cứu “Blinks and saccades as indicators of fatigue in sleepiness warners: looking tired”, nhóm đã quyết định lựa chọn phát triển thuật toán phát hiện buồn ngủ bằng cách tính thời gian mỗi lần chớp mắt của tài xế liên tục để quyết định xem tình trạng hiện tại của tài xế là buồn ngủ hay không.
Hình ảnh khuôn mặt của tài xế sẽ được ghi lại liên tục mỗi giây, sau đó qua các thuật toán xử lý ảnh và model phát hiện mặt, mắt dé phát hiện khuôn mặt và mắt
từ đó tính khoảng cách giữa hai mí mắt để xác định là mắt đang nhắm hay mở. Thời gian chớp mắt sẽ được tinh từ lúc phát hiện tài xế nhăm mắt đến lúc tài xế
mở mắt. Với khoảng thời gian chớp mắt của tài xế là t <= 400 mili giây thì là trạng thái bình thường và nếu t > 400 mili giây sẽ bắt đầu cảnh báo tài xế thông qua âm thanh phát ra từ loa. Vì điều cần thiết và quan trọng nhất là phải cảnh báo buồn
17
ngủ sớm cho tải xê trước khi rơi vào giai đoạn microsleep, ở trạng thái này rât
nguy hiểm và rat dé gây ra tai nạn giao thông.
2.2. Xử lý ảnh và học sâu.
2.2.1. Xử lý ảnh.
Xử lý anh là phương pháp chuyền đổi hình anh sang dạng số và thực hiện một số hoạt động trên đó dé nâng cao chat lượng hình ảnh hoặc để trích xuất một số thông tin hữu ich từ nó. Đó là một dang phân bồ tín hiệu mà đầu vào là một hình anh như các bức ảnh hoặc các khung hình từ video và đầu ra là một hình ảnh khác hoặc các đặc tính gắn liền nó. Thông thường, các hệ thống xử lý ảnh sẽ xem các hình ảnh như các tín hiệu hai chiều dé từ đó áp dung các phương pháp xử lý tín hiệu lên các tín hiệu đó. Nó là một trong các công nghệ phát triển nhanh chóng hiện nay và được áp dụng trong nhiều lĩnh vực khác nhau.
2.2.2. Học sâu (Deep learning).
AI - Artificial Intelligence (Trí Tuệ Nhân Tạo), và cu thé hơn là Machine Learning/Deep Learning (Máy Học/Học sâu) nổi lên một cách nhanh chóng, chúng được nhiều người quan tâm và tìm hiểu, được ứng dụng trong kinh tế, giáo dục, y khoa cho đến những công việc nhà, giải trí hay thậm chí là trong quân sự. Deep learning đang ngày càng cho thấy một tương lai đầy hứa hẹn.
Deep learning được bắt nguồn từ thuật toán Neural network (mạng nơ-ron) vốn xuất phát chỉ là một ngành nhỏ của machine learning. Deep Learning là một chỉ của ngành máy học dựa trên một tập hợp các thuật toán dé cố gắng mô hình dữ liệu trừu tượng hóa ở mức cao bằng cách sử dụng nhiều lớp xử lý với cấu trúc phức tạp, hoặc bằng cách khác bao gồm nhiều biến đổi phi tuyến.
Deep Learning đã giúp máy tính thực thi những việc tưởng chừng như không thê vào nhiều thập kỷ trước: phân loại cả ngàn vật thé khác nhau trong các bức ảnh,
18
tự tạo chú thích cho ảnh, bắt chước giọng nói và chữ viết của con người, giao tiếp
với con người, hay thậm chí cả sáng tác văn, phim, ảnh, âm nhạc.
Neural networks
Hình 2.2: Kiến trúc của tri tuệ nhân tạo.
(Nguồn: codelearn.io).
Hình 2.2 mô tả kiến trúc 4 lớp của trí tuệ nhân tạo với cốt lõi là deep learning.
Các thuật toán Deep Learning có thê lây dữ liệu lộn xộn và không có nhãn rộng rai — chăng hạn như video, hình ảnh, bản ghi âm thanh và văn bản — và áp đặt đủ thứ tự cho dữ liệu đó dé đưa ra dự đoán hữu ích, xây dựng hệ thống phân cấp các
tính năng tạo nên con chó hoặc con mèo một hình ảnh hoặc âm thanh tạo thành một từ trong lời nói.
Deep learning sẽ được ứng dụng trong khóa luận này nhăm mục đích huấn luyện lại các model có san dé cải thiện tốc độ và độ chính xác và phù hợp hơn với mục
đích của khóa luận.
19
2.3. Phát hiện khuôn mặt.
2.3.1. Model MobileNet SSD v2 Faces.
Model MobileNet SSD v2 Faces là một model được xây dựng dựa trên mạng
MobileNet v2 SSD cho tốc độ xử lý nhanh và chính xác nhưng kích thước nhỏ gọn, có thê chạy trên các thiết bị nhúng nhỏ gọn với giới hạn tài nguyên vật lý.
Sử dụng bộ dữ liệu Open Images v4 dé huấn luyện ra định dạng model của TensorFlow, sau đó qua quá trình lượng tử hóa dé rút gọn và tinh chỉnh model từ các kiến trúc dạng số thực 32bits sang dạng số nguyên 8bits (Hình 2.3), cho phép chạy thuật toán phát hiện mặt người trực tiếp trên phần cứng Coral Google USB với tốc độ xử lý nhanh, trung bình khoảng 30fps trên Raspberry Pi4.
TensorFlow model JRBIN EXPORT Frozen graph
Í — | TensorFlow model | —————>
32-bit float numbers h .pb file
Quantization aware training
or
CONVERT
Post-training .. TensorFlow Lite Converter quantization
COMPILE
————
DEPLOY
————— Coral Hardware
8-bit fixed numbers .tflite file
Hình 2.3: Qua trình hình thành model Model MobileNet SSD v2 Faces.
(Nguồn: coral.ai)
2.3.2. Thư viện TensorFlow Lite Python API.
Thư viện TensorFlow Lite Python API là thư viện được xây dựng trên nền tảng TensorFlow Lite C++ API nham xử lý các đầu vào tensor và đầu ra tensor, ngoài
20
ra còn cung cấp các API dé thực hiện huấn luyện lại các model theo mục đích riêng. Có hai API chính đó là ClassificationEngine() dé phân loại ảnh và DetectionEngine() dé phát hiện đối tượng. DetectionEngine() sẽ được sử dụng trong khóa luận dé phát hiện khuôn mặt.
OPTION A OPTION B
ra Te
OPTIONAL Á \ OPTIONAL
Python ML application =| ---~ 7 C/C++MLapplication =| --- 5
J |! ị
Y Vv
Edge TPU runtime API
(edgetpu_c.h /edgetpu.h)
| TensorFlow Lite Python API | PyCoral API
(tffite_runtime module) (pycoral module) (coral names pace)
Ỹ
|
Edge TPU runtime —3.Ì TensorFlow Lite C++ API*
(libedgetpu.so) \
is a built-in depen
Hình 2.4: Mô hình giao tiếp và xử ly giữa ứng dung va API.
(Nguồn: coral.ai).
Hình 2.4 mô tả quá trình giao tiếp và xử lý qua các lớp giữa ứng dụng va API. Có
hai lựa chọn ngôn ngữ lập trình với API là Python và C++, trong phạm vi khóa
luận, nhóm lựa chọn TensorFlow Lite Python API vì nó dễ dàng để sử dụng dé làm việc với model cũng như EdgeTPU runtime. Ở đây, ứng dụng hệ thống sẽ giao tiếp với TensorFlow Lite Python API, sau đó API sẽ chuyền dữ liệu truy xuất xuống Edge TPU runtime dé chuyền đổi dữ liệu sang TensorFlow Lite C++ API (được dựng sẵn cho python). Sau đó TensorFlow Lite C++ API sẽ giao tiếp vol
TPU.
2.4. Phát hiện vùng mắt.
2.4.1. Model Dlib Facial landmark 68.
Dlib là một trong những thư viện nôi tiêng vê nhận diện các điêm trên khuôn mặt một cách chính xác. Nó bao gôm việc thực hiện thuật toán của bai báo “One
21
Milliseconds Face Alignment with an Ensemble of Regression Trees” [13]. Phuong phap nay su dung:
- Tap huân luyện cua các nhãn trên khuôn mặt trong một bức hình. Những bức
hình này sẽ được gan nhãn băng tay và nó sẽ chỉ ra tọa độ của các diém “Facial
landmark” trên khuôn mặt xung quanh mỗi phần trên khuôn mặt.
- Tinh toán xác suât vê khoảng cách giữa các cặp diém có tọa độ sau đó dự đoán.
* . 24 *25 „
TẢ... sa *2 No
+18
+38 + 39 #28 P * 44 +45
+375 47041" 43, 49-47" 46
at 20 + 1ù
+30
F +16
ẻ s31
* 3À x3 sự 39 1 °16
kì
*$1 #52 *53
ô50 i +54 tiỏ
4 ô4961 <i * 655
“ + 6ô +67 ju * sẽ
5 #59 ,sa +57
P *12
` “11
r8 +10
Hình 2.5: 68 điểm trên khuôn mặt.
Hình 2.5 cho thấy thứ tự vi trí các điểm trên khuôn mặt mà model Dlib sẽ nhận diện vị trí của các điểm đó. Những điểm này sẽ được có vi trí tọa độ được thé hiện trong file xml mà phan 3 sẽ nói tới trong quá trình huấn luyện model.
2.4.2. Huấn luyện lại model Dlib Facial landmark 68.
Thu thập đữ liệu huấn luyện:
22
Hình 2.6: Bộ dataset IBUG 300-W.
Hinh 2.6 thé hién mét s6 hinh anh trong bộ dataset va vi trí của các điểm được nhận diện. Dé tạo ra được bộ dataset này thi tác gia đã phải xác định vi trí và gan nhãn bang tay của 68 điểm trên khuôn mặt với 7764 bức hình.
Tiến hành huấn luyện:
Trong model Dlib thì cần phải tinh chỉnh những tham số sao cho hợp lý dé có được một model kết quả đúng với từng mục đích và phù hợp với tài nguyên phần cứng. Hình 2.5 sẽ cho ta thấy mối liên hệ giữa các thông số với nhau trong model. Do đó việc lựa chọn các tham số cho quá trình training model rất quan trọng dé làm sao cân bằng được các tham số mà vẫn phải đạt được mục đích cuối cùng. Trong Dlib các tham số đó là:
© tree_depth: Có 2^tree_ depth lá trong mỗi cây. Giá trị của tree_depth càng
nhỏ thì dẫn tới hiện tượng là “shallow trees” nhưng bù lại tốc độ dự đoán sẽ nhanh hơn và cũng tiềm ấn việc độ chính xác sẽ giảm xuống. Giá trị của tree_depth càng lớn thì sẽ tạo ra một “deeper tree” nhưng tốc độ dự đoán sẽ
chậm đi và độ chính xác sẽ tăng lên.
e nu: Là thông số “Regularization” trong model dé tránh hiện hượng model bị
“Overfitting” với bộ dữ liệu test. Giá tri của nó càng gân vê 0 thi nó sẽ làm
23
cho model sẽ dự đoán tốt trên tập dữ liệu training nhưng cũng sẽ tăng khả năng model sẽ bị “Overfitting”. Giá tri của nó càng gần về | thì sẽ giúp cho model có được sự “Generalization” hơn. Tuy nhiên, chúng ta sẽ cần phải có nhiều dữ liệu hơn đề huấn luyện model.
e cascade_depth: Đây là một thông số ảnh hưởng tới kích thước của model.
Giá trị của nó càng lớn thì độ chính xác sẽ tăng lên đáng kê và ngược lại.
Hình 2.7: Ảnh hưởng của “cascade depth” lên độ chính xác của model [13].
Hình 2.7 cho thấy sự ảnh hưởng của thông số “cascade_ depth” lên độ chính xác của model khi nó thay đôi. Khi giá trị của nó càng cao thì độ chính xác khi nhận
điện các điêm trên khuôn mặt sẽ tăng lên.
e feature_pool_size: Điều khién số lượng pixel được sử dụng dé tạo ra những
đặc điểm cho mỗi cây ngẫu nhiên trong “cascade”. Càng nhiều pixel được thêm vào thì tốc độ của model cảng chậm nhưng độ chính xác dé dự đoán
về các thành phan trên khuôn mặt sẽ tăng lên. Số lượng pixel ít thì model sẽ chạy nhanh hơn nhưng độ chính xác sẽ giảm xuống.
® num_test_splits: Thông số này ảnh hường cả về thời gian training và độ
chính xác của model. Nếu giá trị của nó càng lớn thì chúng ta đang mong chờ một model có độ chính xác cao nhưng điều này cũng sẽ dẫn tới thời gian
cho việc huân luyện model này sẽ mât thời gian rât lâu.
e oversampling_translation_jitter: Thông số này sẽ điều khiển cho quá trình
huấn luyện trong việc “augmentation” các dữ liệu dé model có thé nhận biết
24
được trong nhiều trường hợp ảnh bị quay sang phải, trái, thay đổi kích
thước...
Speed
Hình 2.8 thé hiện mối liên hệ của “Speed”, “Accuracy” và “Size” của một model trong Dlib. Khi càng gần về “Speed” nghĩa là muốn model có thé chạy nhanh thì
sẽ xa các đỉnh của “Accuracy” và “S1ze” nghĩa là độ chính xác và kích thước của
model sẽ phải giảm xuống. Muốn model có độ chính xác cao thì model sẽ phải có kích thước lớn và thời gian xử lý sẽ chậm và cuối cùng nếu muốn model có kích thước nhỏ thì độ chính xác phải giảm xuống và thời gian xử lý sẽ lâu hơn.
Ba yếu tô trên là ba yếu tố cốt lõi khi xây dung model của Dlib cần phải cân nhắc rất cân thận vì mục tiêu của nhóm là muốn phát triển một thiết bị nhỏ có thể lắp đặt được trên xe. Tuy nhiên do vấn đề về tài nguyên phần cứng của các máy tính nhúng hiện tại mà nhóm tìm hiểu được thì khó có thể đáp ứng được tính “Thời gian thực” nếu áp dụng những model học sâu. Thứ hai, nếu có thê đáp ứng được tài nguyên phần cứng để tăng tốc độ tính toán dựa vào những bộ xử lý có GPU thì
25
giá thành rat cao. Don cử có thể ké đến như NVIDIA Jetson Xavier Developer
Kit giá thành lên tới 24.000.000 VND (giá thành theo trang web proe.vn).
Từ những vấn đề được đề cập ở trên thì nhóm đã tiến hành phân tích số liệu về ảnh hưởng của các thông số lên model khi nó thay đồi. Cuộc phân tích này dựa trên các lý thuyết của model Dlib và xem xét tính đúng dan của giả thiết về sự ảnh
hưởng của model.
Các hình từ 2.9 đến 2.12 thể hiện sự ảnh hưởng của các tham số lên model khi thay đổi chúng. Model sẽ có những thay đổi cực lớn khi một trong các thông số liên quan tới đặc tính thay đổi. Dé thấy rõ được điều này thì hình 2.13 là biểu đồ nhiệt sẽ thé hiện sự tương quan giữa các tham số với nhau. Từ đó nhóm có thé dựa trên những phân tích đó dé chọn ra một thông số phù hợp nhất cho model.
km Faning error mmm ‘esting error
mm Inference time(ms * 100) Model size(M)
10
Hình 2.9: Ảnh hưởng của cascade_depth.
Hình 2.9 cho thay rằng khi giá trị của “cascade_ depth” tăng lên thì đồng thời các thông số “Model size” (mau đỏ) và “Inference time” (màu xanh) tăng lên một cách đáng kể nhưng đồng thời “Training error” (màu xanh) và “Testing error”
(màu cam) giảm xuông chứng tỏ răng độ chính xác của model tăng lên.
26