当前位置: 首页 > news >正文

arm平台上的MNN编译与运行

0.成果物

直接获取成果物见:https://download.csdn.net/download/u012824853/87867665

以下为编译、运行过程

1.编译准备

在GitHub - alibaba/MNN: MNN is a blazing fast, lightweight deep learning framework, battle-tested by business-critical use cases in Alibaba下载code->downloadZIP

unzip MNN-master.zipcd MNN-mastervim CMakeLists.txt

将其中的MNN_BUILD_DEMO的option改为ON

2.生成Makefile

查看arm的架构,如armv7、v8等,赋值给CMAKE_SYSTEM_PROCESSOR

确定编译结果保存文件的路径赋值给CMAKE_INSTALL_PREFIX

确定编译工具链的位置,赋值给CMAKE_C_COMPILER、CMAKE_CXX_COMPILER

whereis arm-linux-gnueabihf-gcc
arm-linux-gnueabihf-gcc: /root/arm-linux-compiler/gcc-linaro-12.2.1-2023.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc
whereis arm-linux-gnueabihf-g++
arm-linux-gnueabihf-g++: /root/arm-linux-compiler/gcc-linaro-12.2.1-2023.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
mkdir install && mkdir build && cd build
cmake .. \
-DCMAKE_BUILD_TYPE=Release \
-DMNN_BUILD_DEMO=ON \
-DMNN_USE_INT8_FAST=true \
-DMNN_BUILD_TEST=true\
-DMNN_OPENCL=ON \
-DCMAKE_SYSTEM_NAME=Linux \
-DCMAKE_SYSTEM_VERSION=1 \
-DCMAKE_SYSTEM_PROCESSOR=armv7 \
-DCMAKE_INSTALL_PREFIX=/root/mnn/MNN-master/install \
-DCMAKE_C_COMPILER=/root/arm-linux-compiler/gcc-linaro-12.2.1-2023.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
-DCMAKE_CXX_COMPILER=/root/arm-linux-compiler/gcc-linaro-12.2.1-2023.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++

3.编译

执行make

如果遇到报错:

/root/mnn/MNN-master/source/math/Vec.hpp:342:71: error: cannot convert ‘int16x8_t’ to ‘int8x16_t’342 |         auto m0m1 = vtrnq_s8(reinterpret_cast<int8x16_t>(vec0.value), reinterpret_cast<int16x8_t>(vec1.value));|                                                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|                                                                       ||                                                                       int16x8_t
In file included from /root/mnn/MNN-master/source/math/Vec.hpp:15:
/root/arm-linux-compiler/gcc-linaro-12.2.1-2023.01-x86_64_arm-linux-gnueabihf/lib/gcc/arm-linux-gnueabihf/12.2.1/include/arm_neon.h:9532:36: note:   initializing argument 2 of ‘int8x16x2_t vtrnq_s8(int8x16_t, int8x16_t)’9532 | vtrnq_s8 (int8x16_t __a, int8x16_t __b)|                          ~~~~~~~~~~^~~
/root/mnn/MNN-master/source/math/Vec.hpp:343:71: error: cannot convert ‘int16x8_t’ to ‘int8x16_t’343 |         auto m2m3 = vtrnq_s8(reinterpret_cast<int8x16_t>(vec2.value), reinterpret_cast<int16x8_t>(vec3.value));|                                                                       ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~|                                                                       ||                                                                       int16x8_t

则将/root/mnn/MNN-master/source/math/Vec.hpp的342、343行

auto m0m1 = vtrnq_s8(reinterpret_cast<int8x16_t>(vec0.value), reinterpret_cast<int16x8_t>(vec1.value));
auto m2m3 = vtrnq_s8(reinterpret_cast<int8x16_t>(vec2.value), reinterpret_cast<int16x8_t>(vec3.value));

改为

auto m0m1 = vtrnq_s8(reinterpret_cast<int8x16_t>(vec0.value), reinterpret_cast<int8x16_t>(vec1.value));
auto m2m3 = vtrnq_s8(reinterpret_cast<int8x16_t>(vec2.value), reinterpret_cast<int8x16_t>(vec3.value));

重新make -j4

如果发生make进度卡住的情况,则不要加-j4

成果物是libMNN.so

4.模型准备

在Model Zoo · 语雀中找合适的模型,比如:GitHub - Linzaer/Ultra-Light-Fast-Generic-Face-Detector-1MB: 💎1MB lightweight face detection model (1MB轻量级人脸检测模型)

code->downloadZIP,解压

将刚才编译的build的目录/MNN-master/build下的libMNN.so拷贝到Ultra-Light-Fast-Generic-Face-Detector-1MB-master/MNN/mnn/lib下

