做网站的客户哪里找/泰安seo
前言
由于使用的是集群,自己不具有管理员权限,所以以下所有的情况均在非管理员权限下进行安装,即该安装策略仅适用于普通用户构建自己的环境。
什么是NCNN
ncnn是一款非常高效易用的深度学习推理框架,支持各种神经网络模型,如pytorch、tensorflow、onnx等,以及多种硬件后端,如x86、arm、riscv、mips、vulkan等。按照其官网的说明:该框架是一个为手机端极致优化的高性能神经网络前向计算框架,从设计之初深刻考虑手机端的部属和使用。无第三方依赖,跨平台,手机端 cpu 的速度快于目前所有已知的开源框架。基于 ncnn,开发者能够将深度学习算法轻松移植到手机端高效执行,开发出人工智能 APP,将 AI 带到你的指尖。
如何编译安装NCNN
Liunx情况下编译安装文档 点击进入
首先明确由于NCNN为C++实现,所以在编译安装前,需要一些依赖,在官网推荐的编译安装文档中,这样写道:
明显在Linux系统中需要 g++ cmake protobuf opencv (macOS 需要glslang)
一般来讲,Liunx系统一般会内置 g++ 和 cmake,但是版本一般是比较低的版本,主要为了系统的稳定,所以在编译安装NCNN过程中,我们需要对其进行升级操作,以下所有环境的配置和安装均在普通用户环境中进行。
依赖环境配置和安装
1 g++环境
一般来讲,Centos 7 内置的 g++版本为4.8.5,这个版本一般比较旧,现在很多编译都需要在g++ 5.0及以上环境进行,这里给大家推荐我之前的一篇博文,在非root权限下进行 gcc g++的升级,点击进入,这里需要注意,如果您也是集群系统,在编译GCC或者 G++过程中,需要注意下面的细节,这时我踩过的坑,原则上可以装更高的版本现在貌似 G++发展到 9.xxx的版本了。
2 cmake
Centos7内置的Cmake版本一般为2.8.12,这个版本需要升级到 3.*版本,您可以访问 该链接 进行下载对应版本的Cmake,这里以我安装的 cmake 3.17.2为例,推荐大家直接根据系统,然后下载已经编译好的版本,这样子可以省去源码安装,直接配置即可。当然您也可以下载源码版本,自行进行编译安装。这里我简要介绍下两种不同方法的配置安装过程。然后再介绍一种非常简单的基于 yum install 的方法
2.1 Cmake 编译好的版本
即上面的 cmake-3.17.2-Linux-x86_64.tar.gz,这种是最简单的策略,只需要解压后,在用户的环境下进行配置即可使用,比较推荐这个方法。
2.1.1 您可以使用命令下载,也可以直接下载好,传到自己的服务器
如果您直接下载,下载命令:
wget https://cmake.org/files/v3.17/cmake-3.17.2-Linux-x86_64.tar.gz
2.1.2 解压,关键的执行文件在 bin 目录
tar xzvf cmake-3.17.2-Linux-x86_64.tar.gz
2.1.3 配置环境变量
这里我们需要知道,在Linux系统中环境变量有多种,
其中系统环境变量的设置(需要管理员权限)主要有下面的三种方式:
1 /etc/profile :用户登录时执行/etc/profile文件中设置系统的环境变量。但是,Linux不建议在/etc/profile文件中设置系统环境变量。
2 在/etc/profile.d目录中增加环境变量脚本文件,这是Linux推荐的方法,/etc/profile在每次启动时会执行/etc/profile.d下全部的脚本文件。/etc/profile.d比/etc/profile好维护,不想要什么变量直接删除/etc/profile.d下对应的 shell 脚本即可。/etc/profile.d目录下有很多脚本文件,例如:
/etc/profile.d目录中的oracle.sh是Oracle数据库的环境变量配置文件,
3 在/etc/bashrc文件中设置环境变量。该文件配置的环境变量将会影响全部用户使用的bash shell。但是,Linux也不建议在/etc/bashrc文件中设置系统环境变量。
由于我们没有系统管理员权限,所以需要进行用户环境设置,用户环境变量只对当前用户生效,设置用户环境变量也有多种方法。
在用户的主目录,有几个特别的文件,用ls是看不见的,用 ls .bash_* 可以看见。
1).bash_profile(推荐首选)
当用户登录时执行,每个用户都可以使用该文件来配置专属于自己的环境变量。
2).bashrc
当用户登录时以及每次打开新的Shell时该文件都将被读取,不推荐在里面配置用户专用的环境变量,因为每开一个Shell,该文件都会被读取一次,效率肯定受影响。
3).bash_logout
当每次退出系统(退出bash shell)时执行该文件。
4).bash_history
保存了当前用户使用过的历史命令。
综合上面的内容,可以看出 环境变量脚本文件的执行顺序
/etc/profile->/etc/profile.d->/etc/bashrc->用户的.bash_profile->用户的.bashrc
这里我们选用对系统影响最低的 环境变量配置方式 :用户的.bashrc,这样比较保险,也比较稳妥。
vi ~/.bashrc
添加下面的内容
这里需要注意 : 这个符号在 Liunx 系统中为 中文分号或者 append的意思,指的是将我们的 cmake/bin文件夹路径添加至系统路径 $PATH 中,我这里将 : $PATH 置后,即将cmke/bin路径加到了原来的系统PATH之前,即优先加载,您也可以像第二种方式那样书写,在原PATH后加上 cmake/bin路径。
export PATH=/home/y192353/butterfly/extension/cmake_3_17_2/bin:$PATH
或
export PATH=$PATH:/home/y192353/butterfly/extension/cmake_3_17_2/bin
以上配置好后,直接运行环境变量生效命令
source ~/.bashrc
然后查看 cmake 是否配置成功
cmake --version
即安装成功!
2.2 Cmake 源码编译
这需要您下载Cmake的源码,下面箭头指代的地方
下载解压后,文件夹如下,包含各种源码文件
编译运行命令:
如果您尚未解压,先进行解压
tar -zxvf cmake-3.17.2.tar.gz
然后进行逐步编译
#在解压后的cmake-3.17.2文件夹下 创建 build 文件夹
mkdir build
cd build
#这一步很关键,即确定安装路径, 安装至用户对应的文件夹,不然会报权限异常,因为一般默认安装在 (/usr/local/..中)
#这是通过 配置文件进行指定安装目录的
../configure --prefix=/yourPath/cmake-3.17.2
#开启编译安装 这个需要等待一会儿
gmake && gmake install
上述编译安装完成后,即可以进行路径配置了,具体和上面 【2.1.3 配置环境变量】小节一样,不再赘述,只不过这个时候,您的路径需要是上面 --prefix 指定的路径。
2.3 Yum install 直接安装 cmake3(该方法需要后续如果有cmake的操作,要调用 cmake3 才可以)
不想按照上面的方法一步步配置,您可以直接使用下面的命令
yum install cmake3
直接进行安装,然后编译过程中使用 cmake3 进行就行了
3 OpenCv编译安装
先检测自己的系统内是否已经安装过了 OpenCv
pkg-config --modversion opencv
如果已经安装了opencv,会有打印输出,如果没有安装,则需要安装了。
3.1 OpenCv的安装(这里以Opencv3.4.16为例,当然OpenCv4.*也类似),这里建议大家使用 OpenCv4,根据官网的说明OpenCv3会逐渐停止更新,然后推出 OpenCv5
OpenCv的编译源码可以在 点击这里 找到
下载源码后,使用命令解压
unzip opencv-3.4.16.zip
解压后的文件夹
编译安装
cd opencv-3.14.6
#创建编译文件夹
mkdir build
cd build
#使用cmake 进行编译 最后面的两个点也要加上,即默认的安装路径设置为 CMAKE_INSTALL_PREFIX=/YourPath/opencv_3_4_16
cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/YourPath/opencv_3_4_16 -D WITH_TBB=ON -D WITH_V4L=ON -D BUILD_TIFF=ON -D BUILD_EXAMPLES=ON -D WITH_OPENGL=ON -D WITH_EIGEN=ON -D WITH_CUDA=ON -D WITH_CUBLAS=ON ..
#在编译和安装过程中,可以放在 计算节点(GPU)节点进行编译安装
#这里 可以使用 -j16 -j32 原则上都可以,旨在加速编译,需要较长时间
make -j8
#安装,安装的内容放在了 /YourPath/opencv_3_4_16
make install
CMAKE_INSTALL_PREFIX=/YourPath/opencv_3_4_16用来控制安装的路径,否则会产生安装路径权限不够的问题
如果您安装的是 OpenCv4需要在 cmake 命令中再加入:
OPENCV_GENERATE_PKGCONFIG=ON
用来控制是否生成pkg_config文件。这里是opencv3不同的地方,opencv4中如果不加该命令将不会生成pkgconfig,安装完成后找不到opencv.pv文件一般都是因为没加这句控制命令导致的。
3.2 环境变量配置
打开 ~/.bashrc
vi ~/.bashrc
添加内容
PKG_CONFIG_PATH=$PKG_CONFIG_PATH:/YourPath/opencv_3_4_16/lib64/pkgconfig
export PKG_CONFIG_PATH
export LD_LIBRARY_PATH=/YourPath/opencv_3_4_16/lib64/:$LD_LIBRARY_PATH
下面是我的环境变量配置文件,具体路径信息已经隐藏了,整体上就是这个样子
将环境变量生效
source ~/.bashrc
然后检查 opencv 的安装情况即可
pkg-config --modversion opencv
4 安装 protobuf
protobuf (Google Protocol Buffer)是一种平台无关、语言无关、可扩展且轻便高效的序列化数据结构的协议,可以用于网络通信和数据存储。由于我们最终转化的是模型,所以需要这样一个序列化工具。NCNN中需要使用到 protobuf 进行序列化。
protobuf 可进入 点击进入 下载,这里我选择的是 21.11-all 版本,貌似最新的版本中(第二张图),是对所对应的平台有源码 和 已编译版本,这个有点像 Cmake的安装过程,这里,我使用源码进行安装 21.11-all版本 ,
4.1 编译安装
1 解压
tar xzvf protobuf-all-21.11.tar.gz
2 编译安装
#切换到解压后的 protobuf 文件夹
#这个会自动生成一些文件
./autogen.sh
#配置后期的编译安装过程
./configure --prefix=/YourPath/protobuf_21_11
#编译和安装
make -j8
make install
编译安装后在 /YourPath/protobuf_21_11 路径下,会看到
3 环境变量配置(还是在 ~/.bashrc 中),不要忘了 source 一下
即如图,将编译后的 bin 路径配置在 $PATH 路径中即可。
4 验证安装成功
protoc --version
5 编译安装 NCNN
点击 下载 官方源码,然后进行解压安装
也可以使用下面的命令进行一站下载编译
git clone https://github.com/Tencent/ncnn.git
cd ncnn
#这个是为了下载一些未下载的子包
git submodule update --init
#在文件夹中创建的新文件夹
mkdir build
cd build
#此步之后 , 推荐在 计算节点 含 GPU的节点操作
#注意 cmake 后面有两个点 即 使用 ../CMakeLists.txt 文件作为起始点在当前目录中生成
cmake .. (本步如果您 yum install cmake3,可以使用 cmake3 .. )
#也可以是 -j16 -j32等 加速编译
make -j8
make install
以上即全部过程,后续如果有问题,还会再次补充!
相关文章:

