邊緣AI,即在嵌入式系統上執行機器學習演算法,實作本地資料處理和決策,降低延遲並提升隱私保護。本文以實務角度切入,從嵌入式系統和機器學習基礎開始,逐步引導讀者理解邊緣AI的核心概念和應用。書中涵蓋TensorFlow Lite for Microcontrollers等開發工具,並以森林火災預防、語音介面、野生動物監測等實際案例,展示如何設計、實作和測試邊緣AI解決方案。此外,本文也關注邊緣AI的倫理議題,提供風險管理框架,協助讀者開發負責任的AI應用。
邊緣AI:用嵌入式機器學習解決現實世界問題
內容簡介
邊緣AI(Edge AI)是當前科技領域中一個快速發展的新興領域,它結合了人工智慧(AI)和嵌入式系統,使裝置能夠在本地執行複雜的機器學習演算法,而無需依賴雲端運算。本文《AI at the Edge:Solving Real-World Problems with Embedded Machine Learning》由Daniel Situnayake和Jenny Plunkett共同撰寫,旨在為讀者提供一個實用且易於理解的,以探索邊緣AI的世界。
為何邊緣AI如此重要?
隨著科技的進步,我們周圍的裝置正變得越來越智慧。從語音辨識到森林火災預防,再到智慧家居控制,這些應用都得益於邊緣AI的發展。邊緣AI使得裝置能夠在本地處理資料,從而實作更快的反應速度、更好的隱私保護以及更低的延遲。
本文特色
本文不僅介紹了邊緣AI的核心概念和最新硬體、軟體工具,還提供了多個完整的例項,以幫助讀者瞭解如何設計、實作和測試邊緣AI應用。作者們透過使用現實世界的例子和簡單的語言,避免了複雜的數學和程式碼,使得本文對廣泛的讀者群體都具有可讀性,包括產品經理、行政人員、設計師以及工程師。
程式碼範例與解析
# 以下是一個簡單的神經網路範例,使用TensorFlow Lite for Microcontrollers
import tensorflow as tf
# 定義模型
model = tf.keras.models.Sequential([
tf.keras.layers.Dense(10, activation='relu', input_shape=(10,)),
tf.keras.layers.Dense(1)
])
# 編譯模型
model.compile(optimizer='adam', loss='mean_squared_error')
# 將模型轉換為TensorFlow Lite格式
converter = tf.lite.TFLiteConverter.from_keras_model(model)
tflite_model = converter.convert()
#### 內容解密:
此範例展示瞭如何使用TensorFlow建立一個簡單的神經網路模型,並將其轉換為TensorFlow Lite格式,以便於在微控制器上執行。
1. 首先,我們匯入了TensorFlow函式庫。
2. 然後,我們定義了一個包含兩個密集層的神經網路模型。
3. 接著,我們編譯了模型,指定了最佳化器和損失函式。
4. 最後,我們使用TensorFlow Lite轉換器將模型轉換為適合微控制器的格式。
這個過程展現瞭如何將複雜的機器學習模型佈署到資源有限的嵌入式裝置上。
邊緣AI系統架構
本文的價值
本文不僅提供了對邊緣AI技術的深入理解,還強調了在開發過程中需要注意的倫理問題。作者們透過豐富的經驗,為讀者提供了寶貴的建議和指導,幫助他們在開發邊緣AI應用時避免潛在的風險。
邊緣人工智慧:開啟新一代技術革命
在過去幾年中,越來越多的工程師和研究人員默默地改變了電腦與物理世界互動的方式。這項被稱為「邊緣人工智慧(edge artificial intelligence)」的技術,有望顛覆一個世紀以來的電腦歷史,並影響每個人的生活。
賦予日常物件智慧
透過微小的軟體更新,邊緣人工智慧技術能夠讓廉價、節能的處理器——已經內建於從洗碗機到溫控器等各種裝置中——具備感知和理解世界的能力。我們可以讓日常物件擁有自己的智慧,不再依賴耗費大量資料的集中式伺服器。而新一代的工具讓這項技術變得觸手可及,從高中生到野生動物保護研究人員都能輕鬆使用。
現實中的邊緣人工智慧應用
目前已經有很多邊緣人工智慧產品問世,以下是我們將在本文中介紹的一些例子:
- 預防森林火災的智慧裝置:安裝在輸電塔上,預測故障發生的可能性。
- 消防員安全佩戴裝置:透過監測熱應激和過度勞累,及時發出警示,保障消防員的安全。
- 語音使用者介面:無需網路連線,即可實作免手控技術操作。
- 野生大象監測項圈:追蹤野生大象的活動,幫助研究人員瞭解其行為模式並加以保護。
- 野生動物相機:識別特定的動物物種,協助科學家研究其行為。
這些現有的應用僅僅是邊緣人工智慧技術的冰山一角。隨著更多人學會如何運用這項技術,將會有更多解決人類各類別問題的應用出現。
本文目標
本文旨在幫助工程師、科學家、產品經理和決策者掌握邊緣人工智慧技術,運用自己的獨特視角創造成功的邊緣人工智慧產品。
學習內容
- 各種邊緣人工智慧技術的機會、限制和風險。
- 使用人工智慧和嵌入式機器學習分析和設計解決方案的框架。
- 成功開發邊緣人工智慧應用的端對端實務工作流程。
本文分為兩個部分:第一部分介紹關鍵概念,並提供設計和實作應用的實務流程;第二部分則透過三個完整的案例分析,展示如何將所學知識應用於科學、工業和消費專案中。
閱讀本文的預備知識
本文主要關注在邊緣裝置上執行的軟體開發,因此熟悉嵌入式開發的高階概念將非常有幫助。這包括資源受限的裝置,如微控制器或數位訊號處理器(DSP),以及通用裝置,如嵌入式Linux電腦。
即使您剛剛開始接觸嵌入式軟體開發,也不必擔心;我們將保持內容簡單,並在引入新主題時逐步講解。
負責任、合乎道德且有效的人工智慧
在開發任何應用程式時,最重要的部分是確保它在現實世界中正確運作。遺憾的是,人工智慧應用尤其容易受到一類別問題的影響,這些問題使它們看起來運作良好,但實際上卻在失敗——往往是以非常有害的方式。
本文的核心主題將是如何避免這類別問題。由於現代人工智慧開發是一個迭代過程,因此僅在工作流程結束時測試系統是否運作是不夠的。相反,您需要在整個過程中思考潛在的陷阱,瞭解風險所在,批判性地審查中間結果,並根據利益相關者的需求做出明智的決策。
風險管理框架
在本文中,我們將介紹一個強大的框架,幫助您理解、推理、衡量效能,並根據對人工智慧應用開發過程中可能出錯的事情的認識做出決策。這將成為我們整個開發過程的基礎,並塑造我們設計應用的方式。
這個過程從專案的一開始就非常重要。要構建有效的應用程式,瞭解某些使用案例根本不適合當前的人工智慧技術至關重要。在許多情況下,造成傷害的風險——無論是物理上、經濟上還是社會上——超過了佈署人工智慧的潛在好處。本文將教您如何識別這些風險,並在評估專案可行性時將其納入考量。
作為領域專家,我們有責任確保我們創造的技術被適當使用。沒有人比我們更適合做這件事,因此我們必須做好這項工作。本文將幫助您做出正確的決策,建立效能良好、避免傷害並造福更廣泛世界的應用程式。
本文結構與閱讀
本文並非單純的程式設計書籍或特定工具的教學手冊,因此您不會看到大量的逐行程式碼解釋或特定軟體的操作步驟。相反,您將學習如何運用通用框架來解決問題,並選擇最合適的工具完成任務。
實用範例與資源
儘管如此,本文仍會提供大量具體、可互動的範例,供您探索、修改和擴充套件。這些範例包括Git儲存函式庫、免費的線上資料集和範例訓練流程等。
許多範例將託管在Edge Impulse上,這是一個用於構建邊緣人工智慧應用的工程工具。它建立在開源技術和標準最佳實踐之上,因此即使您在不同的平台上工作,也能理解其背後的原理。
程式碼與模型的開放性
為了保證可移植性,所有機器學習管道的產出都可以從Edge Impulse以開放格式匯出,包括資料集、機器學習模型和任何訊號處理程式碼的C++實作。
結語
本文旨在為讀者提供一個全面瞭解邊緣人工智慧技術的機會,並掌握開發相關應用的關鍵技能。透過本文的學習,您將能夠以邊緣人工智慧的角度看待世界,並具備建立有效解決方案所需的工具集。
本文相關資源與聯絡資訊
本文提供了嵌入式AI領域的高階路線圖,涵蓋從底層實作到高階設計模式的廣泛內容。為了幫助讀者更深入地瞭解特定主題,本文推薦了多種進一步的學習資源。
如何聯絡作者
作者歡迎讀者透過電子郵件與他們聯絡:hello@edgeaibook.com。
本文使用的排版慣例
本文採用以下排版慣例:
- 斜體字:表示新術語、網址、電子郵件地址、檔案名稱和副檔名。
等寬字型:用於程式清單,以及在段落中參照程式元素,如變數或函式名稱、資料函式庫、資料型別、環境變數、陳述式和關鍵字。等寬粗體:顯示使用者應逐字輸入的命令或其他文字。等寬斜體字:顯示應由使用者提供的值或由上下文決定的值所取代的文字。
提示
此元素表示提示或建議。
注意
此元素表示一般性註解。
警告
此元素表示警告或注意事項。
致謝
如果沒有大量人員的辛勤工作和支援,本文是不可能完成的。我們對他們表示深深的感謝。
我們榮幸地得到了Pete Warden的序言,他不僅是該領域的遠見卓識者,而且還是個很好的人和朋友。感謝您的支援,Pete!
我們特別感謝Wiebke (Toussaint) Hutiri,她在塑造和完善本文的責任AI內容方面做出了巨大的貢獻,包括為「責任設計和AI倫理」提供了精彩的介紹。您在您的領域是一顆明星。
我們感激我們的技術審閱者和顧問,他們的智慧和洞察力對本文產生了巨大的影響。他們是Alex Elium、Aurélien Geron、Carlos Roberto Lacerda、David J. Groom、Elecia White、Fran Baker、Jen Fox、Leonardo Cavagnis、Mat Kelcey、Pete Warden、Vijay Janapa Reddi和Wiebke (Toussaint) Hutiri。此外,我們還特別感謝Benjamin Cabé允許我們介紹他的人工鼻專案。任何不準確之處均由作者全權負責。
邊緣AI簡介
歡迎閱讀本章!在本章中,我們將全面探索邊緣AI的世界。我們將定義關鍵術語,瞭解是什麼讓「邊緣AI」與其他AI不同,並探索一些最重要的應用案例。我們在本章的目標是回答以下兩個重要問題:
什麼是邊緣AI? 為什麼需要它?
定義關鍵術語
每個技術領域都有自己的術語和流行詞,邊緣AI也不例外。事實上,邊緣AI這個術語是兩個流行詞的結合,形成了一個強大的術語。它經常與其兄弟術語——嵌入式機器學習和TinyML——一起被提及。
在繼續之前,我們需要花一些時間定義這些術語,瞭解它們的含義。由於我們正在處理複合流行詞,讓我們先從最基本的組成部分開始。
嵌入式系統
什麼是「嵌入式」?根據您的背景,這可能是我們要描述的所有術語中最熟悉的一個。嵌入式系統是控制各種物理裝置電子元件的電腦,從藍牙耳機到現代汽車的引擎控制單元。嵌入式軟體是在這些系統上執行的軟體。圖1-1展示了嵌入式系統可以在哪些地方找到。
此圖示顯示了嵌入式系統在我們周圍世界的各個方面,包括家庭和工作場所。
圖表翻譯: 圖1-1展示了嵌入式系統無處不在,包括家庭和工作場所。它們控制著各種裝置,從簡單的數位手錶到複雜的智慧電視。
嵌入式系統可以很小很簡單,就像控制數位手錶的微控制器;也可以很大很複雜,就像智慧電視內的嵌入式Linux電腦。與通用電腦(如筆記型電腦或智慧型手機)不同,嵌入式系統通常用於執行某個特定的、專門的任務。
由於它們為我們的現代技術提供動力,嵌入式系統非常普遍。事實上,僅在2020年,就有超過280億個微控制器被運送——這只是嵌入式處理器的一種。它們存在於我們的家中、車輛中、工廠中和城市街道上。可以說,你永遠不會離嵌入式系統超過幾英尺。
嵌入式系統通常反映出它們所佈署的環境的約束。例如,許多嵌入式系統需要依靠電池供電,因此在設計時會考慮能源效率——也許會限制記憶體或使用極低的時脈頻率。
編寫嵌入式系統軟體是一門導航這些約束的藝術,需要在有限的資源下完成所需的任務。這可能非常困難。嵌入式系統工程師是現代世界中不被歌頌的英雄。如果您恰好是其中之一,感謝您的辛勤工作!
# 示例程式碼:簡單的嵌入式系統程式
def embedded_system_example():
# 初始化硬體
init_hardware()
# 主迴圈
while True:
# 讀取感測器資料
sensor_data = read_sensor()
# 處理資料
processed_data = process_data(sensor_data)
# 輸出結果
output_result(processed_data)
#### 內容解密:
此範例程式碼展示了一個簡單的嵌入式系統程式的基本結構。它首先初始化硬體,然後進入主迴圈,不斷讀取感測器資料、處理資料並輸出結果。這種結構反映了嵌入式系統通常需要持續運作並對外部輸入做出反應的特性。
為什麼需要邊緣AI?
邊緣AI結合了嵌入式系統和人工智慧(AI)的技術,使得在邊緣裝置上(如感測器、攝影機等)進行即時資料處理和決策成為可能。這種方法可以減少延遲、提高隱私性並降低對雲端連線的依賴。
邊緣AI的應用範圍非常廣泛,從工業自動化到消費性電子產品都有其身影。例如,在工業環境中,邊緣AI可以用於預測性維護和品質控制;在消費性電子產品中,它可以實作更智慧的個人助理和更安全的家庭監控系統。
@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle
title 嵌入式機器學習解決方案邊緣AI實踐
package "邊緣 AI 解決方案" {
package "嵌入式 ML 核心" {
component [TinyML] as tiny
component [TensorFlow Lite] as tflite
component [微控制器部署] as mcu
}
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總之,邊緣AI是現代技術的一個重要發展方向,它結合了嵌入式系統和AI的優勢,為各種應用場景提供了更高效、更智慧的解決方案。
邊緣運算與物聯網的演進
電腦網路的歷史是一場巨大的拉鋸戰。在最早的系統中,電腦龐大如房間,運算是高度集中化的。那時只有一台機器,所有的運算都由它完成。
然而,隨著終端機的出現,情況開始改變。終端機接管了一些原本由中央電腦負責的任務。雖然大部分的運算仍在中央主機進行,但一些簡單的工作,如在陰極射線管螢幕上渲染文字,已由終端機的電子裝置完成。
從集中到分散:計算的演變
隨著時間推移,終端機的功能越來越強大,接管了更多原本由中央電腦負責的工作。這個拉鋸戰就此展開。個人電腦的發明使得小型電腦即使不連線到其他機器,也能完成有用的工作。這種趨勢將運算拉到了網路的邊緣。
網際網路的發展,以及網頁應用程式和服務的興起,使得許多令人驚豔的功能得以實作——從串流影片到社交網路。這些都依賴於電腦與伺服器的連線,後者逐漸接管了越來越多的工作。在過去的十年中,我們的大部分運算再次變得集中化——這次是在「雲端」。當網際網路斷線時,我們現代的電腦就變得幾乎無用。
物聯網與邊緣裝置
然而,我們用於工作和娛樂的電腦並不是唯一的連網裝置。事實上,據估計,2021年有122億個各式各樣的裝置連線到網際網路,創造並消費資料。這個龐大的物體網路被稱為物聯網(IoT),它包含了你能想到的所有東西:工業感測器、智慧冰箱、連網安全攝影機、個人汽車、貨櫃、健身追蹤器和咖啡機。
物聯網裝置範例
- 工業感測器
- 智慧家電(如冰箱)
- 連網安全裝置
- 汽車與運輸裝置
- 健康與健身追蹤器
所有這些裝置都是嵌入式系統,包含由嵌入式軟體工程師編寫的軟體所控制的微處理器。由於它們位於網路的邊緣,我們也可以稱它們為邊緣裝置。在邊緣裝置上進行運算被稱為邊緣運算。
邊緣運算的優勢
邊緣並不是一個單一的位置;它更像是一個廣泛的區域。網路邊緣的裝置可以相互通訊,也可以與遠端伺服器通訊。甚至有一些伺服器就位於網路的邊緣。邊緣運算有著顯著的好處。首先,它是所有資料的來源!邊緣裝置是我們與物理世界之間的橋樑。它們可以使用感測器收集周圍環境的資料,無論是跑步者的心率還是冷飲的溫度。它們可以在本地對這些資料做出決策,並將其傳送到其他位置。
移動裝置是否屬於邊緣裝置?
是的,作為生活在網路邊緣的行動式電腦,手機、平板電腦電腦,甚至個人電腦都是邊緣裝置。手機曾是首批搭載邊緣AI的平台之一:現代手機將其用於許多用途,從語音啟動到智慧攝影。