Ubuntu下darknet yolo4的编译

news/2024/11/18 15:40:54/文章来源:https://www.cnblogs.com/code-pigeon/p/18199236

Ubuntu下darknet yolo4的编译

首次编辑:24/5/17/23:16
最后编辑:24/5/18/12:47

参考链接

  1. YOLOv4-darknet installation and usage on your system (Windows & Linux)
  2. Installing and Building Darknet
  3. 官网

0 说明

此博客只记录darknet yolo4 + opencv的编译安装,不涉及cuda和cuDNN。

1 编译的源文件

darknet的github地址为https://github.com/AlexeyAB/darknet。

首先要明确darknet这个darknet的版本,建议点开仓库中的cfg文件夹,看看里面有没有以yolov4开头的文件,有的话才是yolo4版本。
之前第一次编译的时候很神奇地编译了yolo3版本,但明明github链接地址看起来是一样的,还是谨慎为妙。

1.1 克隆仓库

git clone https://github.com/AlexeyAB/darknet.git

建议后面这个仓库链接还是直接去GitHub上复制。

1.2 修改Makefile

克隆完仓库之后,进入darknet文件夹。里面有个叫Makefile的文件,用代码/文本编辑器打开它。
在Makefile文件的前几行中:

GPU=0  # gpu加速,应该就是配合cuda toolkit的
CUDNN=0  # 这个应该也是cuda加速的 
CUDNN_HALF=0  # 同上
OPENCV=0  
AVX=0  # x86架构处理器指令集的一个扩展,用于提高并行计算的速度
OPENMP=0  # Open Multi-Processing,cpu加速
LIBSO=0  # 是否将darknet编译成静态库
ZED_CAMERA=0  # to enable ZED SDK 3.0 and above
ZED_CAMERA_v2_8=0  # to enable ZED SDK 2.X

如果没有这么多选项那么应该是克隆错版本了。

OPENCV = 0改为OPENCV = 1,如果有cuda和cudnn的话就把前三行的值都改为1。其它的几个选项可以根据自己的电脑情况和需求自行更改。

一般操作到这里就改完了,但由于我的opencv是通过源码编译安装的,还需要改一点东西。


如果opencv是源码编译的
在Makefile文件中找到下面片段:

ifeq ($(OPENCV), 1)
COMMON+= -DOPENCV
CFLAGS+= -DOPENCV
LDFLAGS+= `pkg-config --libs opencv4 2> /dev/null || pkg-config --libs opencv`
COMMON+= `pkg-config --cflags opencv4 2> /dev/null || pkg-config --cflags opencv`
endif

LDFLAGS+=后面的值改为

-L/path/to/opencv/lib -lopencv_gapi -lopencv_highgui -lopencv_ml -lopencv_objdetect -lopencv_photo -lopencv_stitching -lopencv_video -lopencv_calib3d -lopencv_features2d -lopencv_dnn -lopencv_flann -lopencv_videoio -lopencv_imgcodecs -lopencv_imgproc -lopencv_core

其中path/to/opencv/是opencv的路径。

然后将COMMON+=后面的值改为

-I/path/to/opencv/include/opencv4

1.3 执行Make

打开终端,进入darknet文件夹,执行make。等待编译完成。

2 测试darknet

2.1 测试可执行文件

打开终端,在darknet文件夹下,执行./darknet,若输出usage: ./darknet <function>,则表示编译成功。

2.2 测试物体识别功能

首先为了测试,我们要先下载一下别人训练好的权重文件。打开终端,在darknet文件夹下,执行:

wget https://github.com/AlexeyAB/darknet/releases/download/darknet_yolo_v3_optimal/yolov4.weights

检测图片

接着检测一下cv小狗的图片

./darknet detector test cfg/coco.data cfg/yolov4.cfg yolov4.weights data/dog.jpg

正常情况下,将会弹出一个窗口,正是那张经典的cv小狗加自行车的检测图像。
cv小狗

检测视频

没有装cuda的情况下,检测视频可能会非常慢,展示检测结果的窗口可能会很久才弹出。

./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights <video file>

<video file>替换成你的视频文件名。

或者也可以将检测的结果保存成一个视频:

./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights <video file> -out_filename <output_video file>

电脑相机实时检测

没有装cuda的情况下,实时检测可能会非常慢,展示检测结果的窗口可能会很久才弹出,甚至根本就没法弹出这个窗口,只会显示进程失去响应。