【亲测】Centos7系统非管理(root)权限编译NCNN
前言 由于使用的是集群,自己不具有管理员权限,所以以下所有的情况均在非管理员权限下进行安装,即该安装策略仅适用于普通用户构建自己的环境。 什么是NCNN ncnn是一款非常高效易用的深度学习推理框架,支持各种神经网络模型&#x…...

四种常见的异步请求方式
四种常见的异步请求方式 一、xhr异步老祖 XMLHttpRequest(简称XHR)是一种在JavaScript中创建异步请求的技术。XHR对象可以向服务器发送请求,并获取服务器返回的数据,而不会使页面刷新。 XHR对象的创建方式通常是通过构造…...

Linux操作系统学习(进程间通信)
文章目录进程间通信进程通信的意义进程通信的方式1.基于文件的方式匿名管道命名管道2.基于内存的通信方式共享内存验证内核相关的数据结构了解进程间通信 进程通信的意义 当我们和另一个人打电话时两部手机都是独立的,通过基站传递信号等等复杂的过程就实现了通…...

单目标追踪——【相关滤波】C-COT原理与ECO基于C-COT的改进
目录C-COT:Continuous Convolution Operator Tracker文章侧重点连续卷积算子目标追踪框架初始化过滤器:追踪流程ECO文章侧重点因式卷积因子生成采样空间模型模型更新策略论文链接:C-COT:Beyond Correlation Filters: Learning Con…...

