• 沒有找到結果。

切取出眼睛的圖像,流程如圖(3-2)所示。MTCNN 模型會偵測出每個 frame 中的 臉部邊界框資訊以及眼睛、鼻子、嘴巴的位置,模型的輸出結果如方程式(3-1)所

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

在取得駕駛的臉部和雙眼位置的影像後,考慮到因為白天或夜晚的因素使得 影像的整體亮度偏亮或是偏暗而可能會影響睡意辨識的準確性,因此為了處理這 個問題,我們使用 Contrast Limit Adaptive Histogram Equalization(以下簡稱為 CLAHE)的方法來增加臉部以及雙眼影像中的對比度,其中 CLAHE 方法的參數 設定是使用 OpenCV 函式庫中的預設值,藉由增加影像的對比度可以統一圖像 的亮度而不受到環境的影響,因此有利於之後的模型訓練以及睡意辨識,而且 CLAHE 方法可以避免把影像中的雜訊被放大,方法如圖(3-3)所示,在增加對比 度之前會先降低影像中高對比度的區塊並將減少的數值平均增加到整體影像中,

其中臉部圖像經過 CLAHE 處理過後的結果比較如圖(3-4)所示,從圖中可以看出 臉部圖像中的亮暗對比度增加了。

圖(3-3) CLAHE 抑制雜訊被放大的處理意示圖 [13]

圖(3-4) 執行 CLAHE 前後的臉部圖形變化

3.3 標籤預處理

睡意資料集有標記出每支影片中的打瞌睡的時間區段,範例如圖(3-5)所示,

第 1 個幀到第 5 個幀之間的標記為 1,代表駕駛有發生打瞌睡的行為,第 6 個幀 到第 10 個幀之間的標記為 0,代表駕駛是處於清醒的狀態。此種資料標記的方 式並非是對單張 frame 的影像資訊進行標記,而是針對屬於同一區段中的 frame

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

標記相同的睡意狀態,因此在我們的研究中是一次針對多張 frame 的資訊來進行 睡意偵測而並非是單一張影片。標籤的處理如圖(3-6)所示,假設每次輸入的 frame 數為 3 張的話,以這 3 張 frame 之中最多的標記屬性來作為其所對應的標籤屬 性。

圖(3-5) DDD 資料集中的睡意標記範例

圖(3-6) DDD 資料標籤的預處理方法

(Convolution-3D)、4 個池化層(MaxPooling-3D)以及 3 個全連接層(Dense),其中

在每個卷積層以及全連接層都有使用 ReLU 激勵函數(activation function),第一 卷積層的 filter 數為 64 個、kernel 大小為 3×3×3,而第一池化層的 pool 大小為 2×2×2,原始圖像經過以上兩層的處理後會得到 64 個大小為 2×32×32 的特徵圖,

以此類推最後可以得到 512 個大小為 1×4×4 的特徵圖,為了取得詳細的圖像特 徵,我們使用展平層(Flatten)來展開這些特徵圖後可得到 8192 個特徵值,接著使 用全連接層(Dense)來分析特徵,這 3 層的單元(unit)數量分別為 2000、200 以及 2,此外有在全連接層上使用 dropout 來減少發生過度擬合(over-fitting)等問題,

其中 dropout 的數值設定為 0.5,最後一層的全連接層使用 Softmax 激勵函數來使 輸出的資料型態為機率形式,輸出的兩個機率值分別為d1和d2且d1+ d2 = 1,其 中d1為清醒狀態的機率,d2為正在打瞌睡的機率。

關於 C3D 模型的訓練,我們使用已經預處理過的 DDD 資料集來進行訓練,

其中資料的隨機批量大小(batch size)設定成 8,在損失函數(loss function)的部份 使用 cross entropy 來對應 Softmax 層的輸出,而在模型參數的優化上我們則使用 SGD(stochastic gradient descent)方法來優化,其中在論文[16]中有提到使用 SGD 方法對於模型容易進行優化,其中 SGD 的學習率(learning rate)設為1 × 10−4、衰 變率(weight decay)設為1 × 10−6、動量(momentum)設為 0.9,此模型總共訓練了 6 × 104次迭代(iteration)。

圖(4-2) 提取臉部特徵的 C3D 架構

4.2 CNN 模型架構

我們參考 VGG-Net[5]並且對此框架進行修改來減少層數,藉此來減少運算