./darknet detector demo cfg/coco.data cfg/yolov4.cfg yolov4.weights

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

使用django_celery_beat在admin后台配置计划任务

使用步骤 安装包 pip install django-celery-beatapp注册 app注册INSTALLED_APPS = [....django_celery_beat,]配置文件:屏蔽原来的调度器 CELERY_BEAT_SCHEDULER = django_celery_beat.schedulers.DatabaseScheduler设置时区 LANGUAGE_CODE = zh-hans TIME_ZONE = Asia/Shang…

Celery admin监视任务

在控制台监控任务执行情况,还不是很方便,最好是能够通过web界面看到任务的执行情况,如有多少任务在执行,有多少任务执行失败了等 这个Celery也是可以做到了,就是将任务执行结果写到数据库中,通过web界面显示出来。 这里要用到django-celery-results插件。 通过插件可以使…

4、单行函数

最近项目要用到Oracle,奈何之前没有使用过,所以在B站上面找了一个学习视频,用于记录学习过程以及自己的思考。 视频链接: 【尚硅谷】Oracle数据库全套教程,oracle从安装到实战应用 如果有侵权,请联系删除,谢谢。本文主要讲解以下几点:SQL中不同类型的函数在 SELECT 语句…

CF-945(已更A,B)

CF-945(A,B) A 分析模拟合法情况下三个数的和只能是偶数:题中的两种操作显然都不会改变和的奇偶性这点我的代码中没有用到要使平局数最多,一定是最大的两个数减一,重复这个过程,直到两个较小的数都为零,且最大数一定是偶数,否则不合法:可以由题意和样例想到 代码 int…

VSCode安装vue3插件

1.以前的volar已经弃用了。 2.最近vue插件

python计算机视觉学习笔记——PIL库的用法

如果需要处理的原图及代码,请移步小编的GitHub地址传送门:请点击我如果点击有误:https://github.com/LeBron-Jian/ComputerVisionPractice这个是之前的笔记,自己看到了就顺带发出来,也是温习一下,内容可能不太全,算是入门贴吧。 前言:PIL 图像处理是计算机视觉领域中不…

Angular-测试驱动开发-全-

Angular 测试驱动开发(全)原文:zh.annas-archive.org/md5/60F96C36D64CD0F22F8885CC69A834D2 译者:飞龙 协议:CC BY-NC-SA 4.0前言 本书将为读者提供一个关于 JavaScript 测试驱动开发(TDD)的完整指南,然后深入探讨 Angular 的方法。它将提供清晰的、逐步的示例,不断强…

python中的装饰器,迭代器,生成器之间的关系

一、装饰器 装饰即修饰,意指为其他函数添加新功能; 装饰器的本质就是函数 作用是为其他函数添加新功能,如计算该函数运行时长 装饰器遵循原则: 1.不修改被装饰函数的源代码(开放封闭原则) 2.为被装饰函数添加新功能后,不能修改被修饰函数的调用方式 装饰器的实现 = 高阶…

RepVGG-GELAN | 融合 VGG、ShuffleNet 与 YOLO 图像检测的准确性及效率再上一层!

前言 基于YOLO的目标检测算法在速度和准确性之间取得了显著的平衡。然而,它们在脑肿瘤检测中的应用仍然未被充分探索。本研究提出了RepVGG-GELAN,这是一种新型的YOLO架构,通过集成RepVGG,一种重新参数化的卷积方法,特别关注于医学图像中的脑肿瘤检测。RepVGG-GELAN利用Rep…

有关字符串的函数接口

目录strstr函数,用于从一个字符串中查找子串strtok函数,用于分割字符串 strstr函数,用于从一个字符串中查找子串strtok函数,用于分割字符串

24考研成电860——记我消失的一年

考研经验分享成电考研860经验帖 本人情况介绍 本人于今年毕业于某双非院校计算机系,绩点3.3,甲级联赛有两个国三。刚开始是想保研的,大一绩点是3.8,但是由于院校保研名额不是很多,如果全力冲保研的话风险很大,高绩点不代表你能找到好的工作(但是如果你能出国的话我极力推…

最短路径

拓扑序 有这样一个问题:我们给定一张 \(n\) 个点 \(m\) 条边的有向无环图(DAG),请求出从 \(1\) 号结点出发,到达任意结点的最短路径,保证 \(s\) 可以到达任意结点,\(n,m\leq 10^7\)。我们以下面这张图为例。如果我们想求 \(1 \rightarrow 4\) 的路径, 我们不难发现,找…