C++中栈是如何实现,以及常用的栈函数都有哪些
什么是栈? 栈 是一种特殊的数据结构,它是一种按照 Last-In-First-Out (LIFO) 访问模式存储和访问数据的特殊结构。 换句话说,栈中的最后一个元素将成为最先出栈的元素,这也意味着新增加的元素在栈的顶部,而出栈的元素…...

我就不信你还不懂HashSet/HashMap的底层原理
💥注💥 💗阅读本博客需备的前置知识如下💗 🌟数据结构常识🌟👉1️⃣八种数据结构快速扫盲🌟Java集合常识🌟👉2️⃣Java单列集合扫盲 ⭐️本博客知识点收录于…...

Qt中调用gtest进行单元测试及生成覆盖率报告
一.环境配置 googletest地址:https://github.com/google/googletest 我下载的是1.12.1,这是最后一个支持C++11的版本。 首先编译gtest,在windows上的编译方式和编译gRPC一模一样,详见Qt中调用gRPC,编译完了会生成几个静态库,如下图所示 本文主要用到了libgtest.a 下载ms…...

ChatGPT vs Bard 背后的技术对比分析和未来发展趋势
ChatGPT vs Bard 背后的技术对比分析和未来发展趋势 目录 ChatGPT vs Bard 背后的技术对比分析和未来发展趋势...

