【树莓派4B】darknet-nnpack的安装及使用

2023-11-20

前言

darknet-nnpack是针对Arm处理器进行优化的YOLO版本,虽然只能执行YOLO-tiny,但是不需要GPU即可运行,使用YOLOv3-tiny模型预测用时约为1~1.2s,是树莓派的合适之选。


步骤

备选方法:直接下载 配置好环境的树莓派系统镜像。安装好系统后即完成环境配置。

下面介绍手动配置的方法。

1. 下载依赖项

sudo apt-get install -y cmake make

2. 安装NNPACK-darknet

首先,进入安放文件的文件夹。

下载并编译NNPACK-darknet

git clone https://github.com/mrhosseini/NNPACK-darknet
mkdir build
cd build
cmake .. -DCMAKE_C_FLAGS=-march=armv6k
make

退回NNPACK-darknet文件夹后配置环境变量

cd ..
sudo cp `find . -name "*.a" ` /usr/lib/
sudo cp include/nnpack.h /usr/include/
sudo cp deps/pthreadpool/include/pthreadpool.h /usr/include/

过程中如有报错请参见文末错误处理章节。


3. 下载darknet-nnpack

安装依赖项

sudo apt-get install -y clang

下载并编译darknet-nnpack

git clone https://github.com/digitalbrain79/darknet-nnpack.git
cd darknet-nnpack

如果需要和OpenCV结合的话,首先确保安装了OpenCV,具体的安装方法参见:树莓派下载OpenCV

然后,编辑Makefile文件,将文件开头的OPENCV=0改为OPENCV=1
在这里插入图片描述

进行编译

make

过程中如有报错请参见文末错误处理章节。


4. 使用YOLO进行预测

可以用来检测图像和视频。命令分别是
图像:./darknet detector test xxx
视频:./darknet detector demo xxx

过程中如有报错请参见文末错误处理章节。

检测图像

因为默认是coco数据集(80个分类),所以这里也用对应的coco数据集的权重文件,否则需要特别修改分类数量来对应起来。

下载yolov3-tiny.weights权重文件

wget https://pjreddie.com/media/files/yolov3-tiny.weights

darknet-nnpack目录下,输入命令开始预测

./darknet detect cfg/yolov3-tiny.cfg yolov3-tiny.weights data/dog.jpg

在这里插入图片描述

因为没有安装opencv,所以需要手动打开预测结果图predictions.jpg

效果如下
在这里插入图片描述
yolo v3也可以使用,不过极其慢,用了几分钟才出结果,但准确度确实比起tiny版本高不少。
在这里插入图片描述


检测视频

./darknet detector demo ./cfg/coco.data ./cfg/yolov3-tiny.cfg ./yolov3-tiny.weights <视频文件路径> -i 0 -thresh 0.25

如果出现Video-stream stopped!则说明文件路径错误,导致检测出文件不存在。

检测视频流

这里介绍结合IP摄像头的视频流检测。相同分辨率、帧率的视频流往往比视频的检测速度要快,可能的解释是视频文件往往经过压缩,解压缩步骤需要额外耗时。

手机安装IP Camera,打开rtsp服务器,开始推送视频流。

树莓派进入darknet-nnpack目录

下载权重文件

wget https://pjreddie.com/media/files/yolov3-tiny.weights

开始预测

# ./darknet detector demo <预测用数据路径> <配置文件路径> <权重文件路径> rtsp://<用户名>:<密码>@<ip地址>:<端口/<后缀> -i 0 -thresh <可信度threshold>
./darknet detector demo ./cfg/coco.data ./cfg/yolov3-tiny.cfg ./yolov3-tiny.weights rtsp://admin:admin@172.20.9.53:8554/live -i 0 -thresh 0.25

不过非常的慢,FPS只有0.1

