今天我们将讨论如何建立一个简单、便宜的移动目标探测器。

这项研究的目的是确定在一个便宜的移动设备上的对象检测模型是否可以用于现实世界的任务。

作为一个移动平台,我们使用的是树莓派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 lite。

YOLO(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)8*8特征图 (c)4*4特征图

对于对象检测,我们使用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追踪屏幕的移动目标_利用树莓派和Python建立一个简单、便宜的移动目标探测器...相关推荐

  1. unity怪物攻击玩家减血_利用Unity协程实现一个简单的怪物寻路与跟随AI

    利用Unity协程实现一个简单的怪物寻路与跟随AI,通过分析怪物行为与逻辑,实现简单的平面怪物寻路与跟随效果. 分析 对于游戏中怪物的行为,简单归纳为如下几部分: 怪物在预设范围内随机移动. 玩家走入 ...

  2. python做病毒传播的空间数据_利用4行Python代码监测每一行程序的运行时间和空间消耗...

    Python是一个高层次的结合了解释性.编译性.互动性和面向对象的脚本语言,其具有高可扩展性和高可移植性,具有广泛的标准库,受到开发者的追捧,广泛应用于开发运维(DevOps).数据科学.网站开发和安 ...

  3. python tkinter计算器实例_利用Tkinter(python3.6)实现一个简单计算器

    前言 上机实践课程开始了,嗯,老师来了之后念了下PPT,然后说:开始做吧......... 然后就开始了Python的GUI之路,以前没接触过PYthon的可视化界面(虽然这样很不明智) 但是现在做起 ...

  4. python 按钮更改输入框的值_利用 50 行 Python 代码构建一个在线文本生成器!

    本指南将引导你学习构建一个自动完成任意输入文本的Web应用程序. 作者 | Dev Sharma译者 | 苏本如,责编 | 郭芮出品 | CSDN(ID:CSDNnews) 以下为译文: 在本文中,我 ...

  5. python 计算面积 比计算几何慢_利用ArcGIS和Python计算中国各省路网密度

    ArcGIS 相交 利用ArcGIS里面的相交工具,每个省把路标识了. 计算几何 分别计算路网的长度和各省的面积. Python 利用Python对属性数据进行处理 导入相关模块 ## 导入相关模块 ...

  6. java简单的文本编辑器_采用java语言如何建立一个简单的文本编辑器

    1.类的框架: 所谓类的框架,就是给出这个类需要的属性和方法,比如本文就需要我们的类继承JFrame父类和载入ActionListener接口,属性有按钮,面板,文本区域框,方法构造方法与事件处理方法 ...

  7. 利用训练数据建立一个简单的分类器

    利用训练数据建立一个简单的分类器 在机器学习领域中,分类指的是利用数据的特性将其分成若干类型的过程.分类器则可以是实现分类功能的任意算法,最简单的分类器就是简单的数字函数.在真实世界中,分类器可以是非 ...

  8. python自学篇十[ 面向对象 (四) :王者荣耀小游戏+模拟一个简单的银行进行业务办理的类]

    python基础系列: python自学篇一[ Anaconda3安装 ] python自学篇二[ pycharm安装及使用 ] python自学篇三[ 判断语句if的使用 ] python自学篇四[ ...

  9. 机器人坐标系建立_如何在30分钟内建立一个简单的搜索机器人

    机器人坐标系建立 by Quinn Langille 奎因·兰吉尔(Quinn Langille) 如何在30分钟内建立一个简单的搜索机器人 (How to Build A Simple Search ...

最新文章

  1. 洛谷1020导弹拦截
  2. CentosMySQL5.6安装方法
  3. bootstrap中分页、面包屑导航、列表组、卡片、下拉菜单、折叠
  4. jedis操作set_Jedis对redis的五大类型操作代码详解
  5. SpringBoot 阶段总结
  6. [转载] python while循环 打印菱形
  7. 【Landsat 8】遥感影像文件内容及命名规则
  8. 基于Matlab的SLIC超像素分割算法分析
  9. Windows 自带硬盘修复命令 CHKDSK
  10. 正则化及正则化项的理解
  11. win7计算机属性资源管理器停止工作,Win7系统Windows资源管理器已停止工作怎么解决?...
  12. 华为智慧屏跟Android,华为智慧屏全力打造智慧生活体验 “智慧屏”时代来临
  13. 程序员有七个等级?你又属于哪个等级呢?
  14. SQLPLUS ed无法调出编辑面板 SP2-0107:无须保存
  15. 范文:项目开发总结报告
  16. python爬虫(三)——多线程+正则匹配下载图片(wallheaven图片网站)
  17. 20221204今天的世界发生了什么
  18. boost | 函数与回调(三)signals2
  19. 3. 查询非计算机科学系中比计算机科学系所有学生年龄都小的学生姓名及年龄。
  20. X86系列CPU标准寄存器

热门文章

  1. pydicom和simpleitk读写dicom图像元信息
  2. 海思3559U-Boot移植(二):更换新的SPI Nand Flash
  3. 建立用例模型应当注意的问题
  4. 物联网毕设选题 Stm32家庭有害气体检测系统 - 嵌入式 单片机
  5. UE4之制作局域网游戏
  6. 沟通科技李继勇的金蝶情结与本土策略
  7. STC 89C52 单片机引脚对应的功能以及实例讲解
  8. html的细节优化,网站图片优化细节放送(seo技巧)
  9. CakePHP FAQ(常见问题)整理
  10. 江西最新建筑施工电工(建筑特种作业)机考题库及建筑电工模拟试题