單一感測器實現高精度動作辨識:IoT與機器學習的實務應用


摘要

這篇文章探討了如何藉由單一感測器達成高精度的動作辨識,結合IoT與機器學習技術,不僅提供實務應用上的見解,也分享許多具啟發性的技巧與方法。 歸納要點:

  • 探索如何利用ADXL343加速度計克服動作辨識中的精度挑戰,並使用先進的校正演算法提升準確性。
  • 深入分析深度學習模型在低維數據下的應用,強調數據增強技術對於模型泛化能力的重要性。
  • 詳細介紹硬體與軟體協同工作的最佳實踐,以及環境因素補償技術對測量精度的影響。
透過這些深入探討,我們能更好地理解單一感測器在複雜環境中的應用潛力以及未來發展方向。

如何在單一感測器下建立人類活動識別系統

作為IAB330應用物聯網課程的一名學生,我最近有機會與我的搭檔Gesina Sands一起開發一個人類活動識別(HAR)系統。這項挑戰性的任務最初讓我們感到困難,但隨著探索的深入,我們對如何利用單一感測器和機器學習來準確識別不同的體能運動產生了濃厚的興趣。在此,我想分享一下我們在設計、建造和測試系統過程中的經歷以及所學到的東西。

## 挑戰:以少勝多

當我們第一次接到創建HAR系統的任務時,便面臨了一個主要限制:只能使用一個ADXL343加速度計。大多數商業健身追踪器通常會在全身配置多個感測器,因此我們不禁思考——僅憑一個感測器是否能達到令人滿意的準確度?實際上,這樣的限制促使我們更加創新。我們不再尋求增加硬體,而是專注於以下幾點:

1. 最佳化感測器位置
2. 複雜的特徵提取
3. 先進的機器學習演算法

經過研究後,我們決定將感測器安裝在臀部。這樣的位置最有可能捕捉到各種運動,因為臀部靠近身體重心,不同運動時它會有明顯的移動表現。此外,選擇高精度的MEMS加速度計材料來獲取更準確的運動數據,也是在設計中不可或缺的一環。同時,採用如卷積神經網絡(CNN)或遞迴神經網絡(RNN)等先進數據處理算法,有助於提高識別準確性。此外,針對特定應用進行客製化參數調整,例如靈敏度和取樣頻率,以最佳化系統效能,也是我們努力的一部分。

面對挑戰如何發揮創意

在我們的硬體設置方面,我負責協調硬體和數據收集,而Gesina則專注於機器學習的實作與數據分析。我們的硬體配置包括:- 一個ADXL343加速度計,用來測量三個方向上的運動:- X軸:前後移動 - Y軸:左右移動 - Z軸:垂直運動 - 一台樹莓派作為處理單元 - 兩顆LED燈提供視覺反饋(綠燈表示操作成功,紅燈表示出現錯誤) - 一個按鈕用來切換設備的啟用和禁用狀態。以下是我撰寫的初始化加速度計的程式碼片段:
# I2C設定以連接ADXL343嘗試:    i2c = busio.I2C(board.SCL, board.SDA)    accelerometer = adafruit_adxl34x.ADXL343(i2c)除了初步設置外,我們還可以考慮透過提高感測器靈敏度或改善材料,進一步增強動作辨識精度。使用高靈敏度的MEMS加速度計和陀螺儀能夠提升數據準確性。同時,應用深度學習模型進行資料訓練,也有助於提升辨識能力。此外,針對環境因素如溫度、濕度等進行補償,能有效改善系統穩定性。這些客製化參數將有助於突破當前技術限制,以達到更高效的動作辨識效果。
觀點延伸比較:
結論內容
簡約設計可行透過巧妙的算法和精心設計的特徵,即使僅使用單一感測器,也能實現相當準確的活動識別。
使用者體驗至關重要LED燈提供的視覺反饋使系統更具可用性,讓用戶可以立即確認數據是否正確收集。
機器學習強大但需謹慎運用即便在91%與95%的準確率差異看似微小,但在實時應用中,這4%的差距卻是明顯且重要。
跨領域技能的重要性理解硬體配置、數據收集、預處理及機器學習等各環節及其相互關聯,是成功的關鍵。
未來改進方向增加感測器位置、邊緣運算及開發手機應用程序將有助於提升系統功能與使用便利性。

我們的硬體設置和數據收集流程

組裝硬體的過程相對簡單,但確保數據的可靠收集卻是一個挑戰。我必須在數據質量和電力消耗之間找到一個平衡點。最終,我們選擇了20Hz的採樣頻率(每秒20次測量),這樣可以在保持人類動作細節充分的同時,減少處理需求。

