在我之前的博客中,我談到了對基于 AI 的界面的需求如何變得幾乎不可避免——并且添加一個基于 AI 的界面(如 face-id)來授權對機器的訪問,乍一看似乎是一個巨大的飛躍,但實際上并非如此有你想象的那么困難。有大量可用的 AI 平臺、大量培訓選項甚至開源應用程序,例如face-id 示例。您可以使用可以在 PC 上運行的原型快速啟動和測試。
約束
將訓練有素的網絡遷移到您的嵌入式應用程序似乎是另一個巨大的障礙。PC 或云訓練的網絡并沒有針對內存使用或功耗進行太多優化。他們可能會使用浮點數或雙字進行網絡計算,并且在處理圖像上的滑動窗口時會嚴重依賴片外內存訪問。對于在插入墻上電源的高性能 PC 上運行的原型來說,這不是問題,但您需要在最終應用程序中更加節儉,同時不影響性能。
優化的要點
優化的一個關鍵步驟稱為量化。將權重從浮點切換到定點并減小定點大小,例如從 32 位浮點到 8 位整數,不僅會影響權重的大小,還會影響中間計算值。僅此一項就可以顯著減少內存占用,在大多數情況下對識別質量幾乎沒有明顯影響。
第二個操作是利用權重的稀疏性,對準確性的影響最小。這種做法將利用接近零的權重,并將它們四舍五入為零,同時密切跟蹤準確性影響。權重用于乘以部分和,當其中一個因素為零時,這是沒有意義的練習,因此無需執行操作。
在實際實現中,圖像是增量處理的,因此當計算窗口在圖像上移動時必須更新權重。這可以帶來很多更新和大量流量。通過強制大部分權重為零,可以壓縮權重數組,從而可以將所有或大部分數組存儲在片上 SRAM 中,以便按需解壓縮。這反過來又最大限度地減少了訪問主存儲器的需要,從而提高了性能并降低了功耗。它還偶然減少了加載重量時的片上流量。更少的流量爭用意味著更高的吞吐量。
還應考慮一個因素。像大多數復雜的應用程序一樣,神經網絡依賴于復雜的庫。您需要使用專為在微控制器環境中使用而設計的庫,并將編譯器用于您選擇的平臺。一個好的起點可能是開源庫,例如TensorFlow Lite,但要充分利用微控制器,就需要專門定制的解決方案。
當然,知道你必須做什么并不容易。您現在需要找到一個能夠簡化這些操作并提供硬件優化庫的平臺。
我如何使它成為一個易于使用的流程?
您想要的是一個流程,您可以在其中使用您在特定平臺(例如 TensorFlow)上訓練的網絡,并將其直接編譯到您的嵌入式解決方案中——除了撥打一些基本要求外,無需干預。當然,您還希望該選項能夠進一步手動優化,可能在不同的平面上設置不同的量化級別。也許可以嘗試權重閾值與片上內存大小。您需要針對硬件優化的庫和針對庫優化的硬件。
CEVA 的CDNN等經過驗證的 AI 平臺旨在提供這種類型的流程。CDNN 為量化和運行時任務生成提供離線處理器工具集,以及為 CEVA DSP 和客戶用戶硬件加速器定制的運行時庫。CEVA 的解決方案支持所有流行的 AI 模型格式,包括 TensorFlow Lite、ONNX、Caffe 等。
審核編輯 黃昊宇
-
嵌入式
+關注
關注
5087文章
19148瀏覽量
306186 -
AI
+關注
關注
87文章
31155瀏覽量
269494
發布評論請先 登錄
相關推薦
評論