RM新时代网站-首页

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

如何在RT-Thread OS環(huán)境下使用ncnn進(jìn)行AI推理

RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 來源:RTThread物聯(lián)網(wǎng)操作系統(tǒng) ? 2023-05-04 16:29 ? 次閱讀

今天簡報較短,主要演示一下如何在RT-Thread OS環(huán)境下使用ncnn進(jìn)行AI推理

關(guān)于NCNN

簡介

ncnn 是騰訊優(yōu)圖實驗室首個開源項目,是一個為手機(jī)端極致優(yōu)化的高性能神經(jīng)網(wǎng)絡(luò)前向計算框架。

ncnn 從設(shè)計之初深刻考慮手機(jī)端的部屬和使用。無第三方依賴,跨平臺,手機(jī)端 cpu 的速度快于目前所有已知的開源框架。

基于 ncnn,開發(fā)者能夠?qū)?a target="_blank">深度學(xué)習(xí)算法輕松移植到手機(jī)端高效執(zhí)行,開發(fā)出人工智能 APP,將 AI 帶到你的指尖。

ncnn 目前已在騰訊多款應(yīng)用中使用,如 QQ,Qzone,微信,天天 P 圖等。

功能概述

支持卷積神經(jīng)網(wǎng)絡(luò),支持多輸入和多分支結(jié)構(gòu),可計算部分分支

無任何第三方庫依賴,不依賴 BLAS/NNPACK 等計算框架

C++ 實現(xiàn),跨平臺,支持 android ios

ARM NEON 匯編級良心優(yōu)化,計算速度極快

精細(xì)的內(nèi)存管理和數(shù)據(jù)結(jié)構(gòu)設(shè)計,內(nèi)存占用極低

支持多核并行計算加速,ARM big.LITTLE cpu 調(diào)度優(yōu)化

整體庫體積小于 500K,并可輕松精簡到小于 300K

可擴(kuò)展的模型設(shè)計,支持 8bit 量化和半精度浮點存儲,可導(dǎo)入 caffe 模型

支持直接內(nèi)存零拷貝引用加載網(wǎng)絡(luò)模型

可注冊自定義層實現(xiàn)并擴(kuò)展

恩,很強(qiáng)就是了,不怕被塞卷 QvQ

RT-Thread-NCNN使用說明

當(dāng)前RT-Thread-NCNN工具包僅支持Arm-A核芯片,比如樹莓派4B、rk3568等,我們可以在BSP包內(nèi)找到相關(guān)芯片的BSP包。以下演示基于樹莓派4B。

1.相關(guān)環(huán)境

硬件:樹莓派4B開發(fā)板,帶USB轉(zhuǎn)串口調(diào)試工具;

系統(tǒng):RT-Thread OS v5.0.0版本;

開發(fā)環(huán)境:Windows 10;

開發(fā)IDE:Vscode;

交叉編譯工具鏈:gcc-arm-10.3-2021.07-mingw-w64-i686-aarch64-none-elf;

工具鏈下載地址:https://developer.arm.com/downloads/-/gnu-a

2.更新package工具包

相關(guān)參考:https://github.com/RT-Thread/packages

下載/進(jìn)入env環(huán)境后,找到env根目錄下的packages文件夾。

使用git clone https://github.com/RT-Thread/packages.git命令將最新的packages repo 克隆到本地。注:使用方法還可以參考env根目錄下的readme.md文件中包管理器使用的章節(jié),可以利用env環(huán)境中支持的包管理命令來更新本地packages文件夾。

更新完成后,查看新的軟件包中./packages/ai/文件夾中是否出現(xiàn)ncnn文件夾,如果存在則表示軟件包更新成功。

更新好的軟件包如下所示:

ef3b992a-e7d0-11ed-ab56-dac502259ad0.png

3.準(zhǔn)備樹莓派4B項目工程

RT-Thread下載地址:https://github.com/RT-Thread/rt-thread

進(jìn)入準(zhǔn)備好的RT-Thread開發(fā)包,進(jìn)入./rt-thread/bsp/raspberry-pi/raspi4-64/文件夾。在該目錄下啟動env,輸入如下命令創(chuàng)建新的項目工程。

