在过去的五年中,深度神经网络已经解决了许多计算困难的问题,特别是计算机视觉。因为深度神经网络需要大量的计算力来训练模型,所以我们经常使用多块 GPU 或云端服务器进行分布式地训练。实际上,在深度神经网络模型经过训练后,它只需要相对较少的计算资源就能执行预测。这就意味着我们能将模型部署到低功耗的边缘设备中,并且在没有网络连接的情况下运行。
亚马逊的开源深度学习引擎 Apache MXNet 除了支持多 GPU 训练和部署复杂模型外,还可以生成非常轻量级的神经网络模型。我们也可以将这些模型表征部署到有限内存和计算力的移动端中。这就令 MXNet 可以完美地在树莓派中运行深度学习模型。
在本文中,我们将使用 MXNet 在树莓派上创建计算机视觉系统。我们同样也会讨论如何使用 AWS IoT 以连接到 AWS Cloud 中,因此我们可以使用云端管理轻量卷积神经网络,并令其在树莓派中实时执行目标识别。
首先,我们需要设置树莓派的相机模块为摄像机,然后再安装 MXNet。这两步允许我们对树莓派「看见」的物体执行基于深度神经网络的分析。
设置树莓派的相机模块,并通过以太网端口或 WiFi 连接设备到网络中。然后打开终端,键入以下命令以安装本文所需要的 Python 依赖库:
如果需要对树莓派相机所捕捉到的图像执行预测,我们需要从 MXNet Model Zoo 中抽取预训练深度神经网络模型。在树莓派的根目录创建一个 Python 文件,并命名为 load_model.py,然后从 Model Zoo 下载 ImageNet 预训练模型并加载到树莓派的 MXNet 中:
下载了高精度的轻量模型后,可以尝试利用 ImageNet 预训练的 SqueezeNet V1.1 模型识别一张猫的照片,我们可以在树莓派的根目录上运行如下命令行:
为了对树莓派相机所捕捉到的图片进行识别,我们需要将相机指向需要分类的目标,并在树莓派的根目录中运行如下命令:
在树莓派上本地运行模型只是第一步。如果我们需要可靠性集中(reliably centralize)和储存预测结果,或远程更新模型,我们就需要连接树莓派到 AWS Cloud 中。为了连接到 AWS,首先第一步就需要在树莓派中设置 AWS IoT。
选择下一步并在 connect_device_package.zip 中下载连接工具箱到树莓派中。但当我们解压缩 connect_device_package.zip 文件并抽取内容到树莓派的根目录中时,我们将看到需要确保设备和 AWS 中间的安全连接:
为了在设备和 AWS Cloud 中创建安全连接,我们需要跟着下面在树莓派上运行 start.sh 脚本。该脚本会下载 Symantec Root-CA 认证到树莓派中,并安装 AWS IoT SDK,这将令 Python 和 AWS IoT 的交互更加简单。该脚本同样确保了树莓派可以和 AWS IoT 对话。现在我们可以使用 AWS IoT 在树莓派上创建服务,即可以近乎实时地进行目标识别并将结果推送到 AWS Cloud 中。它还提供了在树莓派上无缝更新模型的机制。
现在在我们的根目录下,创建一个名为 iot_service.py 的新文件,并将下面代码添加到其中:
为了在 AWS 实时看到预测流,我们需要在 Test 页面中选择新主题的名称。即使网络连接很慢或掉线了,AWS IoT 也确保了数据包不会遗失,并且预测日志仍然会保持更新。
树莓派从 Model Zoo 中下载新的神经网络符号和参数文件,然后加载它们持续进行预测。我们不需要下载一个新的 synset。因为这两个模型都是用于挑战 ImageNet 任务而构建,所以我们试图识别的物体都是一样的。
通过在树莓派上运行 MXNet 以执行预测,还有利用 AWS IoT 连接它到 AWS Cloud,我们已经构建了一个近乎最好的计算机视觉系统。我们的系统不会依赖于稳定的高带宽视频流,也不会依赖用云端昂贵的 GPU 服务器来处理视频。实际上,通过在树莓派上使用 AWS 和 MXNet,我们能很容易地构建一个更加可靠和高效的智能视觉系统。通过这种方式,我们享受到了云模型和管理的好处,但同时也不需要每月为云端服务器和数据迁移花大价钱,我们只需要花 400 元左右买树莓派和摄像头就行了。
这种智能摄像系统只是开端,我们还可以利用 AWS Cloud 建立更多的应用,如使用迁移学习将预训练模型更好地适配到我们自己的计算机视觉任务中。
机器 AI 新手小编在读完该篇文章后,也尝试着使用树莓派实现这一有意思的应用,但在该过程中遇到了许多困难。虽然机器小编暂时还没有成功,但在实现的过程中还是发现了许多有用的经验,因此希望能与读者共同玩转树莓派,并实现实时目标识别。这里也欢迎想要尝试的读者在文章下留言,分享实现这一教程的经验。最后补充一句:新手上,老司机莫要嘲笑!
首先是系统,树莓派最常用的是系统是 Raspbian,它是一种基于 Debian 的小型操作系统,我们需要下载系统并烧录到 TF 卡中。
由于树莓派的内存只有 1GB,我们需要从 TF 卡分配 1GB 的存储空间作为 swap 交换空间,不然 MXNet 安装到里面会因为内存太小而报错。我们试了几种修改交换空间大小的方式(默认交换空间的大小为 100MB),最后实测可以在 root 权限下修改 dphys-swapfile 文档而实现 swap 交换空间大小的更改。即在 root 权限下键入命令 nano /etc/dphys-swapfile,然后如下图修改 CONF_SWAPSIZE=100 为 1024。最后保存文档并退出,然后重启系统。这一次重启的时间会有些增加,但只是在分配空间而已。
随后在安装 MXNet 的时候,我们遇到了更大的困难。最开始按照 MXNet 的教程安装,但在 mxnet 文件夹下 make 的时候,一直报错,应该是 opencv 库的径没有添加到变量中。后来在 Medium 上发现有大神如是说:
然后我们又跟着这篇技术博客重新安装,不出意料的是,还是无法在 mxnet 文件夹下执行 make,总是报错。
虽然这一次并没有成功,但我们还会继续在树莓派上实现这一实时目标识别过程。我们准备下一步再尝试各种方式,如果实在 Raspbian 不行的话,我们可能会换 Ubuntu 系统,再进行尝试。同时我们也希望读者能与我们共同交流,一起实现这一有趣的任务。
本文由 790游戏(www.790.kim)整理发布
网友评论 ()条 查看