welcom ! Handel home

2024年11月28日 星期四

Google Teachable Machon 特性簡介

 >> https://teachablemachine.withgoogle.com/

#使用遷移式學習(Transfer Learning),也就是它其實是在用事先訓練好的模型,但你可以指定自己的辨識樣本給它。

 #Teachable Machine 所需的「訓練」時間非常短,而且效果仍然不錯,只是客製化的空間也就不大

#網頁操作介面簡單 可匯出訓練model 參數

#提供基於Tensonflow 的佈建離線平台工具

>>Tensonflow.js (on line)

>>Tensonflow (off line)

>>Tensonflow lite (off line)



【Edge AI專欄】當MCU遇上NPU能擦出什麼新火花?

 ## 出處Posted By  on 1 月 9, 2024 in Arm, Edge AI解決方案, Edge AI開發地圖, TensorFlow, Vela Compiler, 技術導讀 | 0 comments

作者:歐敏銓

日前Edge AI Taiwan版主Jack大大推了一支影片,點擊率不高,但蠻有料的,看完有些想法,就用Google加ChatGPT查了些資料,且來整理一下分享。

首先是這支影片:

這是Edge AI晶片新創Alif的影片,影片中Plumerai這家公司說明他們如何設計和訓練AI人物偵測(Person Detection)模型的步驟,然後將其整合和移植到搭載Ethos-U55的Alif Ensemble微控制器上,可以實現電池供電型的即時人物偵測應用。目前人物偵測的影像辨識功能大多採用CPU/GPU等級的方案,Plumerai則證實在嵌入式系統上建置也已大有可為了。

影片中Alif代表也秀了一張圖(如下),說明了他們的差異化定位:採用32-bit MCU加整合運算單元,填補目前市場上AI運算的空缺領域(50-250GOPS),可在低功耗裝置上實現物件/人臉辨識、姿態辨識和語言辨識等AI應用。

而Alif的技術架構(見本文介紹),其實是站在ARM的Edge AI運算架構的基礎之上發展出來的,也是MCU廠商擁抱AI運算的主流架構:以ARM 的神經處理單元(NPU)- Ethos-U 搭配Cortex-A 和 Cortex-M 核心來支持各種機器學習工作負載,實現從視覺處理到自然語言處理的嵌入式和移動應用。

ARM NPU – Ethos-U技術架構

至於Ethos-U 的技術架構呢,則搜尋到這篇NXP的教學文,其中有一圖介紹了Ethos-U此一子系統的功能架構:

從圖中可看出,Ethos-U子系統中涵蓋了不同的硬體單元,包括Cortex-M、Ethos-U NPU(U65/U55)、SRAM和消息單元(MU)。在運作上主要由 Cortex-A55 負責載入機器學習模型,並與 Linux OS 和程式庫一起捕獲和預處理動態輸入,而Cortex-M 則控制著連接的 Ethos-U NPU,準備 NPU 的卸載描述符(offloading descriptor)並觸發 NPU 執行。MU 則是消息單元 IP,促進了 Cortex-A 和 Cortex-M 之間的核心通信。

這架構支持 TensorFlow Lite(TFLite)推論,可以fallback到相應的 Cortex-A 核心;同時支持 TensorFlow Lite Micro(TFLite-Micro)推論,可以fallback到相應的 Cortex-M 核心。它還支持推論 API,以將整個模型卸載到 TFLite-Micro 和 Cortex-M 上的 NPU。此外,它們提供了 Vela 模型工具,以優化 Ethos-U 目標的模型性能和記憶體使用。

Ethos-U 軟體架構

進一步來看Ethos-U的軟體運作架構如下:

在 Ethos-U 軟體架構中,有三個主要組件:Vela 模型編譯器、Cortex-A 軟體堆棧(software stack)和 Cortex-M 軟體堆棧。Vela 模型編譯器用於編譯 TFLite 模型圖以適應 Ethos-U,將模型中的支持運算符替換為包含 Ethos-U NPU 命令流的自定義“ethos-u”運算符,要在 Ethos-U 上部署 NN 模型,第一步是使用 Vela 工具編譯準備好的模型。為了能夠由 Ethos-U NPU 加速,網絡運算符必須被量化為 8 位(unsigned or signed)或 16 位(signed)。想進一步認識Vela Compiler,可參考本文

Cortex-A 軟體堆棧包含 MPU 推理引擎(TensorFlow Lite)、驅動程式庫和用於 Linux 核心的Kernel-side設備驅動程序。而 Cortex-M 軟體堆棧則包含 MCU 推論引擎軟體(TFLite-Micro、CMSIS-NN)和 NPU 驅動程序。

小結

Edge AI真正走到「Edge」端的嵌入式裝置,從軟硬體技術方案來看,愈來愈可行了。不過,技術到位,不表示容易開發和上手,如何將在效能、功耗、尺寸等現實條件中取得平衡,永遠是嵌入系統開發上的挑戰,也是樂趣所在吧。

[AI 邊緣運算NOTE] 基本計算區分 CPU, GPU, NPU, TPU

 

Edge AI 發展下的

CPU, GPU, NPU, TPU 

