YOLO: Real-Time Object Detection深度网络: 在Darknet上的实现方式

来源:互联网 发布:体育套利软件 编辑:程序博客网 时间:2024/06/10 17:07

YOLO: Real-Time Object Detection深度网络: 在Darknet上的实现方式


 YOLO是一个最先进的实时对象检测系统,YOLO的升级版有两种:YOLOv2和YOLO9000[链接]。YOLO的发展主要有两个大方面的改进(1)是采用了一系列的方法优化YOLO的模型结构,产生了YOLOv2,在快速的同时准确率达到state of the art。同时,YOLOv2可以适应不同的输入尺寸,根据需要调整检测准确率和检测速度。(2)是采用wordtree的方法,综合ImageNet数据集和COCO数据集,采用联合训练的方式训练得到YOLO9000,使之可以实时识别超过9000种物品。其中,YOLOv2在PASCAL VOC和COCO数据集上获得了目前最好的结果(state of the art),可以根据速度和精确度需求调整输入尺寸。YOLOv2比目前最好的Faster R-CNN和SSD精确度更高,检测速度更快。而且提供一种共训练方法,可用于其他计算机视觉任务中。对与YOLO的使用非常广泛,本文将提供一种快速使用YOLO的方法。

Darknet是一个用C和CUDA编写的开源神经网络框架。它快速,易于安装,并支持CPU和GPU计算。您可以在GitHub上找到源码,或者您可以在这里阅读更多关于Darknet可以做的事情。具体实现步骤:

1 安装Darknet

Darknet易于安装,只有两个可选的依赖项:

(1)如果您想要更多种类的支持的图像类型,则OpenCV。

(2)CUDA如果你想要GPU计算。

两者都是可选的,因此只需安装基本系统即可。

1)安装基础系统

首先在这里clone Darknet git repository[Here]。这可以通过以下方式实现:

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

如果编译完成,你应该看到一堆编译信息:

mkdir -p objgcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast....gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast.........gcc -I/usr/local/cuda/include/  -Wall -Wfatal-errors  -Ofast -lm....

如果一切似乎编译正确,尝试运行它!

./darknet

你应该得到输出:

usage: ./darknet <function>

现在看看你可以用darknet在这里做的很酷的事情!

2 使用Pre-Trained Model进行检测

接下来将引导您使用YOLO系统使用预先训练的模型检测物体。如果你还没有安装Darknet,那么你应该先按前面的步骤进行安装。Or instead of reading all that just run:

git clone https://github.com/pjreddie/darknetcd darknetmake
您已经在cfg /子目录中有YOLO的配置文件。你必须在这里下载预先训练的权重文件here (258 MB)。或者只是运行这个:

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

Then run the detector!

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

你会看到一些这样的输出:

layer     filters    size              input                output    0 conv     32  3 x 3 / 1   608 x 608 x   3   ->   608 x 608 x  32    1 max          2 x 2 / 2   608 x 608 x  32   ->   304 x 304 x  32    2 conv     64  3 x 3 / 1   304 x 304 x  32   ->   304 x 304 x  64    3 max          2 x 2 / 2   304 x 304 x  64   ->   152 x 152 x  64    4 conv    128  3 x 3 / 1   152 x 152 x  64   ->   152 x 152 x 128.........................28 route  27 24   29 conv   1024  3 x 3 / 1    19 x  19 x1280   ->    19 x  19 x1024   30 conv    425  1 x 1 / 1    19 x  19 x1024   ->    19 x  19 x 425   31 detectionmask_scale: Using default '1.000000'Loading weights from yolo.weights...Done!data/dog.jpg: Predicted in 18.689559 seconds.dog: 82%car: 28%truck: 64%bicycle: 85%

得到的检测结果:



Darknet打印出它检测到的对象,它的置信度,以及找到它们需要多长时间。我们没有使用OpenCV编译Darknet,因此它不能直接显示检测。相反,它将它们保存在predictions.png中。您可以打开它来查看检测到的对象。由于我们在CPU上使用了Darknet,所以每个图像需要大约6-20秒。如果我们使用GPU版本,会更快。

data已经包括一些示例图像来尝试,尝试数据/ eagle.jpg,data / dog.jpg,data / person.jpg或data / horses.jpg!

detect命令是更通用的命令版本的缩写。它相当于命令:

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

你不需要知道这一点,如果你想要做的是在一个图像上运行检测,但是知道你是否想要做其他的事情,比如在网络摄像头上运行(稍后你会看到)是有用的。

Multiple Images

而不是在命令行上提供图像,您可以将其留空以尝试连续的多个图像。相反,当配置和权重完成加载时,您将看到一个提示:

./darknet detect cfg/yolo.cfg yolo.weightslayer     filters    size              input                output    0 conv     32  3 x 3 / 1   608 x 608 x   3   ->   608 x 608 x  32    1 max          2 x 2 / 2   608 x 608 x  32   ->   304 x 304 x  32    2 conv     64  3 x 3 / 1   304 x 304 x  32   ->   304 x 304 x  64    3 max          2 x 2 / 2   304 x 304 x  64   ->   152 x 152 x  64......................29 conv   1024  3 x 3 / 1    19 x  19 x1280   ->    19 x  19 x1024   30 conv    425  1 x 1 / 1    19 x  19 x1024   ->    19 x  19 x 425   31 detectionmask_scale: Using default '1.000000'Loading weights from yolo.weights...Done!Enter Image Path: 

输入data / horses.jpg这样的图像路径,让它预测该图像的框。如:

Enter Image Path: data/horses.jpgdata/horses.jpg: Predicted in 18.880480 seconds.horse: 48%horse: 62%horse: 91%Enter Image Path: 



一旦完成,它将提示您有更多路径尝试不同的图像。完成后,使用Ctrl-C退出程序。

Changing The Detection Threshold

默认情况下,YOLO仅显示以0.25以上的置信度检测到的对象。您可以通过将-thresh <val>标志传递给yolo命令来进行更改。例如,要显示所有检测,您可以将阈值设置为0:

./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg -thresh 0


所以这显然不是超级有用,但你可以将其设置为不同的值来控制模型被阈值化的内容。


Tiny YOLO

Tiny YOLO是基于Darknet参考网络,并且比正常的YOLO型号快得多但不太准确。使用VOC培训的版本:

wget https://pjreddie.com/media/files/tiny-yolo-voc.weights./darknet detector test cfg/voc.data cfg/tiny-yolo-voc.cfg tiny-yolo-voc.weights data/dog.jpg



这不完美,但肯定是快的。在GPU上运行> 200 FPS。

        在Darknet上,我们已经完成了YOLO网络的测试,体会到深度神经网络的有趣,更是加深了对YOLO网络的理解,后续将为大家展现网络摄像头的实时检测Real-Time Detection on a Webcam,敬请期待。

        在其他工作中,我将继续为大家展现TensorFlow和深度学习网络带来的无尽乐趣,我将和大家一起探讨深度学习的奥秘。当然,如果你感兴趣,我的Weibo将与你一起分享最前沿的人工智能、机器学习、深度学习与计算机视觉方面的技术。




参考文献:

[1] https://github.com/pjreddie/darknet

[2] https://pjreddie.com/

[3] https://arxiv.org/abs/1612.08242


阅读全文
0 0