MCU上跑AI—實時目標檢測算法探索

MCU上跑實時目標檢測算法

前幾年一直忙著別的事情沒有在技術分享上下功夫, 這段時間穩定下來就想和幾個志同道合的朋友做點有意義的事情, 于是乎就使用MCU做了個與AI有識別相關的 “小玩意兒”.
本人負責嵌入式端相關的編碼, AI相關的工作由好友 AgeWang 負責.
這兒把一些成果給大家展示一下, 希望能給廣大開發者提供一個簡單的思路, 僅作參考

在大家印象中, AI 這種高大上的玩意兒一般是在 A系列 的芯片上面跑的, 當然本人也接觸過一些 A系列 芯片, 一般的性能差一點的芯片跑起來也非常吃力, 但要說在 MCU 芯片上冕能跑AI是都不都不敢想. 但是現如今確確實實是行, 而且效果還不錯.
話不多說進入真題, 先給大家展示一下效果:


展示環節

  • 模型優化: 在 MCU 資源限制下重新設計算法結構, 網絡結構依然超過了150層, 確保檢測精度不崩。
  • 部署優化: 針對 Cortex M 指令集做了底層優化。
  • 后處理: 用了簡化版的 NMS, 保證速度夠快, 占用也小。
  • 內存管理: 最大化復用中間 Buffer, 推理時只占用 248KB RAM, 這對于一般 512KB RAM 的中高端 MCU 來說完全可以接受。
  • 推理性能: 在 Cortex-M33 上, 通過指令集加速優化, 算法一秒大約推理 8幀 圖像(單幀 124ms)。



MCU實時目標檢測


  • 檢測效果: 在行人檢測數據集上, mAP 超過 60, 同時也能遷移到火焰、任意自定義目標檢測任務。

所需資源

模塊介紹最低成本(元)
攝像頭主要用于視頻圖像的采集5
顯示器主要用于視頻圖像的顯示10
MCU主要是協調攝像頭得采集, AI的計算以及LCD顯示屏的顯示6
外圍電路PCB板(最小系統所需的基本電路)

備注: 以上成本僅供參考(如果想要顯示效果更好, AI識別更快價格也就更貴)

以上是所需的基本硬件模塊, 當然也可以直接打板不使用模塊.
本演示主要是通過攝像頭采集圖像至 MCU, MCU 執行 AI yolo 算法, 獲取結果, 通過 LCD 顯示. 如下圖所示:

## 擴展思考
  • 輸入端除了火焰, 還可以是其他物品貓, 狗, 鳥, 也可以是人, 也可以是人的不同形態, 如跌倒的老人或者小孩兒.
  • 輸入的除了圖像也可以是音頻, 溫濕度, 光照強度, 當然也可以是他們的組合
  • 輸出端除了 LCD顯示屏, 也可以 I/O 輸出, 如開關門, 澆水, 喂魚等

其他嘗試

  • 本人在多款MCU都測試過, 如 STM32 ESP32 等, 只要基本的RAM合適, 看理論上都能進行運行AI算法.
  • STM32STM32Cube.AI 專門為 AI 進行了優化
  • ESP32 也有專門的庫以及demo, 可供大家參考


備注

  • 感謝 AgeWang 提供AI算法支持

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/bicheng/95483.shtml
繁體地址,請注明出處:http://hk.pswp.cn/bicheng/95483.shtml
英文地址,請注明出處:http://en.pswp.cn/bicheng/95483.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

SpringBoot 整合 RabbitMQ 的完美實踐

引言: 本文總字數:約 9200 字 預計閱讀時間:38 分鐘 為什么 RabbitMQ 是消息中間件的優選? 在分布式系統架構中,消息中間件扮演著 "交通樞紐" 的角色,負責協調各個服務之間的通信。目前主流的消息中間件有 RabbitMQ、Kafka 和 RocketMQ,它們各具特色: Kafka…

nestjs 發起請求 axios

