作者:Adrian Rosebrock
翻译:吴振东
校对:郑滋
本文约5000字,建议阅读10+分钟
本文教你如何在树莓派和Movidius神经加速棒上运用Tiny-YOLO来实现近乎实时的目标检测。
在这篇教程中,你将会学到如何用YOLO和Tiny-YOLO在树莓派和Movidius NCS上完成一个接近实时的目标检测任务。
YOLO目标检测在近期经常会被人们提起,它是速度最快的深度学习目标检测算法之一,它所实现的FPS(画面每秒传输帧数)指标要比那些消耗大量计算资源的two-stage探测器(例如:Faster R-CNN)或某些single-stage探测器(例如:RetinaNet或某些SSD的变种)更高。即便如此,YOLO的高速并不足以使得它在树莓派上运行,即便是加上Movidius NCS的话也不会有明显的起色。
为了让YOLO变得更快一些,YOLO的创造者们Redmon等人定义了一个YOLO架构的变种,称作Tiny-YOLO。
Tiny-YOLO的处理速度约是老大哥YOLO的442%,在单个GPU上处理视频的刷新率为每秒244帧。
Tiny-YOLO具有模型小(小于50MB)和推理速度快这两大优势,使得它作为目标检测器非常适合移植在树莓派、Google Coral和NVIDIA Jetson Nano上。
关注公众号(DatapiTHU)后台回复“200229”获取本文项目代码下载链接
今天你将会了解到如何使用Tiny-YOLO,并将它部署在树莓派上,再加上Movidius NCS的作用,可以组成一个接近实时的目标检测项目。
在树莓派+Movidius NCS上运用YOLO和Tiny-YOLO完成目标检测
在这篇教程的第一部分,让我们来了解一下YOLO和Tiny-YOLO目标检测。
随后,我来告诉你如何去配置你的树莓派和OpenVINO的环境,这样你就可以使用Tiny-YOLO了。
然后来回顾一下这个项目的目录结构,其中包括利用一个shell脚本来正确地进入到你的OpenVINO环境中。
在我们了解了整个项目结构后,就需要植入一个含有以下内容的Python脚本:
进入我们的OpenVINO环境。
在视频中读取帧图像。
利用树莓派、Movidius NCS和Tiny-YOLO来完成接近实时的目标检测。
最后,我们以检验脚本的结果作为整篇教程的结尾。
什么是YOLO和Tiny-YOLO?
图1:Tiny-YOLO对于COCO数据集的mAP值比其他物体检测器更低。这说明Tiny-YOLO在你的树莓派+Movidius NCS上有可能会是一个有用处的物体检测器
Tiny-YOLO是Redmon 等人在2016年公开发表论文《You Only Look Once: Unified, Real-Time Object Detection》中提到的'You Only Look Once' (YOLO)物体检测器的一个变种。
《You Only Look Once: Unified, Real-Time Object Detection》:
https://arxiv.org/abs/1506.02640
YOLO的出现是为了提高two-stage目标检测器的速度,例如Faster R-CNN。
R-CNNs的精确度很高,但是即便是在GPU上运行,他们的速度依然很慢。与此相反,像YOLO这样的single-stage检测器速度非常快,在GPU上运行的话能够达到实时检测的效果。
YOLO的缺点就是准确率不是特别高(而且以我的经验,YOLO要比SSDs和RetinaNet更难训练)。
另外Tiny-YOLO是小巧版的YOLO,这意味着他的准确率要相对更低。
作为参考,在Redmon等人的报告中,YOLO在COCO基准数据集上的mAP约是51-57%,而Tiny-YOLO的mAP只有23.7%,准确率比它“大哥”的一半还要低。
实际上,23%的mAP对于某些应用来说还是在合理范围内的。
我一般的建议是用YOLO来进行“最初的尝试”:
在一些案例中,它可能非常适合你的项目;
如果不合适,你可以再去尝试其他更准确的检测器(Faster R-CNN, SSDs, RetinaNet等等)
想要了解YOLO,Tiny-YOLO或者其他版本的YOLO,请一定要阅读Redmon等人在2018年所发表的论文。
配置你的树莓派和OpenVINO的环境
图2:在树莓派和Movidius NCS上配置OpenVINO工具包,用于使用TinyYOLO做目标检测
想要再现这篇教程中的结果,需要配有树莓派4B和Movidius NCS2(不支持NCS1)两项硬件。
我建议你选择一版《Raspberry Pi for Computer Vision》并将 icluded pre-configured.img拷在你的存储卡里,这个文件非常重要,可以省去你数小时的无谓工作。
《Raspberry Pi for Computer Vision》:
https://www.pyimagesearch.com/raspberry-pi-for-computer-vision/
configured.img:
https://www.pyimagesearch.com/2016/11/21/raspbian-opencv-pre-configured-and-pre-installed/
如果有人固执地想要自己去搞树莓派和OpenVINO的配置,这里有一个简单的指导:
根据BusterOS安装指导手册来创建一个名为cv的环境。
根据OpenVINO的安装指导手册创建第二个环境,命名为openvino。请确保下载的是OpenVINO 4.1.1版本(4.1.2版本有未解决的问题)
BusterOS:
https://pyimagesearch.com/2019/09/16/install-opencv-4-on-raspberry-pi-4-and-raspbian-buster/
OpenVINO:
https://www.pyimagesearch.com/2016/11/21/raspbian-opencv-pre-configured-and-pre-installed/
为了解析JSON结构,你需要在你的虚拟环境中安装JSON-Minify包:
$ pip install json_minify