Ubuntu下YOLOv3代码运行

YOLO是近几年物体检测主要算法之一,2018年已发展到YOLOv3,是目前速度最快的物体检测算法,详细内容可查看YOLO主页。YOLO的主要优势在于基于纯C语言编写的DarkNet,可查看DarkNet主页,不需要其他依赖库,跨平台能力强,运行速度快,这里是下载地址。有趣的是里边的有好几个LICENSE,其中LICENSE.fuck的内容是这样的:

       DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE
               Version 2, December 2004

Copyright (C) 2004 Sam Hocevar <[email protected]>

Everyone is permitted to copy and distribute verbatim or modified
copies of this license document, and changing it is allowed as long
as the name is changed.

       DO WHAT THE FUCK YOU WANT TO PUBLIC LICENSE

TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION

  1. You just DO WHAT THE FUCK YOU WANT TO.

短短几行字出现了三次“FUCK”,还出现在标题中。这是我第一次见到这样的LICENSE文档,估计是往github上推送时忘了删除吧。
下面是我运行YOLOv3代码的过程。
我的运行环境为:

  • Ubuntu16.04LTS
  • CUDA9.0
  • cuDNN7.0.5
  • AMD Ryzen 1600
  • NVIDIA GTX1070

一. 使用CPU运行

这个比较简单,在Ubuntu下载、编译、运行非常方便,按照YOLO主页给的提示执行就可以看到结果。

1. 下载

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

2. 编译

cd darknet
make

执行完命令可以看到生成了可执行文件darknet和库文件libdarknet.a和libdarknet.so。在Ubuntu下使用makefile文件进行编译非常方便,执行一个命即可,比在Windows安装cygwin和GUI的CMake,使用CMake在界面方式编译要简单得多。

3. 下载预训练的权重文件

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

在Ubuntu中下载速度很慢,要几个小时。我打开了另一台装Windows的电脑,用下载神器迅雷几分钟就下完了,感谢国内下载完这个文件还开着电脑和迅雷的小伙伴们。然后将该文件拷贝至Ubuntu电脑上darknet目录下。

4. 运行检测器

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

这里的“./darknet”表示当前目录下的darknet,这点与Windows的命令行不同。运行完可看到下面的结果,并在darknet目录下生成了检测结果的jpg文件。

layer filters size input output
0 conv 32 3 x 3 / 1 416 x 416 x 3 -> 416 x 416 x 32 0.299 BFLOPs
1 conv 64 3 x 3 / 2 416 x 416 x 32 -> 208 x 208 x 64 1.595 BFLOPs
.......
105 conv 255 1 x 1 / 1 52 x 52 x 256 -> 52 x 52 x 255 0.353 BFLOPs
106 detection
truth_thresh: Using default ‘1.000000‘
Loading weights from yolov3.weights...Done!
data/dog.jpg: Predicted in 0.029329 seconds.
dog: 99%
truck: 93%
bicycle: 99%

这几步在我的电脑上执行顺利,没有出现问题。

二. 使用GPU运行

四个步骤相同,区别在于要修改Makefile文件。而且电脑要提前装好CUDA和cuDNN,可参看
环境配置(近期实测)——Ubuntu16.04+CUDA9.0+tensorflow-gpu填坑记。 Makefile文件修改如下:

GPU=0
CUDNN=0
NVCC=nvcc

改为

GPU=1
CUDNN=1
NVCC=/usr/local/cuda-9.0/bin/nvcc #即改为本机CUDA安装地址

修改完执行make提示:

include/darknet.h:16:23: fatal error: cudnn.h: 没有那个文件或目录
compilation terminated.
Makefile:89: recipe for target ‘obj/gemm.o‘ failed
make: *** [obj/gemm.o] Error 1

是因为缺乏头文件cudnn.h,需要将其复制。由于需要管理员权限,我使用命令复制。
进入所在目录~/下载/cuda/include(下载CUDA的默认位置,可能会有不同),运行:

sudo cp cudnn.h /usr/include

然后再darknet目录下执行make,提示

/usr/bin/ld: 找不到 -lcudnn
collect2: error: ld returned 1 exit status
Makefile:83: recipe for target ‘libdarknet.so‘ failed
make: *** [libdarknet.so] Error 1

这是因为缺少库文件libcudnn.so,我使用命令复制。进入所在目录~/下载/cuda/lib64(下载CUDA的默认位置,可能会有不同),打开终端,运行

sudo cp libcudnn.so /usr/local/cuda-9.0/lib64

再在darknet目录下执行make命令,可以看到,已生成可执行程序darkenet和库libdarknet.o和libdarknet.so。剩余过程同上,最后也可以生成有方框标记概率的jpg文件。

原文地址:http://blog.51cto.com/8764888/2299520

时间: 2024-10-09 15:20:08

Ubuntu下YOLOv3代码运行的相关文章

Ubuntu下shell脚本运行异常:bash和dash的区别