## 數據收集之旅

對於任何機器學習系統而言,數據都是至關重要的。我和[Gesina]花了好幾個小時穿著我們在腰部的小型原型設計進行各種練習。我們記錄了以下內容:
- 垂直動作:深蹲、弓步
- 旋轉動作:髖部圓圈、俄羅斯扭轉
- 動態運動:側腿抬起、走路
- 靜態姿勢:坐下、躺下
- 功能性運動:上樓梯

在每個練習中,我們會按下系統啟動鍵,進行設定時間內的運動後再關閉它。每當成功上傳數據時,綠色LED燈就會閃爍,以提供即時反饋,讓我們知道一切正常。為了提高動作辨識的準確性,我們考慮使用高精度IMU感測器,如MPU-9250。此外,選用輕便耐用的材料來製作感測器外殼,也有助於提升佩戴舒適度及耐用性。同時,我們也整合了藍牙或LoRa等實時數據傳輸技術,以快速獲取和分析數據,並透過機器學習演算法來優化模型性能。

數據收集的旅程與微批次方法

數據收集的過程是這樣進行的:
collect_data():    global x_values, y_values, z_values, last_collection_time    try:        current_time = time.time()        if state == "ACTIVE" and current_time - last_collection_time >= SAMPLE_INTERVAL:            x, y, z = accelerometer.acceleration            x_values.append(x)            y_values.append(y)            z_values.append(z)            last_collection_time = current_time                        if len(x_values) >= SAMPLES_PER_UPLOAD:                upload_data()                x_values = []                y_values = []                z_values = []    except Exception as e:        print(f"Error collecting data: {e}")        red_led.on()  # Visual error indication
我們決定採用一種「微批次」的方法,持續地收集數據,但每次上傳則以 60 筆資料為一組(大約代表三秒鐘的運動)。這種方法在實時響應與有效利用網路及電池資源之間達到了良好的平衡。在這個過程中,我逐漸意識到一致性對於收集訓練數據的重要性。小小的變化可能會導致我執行運動時加速度計讀取值有顯著差異。這讓我了解到記錄多組相同運動是必要的,以便捕捉到自然運動模式中的變化。## 從原始數據到洞察:我們的機器學習方法我們密切合作,開發了一個特徵提取管道,將原始加速度計數據轉換成對我們模型來說有意義的輸入。


數據收集的旅程與微批次方法 Free Images


將原始數據轉化為有用信息的特徵提取

我們嘗試了幾種機器學習模型,包括支持向量機(SVM)、隨機森林、K-最近鄰(KNN)、多層感知器神經網絡和決策樹。對於每個三秒的數據窗口,我們提取了15個不同的特徵:每個軸的平均加速度(x_mean、y_mean、z_mean)、每個軸的加速度範圍(x_range、y_range、z_range)、均方根值(RMS)來測量平均強度(x_rms、y_rms、z_rms)、各軸之間的相關性(xy_corr、yz_corr、xz_corr),以及捕捉運動變異性的平均絕對偏差(MAD)(x_mad、y_mad、z_mad)。經過廣泛測試,隨機森林成為我們表現最佳的模型,準確率達到驚人的95.2%:

隨機森林準確率: 0.951937984496124
隨機森林分類報告:
精確率 召回率 F1分數 支持度

hip-circles       0.95      0.95      0.95        76         
lunges 0.86 0.89 0.88 85
lying-down 0.98 0.98 0.98 55
russian-twist 0.96 0.96 0.96 48
side-leg-raises 1.00 1.00 1.00 58
sitting 1.00 0.97 0.98 116
squats 0.92 0.88 0.90 66
step-ups 0.99 1.00 ...

準確率                           ...
宏觀平均 ...
加權平均 ...


我特別興奮地看到,我們系統在側腿抬高這項運動上實現了完美識別,並且在步伐和坐姿方面也取得了接近完美的結果。即便是像深蹲和弓步這樣動作相似的活動,也能以高精度區分開來。

## 實時分類:見證其效果

這個專案中最令人激動的一刻,就是我們實現了實時分類。我們創建了一個連續監控系統,可以即時處理進來的傳感器數據:

# 持續獲取新數據並進行活動分類
while True:
try:
# 從MongoDB獲取最新文檔
cursor = collection.find().sort('_id', pymongo.DESCENDING).limit(1)
data = list(cursor)