在Ultra-Light-Fast-Generic-Face-Detector-1MB-master/MNN/CMakeLists.txt中添加:

set(OpenCV_DIR /opencv-3.4.1/build)

opencv3.4.1在ARM平台上的编译方法见:

opencv arm交叉编译与仿真验证详细流程_opencv交叉编译arm_I_am_Damon的博客-CSDN博客

将Ultra-Light-Fast-Generic-Face-Detector-1MB-master/MNN/src/main.cpp中的cv:imshow和cv::waitkey注释掉,因为嵌入式端一般不能显示图像

在Ultra-Light-Fast-Generic-Face-Detector-1MB-master/MNN/下执行:

mkdir build;
cd build;
cmake .. -DCMAKE_SYSTEM_PROCESSOR=armv7 \
-DCMAKE_C_COMPILER=/root/arm-linux-compiler/gcc-linaro-12.2.1-2023.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-gcc \
-DCMAKE_CXX_COMPILER=/root/arm-linux-compiler/gcc-linaro-12.2.1-2023.01-x86_64_arm-linux-gnueabihf/bin/arm-linux-gnueabihf-g++
make -j4;

可生成可执行程序:Ultra-face-mnn

5.板端运行

将opencv生成的所有动态库拷贝到执行设备(arm一般是嵌入式板子)上的/lib/目录下

将libMNN.so也拷贝到执行设备上的/lib/目录下

然后按照Ultra-Light-Fast-Generic-Face-Detector-1MB-master/MNN/README.md执行测试用例:

./Ultra-face-mnn ./model/version-RFB/RFB-320.mnn ./imgs/1.jpg

即可生成代码检测框的图片:

相关文章:

arm平台上的MNN编译与运行

0.成果物 直接获取成果物见&#xff1a;https://download.csdn.net/download/u012824853/87867665 以下为编译、运行过程 1.编译准备 在GitHub - alibaba/MNN: MNN is a blazing fast, lightweight deep learning framework, battle-tested by business-critical use cases …...

python 编译安装指定版本 for linux

python环境是linux中必备的&#xff0c;部分发行版会自带python&#xff0c;有时候需要安装手动安装 注意&#xff1a;如果需要多个版本并存&#xff0c;建议使用conda环境&#xff0c;如果自己配置多版本&#xff0c;需要用多个软链接 conda环境&#xff0c;可以参考&#x…...

在Linux系统下基于Docker搭建Redis集群

创建镜像 #部署Redis集群&#xff0c;该集群有3个节点; --cluster-enabled yes允许启用集群; docker create --name redis-node--01 --net host -v /data/redis-data/node1:/data redis:5.0.5 --cluster-enabled yes --cluster-config-file redis-node--01.conf --port 6379…...

牛客网刷题Day5

1.内容中可以使用哪个元素来表示 <article> 标签外的内容&#xff1f; A aside B cite C article D class 正确答案&#xff1a;A 解析&#xff1a;<aside> 标签定义 <article> 标签外的内容&#xff0c;aside 的内容应该与附近的内容相关 2. 以下的HTML代码…...

Vue.js 中的动态组件是什么?如何使用动态组件?

Vue.js 中的动态组件是什么&#xff1f;如何使用动态组件&#xff1f; Vue.js是一种流行的前端框架&#xff0c;它提供了一种称为“动态组件”的技术&#xff0c;使得我们可以动态地切换组件的内容和结构。在本文中&#xff0c;我们将深入探讨Vue.js中的动态组件&#xff0c;包…...

2023年京东618预售数据:传统滋补成预售黑马,预售额超27亿

这一期主要分享一下此次京东618预售期间的一个黑马行业——传统滋补。不管是从预售量和预售额来看&#xff0c;传统滋补品类的成绩都是此次大促中的佼佼者。 究其原因&#xff0c;近几年养生滋补也掀起了一股“国潮风”。在小红书、抖音等社交平台上&#xff0c;关于“健康养生…...

【Linux系统基础快速入门详解】Linux 常用文件过滤编辑命令原理详解和每个命令使用场景以及实例

Linux 文件过滤编辑命令:echo,printf,cat,tee,特殊符号: {a..z},seq序列,rename 文件过滤编辑命令:echo:将字符串输出到终端或文件中。常用于输出环境变量,或者在shell脚本中输出一些提示信息。例如:echo $PATH,输出环境变量PATH的值。printf:格式化输出字符串到终端或文…...

05WEB系统的通信原理图

