• 沒有找到結果。

使用 kNN 分類器的人體姿勢判別

第三章 設計與實作

3.1 系統架構

3.1.3 使用 kNN 分類器的人體姿勢判別

kNN 分類器全名為 k-th Nearest Neighbor 分類器,為一種監督式的機器學 習法(supervised learning )。所謂監督式的學習,是指在訓練機器學出一個模 型( model )的之前,會先有一段訓練的時間( training time ),在這段時間裡 面,每一筆資料會有一個正確答案,經過機器學習以後,會根據答案調整自己學 習的方法[12][13]。kNN 顧名思義就是對於每一筆新進來的資料都去計算該點在 訓練樣本的特徵空間內與其他點的距離,計算出與所有點的距離之後,挑選與自 己最近的 k 個點,並觀察這幾個點屬於哪個類別( class ),將該點分類至最多

18

點的類別。由於 kNN 會去計算自己與所有點的距離,所以 kNN 也屬於一種 instance-based learning,kNN 演算法如下[14]。

Algorithm 1:kNN Algorithm:

kNN( Example, TrainingExamples, k )

For each TrainingExample in TrainingExamples Computer d( Example, TrainingExample ) Let Neighbors be the k TrainingExamples with

the smallest value for d.

Let c be the most common category of the examples in Neighbors.

Return c

其中 d( Example, TrainingExample )為 Example 與 TrainingExample 的距離。

在本研究中,對於樣本在特徵空間中的距離計算我們採用歐式距離的算法, 立姿勢( stand_pose ),第二種為中間姿勢,舉凡坐下、蹲下、彎腰等等的姿勢 ( temp_pose )以及第三種躺臥姿勢( laying_pose ),各個類別各有 150 筆資料。

在使用 kNN 分類器時有兩點是我們必須要注意的,

一:樣本的特徵值要如何選取?

19

二:k 的值要訂下多少才好?

關於第一點,我們參考了 Arie Hans Nasution 與 Sabu Emmanuel[15]於 2007 年發表的論文,這兩位學者在該論文中提及使用人體的身高與身寬當作 kNN 的兩 Hans Nasution 等人對資料做了分類後的檢查,以提高分類的正確率。但是在一 個即時系統中,我們認為這樣額外的計算負擔將會帶給系統無法即時回報偵測結

20 bounding box 的差值便會為負值。我們可以在圖中觀察到,選取人體比例與人 體 bounding box 差值這樣的特徵值來建立的樣本特徵空間,相較於先前單純使

21

使的我們在使用 kNN 分類器上有較少的誤判情形,且不需額外的計算成本來修正 kNN 分類之後的結果,對於一個即時系統將有不少的助益。根據我們在樣本特徵 選擇上的修改所做的分類結果如下表 1,我們採用 K-Fold Cross

Validation[12][16]來驗證我們的 kNN 分類的正確性。所謂 Cross Validation 即為指對已建立的測驗效度進行複核的過程,主要是以與原來用以建立測驗效度 不同的樣本再行測驗,然後比較其結果以來確定效度的準確性。而 K-Fold 則是 將資料分成 k 組,其中 k-1 組為訓練資料( training data ),1 組測試資料 ( testing data ),作 k 次取平均來做為我們 k 值的選取,實驗結果如表 1 所 示。

表 1.K-Fold Cross Validation

K-Fold Cross Validation 所得到的身體姿勢分類正確率

由表 1 我們可以看到在 k = 3 時有較高的正確率,平均正確率在 95.34%。

22 躺臥( Laying down )與跌倒( Falling down )兩種不同的事件,分辨不同兩事 件的因素我們認為是速度的差異。對於正常的躺臥事件而言,由於高齡者行動較

相關文件