TinyML一書早期釋出版本閱讀心得

前幾篇文章提到TensorFlow Lite for Microcontrollers技術的相關實作,歐萊禮(O’Reilly)將要出版一本TinyML: Machine Learning with TensorFlow on Arduino, and Ultra-Low Power Micro-Controllers書籍來描述這方面的內容。目前在該網站有釋出這本書的早期版本內容

總共有六個章節。可註冊十天試讀來閱讀其早期版本內容。本次就分享閱讀後心得,筆記檔案可由此處下載;此外作者的部落格在此:https://petewarden.com/

Chapter 1. Introduction(簡介)最主要是一些介紹內容,基本上要有修改程式碼與在終端機下命令的基本技能才能繼續進行本書後續章節。摘要整理於下:

  • Tiny ML的定義是低於1毫瓦,這意味著我們必須從嵌入式設備的世界中尋找我們的硬體平台
  • 現在以邁出了一大步,Arduino推出了對使用者友好的IDE以及標準化硬體,從那時起32位元的MCU成為標準,這主要歸功於Arm的Cortex-M系列晶片
  • 本書的目標是展示對於使用命令列終端機和程式碼編輯器具有基本經驗的開發人員如何開始構建他們自己的專案,並於這些設備上執行機器學習功能

Chapter 2. Getting Started(入門)說明相關技能與軟硬體需求。摘要整理於下:

  • 要構建一個Tiny ML項目,您需要了解機器學習和嵌入式軟體開發。這些都不是常用技能,很少有人都是這兩方面的專家,所以本書將首先假設你沒有任何背景
  • 唯一的要求是您在終端機(或Windows上的命令提示字元)中執行一些熟悉的命令,並且能夠將程式原始碼加載到編輯器中,進行更改並儲存
  • 需要一台帶USB埠的筆記本電腦或桌上型電腦。這將是您的主要程式開發的環境,您可於其中編輯和編譯在嵌入式設備上執行的程式
  • 主機可以運行Windows,Linux或MacOS,我們將測試這些作業系統並提供相關指示
  • 我們將在這台電腦上訓練一些機器學習模型,因此該電腦執行速度較快是有幫助的。但不一定要有GPU,因為我們使用的所有模型都相對較小,即使在CPU上也能快速訓練
  • 晶片製造商Ambiq和製造商零售商SparkFun合作生產[$ 15 SparkFun Edge板](https://www.sparkfun.com/products/15170
  • 本書中的所有專案都基於TensorFlow Lite for Microcontrollers框架

Chapter 3. Get Up to Speed on Machine Learning(快速掌握機器學習),這部份是快速帶過機器學習的相關內容,並用一個案例說明深度學習工作流程;若有學習過相關課程者可快速帶過這部份。摘要整理於下:

  • 機器學習實際上是什麼
    • 從根本上說,機器學習是一種利用電腦,根據過去的觀察來預測事物的技術
    • 為了創建機器學習程序,我們將資料提供給一種特殊的演算法,並讓演算法發現規則
  • 使用機器學習的工作流程
  • 如何訓練和執行一個簡單的模型
  • 如何將模型轉換為在微控制器上執行

Chapter 4. TensorFlow Lite for Microcontrollers(用於微控制器的TensorFlow Lite)這應該是這本書中最技術面的章節,內容相對較多。閱讀本章內容也需要一邊確認GitHub上的程式碼,此外,相關內容已有中譯(簡中)可供參照,請確認這個網頁:https://mp.weixin.qq.com/s/6_yZPlKLYiWBRQFk5Y1OKA 。摘要整理於下:

  • 我們知道在嵌入式環境中執行會對我們編寫程式碼的方式施加很多限制,因此我們確定了程式庫的一些關鍵要求:
    • 沒有操作系統依賴性
    • 連結(link)時並沒有依賴於標準的C或C++程式庫
    • 預期沒有硬體浮點運算
    • 沒有動態記憶體分配
  • 為了共享程式碼和維護與移動TensorFlow Lite的相容性的約束:
    • C++11,TensorFlow Lite主要是用C++編寫的
    • 32-bit,我們決定將我們的開發重點放在較新的32位元的設備上

Chapter 5. Optimizing Latency(優化延遲)主要是在討論最佳化的部份;也有提到如何進行硬體加速的部份,若有開發這方面功能的設計者可參考本章內容,以便讓硬體加速與TensorFlow Lite搭配。摘要整理於下:

  • 因為我們感興趣的系統通常是在傳感器資料流上即時運行,所以運行速度太慢會導致很多問題
  • 您的神經網絡程式碼可能是整個系統延遲的一小部分,加速它可能不會對您的產品性能產生很大影響
  • 如果您確實需要加速神經網絡程式碼,那麼首先要問的問題是您是否能夠使用功能更強大的硬體設備?
  • 如果您可以創建一個足夠準確但計算量較少的新模型,則可以加快推論速度,而無需進行任何程式碼更改
  • 神經網絡具有很好的特性,它們往往會非常優雅地降級,因此您應該隨意嘗試許多不同的破壞性變化,並觀察它們對準確性和延遲的影響
  • 還建議您確保在TensorFlow中使用八位元量化訓練和部署模型
  • 鼓勵您盡可能延遲程式碼最佳化

Chapter 6. Is My Problem Feasible?(我的問題是否可行?)這章是在說明TinyML能做什麼或不能做什麼,以及一些原型設計的討論。摘要整理於下:

  • 您需要回答的第一個問題是,您是否需要嵌入式系統的優勢,或者您是否可以放寬對電池壽命,成本和尺寸的要求,至少對於初始原型而言。在具有完整的現代作業系統(如Linux)的系統上進行程式設計比在嵌入式世界中開發更容易(也更快)
  • 我堅信能夠在任何地方部署,但如果你想弄清楚一個想法是否會起作用,我強烈建議你嘗試使用一個易於快速試驗的設備進行原型設計
  • 導出模型並使其在嵌入式平台上運行得足夠快可能需要很長時間,因此一個很好的捷徑就是將資料從環境中的傳感器串流傳輸到附近的桌面或雲計算進行處理。

以上是有關TinyML一書早期釋出版本的讀書心得,這領域目前還在蓬勃發展;而深度學習”往下”應用的成功或許可避免再次人工智慧寒冬的到來。無論如何,深度學習技術可以解決一些以往傳統軔體程式開發無法解決的問題,慢慢的也將成為這方面技術人員所需之技能。

發表迴響

你的電子郵件位址並不會被公開。 必要欄位標記為 *