WEB系统的通信原理 名称作用URL统一资源定位符, 例如:http://www.baidu.com域名在https://www.baidu.com/这个网址中www.baidu.com 是一个域名IP地址计算机在网络当中的一个身份证号, 在同一个网络当中IP地址是唯一的, 有了IP地址两台计算机直接才能建立连接通信端口号一个计算…...

降低试错成本,低代码或成企业数字化转型突破口

近年来&#xff0c;随着市场竞争和宏观环境的双重驱动&#xff0c;数字化已经成为企业提升竞争性和保持可持续发展的重要手段&#xff0c;大多数企业意识到数字化转型的重要性&#xff0c;纷纷入局。 作为数据驱动业务创新的一个新方法&#xff0c;但行业成功的案例并不多&…...

串口助手(串口发送接收数据, 定时, 清空, hex显示)

文章目录 前言一、串口接收数据1. 默认接收&#xff0c;换行&#xff0c;hex显示2. 清空接收区数据3. 保存接受区数据 二、串口发送数据1. 默认发送2. 定时发送 三、串口助手优化1. 设置组合框当前内容。2. 未检测到串口&#xff0c;弹出警告。3. 载入文件 总结 前言 这篇文章…...

bp神经网络

%% 2.读取数据&#xff08;两个文件&#xff09; datareadmatrix(C:\Users\Administrator\Desktop\synthetic_01.csv); file_lengthlength(data); for i1:file_length %用for循环去导入第二个csv文件 namedata(i); pathstrcat(C:\Users\Administrator\Desktop\ydata.…...

strace交叉编译后对特定文件的写流程进行监控和过滤

交叉编译 为了支持strace对pid进行解析&#xff0c;因系统默认支持的strace版本较低&#xff0c;需要使用较新的版本对strace进行交叉编译&#xff0c;这里使用了github上的 https://github.com/strace/strace/releases 发布的strace v5.19版本&#xff0c;2022-08-12发布。lo…...

初识网络之TCP网络套接字

目录 一、TCP常用网络接口 1. 监听服务器 2. 接收链接 3. 发起连接 二、实现一个简单的tcp程序 1. 日志函数 2. 服务端文件 2.1 .hpp文件 2.2 .cpp文件 3. 客户端文件 3.1 .hpp文件 3.2 .cpp文件 4. 程序测试 三、实现支持多个用户并发访问的tcp程序 1. 当前程序…...

自然语言处理从入门到应用——自然语言处理的基本问题:文本分类(Text Classification, Text Categorization)

分类目录&#xff1a;《自然语言处理从入门到应用》总目录 文本分类&#xff08;Text Classification, Text Categorization&#xff09;是最简单也是最基础的自然语言处理问题。即针对一段文本输入&#xff0c;输出该文本所属的类别&#xff0c;其中&#xff0c;类别是事先定义…...

【论文】——Robust High-Resolution Video Matting with Temporal Guidance浅读

视频matting 时序监督 摘要 我们介绍了一种稳健、实时、高分辨率的人类视频抠图方法&#xff0c;该方法取得了新的最先进性能。我们的方法比以前的方法轻得多&#xff0c;可以在Nvidia GTX 1080Ti GPU上以76 FPS处理4K&#xff0c;以104 FPS处理HD。与大多数现有的逐帧作为独…...

第四章、用户体验五要素之范围层解析(本文作用是通俗讲解,让你更容易理解)

把用户需求和产品目标转换成特定的产品时应该提供给用户什么样的内容或者功能就变成了范围层。 范围层就是定义需求。如果不能很好的定义需求&#xff0c;那么你的软件永远都是测试待发布版本。如果产品只是负责人脑海中的一个不定型印象&#xff0c;那将是灾难性的。 1、产品负…...

计算机毕业论文内容参考|基于python的农业温室智能管理系统的设计与实现

文章目录 导文文章重点前言课题内容相关技术与方法介绍技术分析技术设计技术设计技术实现方面系统测试和优化总结与展望本文总结后续工作展望导文 计算机毕业论文内容参考|基于python的农业温室智能管理系统的设计与实现 文章重点 前言 本文介绍了一种基于Python的农业温室智…...

Java 进阶 -- 流

Java I/O, NIO, and NIO.2 BaseStream<T, S extends BaseStream<T, S>> extends AutoCloseable 流(streams)的基本接口&#xff0c;流是支持顺序和并行聚合操作的元素序列。下面的例子演示了一个使用流类型stream和IntStream的聚合操作&#xff0c;计算红色小部件…...

硬件 TCP/IP 协议栈