搜索引擎的设计与实现
技术:Java、JSP等摘要:随着互联网的快速发展,网络上的数据也随着爆炸式地增长。如何最快速筛选出对我们有用的信息成了主要问题。搜索引擎是指根据一定的策略、运用特定的计算机程序从互联网上搜集信息,在对信息进行组织和处理后&…...

动态规划之买卖股票问题
🌈🌈😄😄 欢迎来到茶色岛独家岛屿,本期将为大家揭晓动态规划之买卖股票问题 ,做好准备了么,那么开始吧。 🌲🌲🐴🐴 动态规划算法本质上就是穷举…...

MySQL学习笔记之子查询
自连接方式 自连接就是表A连接表A,通过where关键字实现,比如查询工资比Abel高的员工信息: SELECTe2.last_name,e2.salary FROMemployees e1,employees e2 WHEREe1.last_name "Abel" AND e2.salary > e1.salary;子查询 亦称为…...

HCIP-5OSPF域内域间外部路由学习笔记
1、OSPF区域 每个区域都维护一个独立的LSDB。 Area 0是骨干区域,其他区域都必须与此区域相连。 划分OSPF区域可以缩小路由器的LSDB规模,减少网络流量。 区域内的详细拓扑信息不向其他区域发送,区域间传递的是抽象的路由信息,而不…...

【编程实践】简单是好软件的关键:Simplicity is key to good software
Simplicity is key to good software 简单是好软件的关键 目录 Simplicity is key to good software简单是好软件的关键 Complexity is tempting. 复杂性很诱人。 The smallest way to create value创造价值的最小方法 Simple 简单的 Complexity is tempting. 复杂性很诱人…...

