新技能 | YOLO:“只瞄一眼”的深度学习

最近创客大爆炸-英特尔实验室的工程师在深度学习的路上越走越远,捣鼓出了一个让人不明觉厉的玩意儿:

 

他淡淡地说这一点也不难

并安利了我们一个叫 YOLO 的深度学习系统

▍什么是 YOLO?

天下武功,唯快不破。人类视觉系统快速且精准,只需“瞄一眼”(You Only Look Once,YOLO)即可识别图像中物品及其位置。而 YOLO 是时下最先进的实时目标检测系统,拥有享誉计算机视觉界的“一眼神功”!在 Titan X 上,它能够处理 40-90 FPS(帧每秒)的图像。它在 VOC 2007 上的 mAP 为 78.6%,在 COCO 测试版上为 44.0%。

什么是 COCO?
COCO(Common Objects in Context)是个全新的图像识别、分类、标签数据集。COCO 的特点有:物体分类、根据环境进行识别、图像中识别多个物体、超过 30 万图像、超过 200 万案例、80 个物体类别、每张图像 5 个标签等。

 

▍原理

过去的检测系统利用分类器或定位器进行检测。他们将模型应用于图像的多个位置和尺度。图像的高评分区域被认为是检测到的对象。

但 YOLO 的方法完全不同。YOLO 将单个神经网络应用于完整图像,该网络将图像划分为若干区域,然后预测每个区域的边界框和概率,这些边界框再由预测概率加权。

 

YOLO 的模型相较基于分类器的系统有以下 2 个优点:

  • 它在测试时间内可以观察整个图像,所以它的预测是通过图像中的全局上下文来感知的。
  • 它可以通过单个网络评估进行预测。不像 R-CNN(https://github.com/rbgirshick/rcnn)这样的系统,需要数千个单个图像。这令它非常快,比 R-CNN 快 1000 倍,比 Fast  R-CNN(https://github.com/rbgirshick/fast-rcnn)快 100 倍。

    ▍手把手教程

    下面我们开始手把手教你如何使用 YOLO 做出开头的那个视频!

    如果你还没有安装 Darknet,那么先装起来吧,直接在终端运行以下代码:

     

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

    这样,你就已经在 cfg /子目录中有了 YOLO 的配置文件。

    接着,你必须下载预先训练好的权重值文件(http://pjreddie.com/media/files/yolo.weights)(258 MB),或者直接终端运行这行代码:

     

    wget http://pjreddie.com/media/files/yolo.weights 运行检测器!

     

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

    你会看到这样的输出:

    Darknet 会打印出它检测到的对象、正确概率,以及找到它们需要多长时间。

    在 Darknet 中我们没有使用 OpenCV,因此它不能直接显示检测。YOLO 将它们保存在 predictions.png 中。您可以打开它来查看检测到的对象。由于我们在 CPU 上使用了 Darknet,所以每个图像需要大约 6-12 秒。如果我们使用 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

    如果你想要做的只是在一张图片上进行检测,这或许对你来说没有什么用,但如果你想做其他的事,比如在网络摄像头上运行(后面我们会谈到),还是有必要知道一下。

    ▍多张图片

    您可以不在命令行上提供图片,而是将其留空以尝试连续的多张图片。

    当配置和权重完成加载时,您将看到一个提示:

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

    一旦完成,它将提示您尝试更多不一样的图像。你可以使用 Ctrl – C  退出程序。

    更改检测阈值

    默认情况下,YOLO 仅显示检测置信度在 0.25 以上的对象。你可以通过在  yolo 命令后加上  -thresh  标志来进行更改。

    例如,要显示所有检测,您可以将阈值设置为 0:

     

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

    结果:

     

    显然,这并不是超级有用,但你可以通过设置不同的值来控制你想让哪些东西被模型阈值化。

    微型 YOLO

    微型 YOLO 基于 Darknet 参考网络(http://pjreddie.com/darknet/imagenet/#reference),比正常的 YOLO 版本快得多,缺点是不太准确。要使用 VOC 训练的版本,可终端输入:

    http://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。

     

    网络摄像头的实时检测

    如果看不到结果,用测试数据运行 YOLO 并没有什么意思。 我们不妨接入网络摄像头里的数据,运行一下 YOLO 吧!

    欲运行此演示,您将需要把 CUDA 和 OpenCV 编译进 Darknet。 然后运行命令:

     

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

    YOLO 将显示当前的 FPS 、识别到的物体,以及在其顶部绘制的边框的图像。

    你将需要连接到兼容 OpenCV 的摄像头,否则它将无法正常工作。

    △ 工程师在某宝买的微距摄像头,静看车来车往

    如果连接了多个网络摄像头,并希望选择要使用的网络摄像头,则可以用  -c  来选择(OpenCV 默认使用网络摄像头  0)。

    如果 OpenCV 可以读取视频,还可以在视频文件上运行它:

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

     

    工程师说,他就是这么制作出上面的视频的!

    是不是很简单哇?

    最后让我们看看官网上的视频饱个眼福

     

发布者:Cara,转载请注明出处:http://www.makercollider.com/post/621

发表评论

登录后才能评论
QR code