1、下載npm i --save nestjs/axios axios2、全局配置import { HttpModule } from nestjs/axios;Global() Module({imports: [HttpModule.registerAsync({inject: [ConfigService],useFactory: async (configService: ConfigService) > {return {timeout: configService.get(…

將 Logits 得分轉換為概率,如何計算

場景:動物識別,輸入一張28*28的圖像,模型輸出屬于 貓、狗、鳥 哪個類型。需求:假設模型 ??Logits(模型在每個類別的置信度得分) 輸出為??:[貓: 3.2, 狗: 1.5, 鳥: -0.8]。計算 ??Softmax …

【Qt】bug排查筆記——QMetaObject::invokeMethod: No such method

問題如題目所示:QMetaObject::invokeMethod: No such method xxxx,在網上好一頓查,又將查到的資料喂給了 Ai,才最終將問題解決,特此記錄下。 一、問題背景 在做公司項目時,使用了插件的方式開發。主程序加載…

Spring Boot手寫10萬敏感詞檢查程序

使用Spring Boot手寫10萬敏感詞檢查程序 本文將介紹如何使用Spring Boot構建一個高效的敏感詞檢查系統,能夠處理多達10萬個敏感詞的檢測需求。我們將使用DFA(Deterministic Finite Automaton)算法來實現高效匹配,并提供RESTful API接口。 實現步驟 1. 創建Spring Boot項…

零構建的快感!dagger.js 與 React Hooks 實現對比,誰更優雅?

“Add Tags” 技術方案并行對比:React Hooks vs dagger.js(含核心 JS 代碼) 源碼: React Hooks:https://codepen.io/prvnbist/pen/jJzROe?editors1010dagger.js:https://codepen.io/dagger8224/pen/ZErjzw…

矩池云中LLaMA- Factory多機多卡訓練

LLaMA Factory 是一款開源低代碼大模型微調框架,集成了業界最廣泛使用的微調技術,支持通過 Web UI 界面零代碼微調大模型,目前已經成為開源社區內最受歡迎的微調框架之一。但是在矩池云上如何使用LLaMA-Factory多機多卡訓練模型呢&#xff1f…

Nginx的反向代理與正向代理及其location的配置說明

一、Nginx中location匹配優先級Nginx中location匹配優先級location支持各種匹配規則,在多個匹配規則下,Nginx對location的處理是有優先級的,優先級高的規則會優先進行處理;而優先級低的規則可能會最后處理或者不進行處理。注意&am…

神經網絡正則化三重奏:Weight Decay, Dropout, 和LayerNorm

正則化是機器學習中防止模型過擬合、提升泛化能力的核心技術。Weight Decay、Dropout和LayerNorm是三種最常用的方法,但它們的工作原理和首要目標截然不同。下面的流程圖揭示了它們的核心區別與聯系: #mermaid-svg-vymek6mFvvfxcWiM {font-family:"…

兩臺電腦通過網線直連共享數據,設置正確,卻互相ping不通的解決方法

因為某些原因,需要兩臺電腦互傳資源,但是某臺電腦可能無法連接外網。如果手頭有根網線,很容易想到通過一根網線連接兩臺電腦互傳數據。 這里先說一下基本的設置: 兩臺電腦最好都關閉防火墻;兩臺電腦都打開專用網絡和公…

面試新紀元:無聲勝有聲,讓AI成為你頸上的智慧伙伴

面試,無論是對于面試官還是求職者,都像一場無聲的戰爭。 一方要精準識人,一方要完美自薦;一方怕問不到點子上,一方怕答不到心坎里。 緊張、遺忘、表達失誤、準備不足……這些問題幾乎每個人都經歷過。 有沒有一種方…

qt-C++筆記之QtDesigner-Creator按鈕圖標與樣式

qt-C筆記之QtDesigner-Creator按鈕圖標與樣式 整理:如何用 .qrc 管理資源、在 Designer/Creator 中為 QPushButton 設置圖標(資源或系統主題),以及用樣式表調整文字樣式。涵蓋 C/Qt 與 PySide/PyQt;Linux 桌面優先&am…

maven 常用指令

Maven 是 Java 項目構建和依賴管理的得力助手。這里為你總結了一些常用指令,希望能幫你提升開發效率。下面這個表格匯總了 Maven 最核心和常用的一些命令:命令主要功能典型使用場景mvn clean清理項目,刪除 target 目錄及其所有編譯輸出文件。…

# pdf.js完全指南:構建現代Web PDF查看與解析解決方案

在當今Web開發中,實現高質量的PDF查看功能一直是前端開發者面臨的挑戰之一。作為最受歡迎的JavaScript PDF庫,pdf.js已經成為解決這一問題的行業標準。由Mozilla開發并維護的pdf.js項目,通過純JavaScript實現PDF解析與渲染,徹底改…

高效對象屬性復制工具

日常編程中,經常會碰到對象屬性復制的場景,比如 VO、DTO、PO、VO 等之間的轉換,關于什么是VO、DTO、PO、VO 等可以看上篇文章,VO、DTO、PO、VO 等對象具體有哪些方式可以使用呢? set/get 方式 性能最好的方式&#x…

大疆圖傳技術參數對比 你了解多少?

無人機是現代航空技術與智能控制技術結合的產物,已從軍事領域廣泛滲透至民用場景,成為推動各行業效率升級的關鍵工具。無人機的全稱為 “無人駕駛航空器(Unmanned Aerial Vehicle,簡稱 UAV)”,簡言之&#…

Redis 緩存熱身(Cache Warm-up):原理、方案與實踐

在 Redis 緩存架構中,“緩存熱身”是指在系統正式提供服務前(如重啟、擴容后),主動將熱點數據加載到 Redis 中的操作。其核心目標是避免**緩存穿透**(請求直達數據庫)和**緩存雪崩**(大量請求同…

基于SpringBoot的大學生就業招聘系統

1. 在線演示: 后臺:http://springbootiv1oo.xiaobias.com/springbootiv1oo/admin/dist/index.html 前臺:http://springbootiv1oo.xiaobias.com/springbootiv1oo/front/index.html 管理員:abo/abo 用戶:用戶1/123456、…

Java反序列化漏洞揭秘:從原理到攻擊實戰

一、背景 熟悉接口開發的同學一定知道,能將數據對象很輕松的實現多平臺之間的通信、對象持久化存儲,序列化和反序列化是一種非常有效的手段,例如如下應用場景,對象必須 100% 實現序列化。 DUBBO:對象傳輸必須要實現序…

Time-MOE 音頻序列分類任務

prompt 我準備做語音疾病分類任務。語音音頻是 WAV 格式的音頻,基本上分為兩類,分別是疾病類和非疾病類。也有少數數據集是多分類,現在我找到了26個數據集,我準備我已經在 MLP CNN 上面測試了它們的基準,下面我找到了一…