0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

如何在RT-Thread OS环境下使用ncnn进行AI推理

RTThread物联网操作系统 来源:RTThread物联网操作系统 2023-05-04 16:29 次阅读

今天简报较短,主要演示一下如何在RT-Thread OS环境下使用ncnn进行AI推理

关于NCNN

简介

ncnn 是腾讯优图实验室首个开源项目,是一个为手机端极致优化的高性能神经网络前向计算框架。

ncnn 从设计之初深刻考虑手机端的部属和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。

基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。

ncnn 目前已在腾讯多款应用中使用,如 QQ,Qzone,微信,天天 P 图等。

功能概述

支持卷积神经网络,支持多输入和多分支结构,可计算部分分支

无任何第三方库依赖,不依赖 BLAS/NNPACK 等计算框架

C++ 实现,跨平台,支持 android ios

ARM NEON 汇编级良心优化,计算速度极快

精细的内存管理和数据结构设计,内存占用极低

支持多核并行计算加速,ARM big.LITTLE cpu 调度优化

整体库体积小于 500K,并可轻松精简到小于 300K

可扩展的模型设计,支持 8bit 量化和半精度浮点存储,可导入 caffe 模型

支持直接内存零拷贝引用加载网络模型

可注册自定义层实现并扩展

恩,很强就是了,不怕被塞卷 QvQ

RT-Thread-NCNN使用说明

当前RT-Thread-NCNN工具包仅支持Arm-A核芯片,比如树莓派4B、rk3568等,我们可以在BSP包内找到相关芯片的BSP包。以下演示基于树莓派4B。

1.相关环境

硬件:树莓派4B开发板,带USB转串口调试工具;

系统:RT-Thread OS v5.0.0版本;

开发环境:Windows 10

开发IDE:Vscode;

交叉编译工具链:gcc-arm-10.3-2021.07-mingw-w64-i686-aarch64-none-elf;

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

2.更新package工具包

相关参考:https://github.com/RT-Thread/packages

下载/进入env环境后,找到env根目录下的packages文件夹。

使用git clone https://github.com/RT-Thread/packages.git命令将最新的packages repo 克隆到本地。注:使用方法还可以参考env根目录下的readme.md文件中包管理器使用的章节,可以利用env环境中支持的包管理命令来更新本地packages文件夹。

更新完成后,查看新的软件包中./packages/ai/文件夹中是否出现ncnn文件夹,如果存在则表示软件包更新成功。

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

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

3.准备树莓派4B项目工程

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

进入准备好的RT-Thread开发包,进入./rt-thread/bsp/raspberry-pi/raspi4-64/文件夹。在该目录下启动env,输入如下命令创建新的项目工程。

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

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

此时会在该目录下生成./dist/xxxx文件夹,该文件夹下就是新生成的树莓派4B项目工程,如下图所示:

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

准备好项目工程后,我们将下载好的工具链放置在指定目录,然后修改上面图中rtconfig.py文件中的工具链路径。

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

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

至此,我们已经准备好了一个最基本的项目工程。然后,我们回到env工具中,使用menuconfig命令配置相关packages,这里只引入ncnn工具箱。

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

我们以此进入RT-Thread online packages、AI packages,选中ncnn package for RT-Thread,最终选中v1.0.0版本ncnn,保存并退出。

在env环境中输入下列命令,就可以把ncnn的package拉取到当前工程中。

1pkgs--update

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

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

至此,我们可以尝试编译一下当前项目,不出意外,可以顺利编译。

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

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

4.编译yolov3示例

在编写代码之前,我们需要准备AI模型,可以参考NCNN官方的AI模型库。

参考链接:https://github.com/nihui/ncnn-assets/tree/master

我们以mobilev2-yolov3为例,准备一下资料到sd

mobilenetv2-yolov3.bin

mobilenetv2-yolov3.param

bus.jpg

其中前两个为ncnn指定的模型权重和结构,最后一个是测试图片。都准备好了,我们现在修改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<< 21) - 1, 0x00200000, NORMAL_MEM},
3    {0xFC000000, 0x000100000000 - 1, 0xFC000000, DEVICE_MEM},
4};

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

1#defineRT_MAIN_THREAD_STACK_SIZE245760
2
3#defineFINSH_THREAD_STACK_SIZE245760

以上参数不同模型可能不同,可能需要根据模型规模去估计。

4.修改main.c文件

我们把./packages/ncnn-v1.0.0文件夹打开,里面examples有我们准备好的测试例程,其中main-yolov3.cpp就是我们用来替换main.c文件的,将其替换mian.c文件,并将mian.c改成mian.cpp文件,然后编译。

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

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

注意:我们还要确定我们项目工程已经支持了C++特性和开启了文件系统,如果没有的话还需要通过menuconfig来修改,这一部分不再赘述。

此外,关于如何在树莓派4B开发板中启动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测试结果

串口输出结果:

 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

其中,最后部分输出了推理的结果。

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

如果想更换测试图片,只需要将新的图片名字修改成bus.jpg就可以,这样偷懒,但是简单。