1scons--dist--project-name=xxxx

ef5134b0-e7d0-11ed-ab56-dac502259ad0.png

此時會在該目錄下生成./dist/xxxx文件夾,該文件夾下就是新生成的樹莓派4B項目工程,如下圖所示:

ef5ce634-e7d0-11ed-ab56-dac502259ad0.png

準(zhǔn)備好項目工程后,我們將下載好的工具鏈放置在指定目錄,然后修改上面圖中rtconfig.py文件中的工具鏈路徑。

ef743460-e7d0-11ed-ab56-dac502259ad0.png

ef86e4de-e7d0-11ed-ab56-dac502259ad0.png

至此,我們已經(jīng)準(zhǔn)備好了一個最基本的項目工程。然后,我們回到env工具中,使用menuconfig命令配置相關(guān)packages,這里只引入ncnn工具箱。

efa777bc-e7d0-11ed-ab56-dac502259ad0.png

我們以此進(jìn)入RT-Thread online packages、AI packages,選中ncnn package for RT-Thread,最終選中v1.0.0版本ncnn,保存并退出。

在env環(huán)境中輸入下列命令,就可以把ncnn的package拉取到當(dāng)前工程中。

1pkgs--update

拉取好的ncnn工具包可以在項目工程中的./packages文件夾中查看到。

efbaa698-e7d0-11ed-ab56-dac502259ad0.png

至此,我們可以嘗試編譯一下當(dāng)前項目,不出意外,可以順利編譯。

efc65326-e7d0-11ed-ab56-dac502259ad0.png

efdf4548-e7d0-11ed-ab56-dac502259ad0.png

4.編譯yolov3示例

在編寫代碼之前,我們需要準(zhǔn)備AI模型,可以參考NCNN官方的AI模型庫。

參考鏈接:https://github.com/nihui/ncnn-assets/tree/master

我們以mobilev2-yolov3為例,準(zhǔn)備一下資料到sd

mobilenetv2-yolov3.bin

mobilenetv2-yolov3.param

bus.jpg

其中前兩個為ncnn指定的模型權(quán)重和結(jié)構(gòu),最后一個是測試圖片。都準(zhǔn)備好了,我們現(xiàn)在修改RT-Thread項目工程

1.修改文件:./drivers/board.h

1#defineHEAP_END(KERNEL_VADDR_START+500*1024*1024)
2#definePAGE_STARTHEAP_END
3#definePAGE_END((size_t)PAGE_START+500*1024*1024)

2.修改文件:./driver/board.c