(Convolution-2D)、4 個池化層(MaxPooling-2D)以及 3 個全連接層(Dense),每個 卷積層以及全連接層使用到 ReLU 激勵函數(activation function),第一卷積層的 filter 數為 64 個、kernel 大小為 3×3,第一池化層的 pool 大小為 2×2,原圖像經 過以上兩層的處理後會得到 64 個大小為 16×16 的特徵圖,以此類推最後可得到 512 個大小為 2×2 的特徵圖,接著使用展平層(Flatten)來展開特徵圖後可得到 2048 個特徵值,而後使用全連接層(Dense)來分析特徵,這 3 層的單元(unit)數量分別 為 2048、1024 以及 2,並在全連接層上使用 dropout 來減少過度擬合(over-fitting) 的影響,其中 dropout 的數值設定為 0.5,最後一層的全連接層使用 Softmax 激勵 函數來使輸出的資料型態為機率形式,輸出的兩個機率值分別為e1和e2且e1+ e2 = 1,其中e1為開眼狀態的機率,e2為闔眼的機率。

我們使用 DDD 資料集中的闔眼標記資訊來訓練 CNN 模型,訓練資料的隨 機批量大小(batch size)為 16,在損失函數(loss function)的部份使用 cross entropy 來對應 Softmax 層的輸出,此模型的參數優化上我們也使用 SGD 方法來進行處 理,其中 SGD 的學習率(learning rate)設為1 × 10−4、衰變率(weight decay)設為 1 × 10−6、動量(momentum)設為 0.9,總共訓練了6 × 105次迭代(iteration)。

圖(4-3) 提取雙眼特徵的 CNN 架構

entropy 來對應 Softmax 層的輸出結果,在此模型的參數優化上我們也使用 SGD 方法來進行處理,SGD 的學習率(learning rate)設為1 × 10−4、衰變率(weight decay) 設為1 × 10−6、動量(momentum)設為 0.9,LSTM 模型總共訓練了 5000 次迭代 (iteration),訓練完成後可以對睡意特徵進行分析並輸出睡意辨識的結果。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖(4-4) LSTM 模型的資料輸入流程

圖(4-5) 辨識值的合併輸入格式

4.4 時間平滑後處理

由於影片中相鄰片段的辨識結果可能因為相鄰之間的臉部圖像變化較小以 及受到圖像中的雜訊影響而產生不準確結果,而且考慮到人的睡意偵測值上的變 化,人並不會在一瞬間從清醒變成打瞌睡或是從打瞌睡變回清醒,因此在睡意偵 測值上突然出現的極端值通常可以視為偵測錯誤的結果,為了減少這些不準確或 是極端數值的結果,在參考文獻[2]中有提到採用時間平滑(temporal smoothing)的 方法可以減少辨識結果受到雜訊影響,文獻[2]中的方法我們使用由一維卷積層 (Convolution-1D)和全連接層(Dense)所組成的模型來進行時間平滑,辨識結果的 後處理方式如圖(4-6)所示,每當產生新的輸出結果後就和過去的辨識結果一同放 入模型中來進行時間平滑處理。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖(4-6) 睡意辨識結果的時間平滑處理方式

時間平滑模型是由一卷積層和一全連接層所組成的兩層學習模型,用來修正 在辨識睡意的過程中產生的極端結果,其中一維卷積層的輸入資料為 8 個原始偵 測結果,此意思為除了當下的偵測結果之外,另外放入過去的前 7 個偵測結果到 時間平滑模型中,而全連接層的輸出則是修正過後的睡意辨識結果,我們使用在 前幾章提及的由 C3D、CNN 和 LSTM 所組成的睡意辨識模型的輸出結果來作為 此模型的訓練以及測試資料,時間平滑的處理流程如圖(4-7)所示,圖中的 Detection result 1~10 為連續時間序上的睡意偵測結果,首先把 Detection result 1

~8 放入時間平滑模型處理來產生一筆修正好的結果,接著處理 Detection result 2~9 來產生第二筆修正好的辨識結果,以此類推來得出各個原結果所對應的新 修正結果。訓練資料的隨機批量大小(batch size)為 8,損失函數為 cross entropy,

模型的參數優化也使用 SGD 方法來進行處理,SGD 的學習率(learning rate)設為 1 × 10−4、衰變率(weight decay)設為1 × 10−4、動量(momentum)設為 0.9,時間平 滑模型總共訓練了 2 萬次迭代(iteration)。