可能的替代方案:

  1. 自行编写代码
  2. 奇怪的是有位博主在树莓派4B上跑darknet-nnpack,使用yolov3-tiny能达到每秒2帧:在树莓派RaspberryPi上构建Darknet。已知的不同是使用的系统不同:Debian 11 Bullseye(本文)VS Debian 10 buster(他的),但不排除其他可能性
  3. YOLO-fastest(参见YOLO-fastest作者在知乎上的介绍文章
  4. 使用Movidius NCS + OpenVINOYOLO and Tiny-YOLO object detection on the Raspberry Pi and Movidius NCS

错误处理

make 时报错 undefined reference to `cpuinfo_deinitialize’

原因是在cmake步骤中,没有指定系统架构。解决办法如下:

情况一:编译NNPACK-darknet时出现此问题

进入NNPACK-darknet/build文件夹中,带上参数-DCMAKE_C_FLAGS=-march=armv6k重新cmake,然后再次make

cmake .. -DCMAKE_C_FLAGS=-march=armv6k
make

情况二:编译darknet-nnpack时出现此问题

进入darknet-nnpack文件夹中,带上参数-DCMAKE_C_FLAGS=-march=armv6k重新cmake,然后再次make

cmake .. -DCMAKE_C_FLAGS=-march=armv6k
make

检测视频时出现 Video-stream stopped!

视频文件路径错误导致检测出文件不存在。


报错 segment fault

可能是检测图片和检测视频的命令用错了。

图像:./darknet detector test xxx
视频:./darknet detector demo xxx


附录:配置、权重文件下载

更多COCO数据集的weightscfg文件可以从YOLO官网下载
在这里插入图片描述

VOC权重文件可以在digitalbrain79/darknet-nnpack - github页面下载

在这里插入图片描述


参考链接

Raspberry Pi學習筆記(二十七):在Pi上執行YOLOv3

digitalbrain79/darknet-nnpack

mrhosseini/NNPACK-darknet

Make error #189

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【树莓派4B】darknet-nnpack的安装及使用 的相关文章

  • JSLint:在定义之前使用

    你好 我有 3 个 javascript 文件 jquery js 实用程序 js file1 js 在 file1 js 我有 jQuery noConflict jQuery document ready function 我收到错误
  • 构建 OpenCV 2.4.x 时出错“未定义对 av_opt_set@LIBAVUTIL_51 的引用”

    我尝试过构建 2 4 的所有版本 当 链接 CXX 可执行文件 bin opencv test core 时 它们都失败 usr local lib libavcodec so 54 undefined reference to av op
  • false 的未定义方法 `+@':FalseClass (NoMethodError) ruby

    def next prime number last known prime while true last known prime found factor false ERROR for i in 1 last known prime
  • 注意:未定义的变量:第 2 行 C:\xampp\htdocs\hoc\get_session.php 中的 _SESSION

    第一页 第二页
  • Typescript 2.0 typeof null 变量未定义

    我刚刚学习 Typescript 遇到了一种奇怪的行为 我试图声明两个变量null和另一个undefined因为它是 Typescript 2 0 中引入的新功能 let myNullVar null let myNullVar2 unde
  • PHP 未定义索引错误

    我是 PHP 新手 我收到此错误 注意 var www test modifyform php 上未定义索引 productid 32号线 注意 未定义索引 在线 var www test modifyform php 中的名称 33 注意
  • Typescript:获取未定义的值

    我好像有一个问题无法解决 我希望 dialogTitle 变量也与标题变量一起显示 startHour 和 startMinute 变量 然而 我似乎在标题后得到了标题和 未定义 两次 我应该怎么办 事件表单 component ts im
  • NodeJS Express req.session 未定义

    就是想不通这个 我发现的关于快速会话的所有内容都表明它确实有效 但对我来说并非如此 我的整个应用程序配置 app configure gt app set port process env PORT 3000 app set views p
  • 为什么新的 javascript 数组有“未定义”条目?

    下面是一个示例 演示了一个数组 当您填充该数组时 它也会获取其中所有类型的未定义条目 这是在 firefox 19 0 firebug 上发生的 不确定在其他浏览器上是否也会发生 基本流程 对象已初始化 最底层 它调用 负载 当ajax加载
  • 无法解析 netParameter 文件

    gt py yolo py video path F Data Science Python37 Scripts YOLO videos lowres mp4 Traceback most recent call last File yol
  • C 中的整数溢出:标准和编译器

    感谢 Carl Norum 的编辑 以包含正确的标准参考 C 标准规定 If an 特殊情况发生在表达式求值期间 即 如果结果未在数学上定义或不在其类型的可表示值范围内 则行为未定义 是否有编译器开关可以保证整数溢出时的某些行为 我想避免鼻
  • 导轨型号

    我有一个名为 test rb 的模型 当我在控制器中使用 tests Test new 时 出现以下错误 有人可以告诉我如何解决这个问题吗 测试 模块的未定义方法 新 如果您认为存在命名冲突 则看起来 test 已经是名为 Test 的模块
  • 通过 JavaScript 将变量从一个 html 页面传递到另一页面

    我有两个页面 第 1 页 和 第 2 页 在第 1 页上有一个文本框 其值为例如100 最后有一个按钮 通过按下按钮 我希望 javascript 将文本框的值保存在全局 变量中并跳转到第 2 页 通过 window onload 我想要第
  • yolo算法的坐标输出代表什么?

    我的问题与这个主题类似 当我开始思考 yolo 算法的输出时 我正在观看 Andrew Ng 的关于边界框预测的讲座 让我们考虑这个例子 我们使用 19x19 网格和只有一个具有 2 个类的感受野 所以我们的输出将是 gt 19x19x1x
  • 如何将 Makefile 中的警告视为错误?

    是否可以将警告视为 Makefile 中的错误 从而在 Makefile 继续之前退出 此外 是否可以过滤掉哪个警告会产生错误 我的用例 我想使用 warn undefined variables与此结合 当变量未定义时 Makefile
  • 暗网 YOLO 图像大小

    我正在尝试在 Darknet YOLO v2 中训练自定义对象分类器https pjreddie com darknet yolo https pjreddie com darknet yolo 我收集了一个图像数据集 其中大多数尺寸为 6
  • React Props 未定义

    我无法理解为什么我的 props updateBuilding 不起作用 当 prop 位于 render 方法中时 以下内容有效 class Buildings extends Component constructor props su
  • JavaScript: 假 ||未定义与未定义 ||错误的

    行为的解释是什么运算符 逻辑或 当与false and undefinedJavaScript 中的两边 1 gt false undefined undefined 2 gt undefined false false 逻辑性OR运算符不
  • YOLO 目标检测:算法如何预测大于网格单元的边界框?

    我试图更好地理解 YOLO2 和 3 算法的工作原理 该算法处理一系列卷积 直到达到13x13网格 然后它能够 对每个网格单元内的对象以及这些对象的边界框进行分类 如果您查看这张图片 您会发现红色边框比任何单个网格单元都大 边界框也以对象的
  • Typescript 上的 Drawflow 库

    我目前正在尝试实现 Jerosoler 制作的很棒的 Drawflow 库 在这里找到 https github com jerosoler Drawflow https github com jerosoler Drawflow 在我的

随机推荐

  • ABAP--新语法--Open SQL--第四天-- From Table

    From Table Internal Table 在 ABAP 7 52 后 支持将内表作为数据源使用 内表作为数据源使用时 需要定义别名并使用转义符 该用法可以用来代替 FOR ALL ENTRIES IN 但FROM 语句中最多使用一
  • java脚本引擎Groovy实战

    前言 互联网时代随着业务的飞速发展 不仅产品迭代 更新的速度越来越快 个性化需求也是越来越多 如何快速的满足各种业务的个性化需求是我们要重点思考的问题 我们开发的系统如何才能做到热部署 不重启服务就能适应各种规则变化呢 实现业务和规则的解耦
  • APP环信集成 -JAVA后端

    环信的集成有两种方式 一种是先创建IM账号 然后在创建客服账号 在客服账号中新建渠道中 点击关联IM账号 这样创造出的关联以IM为主 收费要收取客服和IM两项费用 官方论坛里有给出这种方式的JAVA demo这里不过的赘述 这种场景适用于类
  • object.definepProperty使用方法,vue2双向绑定原理

    首先要介绍的是definepProperty的三个参数 object definepProperty 对象名 属性名 属性值 再者要介绍的就是属性值了 object definepProperty person age value 18 此
  • 【微服务架构设计】微服务不是魔术:处理超时

    微服务很重要 它们可以为我们的架构和团队带来一些相当大的胜利 但微服务也有很多成本 随着微服务 无服务器和其他分布式系统架构在行业中变得更加普遍 我们将它们的问题和解决它们的策略内化是至关重要的 在本文中 我们将研究网络边界可能引入的许多棘
  • std::chrono::steady_clock 实现精准休眠

    include
  • 【PAT】B1032 挖掘机技术哪家强 (20 分)_C语言实现

    1 挖掘机技术哪家强 20 分 为了用事实说明挖掘机技术到底哪家强 P A T PAT PAT 组织了一场挖掘机技能大赛 现请你根据比赛结果统计出技术最强的那个学校 输入格式 输入在第 1
  • 诡异至极的SQL Server推送数据到MQ日期早48小时的生产问题排查

    背景 应用迁移 即旧版应用下线 新版应用上线 停掉旧版应用里面的quartz任务 开启新版的xxl job调度任务 数据推送源头是SQL Server 目的地是MQ 问题爆出 今天iview的自动导出任务从老系统迁移到新系统 下午2点40
  • 【设计模式】工厂模式(Factory Pattern)

    1 概述 工厂模式 Factory Pattern 是最常用的设计模式之一 它属于创建类型的设计模式 它提供了一种创建对象的最佳方式 在工厂模式中 我们在创建对象时不会对客户端暴露创建逻辑 并且是通过一个共同的接口来指向新创建的对象 工厂模
  • docker入门

    Docker基础 docker保姆级教程 https github com yeasy docker practice blob master SUMMARY md Docker系统有两个程序 docker服务端和docker客户端 其中d
  • 安装并配置HBase集群(5个节点)

    安装并配置HBase 集群规划 HBase2 2 5安装 将安装包拷贝到5台机器上并解压缩 配置环境变量 配置HBase 时间同步 修改 usr local src hbase 2 2 5 conf hbase env sh 文件 修改 h
  • SitePoint播客#61:HTML5 =厨房水槽

    Episode 61 of The SitePoint Podcast is now available This week your hosts are Patrick O Keefe iFroggy Stephan Segraves s
  • AWS动手实验 - 创建一个Web3网站

    实验操作和录播 亚马逊云科技开发者社区 web3 dApp demo README CN md at main Chen188 web3 dApp demo GitHub 注意事项 按照操作手册进行即可 需要注意到的几个地方 1 EC2 的
  • C#使用Socket建立连接、通信,主动发送Close关闭, 随后进行下一次的连接,此时会出错,通信端口被占用

    C 使用Socket建立连接 通信之后 主动发送Close关闭 随后进行下一次的连接 此时会出错 通信端口被占用 当你关闭一个Socket连接后 操作系统会在一段时间内保持该端口处于TIME WAIT状态 在这个状态下 该端口是不可用的 直
  • Qt数据类型与强制转换(转)

    类型转换 把QString转换为 double类型 方法1 QString str 123 45 double val str toDouble val 123 45 方法2 很适合科学计数法形式转换 bool ok double d d
  • java源文件命名规则

    Java程序源文件的命名不是随意的 Java文件的命名必须满足如下规则 Java程序源文件的扩展名必须是 java 不能是其他文件扩展名 在通常情况下 Java程序源文件的主文件名可以是任意的 但有一种情况例外 如果Java程序源代码里定义
  • SpringMVC加载流程

    这节介绍SpringMVC SpringMVC是一种基于Java的实现MVC设计模式的请求驱动类型的轻量级Web框架 本章会介绍相关概念 流程 再从源码进行讲解 1 MVC MVC Model View Controller 是一种软件设计
  • Zookeeper(三)—分布式锁实现

    一 独占锁原理 独占锁是利用zk同一目录下不能创建多个相同名称的节点这个特性 来实现分布式锁的功能 竞争锁的分布式系统 都在zk根目录下创建一个名为lock的节点 创建节点成功的系统 说明抢到了这把锁 没有创建成功的系统 说明这个节点已经被
  • 星星之火-22: 什么是手机小区重选?跳槽

    小区重选 cell reselection 指手机在空闲模式下 通过监测邻区和当前小区的信号质量以选择一个最好的小区提供服务信号的过程 选择了一家新公司 并不意味着永久待在一家公司 当前服务的公司 有可能由于经营状况变变糟 薪资水平下降 也
  • 【树莓派4B】darknet-nnpack的安装及使用

    文章目录 前言 步骤 1 下载依赖项 2 安装NNPACK darknet 3 下载darknet nnpack 4 使用YOLO进行预测 检测图像 检测视频 检测视频流 错误处理 make 时报错 undefined reference