(图片来源网络,侵删)
本文为 AI 研习社编译的技术博客,原标题 :Object detection with Raspberry Pi and Python作者 | Quantum翻译 | leogle97、谢玄xx 校对 | 邓普斯•杰弗审核 | 酱番梨 整理 | Pita原文链接:https://medium.com/@Quantum_inc/object-detection-with-raspberry-pi-and-python-bc6b3a1d4972今天我们将讨论如何建立一个简单、便宜的移动目标探测器这项研究的目的是确定在一个便宜的移动设备上的对象检测模型是否可以用于现实世界的任务作为一个移动平台,我们使用的是树莓派3B树莓派是一款售价35美元的单板机,这意味着微处理器、内存、无线收音机和端口都在一块电路板上它是一台Linux计算机,所以从技术上讲,它可以做Linux计算机能做的一切事情,比如运行电子邮件和网络服务器,充当网络存储,或者用于对象检测与大多数具有内置硬盘或SSD存储选项的计算机不同,树莓派的操作系统安装在microSD卡上,而microSD卡是存放所有文件的地方,因为这块板不包含任何内置存储(不过,你可以添加USB硬盘驱动器)通过交换microSD卡,这种结构可以方便地扩展存储空间并在不同操作系统之间切换(图)树莓派3作为目标探测器的硬件部分,我们使用了树莓派3B和树莓派助学金V2我们需要安装Raspbian Stretch 9,因为在运行Raspbian 9时,TensorFlow 1.9正式支持树莓派我们还需要一个至少16GB内存的microSD卡,因为构建OpenCV可能是一个非常消耗内存的过程(图)树莓派及照相机模块V2目标检测模型针对本实验,我们选择了以下型号:小型YOLO和SSD MobileNet liteYOLO(You Only Look Once)是在Darknet上实现的最先进的实时物体检测系统先前的检测系统是重新利用分类器或定位器来执行检测的,而这些检测系统将模型应用于多位置和规模的图像图像的高评分区域被视为检测结果与基于分类器的系统相比,该模型具备几大优点这个模型在测试时查看整个图像,因此它的预测是通过图像中的全局背景来实现的除此之外,不像需要数千个单个图像才可进行预测的R-CNN系统一样,它也可以使用单一网络的评估进行预测为了执行检测,图像就划分为SxS网格(如左图所示)每个单元将预测N个可能的“边界框”以及它们中的每一个的确定性(或概率)水平(图像在中心),这意味着需要计算SxSxN个正方形绝大多数这些方形的预测率都非常低,这就是算法持续删除预测率低于特定最小阈值方块的原因剩余的盒子通过“非极大值抑制”来消除可能的重复检测,因此只留下最精确的方块(如右图所示)SSD(Single Shot MultiBox Detector)是一种流行的物体检测算法SSD通过消除对区域生成网络的需求来加速该过程为了防止精度下降,SSD采用了包括多尺度功能和默认框在内的一些改进方法这些改进使SSD能够以较低分辨率的图像匹配更快的R-CNN精度,从而进一步提高检测速度带有MobileNet的SSD是一种针对移动设备推理进行了优化的对象检测模型这里的关键思想是采用单个网络(速度)而不需要区域提议相反,它使用不同的边界框,然后作为预测的一部分调整边界框网络的最后几层中的每一层都负责预测逐渐变小的边界框,并且最终预测是所有这些预测的并集,从而实现不同的边界框预测SSD - (a) 含有GT框的图像 (b)88特征图 (c)44特征图对于对象检测,我们使用OpencCV,Tensorflow Object Detection API和Darkflow TensorFlow的Object Detection API是一个非常强大的工具,任何人(特别是那些没有真正的机器学习背景的人)都可以快速构建和部署功能强大的图像识别软件API为终端用户提供培训和在OCO数据集中运行检测模型和模型的仪器,如Faster R-CNN,SSD Mobile等由于YOLO是在基于C ++的深度学习框架上实现的,所以我们使用Darknet的TensorFlow就翻译为为Darkflow环境设置接下来,我们将设置环境首先,在具有所有依赖项的Raspberry Pi 3上安装OpenCV你可以在下面这个网站中找到一个不错的安装途径:https://www.pyimagesearch.com/2017/09/04/raspbian-stretch-install-opencv-3-python-on-your-raspberry-pi/下一步是设置并启用相机我们还需要安装一个名为picamera [array]的python模块该模块提供了一个界面,用于将来自摄像机的图像表示为NumPy阵列下面的网站是另一个不错的安装指南:https://www.pyimagesearch.com/2015/03/30/accessing-the-raspberry-pi-camera-with-opencv-and-python/如上所述,TF 1.9+全面支持Raspberry Pi,但这并不意味着我们可以仅使用pip来进行安装Pip仅能在0.11.0版本下安装,不满足目标检测API的要求我们应该从源代码构建Tensorflow,但由于处理器速度慢且RAM有限,因此不建议在Raspberry Pi上构建这需要很多时间在更强大的主机上构建TensorFlow .whl包更容易,然后将其安装在Raspberry上我们可以使用官方安装指南来构建软件包或下载已经构建的软件包之后,将wheel文件复制到Raspberry Pi并使用pip安装它接下来,我们需要为YOLO配置环境 YOLO在基于C的深度学习框架中实现,称为Darknet为了避免在Raspberry Pi上构建Darknet,我们使用Darkflow作为Darknet转换来运行TensorFlow(这里is听译有误) Darkflow易于安装,因为其具有官方存储库的安装教程此外,我们使用了来自Darkflow(https://drive.google.com/drive/folders/0B1tW_VtY7onidEwyQ2FtQVplWEU)作者的YOLO预训练权重tiny-yolo-voc.weights 和来自Darkflow源存储库的网络配置tiny-yolo-voc.cfg现在,我们需要从TensorFlow检测模型表下载MobileNet SSDLite模型所谓“模型表”,是Google的预训练对象检测模型集合,具有不同级别的处理速度和准确性 Raspberry Pi具有弱处理器(weak听译有误)和有限的RAM,因此我们需要使用处理能力较低的模型尽管该模型运行得更快,但它的精确度较低我们尝试使用SSD MobileNet模型但是在加载模型图时它会导致内存分配异常,而Raspberry Pi并没有为此任务提供所需的内存量然后,下载SSDLite-MobileNet模型并将其解压缩我们需要唯一的frozen_inference_graph.pb文件model ZOO部分代码如下首先,为探测器定义一个抽象类别:接下来,实现SSD和YOLO模型界面对于SSD,我们使用来自目标检测API的代码而YOLO对象检测器只是Darkflow TFNet类的包装现在我们实现一个检测脚本首先初始化camera:接下来,从stream中获取图像并对其进行检测对结果可视化如下:总结我们运行了两个模型并得到了这些结果:- YOLO tiny - 0.32 FPS;- SSD MobileNet Light - 1.07 FPS因此,结合以上结果,我们可以得出结论——我们可以使用带有SSD MobileNet的移动探测器进行真实的简单行人跟踪,或者用于检测草坪上的猫的房屋安全系统或者尺寸和功率使用更为关键的情况(1 FPS就足够了)此外,我们尝试使用MXNet网络,但在模块导入期间,我们遇到了../libmxnet.soon Raspberry Pi问题下方为可视化结果:该文章最早于2018年11月26日在www.quantumobile.com上发布想要继续查看该篇文章相关链接和参考文献?长按链接点击打开或点击【使用树莓派和Python实现目标检测】:https://ai.yanxishe.com/page/TextTranslation/1384AI研习社每日更新精彩内容,观看更多精彩内容:雷锋网雷锋网雷锋网盘点图像分类的窍门深度学习目标检测算法综述生成模型:基于单张图片找到物体位置注意力的动画解析(以机器翻译为例)等你来译:如何在神经NLP处理中引用语义结构 (Python)用Mask R-CNN检测空闲车位高级DQNs:利用深度强化学习玩吃豆人游戏深度强化学习新趋势:谷歌如何把好奇心引入强化学习智能体
0 评论