Python|贪心|数组|二分查找|贪心|数学|树|二叉搜索树|在排序数组中查找元素的第一个和最后一个位置|计数质数 |将有序数组转换为二叉搜索树
1、在排序数组中查找元素的第一个和最后一个位置(数组,二分查找) 给定一个按照升序排列的整数数组 nums,和一个目标值 target。找出给定目标值在数组中的开始位置和结束位置。 如果数组中不存在目标值 target,返回 […...

操作系统——15.FCFS、SJF、HRRN调度算法
这节我们来看一下进程调度的FCFS、SJF、HRRN调度算法 目录 1.概述 2.先来先服务算法(FCFS,First Come First Serve) 3.短作业优先算法(SJF,Shortest Job First) 4.高响应比优先算法(HRRN&…...

如何防止用户打开浏览器开发者工具?
大家好,我是前端西瓜哥。作为一名前端开发,在浏览一些网页时,有时会在意一些交互效果的实现,会打开开发者工具查看源码实现。 但有些网站做了防窥探处理,打开开发者工具后,会无法再正常进行网页的操作。 …...

C语言-基础了解-12-C数组
C数组 一、C数组 C 语言支持数组数据结构,它可以存储一个固定大小的相同类型元素的顺序集合。数组是用来存储一系列数据,但它往往被认为是一系列相同类型的变量。 数组的声明并不是声明一个个单独的变量,比如 runoob0、runoob1、…、runoo…...

RocksDB 架构
文章目录1、RocksDB 摘要1.1、RocksDB 特点1.2、基本接口1.3、编译2、LSM - Tree2.1、Memtable2.2、WAL2.3、SST2.4、BlockCache3、读写流程3.1、读取流程3.2、写入流程4、LSM-Tree 放大问题4.1、放大问题4.2、compactionRocksDB 是 Facebook 针对高性能磁盘开发开源的嵌入式持…...

MVVM和MVC的区别
首先,MVVM 和 MVC 都是一种设计模式MVCM(Model): 模型层。 用于处理应用程序数据逻辑的部分,模型对象负责在数据库中存取数据V (View): 视图层。 处理数据显示的部分 ,视…...

c++11 标准模板(STL)(std::unordered_map)(三)
定义于头文件 <unordered_map> template< class Key, class T, class Hash std::hash<Key>, class KeyEqual std::equal_to<Key>, class Allocator std::allocator< std::pair<const Key, T> > > class unordered…...

OpenGL环境配置
方法一:1.下载GLFW点击GLFW跳转2.下载后解压3.下载glad,解压后4.用vs2019新建Cmake项目5.在新建的Cmake项目下建立depend文件夹在depend里放置我们下载解压的glad和glfw-3.3.8.bin.WIN646.项目中可以看到我们加进来的文件7.编写我们项目的CMakeLists.txt…...

SpringCloud之 Eureka注册中心
文章目录Eureka注册中心一、服务注册与发现1.1 依赖导入①父工程 SpringCloud 版本管理②Eureka 服务端依赖③Eureka 客户端依赖1.2 服务注册①创建 Eureka 服务端的主类②设置 Eureka 服务端的配置文件③设置 Eureka 客户端的配置文件④关闭自我保护机制1.3 服务发现①远程调用…...

Linux入门篇-用户管理
简介 linux基本的用户管理。 ⽤户的管理(切换到root) ⽤户的添加(useradd) ⽤户的删除(userdel) ⽤户的修改(usermod) ⽤户的查看(查看/etc/passwd) id⽤户组的管理(切换到root) …...

G. Special Permutation(构造)
1、题目 G. Special Permutation 这道题的意思是给我们从111到nnn的排列,然后我们对这个排列的顺序上进行调换,需要满足的条件是任意两个相邻元素的绝对值的差满足条件:2≤∣pi−pi1∣≤42\leq |p_i-p_{i 1}|\leq 42≤∣pi−pi1∣≤4 …...

QML动态对象管理
QML中有多种方式来动态创建和管理QML对象: Loader (加载器)Repeater(复制器)ListView,GridWiew,PethView(视图) (之后会介绍)使用加载器ÿ…...

cmake入门03 -自定义find外部库
自定义检测外部库使用pkg-config查找库搜索.pc配置文件cmake函数链接到库自定义find库检测外部库的便捷方法:使用CMake自带的find-module使用<package>Config.cmake, <package>ConfigVersion.cmake和<package>Targets.cmake。这些文件由软件商提供…...

Dubbo源码解析-——服务导出
前言 在之前我们讲过Spring和Dubbo的集成,我们在服务上标注了DubboService的注解,然后最终Dubbo会调用到ServiceBean#export方法中,本次我们就来剖析下服务导出的全流程。 一、前置回顾 由于ServiceBean实现了ApplicationListener接口&…...

vue+django+neo4j 基于知识图谱红楼梦问答系统
vuedjangoneo4j 基于知识图谱红楼梦问答系统 项目背景 知识图谱是一种以图谱形式描述客观世界中存在的各种实体、概念及其关系的技术, 广泛应用于智能搜索、自动问答和决策支持等领域. 可视分析技术可以将抽象的知识图谱映射为图形元素, 帮助用户直观地感知和分析数据, 从而提…...

2023年全国最新食品安全管理员精选真题及答案13
百分百题库提供食品安全管理员考试试题、食品安全员考试预测题、食品安全管理员考试真题、食品安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 121.关于食品召回的说法,以下表述不正确的是(&am…...

Keychron K7 Pro 轻薄矮轴机械键盘开箱体验
文章目录1. 拆箱2. 零件3. 外观4. 声音5. 特点5.1 有线 / 无线5.2 RGB背光5.3 轻薄5.4 mac / win / iphone 切换5.5 人体工程学支持5.6 扁平双射PBT键帽5.7 重新设计的稳定器5.8 扁平Gateron(佳达隆)轴体5.9 热插拔5.10 支持 QMK / VIA 改键6. 对比6.1 K7 与 K7 Pro 参数对比6.…...