资讯专栏INFORMATION COLUMN

【译】让你的电脑学会同时识别多个物体

leap_frog / 2000人阅读

摘要:工作原理以前的检测系统通过重复利用分类器和定位器来实现目标识别。修改检测阈值缺省情况下,只显示信心大于的对象。用法如下这个,呵呵,不完美把白马识别成绵羊了,把黑狗识别成奶牛了,但确实很快。

原标题:YOLO: Real-Time Object Detection
英文原文:https://pjreddie.com/darknet/...

强烈推荐(TED视频):https://www.ted.com/talks/jos...

You only look once (YOLO)是目前最先进的实时对象检测系统。在一台Titan X上它能实时处理40-90帧每秒的图像,并且准确率高达78.6%VOC 2007)和48.1%COCO test-dev)。

Model    Train    Test    mAP    FLOPS    FPS    Cfg    Weights
Old YOLO    VOC 2007+2012    2007    63.4    40.19 Bn    45    link
SSD300      VOC 2007+2012    2007    74.3    -    46    link
SSD500      VOC 2007+2012    2007    76.8    -    19    link
YOLOv2      VOC 2007+2012    2007    76.8    34.90 Bn    67    cfg    weights
YOLOv2 544x544    VOC 2007+2012    2007    78.6    59.68 Bn    40    cfg    weights
Tiny YOLO    VOC 2007+2012    2007    57.1    6.97 Bn    207    cfg    weights
SSD300    COCO trainval    test-dev    41.2    -    46    link
SSD500    COCO trainval    test-dev    46.5    -    19    link
YOLOv2 608x608    COCO trainval    test-dev    48.1    62.94 Bn    40    cfg    weights
Tiny YOLO    COCO trainval    -    -    7.07 Bn    200    cfg    weights
工作原理

以前的检测系统通过重复利用分类器和定位器来实现目标识别。它们把模型套在图像的不同位置和大小区域,通过图像各区域的最高分值来判定结果。

我们使用了完全不同的方法。我们通过把一个多带带的神经网络放在整个图像上来进行识别。这个网络把图像分成区域并对边框和各区域的可能性进行预测。这些边框通过预测到的可能性进行加权。

我们的模型相比于基于分类器的系统有几个优势。它在测试时观察整个图像,所以它的预测是基于整个图像上下文的。并且它通过一个单一网络进行预测,不像那些R-CNN系统需要对一幅图像运用上千的网络。这一特点使我们的系统超级快,速度是R-CNN的上千倍,一百倍快于快速R-CNN。想对全系统有更深入了解,可以阅读我们的论文。

使用预先训练好的模型进行预测

下面带你使用预先训练好的模型通过YOLO系统进行对象检测。如果你还没有安装Darknet的话,你可以通过以下命令安装:

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

就是这么简单!

cfg/子目录下已经预置好了YOLO的配置文件。你还需要下载预先训练好的权重文件(258 MB):

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

然后就可以开始运行检测器了!

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

你会看到类似下面这样的输出:

layer     filters    size              input                output
    0 conv     32  3 x 3 / 1   416 x 416 x   3   ->   416 x 416 x  32
    1 max          2 x 2 / 2   416 x 416 x  32   ->   208 x 208 x  32
    .......
   29 conv    425  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 425
   30 detection
Loading weights from yolo.weights...Done!
data/dog.jpg: Predicted in 0.016287 seconds.
car: 54%
bicycle: 51%
dog: 56%

Darknet显示出它检测到的对象、信心以及花了多少时间。因为我们没有把DarknetOpenCV一起编译,所以不能直接显示图像结果。但是我们把图像结果保存在了predictions.png文件里。你可以打开这个文件看到检测之后的结果。因为我们现在是在CPU上运行Darknet,所以它会花费6到12秒的时间才能处理一幅图像。如果我们用GPU版本的话,所需时间会短得多。

