使用低成本模組和 MicroPython,快速打造以 AI 為基礎的視覺與聽覺裝置
資料提供者:DigiKey 北美編輯群
2019-08-01
為了因應智慧型連線產品日益增長的需求,開發人員逐漸轉向人工智慧 (AI) 方法,如機器學習 (ML)。但是,開發人員經常在挑選硬體時遇到難題。他們可以使用具有成本效益的通用處理器完成設計,但這種處理器執行複雜演算法時的效能不足;他們也可以使用專用的解決方案來達到高效能,但是這會增加設計的成本和複雜度。
即日起,不用再受困於上述的兩難抉擇中。本文將介紹 Seeed Technology 推出的一款更簡單且更具成本效益的替代方案,能讓開發人員使用熟悉的 MicroPython 程式語言,部署高效能的 AI 架構解決方案。
機器學習方法
ML 演算法的成功引起開發人員的注意,想在眾多應用中尋找更有效的物件偵測和語音辨識方法。在這些演算法之中,卷積神經網路 (CNN) 能展現機器視覺和聽覺應用所需的高度準確辨識能力。因此,在個人電子裝置、穿戴式裝置和物聯網 (IoT) 設計中,CNN 和類似的深度神經網路 (DNN) 開創出越來越多應用契機。
對於 CNN 推斷要求不高的應用,開發人員可採用在通用處理器上執行的神經網路軟體程式庫,搭配單指令多重數據 (SIMD) 架構和數位訊號處理 (DSP) 擴充功能來打造成功的解決方案 (請參閱《使用 Raspberry Pi 構建機器學習應用》)。
若要求較為嚴苛,開發人員可使用現場可編程閘陣列 (FPGA) 構建功能更強大的 CNN 架構設計,其內嵌的高效能 DSP 區塊能加速 ML 演算法的執行 (請參閱《使用 FPGA 構建具有機器學習能力的高效能嵌入式視覺應用》)。
以處理器為基礎的 ML 設計通常比以 FPGA 為基礎的 ML 設計更容易實作,但是 CNN 模型的數學運算複雜度,通常會減慢處理器型解決方案的推斷速度。而 FPGA 型解決方案雖能以硬體執行關鍵的處理步驟,以加速推斷效能,但基於開發上的要求,可能很難在短時間內實作最佳化的解決方案。
Seeed Technology 推出 Sipeed MAIX-I 114991684 模組後,開發人員有了另一種替代解決方案,可在智慧型產品和邊緣運算裝置中加速高效能 CNN 推斷解決方案的部署。
高效能 CNN 處理模組
MAIX-1 模組包含高效能雙核心處理器、Espressif Systems 的 ESP8285 Wi-Fi 微控制器、Winbond 的 W25Q128FW 128 Mbit 序列快閃記憶體、穩壓器和 IPEX 天線連接器。無線版的 Sipeed MAIX-I 114991695 模組不含 ESP8285 微控制器。此款雙核心處理器是為了加速多種應用工作負載而設計,內建一對包含浮點單元 (FPU) 的 64 位元 RISC-V 處理器,以及用於 CNN 模型、音訊處理、加密和快速傅立葉轉換 (FFT) 計算的加速器 (圖 1)。
圖 1:Seeed Technology 的 MAIX-I 模組包含無線微控制器、快閃記憶體、DC 穩壓器、IPEX 天線連接器,而且還有高效能雙核心處理器,以及用於卷積神經網路 (CNN) 處理和其他功能的加速器。(圖片來源:Seeed Technology)
此款雙核心處理器除了 8 MB 靜態隨機存取記憶體 (SRAM) 和 128 Kbit 一次性可編程 (OTP) 記憶體,還內建全套介面,包括液晶顯示器 (LCD) 連接埠和用於攝影機的數位視訊連接埠 (DVP)。開發人員可使用此處理器的現場可編程 IO 陣列 (FPIOA) 多工器,將 255 個內部功能對應至 48 個可用的一般用途 IO (GPIO) 連接埠。
此處理器的加速器和整合功能,可支援常見智慧型產品的多種設計需求。例如,音訊處理器單元 (APU) 最多可支援八個麥克風,並內建專用的 512 點 FFT 加速器。光是使用這些 APU 功能,開發人員就能有效地使用麥克風陣列,在智慧型產品的語音介面中,實作音訊波束成形的指向性拾音功能。如需關鍵字喚醒等語音介面功能,開發人員則可使用 APU 的預處理音訊輸出來驅動處理器內建的 CNN 加速器。
CNN 加速器
在 Sipeed MAIX-I 模組的所有功能中,最特別的功能就屬其雙核心處理器內建的 CNN 加速器。此神經網路處理器,在此簡稱 KPU (核心處理器單元),專為加速處理 CNN 底層的各個核心函數而設計,可提供構成 CNN 模型各層的核心函數的硬體實作,包括卷積、批次正規化、啟動和池化 (請參閱《利用隨手可得的軟硬體開始使用機器學習》)。
開發人員可利用這些功能實作低功率設計,使用 CNN 在音訊介面中辨識語音啟動短語,或在視覺型應用中對物件進行偵測及分類。事實上,KPU 可使用處理器內建的 SRAM,利用最大為 5.9 MB 的固定點 CNN 推斷模型,或者最大為 11.8 MB 的預先量化浮點模型來執行即時推斷。例如,在機器視覺應用中,KPU 會使用相對較小的影像畫格類型,以優於每秒 30 畫格的速度執行推斷,適合在智慧型產品中進行臉部或物件偵測。若是非即時應用,開發人員可使用外部快閃記憶體來處理模型大小,因而只會受到快閃記憶體容量的限制。
KPU 在內部使用先進先出 (FIFO) 緩衝器執行推斷,依序處理典型 CNN 模型的每一層 (圖 2 上)。對於每一層,KPU 會從晶片上 SRAM 或外部快閃記憶體讀取模型參數和資料,並使用相關的加速核心函數,執行該層的核心函數 (圖 2 下)。此層的處理管線有內建回調機制,可讓開發人員在 KPU 硬體完成每個處理序列時,執行其專屬常式。
圖 2:執行推斷時,整個 KPU 任務 (上) 包含多層,每層都涉及相關核心函數的執行 (下)。(圖片來源:Seeed Technology)
開發平台
KPU 在其專用硬體中,將執行 CNN 演算法的複雜性抽象化。對開發人員來說,Seeed 推出的硬體產品和軟體套件組合,可簡化以 CNN 為基礎的開發複雜性。搭配 MAIX-I 模組下,開發人員即可使用功能更加強大的 Seeed 板級產品,快速地評估及開發 MAIX-I 架構設計。
入門級的 Seeed 110991188 開發套件整合 MAIX-I 模組 (裝在基板上)、2.4 英吋 LCD 以及 Seeed 114991881 OV2640 魚眼攝影機。Seeed 110991189 套件提供的功能,與 MAIX-I 模組的非 Wi-Fi 版本相同。
針對原型開發用途,Seeed 102991150 Bit 評估板在板上裝有電路試驗專用的 MAIX-I。Seeed Technology 的 110991190 MAIX-I Bit 套件結合了 Bit 評估板、2.4 英吋顯示器、OV2640 攝影機,以及一對排針座,可將 Bit 板接至試驗電路板。
若要開發更複雜的應用,Seeed 110991191 Sipeed MAIX Go 板套件結合了 MAIX-I 模組、STMicroelectronics 的 STM32F103C8 微控制器、攝影機、I2S 麥克風、喇叭、鋰電池管理、MicroSD 卡槽以及多個介面連接器 (圖 3)。將隨附的 2.8 英吋 LCD 接到電路板背面,開發人員即可有效使用此套件,當作開發 AI 驅動型數位視訊系統的平台。
圖 3:Sipeed MAIX Go 板是 Seeed Technology MAIX 板系列產品之一,其中結合 MAIX-I 模組、STMicroelectronics 的 STM32F103C8 微處理器、攝影機、顯示器以及多個介面,可提供獨立的影像系統,以進行物件辨識。(圖片來源:Seeed Technology)
這些電路板可提供獨立的解決方案,能滿足許多智慧型產品的需求,此外還支援 MicroPython,因此使用起來非常容易。透過 Seeed 電路板及 MicroPython 的組合,開發人員能以更簡單的方法開發 AI 智慧型產品。
使用 MicroPython 快速開發
MicroPython 可針對資源有限的微控制器,提供最佳化的 Python 程式語言子集。MicroPython 可直接支援硬體存取,可將相對簡單的 Python 開發引進到嵌入式系統的軟體開發中。
開發人員可使用熟悉的 Python 匯入機制,而非 C 函式庫,載入所需的函式庫。例如,開發人員只需匯入 MicroPython 機器模組,即可存取微控制器的 I2C 介面、計時器等項目。對於使用影像感測器的設計,開發人員可匯入感測器模組,然後調用 sensor.snapshot()
,即可將影像感測器的畫格回傳。
Seeed 的 MaixPy 專案可擴充 MicroPython 的功能,並支援 MAIX-I 模組的雙核心 K210 處理器以及相關的開發板。MaixPy MicroPython 解譯器在 MAIX-I 模組的 K210 處理器上運行,並使用 MicroPython 功能以及專用的 MaixPy 模組,例如含有處理器 KPU 功能的 MaixPy KPU 模組。
開發人員可使用 MaixPy 和 KPU 模組,輕鬆部署 CNN 推斷功能。事實上,Seeed 的 MaixHub 模型庫提供多個事先訓練過的 CNN 模型,可幫助開發人員開始使用 MAIX-I 模組。如要下載這些模型,開發人員需要在 MAIX 板上執行 ID 產生器公用程式,以提供可用的機器 ID。
舉例來說,使用 Seeed Sipeed MAIX Go 套件並裝上 LCD,開發人員即可載入預先訓練過的臉部偵測模型。若要使用該模型執行推斷,僅需要幾行 Python 程式碼 (清單 1)。
複製 import sensor import image import lcd import KPU as kpu lcd.init() sensor.reset() sensor.set_pixformat(sensor.RGB565) sensor.set_framesize(sensor.QVGA) sensor.run(1) task = kpu.load(0x300000) # you need put model(face.kfpkg) in flash at address 0x300000 # task = kpu.load("/sd/face.kmodel") anchor = (1.889, 2.5245, 2.9465, 3.94056, 3.99987, 5.3658, 5.155437, 6.92275, 6.718375, 9.01025) a = kpu.init_yolo2(task, 0.5, 0.3, 5, anchor) while(True): img = sensor.snapshot() code = kpu.run_yolo2(task, img) if code: for i in code: print(i) a = img.draw_rectangle(i.rect()) a = lcd.display(img) a = kpu.deinit(task)
清單 1:開發人員僅需幾行 MicroPython 程式碼,即可使用存在快閃記憶體中的神經網路模型來執行推斷。(程式碼來源:Seeed Technology)
此預先訓練過的模型可實作一種稱為 Yolo (you only look once) 的 CNN 模型,可在訓練和推斷期間使用整個圖像來加速推斷,而不像早期 CNN 演算法是使用一連串的滑動視窗。Yolo 的進一步最佳化體現在 MaixHub 模型庫提供的「Tiny Yolo2」模型上。這是一個高效能的模型,可在 MAIX Go 上即時進行臉部偵測 (圖 4)。
圖 4:使用 Sipeeed MAIX Go 板,開發人員可以利用預先訓練的特殊 CNN 推斷模型,快速探索即時臉部偵測功能。(圖片來源:Seeed Technology)
當然,推斷在 DNN 模型整個複雜的開發流程中僅算是部署階段,但由於此範例相當簡易,無法展現實作高效模型時所涉及的難題。
如要開發客製化模型,開發人員必須取得夠大的樣本組,以進行模型訓練。訓練時,開發人員需使用 TensorFlow 等深度學習架構來配置模型,然後使用訓練資料進行訓練。
雖然這些步驟看似繁複,但是 MAIX-I 生態系統能以相對直覺的方式進行推斷部署。
Seeed 有提供轉換器,能讓開發人員將在 TensorFlow、Keras 或 Darknet 中開發的模型轉換成 KPU 的特殊 kmodel 格式。就像從 MaixHub 模型庫下載的預先訓練模型一樣,開發人員可將其自訂模型上傳到 MAIX-I 模組,然後使用 MicroPython 評估這些模型的效能,具體方式如上所述。
此外,Seeed 還提供多種軟體開發套件 (SDK),能以 C 程式語言建立客製化軟體應用程式。提供不同的 SDK,可支援獨立的 C 應用程式,或是建立在 RTOS 即時作業系統上的 C 應用程式。
結論
人們對於智慧型產品的影像和語音型介面,接受度快速增加,促使設計人員逐漸轉向使用機器學習演算法來完成這些產品中資源有限的設計。過去,開發人員很少找到既容易實行,又功能強大,足以提供即時機器學習功能的高效解決方案。
如本文所述,使用 Seeed Technology 的 MAIX-I 模組和相關電路板,開發人員即可快速地在硬體平台上部署推斷模型,繼而從音訊或視訊串流資料中即時辨識語音或物件。

聲明:各作者及/或論壇參與者於本網站所發表之意見、理念和觀點,概不反映 DigiKey 的意見、理念和觀點,亦非 DigiKey 的正式原則。