• 沒有找到結果。

之後把這些特徵放入 Long Short Term Memory(以下簡稱為 LSTM)進行處理來分 析是否有睡意產生,在另外一篇的睡意研究[3]中則是使用深度學習框架 Alex-Net[4] 來 處 理 睡 意 辨 識 , 以 上 這 兩 種 知 名 框 架 都 是 由 Convolution neural network(簡稱 CNN)所組成的,CNN 在取得圖形特徵上具有很不錯的效果,不過 因為 CNN 只能取得單張圖像中的特徵,沒有辦法分析在時間上的連續動作特徵,

因此在相關研究[6,7]中則是提出可以使用到 3D Convolution Neural Network(以下

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

簡稱為 C3D)來同時取得表情以及臉部動作特徵(spatio-temporal feature)的方法,

而不需要再額外加上 LSTM 來取得臉部動作特徵。C3D 和 LSTM 這兩種深度學 習模型都可以用於取得動作特徵,但是在相關論文[8,9,10]的研究結果中有提到 C3D 模型適合用於取得在相對較短時間內的動作特徵,而 LSTM 適合用於取得 時間相對較長的動作特徵。我們參考以上的研究來提出一種合併 C3D 和 LSTM 的 模 型 架 構 來 取 得 更 完 整 的 臉 部 特 徵 變 化 並 且 搭 配 上 資 料 預 處 理 (data preprocessing)以及輸出結果的後處理(result reprocessing),藉此來進一步提升睡意 偵測的準確性。

圖(1-1) 睡意偵測的辨識結果標記

1.3 研究目的

有關於本研究的目的是在對駕駛進行即時性的明顯睡意偵測,並且使用深度 學習的類神經網路架構來提高辨識的精準度,當偵測到有打瞌睡情形時可以自動 提醒駕駛在開車途中保持清醒,藉此減少在單人駕駛車輛時發生打瞌睡的情況。

而類似的相關研究中像是由 Reza 等人所提出的潛在性睡意偵測[1],因為在睡意 初期的臉部變化不明顯,所以在偵測上會需要較長的分析時間,較難以達到即時 性的偵測,因此在本次的研究中不會探討到潛在性睡意等問題,我們的研究重點

並且把闔眼辨識結果和睡意偵測的結果進行決策融合(decision fusion)處理。

(4) 研究的成果可應用在當駕駛發生打瞌睡時,可以自動對駕駛來進行示警。

中最常見的是卷積層(convolutional layer)、池化層(sub-sampling or pooling layer)以 及全連接層(fully connected layer),模型架構如圖(2-1)所示,在相關論文[12]中有 提到有時會為了避免在訓練模型時發生過度擬合(over-fitting)等問題,會額外加

在研究[6,7]中所提到的 3D Convolution Neural Network 如圖(2-3)所示,其模型也 可以稱作為 C3D,其中 C3D 和 CNN 的架構差別在於 C3D 把圖像的時間變化量 當作為第三維度的資訊放入卷積層和池化層當中來進行訓練而可以取得圖像的 特徵變化,因此 C3D 可以取得在時間上的連續動作特徵。

圖(2-1) CNN 模型的架構範例 [11]

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖(2-2) VGG-Net 的多種架構 [5]

圖(2-3) 3D-CNN 的模型架構 [6]

2.2 臉部偵測模型 MTCNN

為了把辨識問題集中在駕駛臉部上而非在整張駕駛開車的影像,所以在進行 睡意偵測之前需要先進行人臉偵測找出影像中駕駛的臉部位置並進行切割處理。

我們挑選了一篇在 2016 年由 Zhang 等人所提出的研究[14]中的深度學習模型 Multi-task Cascaded Convolutional Networks(以下簡稱 MTCNN)來作為我們進行睡 意識別之前的資料預處理。

根據文獻[14]中的內容,MTCNN 會標記出圖像中人臉的五點位置,五點位

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

置包含:左眼、右眼、左嘴角、右嘴角以及鼻子,流程圖如圖(2-4)所示,MTCNN 主要由三種不同的網路所組成的,分別是 P-Net、R-Net 以及 O-Net,模型架構如 圖(2-5)所示。MTCNN 模型的處理流程為先把原始圖像縮小成多種不同的尺寸,

再各自把這些不同尺寸的圖像放入 P-Net 後,會生成多個對應的邊界框(bounding box)並使用 non-maximum suppression(以下簡稱 NMS)來刪除較小和重疊的邊界 框,接著把圖像放入 R-Net 中來刪除不適合的邊界框並再次使用 NMS 方法來刪 除不適合的邊界框,最後把邊界框中的圖像放入 O-Net 中來標記出人臉上五點的 位置,之後依照標記出來的五點位置來對人臉進行角度轉正的處理,因為人臉圖 像轉正後有助於後續的辨識模型判斷駕駛是否有發生打瞌睡情形。

圖(2-4) MTCNN 的執行流程圖 [14]

‧ 國

立 政 治 大 學

N a tio na

l C h engchi U ni ve rs it y

圖(2-5) MTCNN 中 P-Net、R-Net 以及 O-Net 的結構圖 [14]

2.3 特徵分析模型 LSTM

因為人的睡意跡象很難只依靠單一圖像就可以判斷該駕駛是否有打瞌睡的 情形發生,會需要藉由分析多張影像才能進行判斷,在參考論文[2]的內容中把已 經藉由 CNN 模型所提取出的圖像特徵依序放入 LSTM 模型中分析臉部變化的動 作特徵來判斷是否存在睡意。如圖(2-6)所示,在影片中的每張影像幀(以下稱為 frame)經過 CNN 模型而得到圖像特徵後會依序放入 LSTM 模型中分析而後輸出 睡意偵測的結果,其中所使用的 LSTM 模型則是由 Zaremba 和 Sutskever 等人所 提出的[22],因為 LSTM 模型可以分析特徵的時序性變化而因此是有助於睡意的 判斷分析。

圖(2-6) CNN 和 LSTM 的整合流程圖 [2]

腦視覺實驗室所提供的 Drowsy Driver Detection dataset[15],以下簡稱為 DDD 資 料集。資料集中包含多支模擬打瞌睡的影片以及每張 frame 所對應的睡意標記,

圖(3-1) Drowsy Driver Detection 資料集中影片的截圖 [21]

切取出眼睛的圖像,流程如圖(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)所示,每當產生新的輸出結果後就和過去的辨識結果一同放

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

相關文件