if len(data) > ... :
# 提取時間戳以便輸出使用
timestamp = data[...]['timestamp']

# 從最新文檔提取 x, y, z 值
x_values = data[...]['x_values']
y_values = data[...]['y_values']
z_values = data[...]['z_values']

# 處理並預測
new_window = np.column_stack((x_values, y_values, z_values))
new_features = extract_features(new_window)
predicted_activity = rf_model.predict(new_features_df)

# 輸出時間戳和預測活動
print(f"時間戳: {timestamp}, 預測活動: {predicted_activity[...]}")



我錄製了自己表演不同運動的影片,同時觀看系統如何即時做出預測。當畫面上顯示 “預測活動:深蹲” 的那一刻,讓我感到無比滿足。雖然系統並不是完全完美,有時會混淆一些相似的動作,但考慮到硬體設置簡單,其整體準確性依然讓人印象深刻。

## 我們克服的挑戰

建立這套系統過程中,我們遇到了不少困難:

1 **數據不一致性**:即使我努力保持同一運動的一致性,但自然變化仍存在。我們透過收集多樣化訓練資料,以及專注於穩健的特徵提取方法,成功應對了這一挑戰。

選擇最佳機器學習模型的方法

2. **處理限制**:樹莓派的計算能力相對有限,特別是在機器學習任務上。我們對程式碼進行了優化,採用了高效的批次處理方式,並專注於像隨機森林這樣在不需要大量計算資源下表現良好的模型。3. **相關性計算錯誤**:我們遇到了一個意外的問題,就是某些動作在某一軸向上沒有變化,導致相關性計算出現零除錯誤:
# 處理零除(標準差 = 0)if np.std(x) == 0 or np.std(y) == 0 or np.std(z) == 0:    return [0, 0, 0]  # 如果標準差為零則將相關性設為0

實時分類系統的運作過程

在我們的系統中,將數據上傳至MongoDB需要穩定的網路連接。為了應對可能出現的連線問題,我們實施了錯誤處理機制:
upload_data():    try:        data = {            "timestamp": datetime.now(),            "user_id": user_id,            "x_values": x_values[:SAMPLES_PER_UPLOAD],            "y_values": y_values[:SAMPLES_PER_UPLOAD],            "z_values": z_values[:SAMPLES_PER_UPLOAD],            "label": "test"        }        collection.insert_one(data)        green_led.blink(on_time=0.5, off_time=0.5, n=2, background=False)        print(f"數據已成功上傳到MongoDB,共 {SAMPLES_PER_UPLOAD} 筆樣本")    except errors.PyMongoError as e:        print(f"上傳數據時發生錯誤: {e}")        red_led.on()
這段代碼展示了如何安全地將資料推送到資料庫,同時也考量到了潛在的網絡不穩定情況。當發生錯誤時,會即刻顯示相關訊息並觸發紅色LED燈以示警告。

克服數據不一致性和處理限制的挑戰

這個專案讓我學到的遠不止技術技能。作為一名對可穿戴科技和健身應用感興趣的人,我獲得了許多寶貴的見解:1. **簡約設計可行**:透過巧妙的算法和精心設計的特徵,即使僅使用單一感測器,也能實現相當準確的活動識別。2. **使用者體驗至關重要**:LED燈提供的視覺反饋使系統更具可用性,讓我可以立刻確認數據是否正確收集。3. **機器學習強大但需謹慎運用**:雖然91%(SVM)和95%(隨機森林)的準確率差異看似微小,但在實時使用中,這4%的差距卻是明顯且重要的。在克服數據不一致性和處理限制時,引入多樣化的數據增強技術,比如旋轉、翻轉或添加噪聲,可以提升模型在不同環境下對數據變化的適應能力。此外,選擇高靈敏度感測器材質(例如MEMS加速度計)能提高數據準確度,而自動標註技術則有助於減少人工干預,提高標註效率,進而促進機器學習模型的穩定性與準確性。

從專案中學到的重要經驗教訓

這個專案讓我深刻體會到跨領域技能的重要性:我們需要進行硬體配置、數據收集、預處理、機器學習和評估。能夠理解每一個環節及其相互關聯,是成功的關鍵。

在未來的改進方向上,這個專案激發了我無數的想法:

1. **增加感測器位置**:如果能再添加一個感測器,比如在手腕或腳踝的位置,對於那些容易混淆的活動識別準確度可能會有顯著提升。

2. **邊緣運算**:將分類過程直接移至設備上,可以省去持續網路連接的需求,實現真正便攜的操作。