Ubuntu下我用bash到语法写了一个shell脚本(准确的说是把书上的脚本敲进电脑),在ubuntu下,用sh test.sh来运行,但是出现了意料之外到结果,比如echo -e "\nTest\n"到执行就不同,直接用sh test.sh运行,会打印出-e(作为字符串);而直接在终端中输入echo -e "\nTest\n"是不会输出"-e"的. 我就在想是什么原因,后来终于发现是Ubuntu下sh默认指向dash. echo $SHELL

Ubuntu下搭建JAVA运行环境

(一)Linux操作系统安装(详细信息参见:http://my.oschina.net/u/1458864/blog/366665)1.安装Oracle VM VirtualBox2.安装vagrant3.下载box4.vagrant添加box到虚拟机中(http://my.oschina.net/u/1458864/blog/366665)    初始化vagrant:vagrant init(详细信息参见vagrant的配置说明)    向vagrant中添加box:vagrant box

【VSCode】Ubuntu下VSC编译运行c++程序

之前在Ubuntu下写一些C++程序,一直找不到一个优(hao)雅(kan)的IDE,所以都是使用vim或Clion来写.今天发现微软的一款编辑器,界面好看,功能也挺好用的. 以下是我的一些安装和配置方法: 1.官网下载地址: https://code.visualstudio.com/ , 由于我的是Ubuntu,故直接下载.deb包就安装了. 2.进去之后注意左下角的图标,是添加扩展 3.安装编译和调试的插件(点击插件 - 安装扩展) 输入:ext install cpptools 和 ex

ubuntu下gdb代码调试

1.什么是GDB? GDB全称是GNU Project Debugger,当程序执行时,让你可以进入到另一个程序的内部查看,或者当一个程序崩溃的时候它在做什么. GDB可以帮助你做如下四种主要的方面,来帮助你捕捉到bug: 1.启动你的程序,指定可能影响你行为的事情(设定初始的一些变量) 2.在特殊的条件的时候暂停你的程序执行(在端点的时候可以暂停,或者说是条件的暂停) 3.当程序暂停的时候,可以查看这个时候发生了什么(查询堆栈,变量) 4.通过改变程序中的参数,你可以通过实验得出某一个bug所

用 xampp 在ubuntu 下配置php 运行环境 lampp

在linux下搭建php的运行环境,可以分别安装apache.mysql .php .phpmyadmin,也可以安装xampp(apache.mysql .php .phpmyadmin)集成包,今天就讲解后一种方法. 工具/原料 xampp 安装包 .ubuntu系统 方法/步骤 下载安装包:百度一下 “ xampp 官网 ”,第一个就是.(在linux那下载,网站会自动检测你电脑的版本,判断下载64位的还是32位的.)   找到你软件包的存放位置,将它放到主文件夹下(home/),如图:打

ubuntu 下配置/编译/运行 cocos2dx项目

由于项目原因,需要把一个使用cocos2dx的项目放到linux下运行(在windows下使用VS编写,可以正常运行),晚上调试了大概3 -4小时,终于把项目运行了起来.在这里记录一下注意的事项,方便自己也能提醒大家不要犯一样的错误. 我使用的是ubuntu kylin 14.04 , cocos2dx版本是2.2.3. 项目工程文件如下: 已经包含了cocos2dx的文件包,自己的项目是在projects中. projects文件夹内容如下: Classes文件夹中是项目的源文件,包括一些.h

Ubuntu下c程序运行原理

运行环境: 1.Vitural box下安装Ubuntu虚拟机 2.编译运行工具:gcc 3.编辑器:vim 主要过程: 1.利用vim编辑hello.c 2.编译和执行 (1)预处理阶段:使用 -E命令,得到编译文件: -o将预处理的输出存储到文件 (2)编译阶段:使用-S 命令将预处理文件编译为汇编语言文件,生成文件默认为.s的后缀:-o可以指定产生的汇编文件的名字 (3)汇编阶段:使用-c命令,将汇编文件编译成可重定向的目标文件,(二进制形式,后缀为.o) 也可以结合-o命令产生指定名称的

ubuntu下tomcat监视运行进度方法

如果你一直在Windows下使用Tomcat,那么你一定会知道:在运行Tomcat的时候,会弹出新的控制台窗口,然 后相关的服务器状态信息以及程序运行过程中输出的信息都会在这个新窗口中显示出来.但是到了Linux,自带的shell文件并不会打开一个新的终端窗 口,这使得一些Linux新手(包括我)调试程序的时候遇到不少麻烦.这个问题该如何解决呢?首 先,我们得知道那些在Windows的控制台中显示的信息到现在都跑到哪里去了.这个问题不难,就在logs目录的两个文件中,一个是 catalina.o

Ubuntu下编译安装运行FreeRdp连接Windows.

linux下编译源码进行USB重定向到远程桌面的测试,经过参数的正确配置,可以正常的重定向.具体的操作步骤如下: ⑴在虚拟机上安装git,安装命令如:sudo apt-get install git. ⑵从GitHub下载FreeRdp源码,命令:git clone git://github.com/FreeRDP/FreeRDP.git ⑶到FreeRdp目录下下载FreeRDP编译和运行所依赖的关系库,命令:sudo apt-get install build-essential git-c