隨著物聯網和邊緣計算的興起,如何在資源受限的邊緣裝置上佈署機器學習模型成為一個關鍵挑戰。本文以食品品質保證為例,示範如何利用 Edge Impulse 平台簡化模型訓練和佈署流程,並將其應用於 Arduino Nicla Sense ME 等微控制器平台。透過感測器資料採集、特徵工程、模型訓練、以及最終的佈署和測試,我們將逐步展示如何構建一個完整的邊緣 AI 應用。
#include <Arduino_Nicla_Sense_ME.h>
Nicla_Sense_ME niclaSenseME;
void setup() {
Serial.begin(115200);
niclaSenseME.begin();
}
void loop() {
float gasData = niclaSenseME.readGas();
// ... (Edge Impulse 產生的推論程式碼) ...
delay(1000);
}
將資料上傳至 Edge Impulse
既然我們已經將資料擷取草圖上傳到 Nicla Sense 板上,接下來就需要使用 Edge Impulse CLI(edge-impulse-data-forwarder)將裝置連線到 Edge Impulse 專案,並從電腦的串列埠擷取資料(參見範例 12-3)。
連線 Nicla Sense 到 Edge Impulse 專案
$ edge-impulse-data-forwarder
Edge Impulse data forwarder v1.16.0
Endpoints:
Websocket: wss://remote-mgmt.edgeimpulse.com
API: https://studio.edgeimpulse.com
Ingestion: https://ingestion.edgeimpulse.com
? Which device do you want to connect to? /dev/tty.usbmodemE53378312 (Arduino)
[SER] Connecting to /dev/tty.usbmodemE53378312
[SER] Serial is connected (E5:33:78:31)
[WS ] Connecting to wss://remote-mgmt.edgeimpulse.com
[WS ] Connected to wss://remote-mgmt.edgeimpulse.com
? To which project do you want to connect this device?
AI at the Edge / Use Case: Food Quality Assuran [SER] Detecting data frequency...
[SER] Detected data frequency: 10Hz
? 1 sensor axes detected (example values: [9513]). What do you want to call them?
Separate the names with ',': gas
? What name do you want to give this device? Nicla Sense
[WS ] Device "Nicla Sense" is now connected to project "Use Case: Food Quality Assurance"
[WS ] Go to https://studio.edgeimpulse.com/studio/115652/acquisition/training to build your machine learning model!
內容解密:
此段落程式碼是用於將 Nicla Sense 裝置連線到 Edge Impulse 專案。首先,執行 edge-impulse-data-forwarder 命令,然後選擇要連線的裝置,並輸入裝置名稱。Edge Impulse 將自動檢測資料頻率並設定感測器軸的名稱。
現在,將 Nicla Sense ME 放置在接近腐敗或新鮮的食物(例如鮭魚)的地方,或放置在室內環境中。然後,在專案的「Data acquisition」標籤下,設定以下引數並點選「Start sampling」:
- Label:spoiled、purchase_date 或 ambient
- Sample length (ms):1200000
- Sensor:Sensor with 1 axes (gas)
- Frequency:10Hz
自動取樣與瀏覽器自動化
您可以使用瀏覽器的開發者工具控制檯中的 JavaScript 程式碼來自動點選「Start sampling」按鈕:
const delay = ms => new Promise(res => setTimeout(res, ms));
while(1) {
document.getElementById("input-start-sampling").click();
await delay(1320000);
};
內容解密:
此 JavaScript 程式碼用於自動化點選「Start sampling」按鈕。每 22 分鐘(1320000 毫秒)點選一次按鈕,以自動化資料擷取過程。
清理資料集
檢視「Cleaning Your Dataset」中的提示,然後傳回本章節。由於我們記錄的氣體感測器樣本長度為 20 分鐘,因此需要將樣本分割成多個子樣本,每個子樣本的長度為 30,000 毫秒。從「Data acquisition」標籤下,選擇一個樣本的三點下拉式選單,然後點選「Split sample」。
資料集授權和法律義務
檢視「Dataset Licensing and Legal Obligations」以確定資料集的授權和法律義務。由於我們直接上傳和使用從 Nicla Sense 裝置收集的資料,因此不需要檢視資料集授權和法律義務。
DSP 和機器學習工作流程
現在,我們已經將所有影像上傳到訓練和測試資料集中,需要使用數位訊號處理(DSP)方法提取原始資料中最重要的特徵,然後訓練機器學習模型以識別感測器資料中提取的特徵中的模式。Edge Impulse 稱此 DSP 和 ML 訓練工作流程為「Impulse design」。
在 Edge Impulse 專案中,設定「Impulse design」標籤下的引數如下:
- Time series data:
- Window size:10000 ms
- Window increase:500 ms
- Frequency (Hz):10
- Zero-pad data:Checked [x]
- Processing block:Flatten
- Learning block:Classification (Keras)
數位訊號處理區塊
對於本章節的專案,我們將使用 Edge Impulse Studio 中預設的數位訊號處理演算法,即 Flatten 處理區塊。可以從 Edge Impulse GitHub 儲存函式庫中的「processing-blocks」中找到 Flatten 區塊的程式碼。
設定 Flatten 區塊的引數如下:
- Scaling:Scale axes:0.001
- Method:
- Average:checked [x]
- Minimum:checked [x]
- Maximum:checked [x]
- Root-mean square:checked [x]
- Standard deviation:checked [x]
- Skewness:unchecked [ ]
- Kurtosis:unchecked [ ]
然後,點選「Generate features」以檢視資料的特徵探索器。
此圖示顯示了 DSP 和機器學習工作流程的組態。
圖表翻譯: 此圖示呈現了在 Edge Impulse 中設定 DSP 和機器學習工作流程的步驟,包括設定時間序列資料、處理區塊和學習區塊的引數。
機器學習模型訓練與佈署實戰
在 Edge Impulse 平台上進行機器學習模型的訓練與佈署是一項重要的任務。本篇文章將詳細介紹如何使用 Edge Impulse 進行模型的訓練、測試和佈署。
訓練模型
Edge Impulse 提供了多種方式來訓練機器學習模型,其中最簡單的方式是使用視覺化編輯模式。若您是機器學習工程師或熟悉 TensorFlow/Keras,則可以使用專業模式進行本地或遠端編輯。
視覺化模式
- 設定神經網路架構:在「Impulse design」下選擇「NN Classifier」標籤,進入預設的視覺化模式。
- 組態訓練引數:
- 訓練週期數:50
- 學習率:0.0005
- 驗證集大小:20%
- 自動平衡資料集:未勾選
- 神經網路架構:
- Dense layer (8 神經元)
- Dense layer (4 神經元)
- Flatten layer
專業模式
若您熟悉 TensorFlow/Keras 程式碼,可以使用 Edge Impulse 的專業模式上傳自有程式碼或編輯現有區塊程式碼。
測試模型
即時分類別
- 連線裝置:將 Arduino Nicla Sense ME 連線到 Edge Impulse。
- 測試樣本:在「Live classification」標籤下測試個別測試樣本,或載入現有的測試資料集圖片。
模型測試
- 批次分類別:在「Model testing」標籤下對測試資料集進行批次分類別。
- 檢視結果:取得模型在測試資料集上的推斷結果矩陣。
佈署模型
完成模型的訓練與測試後,需要將模型佈署到邊緣裝置上。Edge Impulse 提供了多種佈署選項,包括預建二進位檔燒錄和 C++ 函式庫整合。
預建二進位檔燒錄
- 選擇開發平台:在「Deployment」標籤下選擇支援的開發平台。
- 建置韌體:選擇建置並下載韌體,或直接燒錄到裝置上。
Arduino 函式庫佈署
- 選擇 Arduino 函式庫:在「Deployment」標籤下選擇 Arduino 函式庫佈署選項。
- 匯入函式庫:將下載的 Arduino 函式庫 ZIP 檔案匯入 Arduino IDE。
- 開啟範例程式碼:開啟 Edge Impulse Arduino 函式庫中的 Nicla Sense 範例。
- 編譯與燒錄:使用 Arduino IDE 或 Arduino CLI 編譯並燒錄到 Nicla Sense 裝置上。
$ cd nicla_sense_fusion
$ arduino-cli compile --fqbn arduino:mbed_nicla:nicla_sense --output-dir . --verbose
$ arduino-cli upload --fqbn arduino:mbed_nicla:nicla_sense --input-dir . --verbose
檢視推斷結果
在串列終端機上以波特率 115,200 檢視食物品質保證模型在 Arduino Nicla Sense ME 上執行的推斷結果。
食品品質保證中的邊緣AI應用:從理論到實踐
隨著科技的進步,食品品質保證正經歷著一場革命。邊緣AI(Edge AI)技術的引入,使得食品品質監控變得更加精準和高效。本篇文章將探討邊緣AI在食品品質保證中的應用,並透過具體案例分析其潛力。
邊緣AI與食品品質保證
邊緣AI是指將人工智慧技術佈署在邊緣裝置上,如感測器、攝影機等,以實作即時資料處理和分析。在食品品質保證中,邊緣AI可以透過分析感測器資料,預測食品的新鮮度、檢測過敏原,甚至控制烹飪過程。
案例研究:Arduino Nicla Sense ME與Edge Impulse
本案例使用Arduino Nicla Sense ME開發板和Edge Impulse平台,構建了一個簡單的食品品質保證模型。首先,透過收集不同食品的氣味資料,建立了一個機器學習模型。然後,將模型佈署到開發板上,實作了即時食品品質監測。
// 初始化氣味感測器
#include <Arduino_Nicla_Sense_ME.h>
Nicla_Sense_ME niclaSenseME;
void setup() {
// 初始化串列通訊
Serial.begin(9600);
// 初始化氣味感測器
niclaSenseME.begin();
}
void loop() {
// 讀取氣味資料
float gasData = niclaSenseME.readGas();
// 將資料送入模型進行推斷
float result = inferencing(gasData);
// 輸出結果
Serial.println(result);
delay(1000);
}
內容解密:
初始化氣味感測器:使用
Arduino_Nicla_Sense_ME函式庫初始化氣味感測器。讀取氣味資料:透過
readGas()函式讀取氣味感測器的資料。模型推斷:將氣味資料送入機器學習模型進行推斷,得到食品品質的評估結果。
輸出結果:將推斷結果輸出到串列監視器。
多樣化機器學習類別:增加更多食品類別的訓練資料,以提高模型的泛化能力。
裝置改進:設計專用裝置,避免食物汙染物影響氣味感測器的讀數。
多維度感測器融合:結合溫度、濕度等多維度資料,提高食品品質監測的準確性。
深度解析:完美吐司機
Shawn Hymel的完美吐司機是一個典型的邊緣AI應用案例。透過氣味感測器和機器學習模型,吐司機能夠精確控制烤吐司的過程,製作出完美的吐司。這一案例展示了邊緣AI在智慧家電中的巨大潛力。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title Edge Impulse 機器學習模型訓練與佈署
package "機器學習流程" {
package "資料處理" {
component [資料收集] as collect
component [資料清洗] as clean
component [特徵工程] as feature
}
package "模型訓練" {
component [模型選擇] as select
component [超參數調優] as tune
component [交叉驗證] as cv
}
package "評估部署" {
component [模型評估] as eval
component [模型部署] as deploy
component [監控維護] as monitor
}
}
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
圖表翻譯: 此圖示展示了完美吐司機的工作流程。氣味感測器收集資料,微控制器進行處理後送入機器學習模型,最終控制烤吐司過程以製作出完美吐司。
相關研究與資源
- Banús, Núria et al. “Deep Learning for the Quality Control of Thermoforming Food Packages”. Scientific Reports, 2021.
- Gerina, Federica et al. “Recognition of Cooking Activities Through Air Quality Sensor Data for Supporting Food Journaling”. SpringerOpen, 2020.
- Hassoun, Abdo et al. “Food Quality 4.0: From Traditional Approaches to Digitalized Automated Analysis”. Journal of Food Engineering, 2023.
這些研究和資源為我們深入瞭解邊緣AI在食品品質保證中的應用提供了寶貴的參考。未來,我們期待看到更多創新性的應用和突破。
第十三章:消費者產品的邊緣機器學習應使用案例項
邊緣機器學習技術在消費電子產品中的應用,使裝置能夠根據本地資料進行決策,而無需將資料傳輸到雲端。這不僅節省了時間和頻寬,也保護了敏感資料的隱私。邊緣機器學習還可用於實作諸如面部識別、物體檢測、語音識別和感測器分類別等導向消費者的功能。透過在將資料傳送到雲端之前,在裝置上分析和識別消費者資料的模式,產品能夠快速適應使用者的需求,例如顯示所需的產品使用方式、向使用者提供自定義警示等。
藉由使用邊緣人工智慧(Edge AI),消費產品可以整合並利用搭載的感測器資料,實作幾乎無限的應用場景。例如,腳踏車可以分析騎行者的周圍環境,以取得交通資訊和環境資料,從而影響騎行品質;智慧冰箱可以自動檢測產品是否即將用完,並將其新增到購物清單中。在本章中,我們將探討使用邊緣人工智慧於消費產品的各種方法、相關的感測器和裝置組態,並探討我們所選擇的方法和應使用案例項。
問題探索
許多消費科技產品已經持續連線到網際網路,如智慧家居裝置、安全攝影機、可穿戴裝置、自動駕駛汽車和無人機。這些裝置需要處理大量資料,或將這些資料傳輸到雲端平台進行遠端處理。邊緣機器學習使這些消費產品能夠快速回應環境變化,直接在裝置上處理大量的感測器資料,而無需將其傳輸到雲端,這通常需要耗費大量時間、電池電量和頻寬。
應用本文所學的技術,為終端消費電子產品開發邊緣機器學習模型是一項非常廣泛的任務。為了縮小我們的關注範圍,我們將討論多個總體目標,然後探討其中一個目標的實作。例如,一個總體消費目標是開發能夠以某種方式安撫寵物的產品。從目標上看,我們既可以開發一個分析寵物水碗的機器學習模型,在水即將耗盡時提醒人類,也可以將裝置整合到寵物的項圈中,檢測特定型別的痛苦聲音或噪音,然後提供安撫回饋。這兩種方法都能實作安撫寵物的目標,但每種方法可能需要不同的機器學習類別和感測器輸入組合來解決。
目標設定
隨著世界的進化,使用邊緣人工智慧技術創造有用且高效的消費產品變得越來越重要。消費者將開始期待他們的科技產品變得越來越聰明,但同時不侵犯他們的資料隱私權。消費產品幾乎有無限的選項,可以將其搭載的感測器資料與邊緣機器學習模型整合。透過將這些搭載感測器所獲得的智慧帶到邊緣人工智慧,消費產品可以實作更好的整體效能、更長的電池壽命(取決於應用場景),以及整體上提高終端使用者滿意度和使用者友好度/可及性。
解決方案設計
在本章中,我們選擇設計並實作一個低成本、高效且易於訓練的邊緣人工智慧模型,用於與腳踏車騎行監測裝置相關的消費產品應用案例,該裝置搭載了加速度計感測器。然而,用於檢測危險和監測腳踏車騎行者安全的邊緣人工智慧模型並不僅限於使用加速度計。透過使用本章和整本文中介紹的原理和設計工作流程,可以為腳踏車騎行監測裝置實作許多其他型別的機器學習模型和應用,包括使用攝影機影像輸入來監測周圍環境資訊和潛在碰撞/交通事故,透過輸入音訊訊號資料來識別碰撞等。
現有的解決方案
市場上已經存在大量智慧型、採用邊緣人工智慧的消費產品,或已從原型設計階段發布。像June烤箱和海爾Series 6這樣的智慧廚房電器配備了人工智慧技術,可以幫助使用者完成從餐食規劃到清潔等各項任務。全球的手機使用者透過人工智慧可穿戴裝置,如Apple Watch、三星智慧手錶或Fitbit,被鎖定在其硬體供應商的生態系統中。
健康裝置正越來越多地為終端使用者開發;Oura戒指配備了感測器,可以追蹤使用者的睡眠、活動和整體健康狀況,讓使用者更好地瞭解他們的日常習慣。許多消費科技產品的未來將包括搭載感測器和實時邊緣人工智慧推斷的整合,這不僅提高了這些產品的效能,也提高了它們對終端消費者的實用性和吸引力,同時降低了它們的能耗。
解決方案設計方法
我們可以透過多種不同的方法來設計解決方案,以下是其中幾種方法的描述:
- 寵物安撫器與監測器
import numpy as np
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import accuracy_score
# 模擬感測器資料
np.random.seed(0)
sensor_data = np.random.rand(100, 5)
# 模擬標籤資料
labels = np.random.randint(2, size=100)
# 分割訓練集和測試集
X_train, X_test, y_train, y_test = train_test_split(sensor_data, labels, test_size=0.2, random_state=42)
# 建立隨機森林分類別器
clf = RandomForestClassifier(n_estimators=100)
# 訓練模型
clf.fit(X_train, y_train)
# 預測測試集
y_pred = clf.predict(X_test)
# 評估模型準確率
accuracy = accuracy_score(y_test, y_pred)
print(f"模型準確率:{accuracy:.2f}")
內容解密:
- 匯入必要的函式庫:首先匯入
numpy用於數值運算,train_test_split用於分割資料集,RandomForestClassifier用於建立隨機森林分類別模型,以及accuracy_score用於評估模型效能。 - 模擬感測器資料:使用
np.random.rand生成100個樣本,每個樣本有5個特徵,模擬來自感測器的輸入資料。 - 模擬標籤資料:生成100個二元標籤(0或1),代表不同的狀態或類別。
- 分割訓練集和測試集:使用
train_test_split將資料集分為訓練集(80個樣本)和測試集(20個樣本)。 - 建立隨機森林分類別器:初始化一個具有100棵樹的隨機森林分類別器。
- 訓練模型:使用訓練集對模型進行訓練。
- 預測測試集:使用訓練好的模型對測試集進行預測。
- 評估模型準確率:透過比較預測結果與實際標籤,使用
accuracy_score計算模型的準確率,並列印出來。
此範例程式碼展示瞭如何使用機器學習技術處理感測器資料並進行分類別,對於開發與感測器相關的應用具有參考價值。