学习笔记|如何移植NCNN

news2024/11/18 3:31:21

图片

在计算机视觉和深度学习领域,NCNN(Netural Network Computer Vision)是一个轻量级的神经网络计算框架,被广泛应用于各类嵌入式设备和移动平台。今天,让我们一同跟随共创社团队的步伐,揭秘他们如何进行NCNN的交叉编译,并在ELF 1开发板上演绎实践,以此验证模型推理性能。

1、从GitHub下载NCNN源码:https://github.com/Tencent/ncnn

图片

2、将ncnn-master.zip拷贝到开发环境的/home/elf/work目录下并解压:

elf@ubuntu:~/work$ unzip ncnn-master.zip

3、配置CMake:

elf@ubuntu:~/work$ cd ncnn-master/toolchains/
elf@ubuntu:~/work/ncnn-master/toolchains$ vi arm-poky-linux-gnueabi.cmake

将下面的内容添加到arm-poky-linux-gnueabi.cmake文件中:

set(CMAKE_SYSTEM_NAME Linux)
set(CMAKE_SYSTEM_PROCESSOR arm)
set(CMAKE_C_COMPILER "arm-poky-linux-gnueabi-gcc")
set(CMAKE_CXX_COMPILER "arm-poky-linux-gnueabi-g++")
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)

set(CMAKE_C_FLAGS "-march=armv7-a -mfloat-abi=hard  --sysroot=/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi")

set(CMAKE_CXX_FLAGS "-march=armv7-a -mfloat-abi=hard --sysroot=/opt/fsl-imx-x11/4.1.15-2.0.0/sysroots/cortexa7hf-neon-poky-linux-gnueabi")

# cache flags
set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS}" CACHE STRING "c flags")
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS}" CACHE STRING "c++ flags")

4、编译:

elf@ubuntu:~/work/ncnn-master$ mkdir build
elf@ubuntu:~/work/ncnn-master$ cd build/
elf@ubuntu:~/work/ncnn-master/build$ . /opt/fsl-imx-x11/4.1.15-2.0.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi 
elf@ubuntu:~/work/ncnn-master/build$ cmake -DCMAKE_TOOLCHAIN_FILE=../toolchains/arm-poky-linux-gnueabi.cmake -DNCNN_SIMPLEOCV=ON -DNCNN_BUILD_EXAMPLES=ON -DCMAKE_BUILD_TYPE=Release ..
elf@ubuntu:~/work/ncnn-master/build$ make

5、将编译完成得到的benchmark文件夹(build目录下)和项目文件夹下的benchmark文件夹打包并放到U盘里:

elf@ubuntu:~/work/ncnn-master/build$ tar cvjf benchmark.tar.bz2 benchmark/ ../benchmark/

6、将U盘插入到ELF 1开发板上,拷贝压缩包到/home/root路径下并解压:

root@ELF1:~# cp /run/media/sda1/benchmark.tar.bz2 .
root@ELF1:~# tar xvf benchmark.tar.bz2

 7、测试:

root@ELF1:~# cd benchmark/
root@ELF1:~/benchmark# ./benchncnn

图片

观察结果显示,绝大部分模型均已成功运行,其中所展示的数字指标代表了各自的执行耗时。需注意,数值越小,意味着推理过程的完成速度越快。

通过这次实践,共创社不仅展示了NCNN在嵌入式设备上的灵活性与强大性能,还向我们揭示了深度学习嵌入式技术落地的无限可能,更激励着每一位嵌入式探索者:无论面对何种挑战,只要勇于探索、精于实践,便能在嵌入式技术的海洋中乘风破浪,开辟出一片属于自己的天地。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1713386.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

React Hooks是如何保存的

React 函数式组件是没有状态的,需要 Hooks 进行状态的存储,那么状态是怎么存储的呢?Hooks是保存在 Fiber 树上的,多个状态是通过链表保存,本文将通过源代码分析 Hooks 的存储位置。 创建组件 首先我们在组件中添加两…

净念——雷江书画艺术汇报展暨作品捐赠仪式在合阳博物馆盛大开幕

古莘初夏万物秀,丹青妙笔谱华章!5月25日上午9时,由合阳县委宣传部、合阳文化和旅游局主办,合阳历史文化博物馆、合阳县旅游发展有限公司承办的净念雷江书画艺术汇报展暨作品捐赠仪式在合阳县历史博物馆盛大开幕。 陕西省原副省长魏增军&#…

SAP锁机制(SAP Locks)经验小结

1. 数据一致性与锁 为什么要有锁机制?其背后的核心逻辑在于“保证数据的一致性”。 当数据被应用程序修改时,我们必须要保证修改后的数据具有一致性。在SAP系统中,将一致的数据状态从一个状态变动到另一个一致状态的时间跨度被称为LUW&…

宝塔安装java环境Jdk1.8

1.打开宝塔——选择“终端”——输入SSH的服务器IP和SSH账号,选择密码验证,输入密码 2。登录成功后,输入:yum list java-1.8*,用于列出所有与 “java-1.8” 相关的软件包 yum list java-1.8* 3.安装Jdk1.8: yum insta…

登峰造极,北斗相伴——纪念人类首次登顶珠穆朗玛峰71周年