我在这里提供了其它几幅图像,如果你感兴趣可以逐一尝试一下。试试data/eagle.jpg, data/dog.jpg, data/person.jpgdata/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   416 x 416 x   3   ->   416 x 416 x  32
    1 max          2 x 2 / 2   416 x 416 x  32   ->   208 x 208 x  32
    .......
   29 conv    425  1 x 1 / 1    13 x  13 x1024   ->    13 x  13 x 425
   30 detection
Loading weights from yolo.weights ...Done!
Enter Image Path:

在这里输入图像文件名如data/horses.jpg就可以对这幅图像进行检测。

检测完成后系统会提示你输入其它图像的文件名。全部检测完成后按下Ctrl-C来退出。

修改检测阈值

缺省情况下,YOLO只显示信心大于.25的对象。你可以通过附加-thresh 参数来修改这一设定。比如,你可以把阈值修改为0来显示所有检测到的对象:

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

结果如下:

这样的结果似乎没什么用,不过你可以通过修改为不同数值来控制模型检测的结果。

Tiny YOLO

Tiny YOLO是基于Darknet参考网络的非常快速但准确率不如常规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帧每秒的图像。

摄像头实时检测

在测试数据上运行YOLO没什么意思,无法直接看到结果。下面我们让它来直接处理摄像头的输入!

要运行这个示例,你需要把DarknetCUDAOpenCV集成编译,然后运行以下命令:

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

YOLO显示当前帧率并在它检测到的对象上加上方框。

你必须在电脑上安装好摄像头连接到OpenCV,否则没法工作。如果你有多个摄像头,可以通过-c 来指定其中之一(OpenCV缺省使用0号摄像头)。

你也可以让它对一段视频进行处理:

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

下面这段Youtube视频就是这么处理的:

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/40687.html

相关文章

  • 你的电脑学会同时识别多个物体

    摘要:工作原理以前的检测系统通过重复利用分类器和定位器来实现目标识别。修改检测阈值缺省情况下,只显示信心大于的对象。用法如下这个,呵呵,不完美把白马识别成绵羊了,把黑狗识别成奶牛了,但确实很快。 原标题:YOLO: Real-Time Object Detection英文原文:https://pjreddie.com/darknet/... 强烈推荐(TED视频):https://www....

    duan199226 评论0 收藏0
  • 与百度首席科学家吴恩达对话中文背景下的神经网络

    摘要:等一下,什么样的神经网络才算是小型的哈哈这不一定,会随着时间改变。我们一般是依照神经网络之间的连接数划分。训练的神经网络的连接数量一般可以达到几百亿。许多语言学家对此表示强烈的不满,甚至公开地向我表示反对。 在原文作者Caleb Garling对话吴恩达时,他刚结束在旧金山的深度学习大会,这名斯坦福深度学习教授,前Google Brain负责人,Coursera的创始人和现任百度首席科学家在...

    canopus4u 评论0 收藏0
  • 用不到1000美元攒一台深度学习用的超快的电脑

    摘要:但是如果你和我是一样的人,你想自己攒一台奇快无比的深度学习的电脑。可能对深度学习最重要的指标就是显卡的显存大小。性能不错,不过够贵,都要美元以上,哪怕是旧一点的版本。电源我花了美元买了一个的电源。也可以安装,这是一个不同的深度学习框架。 是的,你可以在一个39美元的树莓派板子上运行TensorFlow,你也可以在用一个装配了GPU的亚马逊EC2的节点上跑TensorFlow,价格是每小时1美...

    trigkit4 评论0 收藏0
  • SegmentFault 技术周刊 Vol.30 - 学习 Python 来做一些神奇好玩的事情吧

    摘要:学习笔记七数学形态学关注的是图像中的形状,它提供了一些方法用于检测形状和改变形状。学习笔记十一尺度不变特征变换,简称是图像局部特征提取的现代方法基于区域图像块的分析。本文的目的是简明扼要地说明的编码机制,并给出一些建议。 showImg(https://segmentfault.com/img/bVRJbz?w=900&h=385); 前言 开始之前,我们先来看这样一个提问: pyth...

    lifesimple 评论0 收藏0

发表评论

0条评论

leap_frog

|高级讲师

TA的文章

阅读更多
最新活动
阅读需要支付1元查看
<