邊緣AI技術的應用正逐步滲透到各種消費性產品中,從智慧寵物項圈到具備自動駕駛功能的單車,邊緣AI的普及化不僅提升了產品的智慧程度,也為使用者帶來更便捷、安全的體驗。然而,要開發真正實用且符合倫理規範的邊緣AI產品,開發者需要考量諸多因素,例如目標使用者需求、資料隱私保護、潛在的濫用風險,以及產品的社會影響等。本文將以腳踏車監測裝置的開發為例,詳細介紹如何利用加速度計等感測器收集資料,並透過Edge Impulse平台構建機器學習模型,最終實作對腳踏車騎士運動狀態的即時識別。過程中,我們將會運用Python程式語言和機器學習相關技術,並探討如何選擇合適的硬體平台、感測器型別,以及如何有效地進行資料預處理、特徵提取和模型訓練。
邊緣AI在消費性產品中的應用
隨著邊緣AI技術的進步,各種消費性產品正變得越來越智慧化,從寵物監控到智慧單車,再到兒童玩具和家電,邊緣AI正為我們的日常生活帶來更多便利和安全。
寵物監控與健康管理
作為寵物飼主,瞭解寵物的生命徵象和整體健康狀況至關重要。透過邊緣AI裝置監測寵物的生命徵象,可以及時發現其健康或行為的變化並採取適當措施。現有多種感測器可用於監測寵物的生命徵象,包括攝影機感測器和智慧水碗。此外,使用AI智慧項圈可以追蹤寵物的位置和活動水平。這些智慧寵物產品有助於減輕我們對寵物健康和福祉的焦慮,給我們帶來安心。
內容例項:智慧寵物項圈
import pandas as pd
# 模擬寵物活動資料
data = {
'activity_level': [23, 45, 12, 67, 89],
'location': ['室內', '室外', '室內', '室外', '室內']
}
df = pd.DataFrame(data)
# 簡單分析寵物活動水平
def analyze_activity(df):
average_activity = df['activity_level'].mean()
print(f"寵物的平均活動水平為:{average_activity}")
analyze_activity(df)
內容解密:
- 匯入必要的函式庫:使用
pandas來處理資料。 - 模擬寵物活動資料:建立一個包含寵物活動水平和位置的資料框架。
analyze_activity函式:計算寵物的平均活動水平並列印結果。
智慧單車監控
許多交通工具正被整合邊緣AI技術,包括單車。製造商提供多種功能,使通勤更安全、更愉快。透過感測器裝備的單車或消費者產品收集資料的潛力巨大。單車可透過各種感測器組態即時收集地形、天氣和交通狀況資料,從而更全面地瞭解地面和騎行者周圍環境的狀況。此外,單車可裝備感測器,檢測是否以不安全或非法方式騎行,如在交通中穿梭或在錯誤的一側騎行。其他感測器組合還可用於啟用自動防盜檢測,使騎行在城市中心內外都更安全。
圖表翻譯: 此圖示展示了單車感測器如何收集資料,並透過即時分析提供安全預警和交通狀況分析。
兒童玩具中的邊緣AI
互動式兒童玩具中整合邊緣AI技術主要有三類別:教學、情感回應和健康安全監測。教學玩具旨在幫助兒童學習新技能或知識,通常以教育遊戲或拼圖的形式出現。情感回應玩具設計用於與兒童互動並回應他們的情緒。安全和健康監測玩具旨在幫助保持兒童的安全和健康,例如檢測手指是否接近熱灶,或監測兒童的心率和呼吸。
家電中的邊緣AI
邊緣AI智慧家電,如冰箱,可以檢測食物何時即將用完並自動訂購更多。這類別家電還能追蹤我們的飲食習慣,提供營養攝入的洞察,甚至能完美地烹煮食物。其他智慧烹飪裝置利用電腦視覺和其他感測器輸入實作視覺尺寸估計和自動溫度控制。甚至洗衣機也在使用機器學習來識別不同型別的衣服並根據推斷結果調整洗滌和烘乾迴圈。
設計考量
為了實作設計實用、道德且易於使用的消費級邊緣AI產品的宏偉目標,我們可以使用多種資料來源,包括不同型別的感測器和攝影機(見表13-1)。
表13-1:各使用案例可使用的感測器
| 目標 | 感測器 |
|---|---|
| 單車騎行者碰撞/盜竊檢測器 | 加速度計、音訊、雷達、攝影機 |
| 寵物安撫器 | 攝影機、音訊、雷達 |
| AI智慧烤箱 | 紅外攝影機、溫度、氣體 |
| 健康監測可穿戴裝置 | 光電容積描記法(PPG)、心率、心電圖(ECG)、溫度、水/汗液水平 |
| 家庭安全與自動化 | 攝影機、音訊 |
| 機器兒童玩具 | 攝影機、音訊、加速度計、陀螺儀、雷達 |
| 自動洗衣機 | 攝影機、化學、氣體、顏色、光強度 |
邊緣AI在消費性產品中的應用與挑戰
邊緣AI技術在消費性產品中的應用日益普及,不僅為人們的生活帶來便利,也伴隨著諸多挑戰。在設計和開發過程中,必須考慮多方面的因素,包括終端使用者、主要利益相關者、潛在的惡意或不道德使用,以及資料儲存和隱私保護等問題。
設計過程中的考量
在設計過程中,必須考慮以下幾點:
- 誰是產品的終端使用者?
- 誰是產品的主要利益相關者?
- 產品如何被惡意或不道德地使用?
- 資料儲存在哪裡?推理結果是否被送回雲端平台?
- 如何讓消費者/終端使用者瞭解傳入的感測器資料如何在裝置上和雲端或透過網路連線被使用?
環境和社會影響
邊緣AI在消費性技術中的進步雖然使生活更加便利,但也帶來了一系列問題,包括對部分人群的不可及或使用受限。製造商正在努力透過設計更友好的裝置來緩解這些問題,例如為殘疾人士或老年人設計的家務輔助裝置。
減少浪費和提高可及性
公司也在努力減少技術廢棄物,透過提前提醒客戶潛在問題或維修需求,不僅有助於保持裝置良好的工作狀態,也能防止對兒童造成傷害。
以兒童和青少年為優先的檢查清單
在為消費者設計新的邊緣AI產品時,可以參考以下檢查清單(FIRST):
- 公平(Fair):倫理、偏見和責任
- 包容(Inclusive):可及性、神經差異和來自兒童/目標年齡群體的反饋
- 負責(Responsible):適合年齡和發展階段;反映最新的學習科學並根據目標年齡設計
- 安全(Safe):不造成傷害;網路安全和成癮緩解
- 透明(Transparent):能夠向新手或外行人解釋AI的工作原理和用途
腳踏車監測裝置的例項
本章節將探討如何為腳踏車監測裝置建立一個端對端的邊緣AI模型。該裝置將透過加速度計感測器收集資料,並利用機器學習模型識別腳踏車騎士的運動狀態,如“空閒”、“突然停止”和“正常”。
定義機器學習類別
表13-2展示了不同使用案例、感測器和資料輸入型別,以及對應的機器學習類別標籤。這些類別對於本章採用的機器學習演算法(如分類別和異常檢測)至關重要。
| 使用案例 | 訓練資料 | 類別標籤 |
|---|---|---|
| 檢測腳踏車碰撞 | 加速度計 | 正常、異常(或指定的“碰撞”標籤) |
| 監測來車 | 相機(帶邊界框) | 汽車、腳踏車、摩托車、其他交通物件 |
| 監測騎士盲點 | 雷達 | 正常、物體靠近騎士 |
| 聆聽汽車警示、碰撞和其他交通聲音 | 音訊 | 背景噪聲、汽車警示、汽車碰撞、汽車喇叭、人聲/尖叫 |
資料集收集
為了收集乾淨、穩健且有用的資料集,可以採用多種策略,如結合公共研究資料集、使用社群驅動的資料收集網站(如Kaggle)的現有感測器資料集,或與同事合作收集樣本。
Edge Impulse的使用
本章節將使用Edge Impulse平台來開發邊緣機器學習模型。讀者可以建立一個免費的Edge Impulse帳戶,並參考公開的Edge Impulse專案來直接克隆本章開發的模型和資料。
程式碼範例與解析
以下是一個簡單的程式碼範例,用於展示如何使用加速度計資料進行機器學習模型的訓練:
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 載入加速度計資料
data = np.load('accelerometer_data.npy')
# 定義類別標籤
labels = np.load('labels.npy')
# 分割訓練和測試資料集
X_train, X_test, y_train, y_test = train_test_split(data, labels, test_size=0.2, random_state=42)
# 初始化隨機森林分類別器
clf = RandomForestClassifier(n_estimators=100, random_state=42)
# 訓練模型
clf.fit(X_train, y_train)
# 進行預測
y_pred = clf.predict(X_test)
# 評估模型準確度
accuracy = accuracy_score(y_test, y_pred)
print(f"模型準確度:{accuracy:.2f}")
內容解密:
- 資料載入:首先載入預先收集的加速度計資料和對應的類別標籤。
- 資料分割:將資料集分割為訓練集和測試集,以便評估模型的效能。
- 模型初始化:初始化一個隨機森林分類別器,用於處理分類別任務。
- 模型訓練:使用訓練資料集對模型進行訓練。
- 預測與評估:對測試資料集進行預測,並計算模型的準確度,以評估其效能。
圖表說明
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title 邊緣AI消費性產品應用與實踐
package "邊緣 AI 消費產品" {
package "應用領域" {
component [寵物監控] as pet
component [智慧單車] as bike
component [兒童玩具] as toy
}
package "開發流程" {
component [感測器選擇] as sensor
component [Edge Impulse] as ei
component [模型訓練] as train
}
package "設計考量" {
component [倫理規範] as ethics
component [隱私保護] as privacy
component [使用者安全] as safety
}
}
sensor --> ei : 資料收集
ei --> train : 特徵提取
ethics --> privacy : 合規設計
note bottom of bike
加速度計識別
騎乘狀態
end note
collect --> clean : 原始資料
clean --> feature : 乾淨資料
feature --> select : 特徵向量
select --> tune : 基礎模型
tune --> cv : 最佳參數
cv --> eval : 訓練模型
eval --> deploy : 驗證模型
deploy --> monitor : 生產模型
note right of feature
特徵工程包含:
- 特徵選擇
- 特徵轉換
- 降維處理
end note
note right of eval
評估指標:
- 準確率/召回率
- F1 Score
- AUC-ROC
end note
@enduml圖表翻譯: 此圖示展示了從加速度計資料到邊緣裝置佈署的整個流程。首先,收集加速度計資料並進行預處理。接著,利用預處理後的資料訓練機器學習模型。訓練完成後,評估模型的效能。最後,將訓練好的模型佈署到邊緣裝置上,用於實時監測和預測。
使用Edge Impulse開發消費者腳踏車監測系統
選擇硬體與感測器
本文盡量保持對裝置的無關性,但為了建立此使用案例的解決方案,需要討論如何使用現成的、易於使用的開發套件。因此,本文旨在使硬體選擇盡可能簡單、經濟和易於取得。
Edge Impulse已經提供多種官方支援的開發平台,這些平台具備各種整合的感測器驅動程式和開源韌體。為了簡化專案和收集腳踏車騎士的加速度計資料,我們將結合使用手機與Edge Impulse手機客戶端,以及Nordic Semi Thingy:53與nRF Edge Impulse手機應用程式進行資料擷取和模型佈署。
如果沒有本章描述的特定硬體,可以參考Edge Impulse的檔案,以選擇其他合適的開發板和官方支援的感測器,以便輕鬆進行資料擷取和佈署。或者,可以使用自己的開發平台和感測器組合,並在建立裝置韌體後繼續遵循本章內容。
硬體組態
Nordic Semi Thingy:53的內建加速度計慣性測量單元(IMU)和/或手機內部的IMU將用於檢測安裝在腳踏車把手上的裝置的運動事件。
以下是一些其他感測器型別,可以用來提高消費者腳踏車監測模型的準確性:
- 陀螺儀
- 紅外線、夜視或熱成像相機
- 雷達
- 音訊
資料收集
使用Edge Impulse,有多種選項可將資料上傳並標記到專案中。下一節將討論我們在本章中用於腳踏車騎士監測使用案例的特定資料收集工具。
資料擷取韌體
要從Thingy:53擷取資料,需要按照檔案中的說明將Edge Impulse韌體燒錄到裝置上。然後,使用Edge Impulse CLI或nRF Edge Impulse手機應用程式,將裝置連線到專案並開始記錄新的加速度計資料樣本。
手機
最簡單的資料上傳方式之一是直接將手機連線到Edge Impulse專案,並從手機的整合IMU記錄加速度計資料。可以參考Edge Impulse檔案中的說明來連線手機。
nRF Edge Impulse手機應用程式
首先,下載並安裝適用於iPhone或Android手機的Nordic nRF Edge Impulse應用程式。然後,按照Edge Impulse檔案中的說明,使用Edge Impulse帳戶登入nRF Edge Impulse應用程式,並將Thingy:53連線到專案。要記錄並上傳新的資料樣本到專案中,請點選應用程式右上角的「+」按鈕。選擇感測器,輸入樣本標籤,選擇樣本長度和頻率,然後點選「開始取樣」。
清理資料集
檢閱「清理資料集」中提供的提示,然後傳回本章。由於我們以30秒(30,000毫秒)的長度記錄了氣體感測器樣本,因此我們將樣本分割成多個10秒(10,000毫秒)長的子樣本。在「資料擷取」標籤中,選擇一個樣本的三點下拉式選單,然後點選「分割樣本」。您可以從「分割樣本」檢視中擬合出三個約10,000毫秒長的子樣本;點選「+ 新增分段」按鈕以新增更多的分割區段,然後點選「分割」。
資料集授權和法律義務
請檢閱「資料集授權和法律義務」,以確定資料集的授權和法律義務。由於我們直接上傳和使用從家中和個人手機或Nordic Thingy:53裝置透過電腦的序列埠或Nordic nRF Edge Impulse手機應用程式收集的資料,因此不需要檢閱任何資料集授權或法律問題。
DSP和機器學習工作流程
現在我們已經將所有的加速度計運動樣本上傳到訓練和測試資料集中,我們需要使用數位訊號處理(DSP)方法提取原始資料中最重要的特徵,然後訓練我們的機器學習模型以識別感測器資料提取特徵中的模式。Edge Impulse將DSP和ML訓練工作流程稱為「Impulse設計」。
內容解密:
此段落主要描述了在完成資料收集後,如何使用數位訊號處理(DSP)和機器學習(ML)技術對資料進行處理和分析。首先,需要利用DSP技術從原始的加速度計資料中提取出重要的特徵。接著,利用這些提取出的特徵來訓練機器學習模型,以便識別出不同運動模式之間的差異。Edge Impulse將這一系列的工作流程稱為「Impulse設計」,它涵蓋了從原始資料到最終模型訓練的所有必要步驟。
邊緣AI專案實作:使用Edge Impulse進行機器學習佈署
在Edge Impulse專案中,「Impulse設計」標籤頁允許使用者以圖形化的方式,簡單地概覽整個端對端機器學習流程的架構。最左側為原始資料區塊,Edge Impulse Studio在此處接收並預處理資料,同時設定視窗增量和大小。若已上傳來自不同裝置、以不同頻率記錄的加速度計資料,還可以在此視窗中對時間序列資料進行降取樣或升取樣處理。
接下來是DSP(數位訊號處理)區塊,我們將透過名為「Spectral analysis」的開源數位訊號處理指令碼,提取加速度計資料中最重要的特徵。一旦生成資料特徵後,學習區塊將根據我們設定的架構和組態設定來訓練神經網路。最後,我們可以看到佈署輸出的相關資訊,包括希望訓練好的機器學習模型能夠分類別的目標類別,例如:idle、sudden stop和nominal。
設定Impulse設計
在Edge Impulse專案中,請按照以下設定組態「Impulse設計」標籤頁,或參考圖13-5的組態:
時間序列資料:
- 視窗大小:5000毫秒
- 視窗增量:250毫秒
- 頻率(Hz):62.5
- Zero-pad資料:已勾選
處理區塊:
- Spectral Analysis
學習區塊:
- 分類別(Keras)
- 異常檢測(K-Means)
完成後,點選「儲存Impulse」。
數位訊號處理區塊詳解
本專案使用了Edge Impulse Studio內建的數位訊號處理演算法——Spectral Analysis處理區塊,該區塊的程式碼可在Edge Impulse的GitHub倉函式庫「processing-blocks」中找到。使用者亦可參考「Spectral analysis」進一步瞭解該演算法的具體細節。
若您熟悉編寫自定義的數位訊號處理程式碼,或希望使用自定義的DSP區塊,請參閱「Digital Signal Processing Block」以取得更多資訊。
設定Spectral Analysis區塊時,請在導覽列中選擇「Spectral features」標籤,並按照圖13-6或以下列出的引數進行設定:
Filter:
- Scale axes:1
- Type:none
Spectral power:
- FFT長度:16
- Take log of spectrum?:已勾選
- Overlap FFT frames?:已勾選
完成後,點選「儲存引數」。為了使用Edge Impulse提供的高階異常檢測功能,請在「Generate features」視窗中勾選「Calculate feature importance」(參見圖13-7)。
接著,點選「Generate features」以檢視資料的特徵探索器和特徵重要性列表(參見圖13-8)。
機器學習區塊組態
現在,我們準備好訓練邊緣機器學習模型了!Edge Impulse提供了多種訓練模型的方式,其中最簡單的是透過視覺化(或稱網頁GUI)編輯模式進行組態。若您是機器學習工程師或專家,且熟悉使用TensorFlow/Keras進行編碼,也可以選擇在本地或Edge Impulse Studio的專家模式下編輯遷移學習區塊。
視覺化模式組態神經網路
在「Impulse設計」的導覽列中選擇「NN Classifier」標籤,即可進入預設的視覺化模式(參見圖13-9)。請按照以下設定組態神經網路分類別器的區塊設定,然後點選「Start training」:
- 訓練週期數:30
- 學習率:0.0005
- 驗證集大小:20%
- 自動平衡資料集:未勾選
- 神經網路架構:
- Dense layer(20個神經元)
- Dense layer(10個神經元)
訓練完成後,可在「Model: Last training performance」視窗中檢視遷移學習的結果(參見圖13-10)。
異常檢測
神經網路擅長模式識別,但對於新的、未見過的資料則表現不佳。這是因為它們僅在特定的資料集上進行訓練,若輸入新的資料,便無法正確分類別。有關本章使用的異常檢測技術的更多資訊,請參閱「Anomaly detection」。
在導覽列中選擇「Anomaly detection」標籤,然後點選「Select suggested axes」按鈕,以自動選擇建議的特徵重要性軸(參見圖13-11)。接著,點選「Start training」以檢視結果中的「Anomaly explorer」(如圖13-12所示)。
測試模型
有關Edge Impulse中所有模型測試功能的詳細資訊,請參閱「Testing the Model」。
即時分類別
在「Live classification」標籤頁中,您可以直接使用連線的Nordic Thingy:53測試單個測試樣本(參見圖13-13和13-14)。連線說明請參考「Data Ingestion Firmware」。或者,您也可以載入現有的測試資料集影像,以檢視該樣本提取的特徵和訓練好的模型的預測結果,如圖13-15所示。
模型測試
您也可以透過導航至專案的「Model testing」標籤,對整個測試資料集進行批次分類別。更多相關資訊,請參閱「Model Testing」。選擇「Classify all」,即可獲得訓練好的模型對測試資料集樣本的推斷結果矩陣(參見圖13-16)。
重點提示
雖然由於我們僅上傳了幾分鐘的訓練資料,模型測試結果並不理想,但隨著上傳資料量的增加,模型的實境表現也會更好。有關如何改進模型並使其達到可投入實際應用的狀態,請參考第9章的內容。
# 以下是一個簡單的神經網路範例程式碼,用於展示基本的模型訓練流程
import tensorflow as tf
from tensorflow.keras.models import Sequential
from tensorflow.keras.layers import Dense
# 定義模型架構
model = Sequential([
Dense(20, activation='relu', input_shape=(input_shape,)),
Dense(10, activation='relu'),
Dense(num_classes, activation='softmax')
])
# 編譯模型
model.compile(optimizer='adam',
loss='categorical_crossentropy',
metrics=['accuracy'])
# 訓練模型
model.fit(X_train, y_train, epochs=30, validation_split=0.2)
程式碼解析:
- 匯入必要的函式庫:使用TensorFlow及其Keras API來構建神經網路模型。
- 定義模型架構:建立一個包含兩個隱藏層(分別具有20和10個神經元)的Sequential模型,並使用ReLU作為啟用函式。
- 編譯模型:選擇Adam最佳化器和交叉熵損失函式,並監控模型的準確率。
- 訓練模型:使用訓練資料對模型進行30個週期的訓練,並保留20%的資料作為驗證集。