71年前的今天,1953年5月29日11时30分,人类实现了一个伟大的壮举:首次登上了珠穆朗玛峰,这座海拔8848.86米的世界最高峰。这是一次充满了艰辛、勇气和智慧的探险,也是一次改变了人类历史和文化的探险。 自那以后&#…

有没有好用的供应商协同软件,能实现文件的便捷协作?

制造业供应商间文件协作非常频繁,而频繁的文件协作也是保证业务有效开展的基础,对于确保生产流程的顺畅和高效至关重要。以下是一些常见的制造业供应商文件协作的例子: 采购订单和合同:采购订单是供应商和制造商之间最基本的文件协…

力扣hot100:23. 合并 K 个升序链表

23. 合并 K 个升序链表 这题非常容易想到归并排序的思路,俩升序序列合并,可以使用归并的方法。 不过这里显然是一个多路归并排序;包含多个子数组的归并算法,这可以让我们拓展归并算法的思路。 假设n是序列个数,ni是…

ROS运行文件(LaunchFile)和参数(Parameter)

本文主要介绍ROS的Launch File和Parameter概念,通过Launch File启动单个或多个节点,并通过Parameter配置启动参数。 更多内容,访问专栏目录获取实时更新。 当你的应用中包含了很多工作包,每个工作包了又包含了多个节点时&#xff…

本地部署大模型的几种方式

现在大模型可谓是满天飞, 只要你稍微关注时下的AI资讯, 几乎每天都有新的AI大模型出现. 这之中当然有诸如GhatGPT, Gemini这样的私有化大模型, 更吸引人关注的可能是开源的可私有化部署的一些大模型. 比如Meta前两天开放的Lamma 3, Google的Gemma开源模型, 国内也有Qwen以及YI等…

java海滨学院班级回忆录源码(springboot)

风定落花生,歌声逐流水,大家好我是风歌,混迹在java圈的辛苦码农。今天要和大家聊的是一款基于springboot的海滨学院班级回忆录。项目源码以及部署相关请联系风歌,文末附上联系信息 。 项目简介: 海滨学院班级回忆录的…

高速公路边坡监测预警系统解决方案

一、概述 高速公路是国家交通大动脉,高速公路的安全、稳定是人民生命安全的保障。高速公路地基和边坡在线监测系统是交接高速公路运行状态的耳目,是保证高速公路稳定、安全保障人民生命财产安全、充分发挥高速公路国家交通大动脉的重要手段。高速边坡在线…

Java——执行流程

一、执行流程 1、示例 //第一个Java程序 public class Hello{public static void main(String[] args){System.out.println("Hello World!");} } 编译: 执行: 我们可以看到这里的是类名,而不是字节码文件名 Hello.class &#…

从tensorflow导入EarlyStopping能运行但是一直提示未解析

在pycharm中导入早停机的库时,碰上一个问题 from tensorflow.keras.callbacks import EarlyStopping这一条代码中,EarlyStopping一直有个红色波浪线,代表着找不到这个库,提示未解析啥的。 但是运行是可以运行的,虽然可…

Android Context 详解

一、什么是Context? Context是一个抽象基类。在翻译为上下文,是提供一些程序的运行环境基础信息。 Context下有两个子类,ContextWrapper是上下文功能的封装类(起到方法传递的作用,主要实现还是ContextImpl&#xff0…

[oeasy]python019_ 如何在github仓库中进入目录_找到程序代码_找到代码

继续运行 🥋 回忆上次内容 上上次 真写了万行代码 这 万行代码 都是写在明面上的 这次 使用git命令 下载了 github上面的仓库 下载仓库 之后 又该 怎么办呢?🤔 进入目录 首先看看 目前 在哪个目录 pwd present working directory 当前目…

在全志H616核桃派开发板上进行音频配置的方法详解

耳机口​ 核桃派板载的3.5mm音频输出口,该接口有一定的输出功率,可以使用耳机或者带功放的扬声器都可以播放声音。 查看音频设备​ 可以使用下面指令来查看音频信息: aplay -l音频播放测试​ 播放系统自带wav音频文件测试, 下面指令的au…

【wiki知识库】03.前后端的初步交互(展现所有的电子书)

📝个人主页:哈__ 期待您的关注 目录 一、🔥今日目标 二、📂前端配置文件补充 三、🌏前端Vue的改造 四、💡总结 一、🔥今日目标 在上一篇文章当中,我已带大家把后端的一些基本工…

脑图工具 在学习系统架构中的使用

系统,有人把它比作一个黑盒,有人比作一个树洞。呃,其实二者都隐含的表达了一个意思,盘根错节,一言难尽,欲说还休,说了又像是隔靴搔痒,感觉没说透。 学习,理解和展示一个…

信创操作系统生态

信创操作系统生态 中标麒麟 官网https://www.cs2c.com.cn/scheme/product/7.html 银河麒麟 官网 https://www.kylinos.cn/ 中科方德 官网 https://www.nfschina.com/index.php?catid30 中兴新支点(中兴公司自研的linux操作系统) 官网 http:/…

Facebook开户 | Facebook的CTR是什么?

在当今数字化的营销领域,了解和利用各种指标是成功的关键。其中一个关键指标是CTR,即点击率(Click-Through Rate)。 在Facebook广告中,CTR是一个至关重要的度量标准,它不仅可以衡量广告的效果,还…