树莓派安装Tensorflow并利用SSDLite-MobileNet实现object detection小白教程

树莓派安装Tensorflow并利用SSDLite-MobileNet实现object detection小白教程

简介

对象检测是机器视觉领域最常用的功能之一,即对探测的目标分辨出是何物,本教程使用当前最常用的单片机树莓派3B+,设置安装tensorflow并实现利用较小的神经网络SSDLite-MobileNet进行识物。

本教程参考了国外一个大神的GitHub,并对其中的相关错误进行纠正以及补充,主要工作有利用虚拟环境实现更好的python环境管理,纠正相关错误。这篇教程适合深度学习初学者,通过这篇教程,你将实现tensorflow的安装、opencv的安装、虚拟环境的使用、深度网络的调用与使用,最终实现让你的树莓派实现辨物的智慧。

[video(video-R4fDqIni-1589249261544)(type-bilibili)(url-https://player.bilibili.com/player.html?aid=668130487)(image-https://ss.csdn.net/p?http://i0.hdslb.com/bfs/archive/ad66a99e38a4c8b96d0f53c4e5ca963218ca6ac2.jpg)(title-树莓派安装Tensorflow并利用SSDLite-MobileNet实现object detection效果)]

情按照一下教程步骤实现,如不意外时间约为半天。update(2020.5.12)

  1. 更新你的树莓派(pi3B+/4B)

  2. 安装虚拟环境

  3. 安装tensorflow以及opencv

  4. 编译安装protobuf以及设置PYTHONPATH变量

  5. 对象检测!

步骤

0. 更新你的树莓派(pi3B+/4B)

首先,Raspberry Pi需要完全更新。打开终端并发出:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">sudo apt-get update sudo apt-get upgrade</pre>

根据您更新Pi的时间长短,升级可能需要一分钟到一个小时。


image

1. 安装虚拟环境

在您的主目录,创建一个名为“ tensorflow”的目录,并将其cd进入。

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">mkdir tensorflow cd tensorflow1</pre>

通过git clone命令从GitHub下载tensorflow存储库:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">git clone --depth 1 https://github.com/tensorflow/models.git</pre>

本指南的其余部分将在此/ home / pi / tensorflow目录中工作。下一步是创建一个称为“ tf-env”的虚拟环境。

在本指南中使用的是虚拟环境,<mark>因为它可以防止您的Pi上已经安装的软件包库版本之间发生任何冲突。将其安装在自己的环境中可以避免此问题。</mark>

通过发出以下命令安装virtualenv:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">sudo pip3 install virtualenv</pre>

然后,通过发出以下命令来创建“ tf-env”虚拟环境:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">python3 -m venv tf-env</pre>

这将在tensorflow目录中创建一个名为tf-env的文件夹。tf-env文件夹将包含此环境的所有软件包库。接下来,通过发出以下命令激活环境:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">source tf-env/bin/activate</pre>

每次打开新的终端或者重启工作时需要重新激活环境,需要在/ home / pi / tensorflow目录中发出上述命令。


image

2. 安装tensorflow以及opencv

按照原教程走下来会有几个bug,经过多次实践已经一一排除,为了简化操作,我仿照EdjeElectronics的GitHub编写了一个Shell脚本,该脚本将自动下载并安装所有软件包和依赖项。
首先需要下载bash文件

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">git clone https://github.com/xxlbigbrother/TensorFlow-Object-Detection-on-Raspberry-Pi-Embedded-Visual-Hardware.git</pre>

打开文件夹复制tf_get_pi_requirements.sh以及Object_detection_picamera.py到/home/pi/tensorflow/models/research/object_detection目录下。

通过发出以下命令运行bash文件自动安装tensorflow以及opencv:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">bash tf_get_pi_requirements.sh</pre>

将下载超过200M的文件,需要一段时间,如果运行bash tf_get_pi_requirements.sh命令时遇到错误,则可能是由于Internet连接超时或下载的软件包数据已损坏。如果出现错误,请尝试重新运行该命令几次。

这里温馨提示:深夜或者大清晨下载速度较快,达到20~30k/s.


image

3. 编译安装protobuf以及设置PYTHONPATH变量

TensorFlow对象检测API使用Protobuf,这是一个实现Google协议缓冲区数据格式的软件包。您以前需要从源代码进行编译,但是现在安装很简单!

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">sudo apt-get install protobuf-compiler</pre>

完成后通过下述命令验证其是否安装成功。您应该得到libprotoc 3.6.1或类似的答复。

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">protoc --version</pre>

接下来,我们需要修改PYTHONPATH环境变量以指向刚下载的TensorFlow信息库内的某些目录。我们希望每次打开终端时都设置PYTHONPATH,因此我们必须修改的.bashrc文件。通过发出以下命令打开它:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">sudo nano ~/.bashrc</pre>

移至文件末尾,并在最后一行添加:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">export PYTHONPATH=$PYTHONPATH:/home/pi/tensorflow1/models/research:/home/pi/tensorflow1/models/research/slim</pre>

image

然后,保存并退出文件。这样一来,每次您打开新终端时都会调用“ export PYTHONPATH”命令,因此将始终正确设置PYTHONPATH变量。关闭,然后重新打开终端。
现在,我们需要使用Protoc来编译对象检测API使用的协议协议(.proto)文件。.proto文件放在/ research / object_detection / protos中,但是我们需要从/ research目录执行命令。执行以下命令:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">cd /home/pi/tensorflow1/models/research protoc object_detection/protos/*.proto --python_out=.</pre>

此命令将所有“名称” .proto文件转换为“ name_pb2” .py文件。接下来,进入object_detection目录:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">cd /home/pi/tensorflow1/models/research/object_detection</pre>

现在,我们将从TensorFlow检测模型库中下载SSD_Lite模型。模型动物园是谷歌的预训练对象检测模型的集合,这些模型具有不同水平的速度和准确性。树莓派的处理器较弱,因此我们需要使用处理能力较小的模型。尽管该模型将运行得更快,但要以降低精度为代价。在本教程中,我们将使用SSDLite-MobileNet,这是最快的模型。
Google不断发布具有改进速度和性能的模型,经常回访模型库,看看是否有更好的模型。
下载SSDLite-MobileNet模型并通过发出以下命令解压缩:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">wget http://download.tensorflow.org/models/object_detection/ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz tar -xzvf ssdlite_mobilenet_v2_coco_2018_05_09.tar.gz</pre>

现在,该模型位于object_detection目录中,可以使用了。

4. 检测物体!

好的,现在一切就绪,可以在Pi上执行对象检测!此存储库中的Python脚本Object_detection_picamera.py用于检测来自Picamera或USB网络摄像头的实时供稿中的对象。基本上,脚本会设置模型和标签映射的路径,将模型加载到内存中,初始化Picamera,然后开始对Picamera中的每个视频帧执行对象检测。

  • 如果您使用的是Picamera,请确保在Raspberry Pi配置菜单中将其启用。


    image

    在/object_detection目录下发出命令

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">python Object_detection_picamera.py</pre>

  • 若你使用的是USB摄像头,则在上述命令添加--usbcam

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">python3 Object_detection_picamera.py --usbcam</pre>

脚本初始化后(最多可能需要30秒),您将看到一个窗口,显示相机实时取景。视图内的公共对象将被识别并在其周围绘制一个矩形。


image

注意事项:

  • 判断tensorflow是否安装成功,在tf-env虚拟环境下输入:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">python</pre>

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import tensorflow as tf</pre>

若无报错,即安装成功,若错误,请重新运行bash脚本,可能是下载时间过长断开。

  • 判断opencv是否安装成功,在tf-env虚拟环境下输入:

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">python</pre>

<pre class="cm-s-default" style="color: rgb(89, 89, 89); margin: 0px; padding: 0px; background: none 0% 0% / auto repeat scroll padding-box border-box rgba(0, 0, 0, 0);">import cv2</pre>

若无显示导入cv2错误,即安装成功,若错误,请重新运行bash脚本,可能是下载时间过长断开。

<mark>该教程识别帧率过低,在0.8帧左右,建议在树莓派使用tensorflowlite以及corel tpu加速器,帧率较高。</mark>


image

博主会录制一期帧率以及效果对比视频,欢迎关注!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容