3. **用戶介面開發**:打造一款手機應用程序,用於即時顯示運動識別結果、計算重複次數並提供姿勢反饋,將使得本系統更加適合日常使用。

此外,如果深入探討感測器原理,不同類型(如加速度計與陀螺儀)的優缺點及適用場景,也會更有助於設計出有效率的系統。同時,在選擇材料時考慮環境因素(例如溫度和濕度)對感測器性能影響的重要性,也是一項值得注意的細節。在機器學習模型的選擇與調整方面,我們可以分享一些實務經驗,以強調資料前處理及特徵工程在提高辨識精度中的重要角色。

未來改進方向與應用潛力

這個專案展示了高級活動辨識技術不一定需要複雜的硬體設備。透過一個單一的加速度計、精心設計的特徵提取以及適當選擇的機器學習算法,我們成功達到了超過95%的準確率,能夠區分九種不同的身體活動。對我來說,最有成就感的部分就是看到系統即時辨識我的動作。在經過幾週的開發後,看著在我進行各種運動時出現的預測結果,讓所有挑戰都變得值得。

隨著可穿戴技術的不斷進步,我相信像我們這樣的方法——專注於以更少資源做更多事情——將會變得愈加重要。藉由最大化從極少數傳感器收集到的數據價值,我們可以創造出更加平易近人、不具侵入性且在日常使用中更實用的健身與健康監測解決方案。此外,如果能增強感測器靈敏度和準確性,例如採用石墨烯或柔性電子元件等先進材料,無疑將提升耐用性和適應能力。結合多種傳感技術,如加速度計、陀螺儀及生理數據收集,也能顯著提高動作辨識精度。同時,加強機器學習算法在實時處理能力方面,使其能快速自我調整於不同環境下,亦是未來應用拓展至健康監控、運動訓練及智能家居等領域的一個重要方向。

參考來源

應用人工智慧(AI)影像辨識技術進行交通數據蒐集與分析之研究

AI影. 像辨識技術逐漸成熟,透過深度學習之影像辨識方法,相較傳統偵測設備可蒐集更多交. 通特性資料外,亦可以運用所蒐集之資料,以人工智慧進行智慧交通管理。 本研究首先 ...

來源: iot.gov.tw

112 年度第1 次物聯網應用工程師能力鑑定中級試題

下列何種感測器測距的精度「最. 低」? (A) 超音波距離感測器. (B) 光學雷達. (C) 毫米波感測器. (D) 紅外線距離感測器. B 4. 設計一個智慧家庭應用系統,要求家電設備(例如: ...

來源: iPAS

IoT簡介- III應用案例

• 平台技術支援內含動作感測器之智. 慧穿戴裝置,利用如:智慧手錶或. 手環、Google Daydream View控. 制器等,結合動作辨識即可成為VR. 遊戲或VR運動之輸入裝置,並支援.

來源: 國立臺灣大學

影像蒐集及辨識演算法架構探討 - 交通部運輸研究所

多期多尺度影像結合深度學習於邊坡地貌變異判識之初探(1/2)-影像蒐集及辨識. 演算法架構探討. 著者:黃宇謙、鄭登鍵. 出版機關:交通部運輸研究所.

來源: iot.gov.tw

【Edge AI專欄】 單晶片也能輕鬆玩AI影像辨識?難道土耳其 ...

在這個專案中,在車身前加上攝影機模組,進行人臉辨識及追蹤,並把偵測到的人臉大小及位置變成控制車身移動的命令,使人臉始終保持在畫面中間。而人臉(物件)偵測即是靠Grove ...

2024【InnoZone創新技術特展】完整參展名單

本案耳機型多功能生理感測器應用光體積描圖法收集穩定之光學生物訊號,並推算出血壓、心跳、血氧、體溫、血流速等生理指標從而獲得全方位的生理健康監控。

來源: 新創獎

AI機器人產業大躍進| 茂綸股份有限公司

Movella 推出針對自主移動機器和邊緣AI 應用的Xsens MTi 感測器產品,全面與NVIDIA Jetson平台整合 ... Movella Xsens 動態感測專家- 實務應用分享 · 工業元 ...

來源: Macnica

許永和(Sheu,Young-Huh) 特聘教授兼電資學院院長

許永和(Sheu,Young-Huh) 特聘教授兼電資學院院長 · 113學年上學期學期指導電機資訊學院資訊工程系碩士班學生陳吉龍, 具備自我診斷功能之高精度飛機應力監控系統, 碩士 · 112 ...


Columnist

專家

相關討論

❖ 相關文章