1structmem_descplatform_mem_desc[]={
2{0x00200000,(512ul<

3.修改文件:./rtconfig.h

1#defineRT_MAIN_THREAD_STACK_SIZE245760
2
3#defineFINSH_THREAD_STACK_SIZE245760

以上參數(shù)不同模型可能不同,可能需要根據(jù)模型規(guī)模去估計。

4.修改main.c文件

我們把./packages/ncnn-v1.0.0文件夾打開,里面examples有我們準(zhǔn)備好的測試?yán)?,其中main-yolov3.cpp就是我們用來替換main.c文件的,將其替換mian.c文件,并將mian.c改成mian.cpp文件,然后編譯。

eff52c1e-e7d0-11ed-ab56-dac502259ad0.png

f00dd412-e7d0-11ed-ab56-dac502259ad0.png

注意:我們還要確定我們項目工程已經(jīng)支持了C++特性和開啟了文件系統(tǒng),如果沒有的話還需要通過menuconfig來修改,這一部分不再贅述。

此外,關(guān)于如何在樹莓派4B開發(fā)板中啟動RT-Thread OS,可以參考以下文檔:

啟動RT-Thead OS in Pi 4B:https://github.com/RT-Thread/rt-thread/tree/master/bsp/raspberry-pi/raspi4-64

5.yolov3測試結(jié)果

串口輸出結(jié)果:

 1heap:0x0056b530-0x1f400000
 2
 3|/
 4-RT-ThreadOperatingSystem
 5/|5.0.0buildApr1820232257
 62006-2022CopyrightbyRT-Threadteam
 7lwIP-2.1.2initialized!
 8EMMC:assumingclockratetobe100MHz
 9[I/sal.skt]SocketAbstractionLayerinitializesuccess.
10[I/utest]utestisinitializesuccess.
11[I/utest]totalutesttestcasenum:(0)
12[I/DBG]versionisB1
13
14[I/SDIO]SDcardcapacity31178752KB.
15foundpart[0],begin:4194304,size:256.0MB
16foundpart[1],begin:272629760,size:29.492GB
17filesysteminitializationdone!
18Helcpu1bootsuccess
19cpu2bootsuccess
20cpu3bootsuccess
211sh/>success
22linkdisconnected
23SupportlinkmodeSpeed1000M
24
25msh/>
26msh/>
27msh/>mn
28mnet_yolov3_test
29msh/>mnet_yolov3_test
30HelloRT-ThreadNCNN
3115=0.99720at48.90389.97159.19x525.88
326=0.96088at18.52260.82783.92x512.58
3315=0.95704at207.39407.80150.12x444.35

其中,最后部分輸出了推理的結(jié)果。

以下是sd卡中生成的推理前后圖片對比。

如果想更換測試圖片,只需要將新的圖片名字修改成bus.jpg就可以,這樣偷懶,但是簡單。

下面這個是另一個測試結(jié)果(去掉了標(biāo)簽

當(dāng)前問題

有部分算子當(dāng)前在RT-Thread OS上運(yùn)行時出錯,所以如果是想自己搞一個模型跑跑,需要注意這方面問題,good luck。

后續(xù)工作

支持RISC-V架構(gòu)芯片;

解決算子問題;

審核編輯:湯梓紅

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報投訴
  • 移植
    +關(guān)注

    關(guān)注

    1

    文章

    379

    瀏覽量

    28124
  • AI
    AI
    +關(guān)注

    關(guān)注

    87

    文章

    30728

    瀏覽量

    268882
  • 命令
    +關(guān)注

    關(guān)注

    5

    文章

    683

    瀏覽量

    22011
  • RT-Thread
    +關(guān)注

    關(guān)注

    31

    文章

    1285

    瀏覽量

    40081
  • 深度學(xué)習(xí)
    +關(guān)注

    關(guān)注

    73

    文章

    5500

    瀏覽量

    121111

原文標(biāo)題:【AI簡報20230428】如何在RT-Thread OS環(huán)境下使用ncnn進(jìn)行AI推理

文章出處:【微信號:RTThread,微信公眾號:RTThread物聯(lián)網(wǎng)操作系統(tǒng)】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。

收藏 人收藏

    評論

    相關(guān)推薦

    RT-Thread記錄(一、版本開發(fā)環(huán)境及配合CubeMX)

    RT-Thread 學(xué)習(xí)記錄的第一篇文章,RT-Thread記錄(一、RT-Thread 版本、RT-Thread Studio開發(fā)環(huán)境
    的頭像 發(fā)表于 06-20 00:28 ?5221次閱讀
    <b class='flag-5'>RT-Thread</b>記錄(一、版本開發(fā)<b class='flag-5'>環(huán)境</b>及配合CubeMX)

    使用RT-Thread Master+QEMU模擬器進(jìn)行RT-Thread原型快速開發(fā)

    前段時間分別在Win和Mac M1/M2 Silicon硬件環(huán)境折騰了VS Code + RT-Thread的編譯問題。
    的頭像 發(fā)表于 09-27 14:50 ?2883次閱讀
    使用<b class='flag-5'>RT-Thread</b> Master+QEMU模擬器<b class='flag-5'>進(jìn)行</b><b class='flag-5'>RT-Thread</b>原型快速開發(fā)

    RT-Thread AI kit輕松部署 STM32Cube-AIRT-Thread 精選資料推薦

    RT-AK 簡介RT-AK:RT-Thread AI kit,RT-Thread AI套件
    發(fā)表于 07-20 08:20

    何在RT-Thread Studio開發(fā)環(huán)境使用nrf24L01軟件包?

    何在RT-Thread Studio開發(fā)環(huán)境使用nrf24L01軟件包?
    發(fā)表于 12-17 07:52

    RT-Thread編程指南

    RT-Thread編程指南——RT-Thread開發(fā)組(2015-03-31)。RT-Thread做為國內(nèi)有較大影響力的開源實時操作系統(tǒng),本文是RT-Thread實時操作系統(tǒng)的編程指南
    發(fā)表于 11-26 16:06 ?0次下載

    RT-Thread用戶手冊

    RT-Thread用戶手冊——本書是RT-Thread的編程手冊,用于指導(dǎo)在RT-Thread實時操作系統(tǒng)環(huán)境如何
    發(fā)表于 11-26 16:16 ?0次下載

    RT-Thread零基礎(chǔ)快速入門第0講——環(huán)境安裝

    RT-Thread快速入門第1講——環(huán)境安裝目錄RT-Thread快速入門第1講——環(huán)境安裝一、 前言二、 編程資料下載三、 ENV工具下載和安裝Git下載和安裝env下載和安裝四
    發(fā)表于 12-03 14:21 ?14次下載
    <b class='flag-5'>RT-Thread</b>零基礎(chǔ)快速入門第0講——<b class='flag-5'>環(huán)境</b>安裝

    RT-Thread AI kit開源:輕松實現(xiàn)一鍵部署AI模型至 RT-Thread

    RT-AK 是 RT-Thread 團(tuán)隊為 RT-Thread 實時操作系統(tǒng)所開發(fā)的 AI 套件,能夠一鍵將 AI 模型部署到
    發(fā)表于 01-25 18:18 ?3次下載
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>AI</b> kit開源:輕松實現(xiàn)一鍵部署<b class='flag-5'>AI</b>模型至 <b class='flag-5'>RT-Thread</b>

    RT-Thread大會:瑞薩e- AI成功案例及部署

      RT-Thread IoT OS Global Tech Conference (RT-Thread GTC,RT-Thread全球技術(shù)大會)致力于圍繞
    的頭像 發(fā)表于 05-27 10:18 ?1392次閱讀
    <b class='flag-5'>RT-Thread</b>大會:瑞薩e- <b class='flag-5'>AI</b>成功案例及部署

    RT-Thread學(xué)習(xí)筆記 RT-Thread的架構(gòu)概述

    RT-Thread 簡介 作為一名 RTOS 的初學(xué)者,也許你對 RT-Thread 還比較陌生。然而,隨著你的深入接觸,你會逐漸發(fā)現(xiàn) RT-Thread 的魅力和它相較于其他同類型 RTOS
    的頭像 發(fā)表于 07-09 11:27 ?4545次閱讀
    <b class='flag-5'>RT-Thread</b>學(xué)習(xí)筆記 <b class='flag-5'>RT-Thread</b>的架構(gòu)概述

    RT-Thread文檔_RT-Thread 簡介

    RT-Thread文檔_RT-Thread 簡介
    發(fā)表于 02-22 18:22 ?5次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 簡介

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread 潘多拉 STM32L475 上手指南
    發(fā)表于 02-22 18:23 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> 潘多拉 STM32L475 上手指南

    RT-Thread文檔_RT-Thread SMP 介紹與移植

    RT-Thread文檔_RT-Thread SMP 介紹與移植
    發(fā)表于 02-22 18:31 ?9次下載
    <b class='flag-5'>RT-Thread</b>文檔_<b class='flag-5'>RT-Thread</b> SMP 介紹與移植

    基于RT-Thread Studio學(xué)習(xí)

    前期準(zhǔn)備:從官網(wǎng)下載 RT-Thread Studio,弄個賬號登陸,開啟rt-thread學(xué)習(xí)之旅。
    的頭像 發(fā)表于 05-15 11:00 ?3930次閱讀
    基于<b class='flag-5'>RT-Thread</b> Studio學(xué)習(xí)

    使用RT-Thread Studio進(jìn)行智能家居終端的設(shè)計

    本次方案基于星火一號開發(fā)板開發(fā),使用RT-Thread Studio進(jìn)行工程創(chuàng)建,代碼編輯,RT-Thread配置,調(diào)試配置,程序下載等功能。
    的頭像 發(fā)表于 07-28 16:41 ?1884次閱讀
    使用<b class='flag-5'>RT-Thread</b> Studio<b class='flag-5'>進(jìn)行</b>智能家居終端的設(shè)計
    RM新时代网站-首页