用树莓派和python完成目标探测

刘辉  2019-1-31  ---- 2019-2-13

目的:如何建立一个简单、便宜的移动目标探测器。

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

作为一个移动平台,我们使用的是树莓派3B。树莓派是一款售价35美元的单板机,这意味着微处理器、内存、无线收音机和端口都在一块电路板上。它是一台Linux计算机,所以从技术上讲,它可以做Linux计算机能做的一切事情,比如运行电子邮件和网络服务器,充当网络存储,或者用于对象检测。与大多数具有内置硬盘或SSD存储选项的计算机不同,树莓派的操作系统安装在microSD卡上,而microSD卡是存放所有文件的地方,因为这块板不包含任何内置存储(不过,你可以添加USB硬盘驱动器)。通过交换microSD卡,这种结构可以方便地扩展存储空间并在不同操作系统之间切换。


树莓派3b

作为目标探测器的硬件部分,我们使用了树莓派3B和树莓派助学金V2。我们需要安装Raspbian Stretch 9,因为在运行Raspbian 9时,TensorFlow 1.9正式支持树莓派。我们还需要一个至少16GB内存的microSD卡,因为构建OpenCV可能是一个非常消耗内存的过程。


csi摄像头

目标检测模型

针对本课题,我们选择了以下型号:小型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就足够了)。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容