目录 全硬件的TCP/IP 协议栈简介以太网接入单片机方案以太网接口芯片CH395Q 简介以太网接口芯片CH395Q 命令简介以太网接口芯片CH395Q 寄存器配置与使用移植CH395Q 源码 TCP_Client 实验TCPClient 配置流程TCPClient 实验硬件设计程序设计下载验证 WebServer 实验WebServer 简介…...

word恢复和粘贴按钮变灰色,不可用怎么办?

如果 Word 中的恢复和粘贴按钮变成灰色&#xff0c;可能是由于以下原因之一&#xff1a; 1. 文档处于只读模式。 2. 与 Office 相关的某些组件已损坏或缺失。 3. Word 的文件权限被配置为只读。 以下是一些可能的解决方法&#xff1a; 1. 检查文档是否处于只读模式。 如果是…...

linux之kylin系统nginx的安装

一、nginx的作用 1.可做高性能的web服务器 直接处理静态资源&#xff08;HTML/CSS/图片等&#xff09;&#xff0c;响应速度远超传统服务器类似apache支持高并发连接 2.反向代理服务器 隐藏后端服务器IP地址&#xff0c;提高安全性 3.负载均衡服务器 支持多种策略分发流量…...

VB.net复制Ntag213卡写入UID

本示例使用的发卡器&#xff1a;https://item.taobao.com/item.htm?ftt&id615391857885 一、读取旧Ntag卡的UID和数据 Private Sub Button15_Click(sender As Object, e As EventArgs) Handles Button15.Click轻松读卡技术支持:网站:Dim i, j As IntegerDim cardidhex, …...

使用分级同态加密防御梯度泄漏

抽象 联邦学习 &#xff08;FL&#xff09; 支持跨分布式客户端进行协作模型训练&#xff0c;而无需共享原始数据&#xff0c;这使其成为在互联和自动驾驶汽车 &#xff08;CAV&#xff09; 等领域保护隐私的机器学习的一种很有前途的方法。然而&#xff0c;最近的研究表明&…...

OkHttp 中实现断点续传 demo

在 OkHttp 中实现断点续传主要通过以下步骤完成&#xff0c;核心是利用 HTTP 协议的 Range 请求头指定下载范围&#xff1a; 实现原理 Range 请求头&#xff1a;向服务器请求文件的特定字节范围&#xff08;如 Range: bytes1024-&#xff09; 本地文件记录&#xff1a;保存已…...

【Web 进阶篇】优雅的接口设计:统一响应、全局异常处理与参数校验

系列回顾&#xff1a; 在上一篇中&#xff0c;我们成功地为应用集成了数据库&#xff0c;并使用 Spring Data JPA 实现了基本的 CRUD API。我们的应用现在能“记忆”数据了&#xff01;但是&#xff0c;如果你仔细审视那些 API&#xff0c;会发现它们还很“粗糙”&#xff1a;有…...

Linux-07 ubuntu 的 chrome 启动不了

文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了&#xff0c;报错如下四、启动不了&#xff0c;解决如下 总结 问题原因 在应用中可以看到chrome&#xff0c;但是打不开(说明&#xff1a;原来的ubuntu系统出问题了&#xff0c;这个是备用的硬盘&a…...

数据库分批入库

今天在工作中&#xff0c;遇到一个问题&#xff0c;就是分批查询的时候&#xff0c;由于批次过大导致出现了一些问题&#xff0c;一下是问题描述和解决方案&#xff1a; 示例&#xff1a; // 假设已有数据列表 dataList 和 PreparedStatement pstmt int batchSize 1000; // …...

网络编程(UDP编程)

思维导图 UDP基础编程&#xff08;单播&#xff09; 1.流程图 服务器&#xff1a;短信的接收方 创建套接字 (socket)-----------------------------------------》有手机指定网络信息-----------------------------------------------》有号码绑定套接字 (bind)--------------…...

【Nginx】使用 Nginx+Lua 实现基于 IP 的访问频率限制

使用 NginxLua 实现基于 IP 的访问频率限制 在高并发场景下&#xff0c;限制某个 IP 的访问频率是非常重要的&#xff0c;可以有效防止恶意攻击或错误配置导致的服务宕机。以下是一个详细的实现方案&#xff0c;使用 Nginx 和 Lua 脚本结合 Redis 来实现基于 IP 的访问频率限制…...

Python Einops库:深度学习中的张量操作革命

Einops&#xff08;爱因斯坦操作库&#xff09;就像给张量操作戴上了一副"语义眼镜"——让你用人类能理解的方式告诉计算机如何操作多维数组。这个基于爱因斯坦求和约定的库&#xff0c;用类似自然语言的表达式替代了晦涩的API调用&#xff0c;彻底改变了深度学习工程…...