其實 GPU、NPU、TPU 都是專用處理器,只是其擅長處理的任務並不相同,做為專用處理器,在一定程度都可以降低 CPU 工作負擔,使 CPU 的資源可進行其他運算。因此用戶需要哪個是根據使用者的應用與任務所決定。

CPU (Central Processing Unit),中央處理器

其核心數量較少,專為通用計算而設計。CPU 在 NAS 當中也可以視為 NAS 的核心大腦,負責執行作業系統跟應用程式所需的命令與程序,因此 NAS 系統跟應用程式的速度都與 CPU 效能有關。

GPU (Graphics Processing Unit)  ,圖形處理器

為專門執行繪圖運算工作的微處理器,結構上GPU 由於具有數百或數千個計算單元(ALU),可並列執行大量計算可被分為嵌入式繪圖晶片與獨立顯示卡兩種。

GPU 除了常聽說的對於玩 3D 遊戲的彩圖計算有幫助以外, 對執行分析、深度學習和機器學習演算法尤其有用,用途並不限於圖像計算。

NPU(Neural network Processing Unit) 神經處理單元

NPU 是專為加速 AI 應用而設計,透過類似於人類的神經系統的處理器,因具備節能的特性, 可滿足長時間的使用,適合持續處理 AI 運算任務,例如圖片生成、人臉辨識等。

TPU (Tensor Processing Unit),張量處理器

TPU 是 Google 開發專門用於加速機器學習的處理器,與 GPU 相比,TPU 被設計並運用於大量的低精度計算。Google 於研究表明在使用神經網路推斷的 AI 運算任務中,TPU 的效能是當代 GPU 和 CPU 的 15 到 30 倍,但是生產的廠商少,市場供不應求,因此價格昂貴。

#當MCU  IC 加入 NPU or TPU 周邊 可以燒錄 訓練參數 將大幅提升 應用的功能

>>應用於影像處理 可輸出結果 給MCU 做控制參考

>>聲音處理 

>>感測信號處理

這些應用當於 PC 建立大量的 工具 來建置及驗證  可以提升應用的效率


IOT_PCB ARM M0 共享單車主控版 RTOS 系統流程規劃

 typedef enum

{

    IOT_DEV_EXCEPTION ,      // 生產

    IOT_DEV_MAINTAIN ,      // 測試

    IOT_DEV_STOCK ,      // 入庫

    IOT_DEV_IDLE ,      // 待機

    IOT_DEV_IDLE_ALARM ,      // 低壓待機

    IOT_DEV_IDLE_SURVIVE ,      // 尋車待機回報

    IOT_DEV_WAIT_START ,      // 設備喚醒等待指令

    IOT_DEV_MOVING ,      // 出租

    IOT_DEV_PAUSE ,      // 出租暫停

    IOT_DEV_MOVING_ALARM ,      // 低壓出租

    IOT_DEV_INVALID             // 設備報廢    

} DEVICE_STATES;








# 配合 MQTT command  切換不同的 系統狀態 

//==========================================
// Device RTOS System status Run loop 
//==========================================
void dev_main(void){
switch(_iot_state) {
        case IOT_DEV_EXCEPTION:
            // 生產模式
            //printf("生產模式:連線測試 MQTT Server,不進入斷訊處理。\n");
            break;

        case IOT_DEV_MAINTAIN:
            // 測試模式
            //printf("測試模式:使用測試 PCBUUID,驗證相關功能。\n");
            break;

        case IOT_DEV_STOCK:
            // 入庫模式
            //printf("入庫模式:停止所有連線,MCU 進入深度休眠,手動喚醒。\n");
            break;

        case IOT_DEV_IDLE:
            // 待機模式
            //printf("待機模式:每 15 分鐘上報 4G PING 設備狀態及定位資訊。\n");
            break;

        case IOT_DEV_IDLE_ALARM:
            // 低壓待機
            // printf("低壓待機:降低 PING 頻率,每天上報兩次。\n");
            break;

        case IOT_DEV_IDLE_SURVIVE:
            // 尋車待機回報
           // printf("尋車待機回報:每三天上報一次,禁止出租操作。\n");
            break;

        case IOT_DEV_WAIT_START:
            // 設備喚醒等待指令
            //printf("設備喚醒:馬達移動時每 10 秒 PING,馬達停止時每 5 分鐘 PING。\n");
            break;

        case IOT_DEV_MOVING:
            // 出租模式
            //printf("出租模式:馬達移動每 10 秒 PING,停止時每 5 分鐘 PING。\n");
            break;

        case IOT_DEV_PAUSE:
            // 出租暫停
            //printf("出租暫停:回報臨時停車,監控電力狀態,判定強制待機。\n");
            break;

        case IOT_DEV_MOVING_ALARM:
            // 低壓出租
            //printf("低壓出租:回報低壓警告,監控電力狀態。\n");
            break;

        case IOT_DEV_INVALID:
            // 設備報廢
            //printf("設備報廢:停止連線運作,需由維修解除。\n");
            break;

        default:
            // 未知狀態
            //printf("未知狀態:無法處理。\n");
            break;
}
}