- 將數據集的影片分割為連續圖像序列。
- 將圖片序列使用 Mediapipe 取出骨架,將得到 33 個人體關節點 (x, y)。
- 數據的預處理,如:最小最大值正規化、相對位置正規化、線性插值 + 相對位置正規化。
- 將數據集分為測試集和訓練集,輸入到模型中訓練,完成模型訓練後,就能進行分類的測試。
數據集分類
將數據集分為非跌倒事件及跌倒事件,並且每 100 筆資料分為一組,做時間序列。
數據集 | 非跌倒事件 (組) | 跌倒事件 (組) |
UR Fall Detection Dataset | 320 | 320 |
Fall Detection Dataset | 480 | 480 |
Mix Dataset | 800 | 800 |
骨架取得
使用 UR Fall Detection Dataset 以及 Fall Detection Dataset 兩個數據集進行訓練。
1. 將兩個數據集的影像尺寸統一調整為 640 * 480。
2. 透過 Mediapipe 取得骨架。
使用 Mediapipe 的 Pose 模型可以標記出身體 33 個關節點的位置。
保留所需特徵點。
數據預處理
1. 資料增強
確保訓練時不會產生過度擬合,將圖像進行旋轉,創造出更多的圖像來讓機器學習,彌補資料量的不足。
2. 位移人體骨架
將人體骨架將移動到圖像中央,去除了原始數據中,人體位移過程這個特徵,像是左走到右或是從遠方走到近,將人體骨架固定在相同位置,做出連續動作讓模型更容易學習。
3. 線性插值
線性插值前的分佈圖
線性插值後的分佈圖
模型訓練
設備資訊
GPU | NVIDIA A100 |
CPU | Intel Xeon |
模型結構
最佳模型參數
此最佳為面向於專題當中的最佳參數,而非訓練時的最佳參數。
混合數據集數量 | 1600 |
訓練數據集數量 | 80% (1280 組) |
測試數據集數量 | 20% (320 組) |
數據集處理 | 相對位置正規化 + 線性插值 |
學習率 | 0.001 |
批次大小 | 1280 (根據數據集數量決定) |
Epochs | 500 |
輸入神經元數量 | 26 |
隱藏神經元數量 | 512 |
輸出神經元數量 | 2 |
激勵函數 | Tanh |
最佳化算法 | Adam |
損失函數 | Cross Entropy |
模型測試
訓練結果
評估 LSTM 模型
Test Loss | 0.10224159806966782 |
Test Accuracy | 0.9780625104904175 |
預測結果
Correct predictions | 31298 |
Incorrect predictions | 702 |