嵌入式系統(tǒng)中AI和ML的實際應用
譯自:https://blogs.windriver.com/wind_river_blog
/2020/01/practical-applications-for-ai-and-ml-in-embedded-systems/
基本背景
嵌入式開發(fā)往往是由部署高度優(yōu)化和高效的系統(tǒng)需求所驅(qū)動。
人工智能通過采用解決復雜問題的新方法對現(xiàn)有業(yè)務或現(xiàn)有工作類型的革命而顛覆世界。無論您是否真正了解這種顛覆性革新所帶來價值,以及如何將其應用到您的市場中,還是想弄清楚如何利用這項技術,對人工智能及其潛在應用的做一些基本了解已迫在眉睫。了解其潛在的應用必將成為您戰(zhàn)略規(guī)劃過程的關鍵一環(huán)。
盡管已進行了大肆宣傳,但令人震驚的是,人們認為人工智能似乎是無所不能的魔術棒。然而魔術師們卻僅僅能使用很小的一部分魔術技能以解決現(xiàn)實中的問題。這種反差引起人們強烈關注的一個領域是如何將人工智能應用于嵌入式系統(tǒng),重點是如何在這些更受限的環(huán)境中部署人工智能應用。
定義和基本原理
為確保我們能有基本共識,讓我們從不同技術及其對計算要求的基本背景開始介紹。
人工智能是一門計算機科學學科,致力于研究如何使用計算機來模仿人類智能。自20世紀計算機技術問世以來,人工智能就已經(jīng)存在了,當時諸如Alan Turing之類的先驅(qū)者預見了計算機以人類可能以類似的方式解決問題的可能性。
經(jīng)典的計算機編程通過在代碼中顯式編碼算法來解決問題,指導計算機執(zhí)行邏輯來處理數(shù)據(jù)并計算輸出。相比之下,機器學習(ML)是一種AI方法,旨在尋找數(shù)據(jù)模型,并根據(jù)數(shù)據(jù)進行有效學習。有很多方法可以實現(xiàn),包括預標記數(shù)據(jù)(或不標記數(shù)據(jù)),指導算法開發(fā)的強化學習,通過統(tǒng)計分析(或其他方法)提取特征,然后根據(jù)經(jīng)過訓練的數(shù)據(jù)集對輸入數(shù)據(jù)進行分類,從而確定具有指定置信度的輸出。
深度學習(DL)是ML的子集,它使用多層神經(jīng)網(wǎng)絡從迭代的大型數(shù)據(jù)集中訓練模型。訓練后,模型可以查看新數(shù)據(jù)集以推斷出新數(shù)據(jù)。這種方法最近引起了很多關注,并已應用于各種問題,如圖像處理和語音識別或金融資產(chǎn)建模。我們認為這種方法也對未來的關鍵基礎架構和設備產(chǎn)生重大影響。
在嵌入式系統(tǒng)中應用ML/DL
由于創(chuàng)建精確模型所需的大量數(shù)據(jù)集以及訓練模型所需的大量計算能力,因此通常在云或高性能計算環(huán)境中進行訓練。相反,推論通常應用于靠近數(shù)據(jù)源的設備中。盡管分布式訓練或邊緣訓練是一個非常令人感興趣的話題,但它并不是當今大多數(shù)ML系統(tǒng)的部署方式。為了簡單起見,我們假設訓練是在云端進行的,而推理將在邊緣或設備內(nèi)進行。
如前所述,機器學習和深度學習是以數(shù)據(jù)為中心的學科。因此,創(chuàng)建和訓練模型需要訪問大型數(shù)據(jù)集以及為數(shù)據(jù)操作提供豐富環(huán)境的工具和環(huán)境。使用了簡化數(shù)據(jù)處理,實現(xiàn)復雜的數(shù)學庫和統(tǒng)計分析的框架和語言。這些通常是諸如Python之類的語言框架,然后在其上構建ML框架。有很多這樣的框架,一些常見的框架包括TensorFlow,Caffe或PyTorch。
機器學習框架可用于模型開發(fā)和訓練,也可用于在邊緣使用經(jīng)過訓練的模型來運行推理引擎。因此,一種簡單的部署方案是在設備中部署諸如TensorFlow的框架。由于它們需要豐富的運行時環(huán)境(例如Python),因此它們最適合Linux上的通用計算工作負載。由于需要在移動設備上運行機器學習,我們看到許多輕量級的推理引擎(TensorFlow Lite,PyTorch mobile)已經(jīng)開始開發(fā),需要較少的資源,但是這些引擎相較于其全功能版本仍然尚未廣泛使用或還不成熟。
不需要完整的ML框架就可以解釋和運行某些模型。例如,包含深層/卷積神經(jīng)網(wǎng)絡(DNN / CNN)庫的計算機視覺框架OpenCV可以從TensorFlow和其他框架中讀取模型。OpenCV和DNN庫可在許多不支持更復雜或功能齊全的ML框架的緊湊型操作環(huán)境中使用,因此第二個部署選項是使用諸如OpenCV的框架部署推理引擎。
機器學習是高度計算密集型的,早期部署(例如在自動駕駛汽車中)依賴于專門的硬件加速器,例如GPU,F(xiàn)PGA或?qū)iT的神經(jīng)網(wǎng)絡。隨著這些加速器在SoC中變得越來越普遍,我們可以預期看到高效的引擎在受限設備中運行機器學習模型。發(fā)生這種情況時,另一個部署選項是編譯經(jīng)過訓練的模型,以在DNN加速器上進行優(yōu)化部署。一些這樣的工具已經(jīng)存在,并且需要現(xiàn)代的編譯器框架(例如LLVM)以模型前端和硬件加速器后端為目標。
對嵌入式開發(fā)的影響
嵌入式開發(fā)通常是由部署高度優(yōu)化和高效的系統(tǒng)的需求所驅(qū)動。經(jīng)典的開發(fā)方法是從非常受限的硬件和軟件環(huán)境開始,并僅在需要時才添加功能。這是RTOS應用程序的典型應用。
隨著技術的日新月異,我們看到開發(fā)方法首先要使復雜的系統(tǒng)工作,然后在以后的階段進行優(yōu)化以進行部署。與軟件的許多重大進步一樣,開源社區(qū)是機器學習中創(chuàng)新步伐和規(guī)模的重要推動引擎。包含在開源中并通常從Linux開發(fā)開始的工具和框架正在迅速成為主要的創(chuàng)新途徑。因此,同時使用實時操作系統(tǒng)(RTOS)和Linux或?qū)㈤_源從Linux遷移到RTOS是必須得到支持的重要開發(fā)旅程。
無論公司是剛剛起步還是準備部署優(yōu)化的機器學習解決方案,他們都必須構建基礎技術和豐富的開發(fā)環(huán)境來抽象化復雜性并啟用異構運行時環(huán)境。
—END—
如果喜歡右下點個在看,也會讓我倍感鼓舞
關注置頂:掃描左下二維碼關注公眾號加星
關注 |
加群 |
免責聲明:本文內(nèi)容由21ic獲得授權后發(fā)布,版權歸原作者所有,本平臺僅提供信息存儲服務。文章僅代表作者個人觀點,不代表本平臺立場,如有問題,請聯(lián)系我們,謝謝!