圖(4-7) 時間平滑模型的處理流程

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖(4-8)為輸出結果進行時間平滑後的結果,兩圖中的 x 軸為 frame 的時間 軸,y 軸為偵測到發生睡意的機率值,水平綠色線為睡意的基準線,綠色線以上 代表存在打瞌睡的情形,反之綠色線以下則代表為清醒的狀態,藍色折線為原始 的辨識結果,而紅色折線為經過時間平滑後的結果,從這兩張圖可以看出平滑處 理前後的雜訊結果相對減少許多。

圖(4-8) 時間平滑的處理結果

4.5 影像資料的讀取方式

我們在讀取測試影像來輸入模型的格式如下圖(4-9)所示,我們定義輸入模型 的資料為 96 張 video frame,其中為了保持睡意偵測的處理速度能夠滿足 real time,

我們考慮到偵測模型中的 C3D 子模型的輸入為 4 張 video frame,因此設定每取 得 4 張新的 video frame 並放入 C3D 和 eye-CNN 中分析後就合併先前已處理過 的結果一同放入 LSTM 進行分析,而並非是一次讀取 96 張 video frame 後再放入 偵測模型當中進行處理。這樣的讀取方式可以減少備齊所需 video frame 的等待 時間,並且加快整體睡意偵測的處理速度。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖(4-9) 駕駛影像的資料讀取格式

4.6 深度學習套件以及開發環境

本次睡意偵測研究的模型訓練以及測試所使用的開發語言為 Python 3.6.5、

開發環境的作業系統為 Ubuntu 16.04、其搭配的 CPU 為 Intel Xeon E5,此外也使 用 GPU GeForce GTX 1080 來減少訓練深度學習模型以及執行睡意辨識所需的時 間。我們所使用到的有支援 Python 的深度學習函式庫為目前較為主流的 Keras 2.1.6 [17]以及由 Google 所提出的 Tensorflow 1.9.0 [18]。這兩種函式庫皆包含了 多種架構元件,例如像是卷積層、池化層以及全連接層等等,可以讓使用者可以 依自己的開發需求來建立深度學習模型,除了架構元件之外也提供一些已經定義 好的知名網路模型,例如像是 Res-Net [19]以及 Dense-Net [20]等等,因此在深度 學習開發上也可以直接使用這些已經建立好的模型架構來進行訓練而可以節省 建構模型的所需時間。

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

5.2 C3D 模型的測試結果

圖表(5-2)為 C3D 模型的短時間睡意分析的結果,在此階段總共測試了六種 不同的參數架構,而每個架構都有執行 CLAHE 的影像資料預處理,其中以 C3D 模型的輸入 frame 數以及每個 Conv 層的 filter 數大小來作為調整變因,例如架構 A 的輸入 frame 數為 4,第一 Conv 層的 filter 數為 64 個、第二 Conv 層的 filter 數為 128 個、第三 Conv 層的 filter 數為 256 個、第四 Conv 層的 filter 數為 512 個,其中架構 A 在短時間內的辨識率為 74.51%,而架構 F 的輸入 frame 數為 8,

第一 Conv 層的 filter 數為 64 個、第二 Conv 層的 filter 數為 128 個、第三 Conv 層的 filter 數為 256 個,而架構 F 在短時間內的辨識率則為 71.39%,而從圖表(5-2)的測試結果來看,Conv 層數以及 filter 數的增加有助於提升辨識率,但是卻會 增加運算處理的時間而難達到即時偵測睡意狀態的需求,因此我們選擇相對測試 結果較好的架構 A 來作為系統中 C3D 模型的參數架構。

圖表(5-2) C3D 短期睡意分析的測試結果

5.3 睡意辨識的測試結果

圖表(5-3)為在多種不同的深度學習模型下進行睡意測試的結果,我們所使用 的測試資料集有 20 段影片,每段影片的長度最多為 5 分鐘,測試影片的錄製速 度為 30fps,其中每種模型所對應的輸入資料為 96 張的連續 frame,在本次的研

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖表(5-3) 不同模型以及輸入幀數調整的實驗結果

圖表(5-4) 睡意偵測相關文獻的實驗結果比較

5.4 睡意辨識的執行效能分析

圖表(5-5)為在多種模型架構下對辨識睡意的處理效能的分析結果,其中測試

圖表(5-5)為在多種模型架構下對辨識睡意的處理效能的分析結果,其中測試

相關文件