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.git
cd darknet
make
如果编译完成,你应该看到一堆编译信息:
mkdir -p obj
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....
.....
gcc -I/usr/local/cuda/include/ -Wall -Wfatal-errors -Ofast -lm....
如果一切似乎编译正确,尝试运行它!
./darknet
你应该得到输出:
usage: ./darknet
现在看看你可以用darknet在这里做的很酷的事情!
2 使用Pre-Trained Model进行检测
接下来将引导您使用YOLO系统使用预先训练的模型检测物体。如果你还没有安装Darknet,那么你应该先按前面的步骤进行安装。Or instead of reading all that just run:
git clone https://github.com/pjreddie/darknet
cd darknet
make
您已经在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 detection
mask_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
你不需要知道这一点,如果你想要做的是在一个图像上运行检测,但是知道你是否想要做其他的事情,比如在网络摄像头上运行(稍后你会看到)是有用的。
而不是在命令行上提供图像,您可以将其留空以尝试连续的多个图像。相反,当配置和权重完成加载时,您将看到一个提示:
./darknet detect cfg/yolo.cfg yolo.weights
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
......................
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 detection
mask_scale: Using default '1.000000'
Loading weights from yolo.weights...Done!
Enter Image Path:
输入data / horses.jpg这样的图像路径,让它预测该图像的框。如:
Enter Image Path: data/horses.jpg
data/horses.jpg: Predicted in 18.880480 seconds.
horse: 48%
horse: 62%
horse: 91%
Enter Image Path:
一旦完成,它将提示您有更多路径尝试不同的图像。完成后,使用Ctrl-C退出程序。
默认情况下,YOLO仅显示以0.25以上的置信度检测到的对象。您可以通过将-thresh
./darknet detect cfg/yolo.cfg yolo.weights data/dog.jpg -thresh 0
所以这显然不是超级有用,但你可以将其设置为不同的值来控制模型被阈值化的内容。
Tiny YOLO
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