下面这个是另一个测试结果(去掉了标签

当前问题

有部分算子当前在RT-Thread OS上运行时出错,所以如果是想自己搞一个模型跑跑,需要注意这方面问题,good luck。

后续工作

支持RISC-V架构芯片;

解决算子问题;

审核编辑:汤梓红

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 移植
    +关注

    关注

    1

    文章

    367

    浏览量

    27854
  • AI
    AI
    +关注

    关注

    87

    文章

    26450

    浏览量

    264064
  • 命令
    +关注

    关注

    5

    文章

    638

    浏览量

    21849
  • RT-Thread
    +关注

    关注

    31

    文章

    1149

    浏览量

    38892
  • 深度学习
    +关注

    关注

    73

    文章

    5239

    浏览量

    119910

原文标题:【AI简报20230428】如何在RT-Thread OS环境下使用ncnn进行AI推理

文章出处:【微信号:RTThread,微信公众号:RTThread物联网操作系统】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    RT-Thread记录(一、版本开发环境及配合CubeMX)

    RT-Thread 学习记录的第一篇文章,RT-Thread记录(一、RT-Thread 版本、RT-Thread Studio开发环境
    的头像 发表于 06-20 00:28 4485次阅读
    <b class='flag-5'>RT-Thread</b>记录(一、版本开发<b class='flag-5'>环境</b>及配合CubeMX)

    RT-Thread记录(二、RT-Thread内核启动流程)

    在前面我们RT-Thread Studio工程基础之上讲一讲RT-Thread内核启动流程.
    的头像 发表于 06-20 00:30 4416次阅读
    <b class='flag-5'>RT-Thread</b>记录(二、<b class='flag-5'>RT-Thread</b>内核启动流程)

    何在RT-Thread Studio完成对RA2L1板的环境搭建以及gpio的输入输出检测?

    有幸参加RT-Thread的活动,体验RT-Thread Studio 和瑞萨 CPK-RA2L1评估板。本篇文章主要讲解如何在RT-Thread Studio 完成对RA2L1评估板
    的头像 发表于 09-28 15:51 2192次阅读
    如<b class='flag-5'>何在</b><b class='flag-5'>RT-Thread</b> Studio完成对RA2L1板的<b class='flag-5'>环境</b>搭建以及gpio的输入输出检测?

    怎么在 RT-Thread Studio 上使用 RT-Thread Nano

    请教一何在 RT-Thread Studio 上使用 RT-Thread Nano?
    发表于 04-02 07:27

    RT-Thread AI kit轻松部署 STM32Cube-AIRT-Thread 精选资料推荐

    RT-AK 简介RT-AK:RT-Thread AI kit,RT-Thread AI套件
    发表于 07-20 08:20

    何在RT-Thread Studio开发环境使用nrf24L01软件包?

    何在RT-Thread Studio开发环境使用nrf24L01软件包?
    发表于 12-17 07:52

    何在rt-thread的env环境中配置C++11?

    1、rt-thread的env环境是否支持C++112、如何在rt-thread的env环境中配置C++11
    发表于 05-06 09:52

    RT-Thread编程指南

    RT-Thread编程指南——RT-Thread开发组(2015-03-31)。RT-Thread做为国内有较大影响力的开源实时操作系统,本文是RT-Thread实时操作系统的编程指南
    发表于 11-26 16:06 0次下载

    RT-Thread用户手册

    RT-Thread用户手册——本书是RT-Thread的编程手册,用于指导在RT-Thread实时操作系统环境下如何进行编 程。
    发表于 11-26 16:16 0次下载

    RT-Thread开发,如何有效学习RT-Thread的五个步骤

    RT-Thread推出RT-Thread Inside战略开放RT-Thread开发平台授权合作,与硬件十万个为什么合作首次推出第一款RT-Inside的开发板——iBox物联网开发套
    的头像 发表于 09-25 09:55 3.4w次阅读
    <b class='flag-5'>RT-Thread</b>开发,如何有效学习<b class='flag-5'>RT-Thread</b>的五个步骤

    RT-Thread零基础快速入门第0讲——环境安装

    RT-Thread快速入门第1讲——环境安装目录RT-Thread快速入门第1讲——环境安装一、 前言二、 编程资料下载三、 ENV工具下载和安装Git下载和安装env下载和安装
    发表于 12-03 14:21 14次下载
    <b class='flag-5'>RT-Thread</b>零基础快速入门第0讲——<b class='flag-5'>环境</b>安装

    RT-Thread AI kit开源:轻松实现一键部署AI模型至 RT-Thread

    RT-AK 是 RT-Thread 团队为 RT-Thread 实时操作系统所开发的 AI 套件,能够一键将 AI 模型部署到
    发表于 01-25 18:18 3次下载
    <b class='flag-5'>RT-Thread</b> <b class='flag-5'>AI</b> kit开源:轻松实现一键部署<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全球技术大会)致力于围绕
    的头像 发表于 05-27 10:18 1135次阅读
    <b class='flag-5'>RT-Thread</b>大会:瑞萨e- <b class='flag-5'>AI</b>成功案例及部署

    RT-Thread文档_RT-Thread 简介

    RT-Thread文档_RT-Thread 简介
    发表于 02-22 18:22 5次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> 简介

    RT-Thread文档_RT-Thread SMP 介绍与移植

    RT-Thread文档_RT-Thread SMP 介绍与移植
    发表于 02-22 18:31 7次下载
    <b class='flag-5'>RT-Thread</b>文档_<b class='flag-5'>RT-Thread</b> SMP 介绍与移植