raspberry pi
您是否刚刚开始使用机器/深度学习,TensorFlow或Raspberry Pi?
我创建了rpi-deep-pantilt作为野外物体检测的交互式演示,在本文中,我将向您展示如何重现下面的视频,该视频描绘了摄像机的平移和倾斜以跟踪我在整个房间的运动。
我只是一个女孩,站在一台小型计算机前,提醒您大多数计算问题都可以通过意志力解决。 💪
-Leigh(@grepLeigh) 2019年11月28日
我将MobileNetv3 + SSD @TensorFlow模型转换为#TFLite #RaspberryPi + @pimoroni倾斜式帽子,PID控制器。
立即写信! ✨ https://t.co/v63KSJtJHO pic.twitter.com/dmyAlWCnWk
- 制作材料和硬件组装说明。
- 将TensorFlow Lite对象检测模型( MobileNetV3-SSD )部署到Raspberry Pi。
- 使用比例积分微分(PID)控制器向云台伺服电机发送跟踪指令。
- 借助Coral的USB Edge TPU加速器和Edge TPU编译器,可以 加快任何TensorFlow Lite模型的推论。
条款和参考
- Raspberry Pi :一种小型,价格合理的计算机,深受教育者,硬件爱好者和机器人爱好者的欢迎。
- Raspbian : Raspberry Pi基金会的Pi官方操作系统。 Raspbian源自Debian Linux。
- TensorFlow :用于数据流编程的开源框架,用于机器学习和深度神经学习。
- TensorFlow Lite :一个开放源代码框架,用于在移动和嵌入式设备上部署TensorFlow模型。
- 卷积神经网络 : CNN是一种神经网络体系结构,非常适合图像分类和目标检测任务。
- 单发检测器 : SSD是一种CNN体系结构,专门用于实时对象检测,分类和边界框定位。
- MobileNetV3 :最先进的计算机视觉模型,针对在适度的手机处理器上的性能进行了优化。
- MobileNetV3-SSD :基于MobileNet架构的SSD。 本教程将使用TensorFlow的对象检测模型zoo中可用的MobileNetV3-SSD模型。
- 边缘TPU :张量处理单元(TPU)是用于加速TensorFlow执行的计算的集成电路。 Edge TPU的开发占用空间很小,可用于“边缘”移动和嵌入式设备。
|
|
|
云TPU(左和中)加速TensorFlow模型训练和推理。 边缘TPU(右)加速了移动设备中的推理。
建立清单
必要
- Raspberry Pi 4 (建议4GB)
- Raspberry Pi相机V2
- Pimoroni Pan-Tilt HAT套件
- MicroSD卡(16GB或更多)
- Micro-HDMI电缆
可选的
- Raspberry Pi摄像机的12英寸CSI / DSI色带 :Pi摄像机的备用电缆对于Pan-Tilt HAT的整个运动范围而言都太短了。
- RGB NeoPixel Stick :此组件可为您的项目添加一致的光源。
- Coral Edge TPU USB加速器 :加快Raspberry Pi的推理(预测)速度。 您不需要此来复制演示。
寻找一个更少动人的项目? 查阅便携式计算机视觉:Raspberry Pi上的TensorFlow 2.0来创建手持式图像分类器。
设置Raspberry Pi
您可以通过两种方式将Raspbian安装到MicroSD卡上:
- NOOBS (“全新的现成软件”)是GUI操作系统安装管理器。 如果这是您的第一个Raspberry Pi项目,我建议从这里开始。
- 将Raspbian映像写入SD卡 。
本教程和支持软件是使用Raspbian(Buster)编写的。 如果您使用的是其他版本的Raspbian或其他平台,则可能会遇到一些麻烦。
在继续之前,您需要:
安装软件
- 安装系统依赖项:
$ sudo apt-get update && sudo apt-get install -y python3-dev libjpeg-dev libatlas-base-dev raspi-gpio libhdf5-dev python3-smbus
- 创建一个新的项目目录:
$ mkdir rpi-deep-pantilt && cd rpi-deep-pantilt
- 创建一个新的虚拟环境:
$ python3 -m venv .venv
- 激活虚拟环境:
$ source .venv / bin / activate && python3 -m pip install --upgrade pip
- 从社区构建的轮子安装TensorFlow 2.0:
$ pip install https: // github.com / leigh-johnson / Tensorflow-bin / blob / master / tensorflow-2.0.0-cp37-cp37m-linux_armv7l.whl? raw = true
- 安装rpi-deep-pantilt Python软件包:
$ python3 -m pip install rpi-deep-pantilt
组装Pan-Tilt HAT硬件
如果您购买了预组装的Pan-Tilt HAT套件,则可以跳到下一部分。 否则,请在继续之前按照组装Pan-Tilt HAT中的步骤进行操作。
连接Pi相机
- 关闭Raspberry Pi。
- 将相机模块放在USB模块和HDMI模块之间。
- 向上(轻轻)拉动黑色塑料夹。
- 插入摄像头模块的带状电缆(金属连接器背向 Raspberry Pi 4上的以太网/ USB端口)。
- 锁定黑色塑料夹。
启用Pi相机
- 打开Raspberry Pi。
- 运行sudo raspi-config并从Raspberry Pi软件配置工具的主菜单中选择接口选项 。 按Enter键 。
- 选择“ 启用相机”菜单选项,然后按Enter 。
- 在下一个菜单中,使用向右箭头键突出显示“ 启用” ,然后按Enter 。
测试Pan-Tilt HAT
接下来,测试您的Pan-Tilt HAT模块的安装和设置。
- SSH进入您的Raspberry Pi。
- 激活您的虚拟环境:
source .venv / bin / activate
- 跑:
rpi-deep-pantilt test pantilt
- 使用Ctrl + C退出测试。
如果正确安装了HAT,则应该在测试运行期间看到两个伺服器均以平滑的正弦曲线运动。
测试Pi相机
接下来,通过启动相机的预览图来验证Pi相机是否已正确安装。 叠加层将在Pi的主显示屏(HDMI)上呈现。
- 将Raspberry Pi插入HDMI屏幕。
- SSH进入您的Raspberry Pi。
- 激活您的虚拟环境:
$ source .venv / bin / activate
- 跑:
$ rpi-deep-pantilt test camera
- 使用Ctrl + C退出测试。
如果正确安装了Pi摄像机,则应该在HDMI或复合显示器上看到来自摄像机的镜头。
测试对象检测
接下来,验证您可以在Raspberry Pi上运行对象检测模型(MobileNetV3-SSD)。
- SSH进入您的Raspberry Pi。
- 激活您的虚拟环境:
$ source .venv / bin / activate
- 跑:
$ rpi-deep-pantilt detect
您的Raspberry Pi应该检测对象,尝试对其进行分类,并在它们周围绘制边界框。 注意:使用默认的MobileNetV3-SSD模型只能检测和跟踪以下对象。
$ rpi-deep-pantilt list-labels
[‘person’, ‘bicycle’, ‘car’, ‘motorcycle’, ‘airplane’, ‘bus’, ‘train’, ‘truck’, ‘boat’, ‘traffic light’, ‘fire hydrant’, ‘stop sign’, ‘parking meter’, ‘bench’, ‘bird’, ‘cat’, ‘dog’, ‘horse’, ‘sheep’, ‘cow’, ‘elephant’, ‘bear’, ‘zebra’, ‘giraffe’, ‘backpack’, ‘umbrella’, ‘handbag’, ‘tie’, ‘suitcase’, ‘frisbee’, ‘skis’, ‘snowboard’, ‘sports ball’, ‘kite’, ‘baseball bat’, ‘baseball glove’, ‘skateboard’, ‘surfboard’, ‘tennis racket’, ‘bottle’, ‘wine glass’, ‘cup’, ‘fork’, ‘knife’, ‘spoon’, ‘bowl’, ‘banana’, ‘apple’, ‘sandwich’, ‘orange’, ‘broccoli’, ‘carrot’, ‘hot dog’, ‘pizza’, ‘donut’, ‘cake’, ‘chair’, ‘couch’, ‘potted plant’, ‘bed’, ‘dining table’, ‘toilet’, ‘tv’, ‘laptop’, ‘mouse’, ‘remote’, ‘keyboard’, ‘cell phone’, ‘microwave’, ‘oven’, ‘toaster’, ‘sink’, ‘refrigerator’, ‘book’, ‘clock’, ‘vase’, ‘scissors’, ‘teddy bear’, ‘hair drier’, ‘toothbrush’]
以〜8FPS的速度跟踪对象
这是您一直在等待的时刻! 采取以下步骤,使用Pan-Tilt HAT以大约每秒八帧(FPS)的速度跟踪对象。
- SSH进入您的Raspberry Pi。
- 激活您的虚拟环境:
$ source .venv / bin / activate
- 跑:
$ rpi-deep-pantilt track
默认情况下,这将跟踪标签为person的对象。 您可以使用--label参数跟踪其他类型的对象。
例如,要跟踪香蕉,可以运行:
$ rpi-deep-pantilt track --label =banana
在Raspberry Pi 4(4GB)上,我以大约8FPS为基准对我的模型进行了基准测试。
INFO:root:FPS: 8.100870481091935
INFO:root:FPS: 8.130448201926173
INFO:root:FPS: 7.6518234817241355
INFO:root:FPS: 7.657477766009717
INFO:root:FPS: 7.861758172395542
INFO:root:FPS: 7.8549541944597
INFO:root:FPS: 7.907857699044301
使用Edge TPU实时跟踪对象
您可以使用Coral的USB Accelerator加快模型推断速度。 USB加速器包含Edge TPU,这是专门用于TensorFlow Lite操作的ASIC芯片。 有关更多信息,请查看《 USB加速器入门》 。
- SSH进入您的Raspberry Pi。
- 安装Edge TPU运行时: $ echo "deb https://packages.cloud.google.com/apt coral-edgetpu-stable main" | sudo tee / etc / apt / sources.list.d / coral-edgetpu.list
$ curl https: // packages.cloud.google.com / apt / doc / apt-key.gpg | sudo apt-key add -
$ sudo apt-get update && sudo apt-get install libedgetpu1-std - 插入Edge TPU(最好插入USB 3.0端口)。 如果您的Edge TPU已经插入,请卸下并重新插入,以便udev设备管理器可以检测到它。
- 尝试使用带有--edge-tpu选项的detect命令。 您应该能够实时检测物体!
$ rpi-deep-pantilt detect --edge-tpu --loglevel =INFO
请注意, loglevel = INFO将向您显示检测对象的FPS,并将边界框渲染到Raspberry Pi Camera的叠加层。
您应该会看到〜24FPS,这是从Pi Camera采样帧到帧缓冲区的速率:INFO:root:FPS: 24.716493958392558
INFO:root:FPS: 24.836166606505206
INFO:root:FPS: 23.031063233367547
INFO:root:FPS: 25.467177106703623
INFO:root:FPS: 27.480438524486594
INFO:root:FPS: 25.41399952505432 - 尝试使用带有--edge-tpu选项的track命令:
$ rpi-deep-pantilt track --edge-tpu
结语
恭喜你! 您现在是DIY对象跟踪系统的骄傲拥有者,该系统使用单发检测器(一种卷积神经网络)对对象进行分类和定位。
PID控制器
平移/倾斜跟踪系统使用比例积分微分(PID)控制器来平滑跟踪边界框的质心。
TensorFlow模型动物园
本教程中的模型来自TensorFlow检测模型Zoo中的ssd_mobilenet_v3_small_coco和ssd_mobilenet_edgetpu_coco 。
我的模型可以通过leigh-johnson / rpi-deep-pantilt中的 GitHub版本说明下载。
我添加了自定义TFLite_Detection_PostProcess操作,该操作对模型输出实现了非最大抑制(NMS)的变体。 NMS是一种使用set操作过滤许多边界框建议的技术。
特别的感谢和感谢
- MobileNetEdgeTPU SSDLite贡献者:熊云阳,陈博,Suyog Gupta,刘汉晓,Gabriel Bender,谭明兴,Berkin Akin,陆志超,Quoc Le
- MobileNetV3 SSDLite贡献者:陈波,卢志超,Vivek Rathod,黄乔纳
- Adrian Rosebrock 使用Raspberry Pi和OpenCV编写平移/倾斜面部跟踪 ,这是整个项目的灵感
- Jason Zaman评论了本文和早期发布的候选人
本文最初发布于Towards Data Science Medium渠道,经许可可重复使用。
翻译自: https://opensource.com/article/20/1/object-tracking-camera-raspberry-pi
raspberry pi