博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Ubuntu下CPU/GPU模式YOLOv3代码运行
阅读量:7173 次
发布时间:2019-06-29

本文共 2704 字,大约阅读时间需要 9 分钟。

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

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

Copyright (C) 2004 Sam Hocevar <sam@hocevar.net>

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 darknetmake

执行完命令可以看到生成了可执行文件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,可参看

。 Makefile文件修改如下:

GPU=0CUDNN=0NVCC=nvcc

改为

GPU=1CUDNN=1NVCC=/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文件。

转载于:https://blog.51cto.com/8764888/2299520

你可能感兴趣的文章
CSSModules
查看>>
scrapy_redis 指定db
查看>>
underscore.js源码学习一(框架解读)
查看>>
Redis - Redisson vs Jedis
查看>>
腾讯云“云+校园扶持计划”1核2G1M服务器3年只需360元
查看>>
字串(数组)截取
查看>>
mysql百万数据实践-分区
查看>>
SpringBoot 整合 DWR ,实现 js 直接调用后端 Service
查看>>
利用webpack实现js/css模块化开发
查看>>
Parcel - 极速零配置Web应用打包工具
查看>>
【277天】跃迁之路——程序员高效学习方法论探索系列(实验阶段35-2017.11.09)...
查看>>
spring boot源码分析之springmvc(上)
查看>>
HAProxy
查看>>
Java: classLoader
查看>>
vue.js - 事件 - 表单 - 组件 - slot分布 基础
查看>>
tornado下https配置
查看>>
Linux Q&A
查看>>
10月11日科技联播:美股暴跌引全球股市崩盘;腾讯跌出全球市值前十
查看>>
实验吧——隐写术之流
查看>>
Ionic 2 开发(一)_安装与目录结构
查看>>