本示例展示了如何使用MATLAB®支持包为树莓派™硬件部署深度学习算法,该算法在Co金宝appnnected IO和PIL模式下检测和跟踪对象。该算法使用基于resnet -18的YOLOv2神经网络来识别安装在伺服电机上并连接到树莓派硬件板的摄像头所捕获的物体。你可以在周围的不同物体上进行实验,看看网络在树莓派硬件上检测图像的准确性如何。
注意:不能使用macOS在树莓派硬件上生成和部署深度学习代码。
配置树莓派网络硬件设置窗口。在此过程中,下载用于深度学习的MathWorks®Raspbian映像。如果您选择自定义硬件上的现有映像,而不是使用MathWorks Raspbian映像,请确保选择了安装ARM®计算库的选项。
为树莓派目标板上电。
使用跳线将伺服电机连接到树莓派目标板。连接GND和VCC引脚。此外,在本例中,将伺服电机信号引脚连接到树莓派目标板的GPIO引脚12。
用胶带或粘合剂将相机安装在伺服电机的顶部。本例使用USB网络摄像头。
创建跟踪器
对象并获得地面真相数据。
tracker = raspiObjectTracker
追踪=
带有属性的raspiObjectTracker:
BoardDetails: [1x1 struct]设置:[1x1 struct]检测器:[1x1 struct]测试配置文件:[1x1 struct]
查看树莓派目标板详细信息。
跟踪器。BoardDetails
ans =
带字段的结构:
名称:树莓派DeviceAddress: 192.168.0.100用户名:Pi密码:树莓
该结构显示了树莓派单板的名称、设备地址、用户名和密码。您可以使用点表示法来更改值。例如,将密码修改为MATLAB
.
tracker.BoardDetails.Password =MATLAB的;
通过再次查看属性来检查更改。
跟踪器。BoardDetails
ans =
带字段的结构:
名称:树莓派DeviceAddress: 192.168.0.100用户名:Pi密码:MATLAB
该结构显示了更新后的密码。
查看图像捕获设置属性。
跟踪器。设置
ans =
带字段的结构:
DataCaptureTime: 120 CameraInterface: 'webcam'
这个结构显示了接口的类型和捕获时间。
DataCaptureTime
—跟踪对象图像采集的时间,单位为秒。默认时间为120
秒。您可以使用点表示法来更改值。在检测和跟踪一个物体时,可以增加捕获时间来提高神经网络的训练效率。将捕获时间更改为300
秒。
trace . setup . datacapturetime = 300;
CameraInterface
—用于检测和跟踪目标的摄像头接口类型网络摄像头
或cameraboard
对象。缺省接口为网络摄像头
.
将要检测和跟踪的对象放置在摄像机前,在MATLAB命令窗口中执行以下命令:
objectTrackingSetup(跟踪)
该命令与树莓派硬件建立IO连接,并从网络摄像头获取ground truth数据。它还会打开贴标签机视频应用程序。
控件中指定的时间,摄像机将捕获图像DataCaptureTime
财产。该应用程序将图像保存到当前工作目录中的文件夹数据
-_date_ -_timestamp_,日期
当前日期和时间戳
是当前时间。
对象中复制一个示例图像数据
-_date_-_timestamp_文件夹,并粘贴到当前工作目录。的文件名,以便在训练网络时使用它作为参考图像tracker.Detector.SampleImage
财产。
运行objectTrackingSetup(跟踪)
命令还将打开贴标签机视频这个应用程序允许您标记感兴趣的区域(ROI),使用自动化算法自动跨图像帧标记,并导出标记的地面真相。
在视频标签应用程序中遵循以下步骤:
在ROI标签窗格中,单击标签.创建一个矩形标签,命名,然后单击好吧.在本例中,对象具有名称球
.
使用鼠标在图像中绘制矩形ROI。
在自动贴标部分,使用选择算法按钮,以选择点跟踪器
算法然后点击自动化.算法指示显示在右窗格中,所选标签可用于自动化。
在运行部分中,点击运行自动标记图像序列。
当对算法结果满意时,进入关闭部分中,点击接受.
下出口标签中,选择到文件将标记的数据导出到MAT文件objectLabel.mat.
有关如何使用视频标签应用程序的详细信息,请参阅贴标签机视频而且开始与视频标签.
从捕获的地面真相数据训练YOLOv2对象检测器,并在Connected IO和PIL模式下验证被检测到的对象。
使用跟踪器。探测器
命令查看LabeledData
字段是您使用视频标签应用程序导出的MAT文件的名称。
跟踪器。探测器
ans =
带字段的结构:
LabeledData:“objectLabel。ImageSize: [224 224 3] NumClasses: 1 SampleImage: ' SampleImage .jpg'网络:[1x1 struct]训练选项:[1x1 struct] DetectorMatFile: 'detectorSaved.mat'
用从相机捕获的图像训练YOLOv2对象检测器。的objectLabel.mat
文件包含导出的地面真相数据。使用这个文件来训练YOLOv2对象检测器。
从当前捕获的目标图像目录中,选择一个有效的样本图像作为训练神经网络的参考。对于本例,将示例图像设置为image_50.png
.
tracker.Detector.SampleImage =“image_50.png”;
训练YOLOv2对象检测器并将其保存为MAT文件detectorSaved.mat
.
createObjectDetector(跟踪)
一旦YOLOv2神经网络完成对图像的训练,就会打开一个包含所选样本图像的图形窗口。该图像显示了训练网络内的ROI和匹配概率。
请注意:可以通过Connected IO和PIL两种方式验证对象检测。
使用Connected IO模式验证检测到的对象。图像捕获过程发生在树莓派硬件本身。
在MATLAB命令窗口中执行以下命令:
跟踪器。TestAndProfile
ans =
带字段的结构:
PredictFunction: 'raspi_yolov2_detect' TestMode: 'IO' TestDuration: 60伺服:[1x1 struct]
默认的TestMode
值是“输入输出”
.
验证IO模式下的对象检测:
startTestAndProfile(跟踪)
打开一个摄像头窗口,显示ROI和在训练网络中检测到的对象的匹配概率。
使用PIL模式验证被检测对象。图像捕获过程发生在树莓派硬件本身。的raspi_yolov2_detect
命令以PIL模式运行在Raspberry Pi单板上。
注意:PIL模式下的对象检测和跟踪需要一些时间来执行。
修改目标检测方式为“公益诉讼”
.
tracker.TestAndProfile.TestMode =“公益诉讼”;
在MATLAB命令提示符下运行此命令以验证PIL模式下的目标检测。
startTestAndProfile(跟踪)
打开一个摄像头窗口,显示ROI和在训练网络中检测到的对象的匹配概率。
浏览代码执行分析报告,按执行概要报告链接。
当目标被检测成功后,为了跟踪目标,必须配置伺服电机参数。
查看伺服电机参数。
tracker.TestAndProfile.Servo
ans =
带字段的结构:
TestWithServo: 0增量:0.5000 PinNumber: 12 StartPosition: 90 MinPulseDuration: 5.0000e-04 MaxPulseDuration: 0.0025
TestWithServo
—启用或禁用跟踪对象的伺服电机。该字段的默认值为假
.使用以下命令启动伺服电机:
trace . teststandprofile . servo . testwithservo = true;
您可以根据伺服电机的数据表修改这些参数:
1.增量
-伺服电机旋转步进角大小。默认步进角度值为0.5
度。
2.PinNumber
—伺服电机所连接的树莓派目标板GPIO引脚号。
3.起动位置
-伺服电机启动角度位置。伺服电机从0到180度旋转。默认的起始角度是90度。
4.MinPulseDuration
-最小脉冲持续时间移动到0度。
5.MaxPulseDuration
-最大脉冲持续时间移动到180度。
使用这些命令来确保伺服电机上的对象跟踪被启用,并且测试模式被设置为IO:
trace . teststandprofile . servo . testwithservo = true;
tracker.TestAndProfile.TestMode =“输入输出”;
以连接IO模式跟踪被检测对象:
startTestAndProfile(跟踪)
将物体放在摄像机前并移动物体。观察伺服电机跟随运动物体转动。
一个带有ROI和与训练网络匹配概率的摄像头窗口打开。打开一个单独的窗口来显示伺服电机的角度。
使用这些命令确保伺服电机上的对象跟踪是开启的,并且测试模式设置为PIL:
trace . teststandprofile . servo . testwithservo = true
tracker.TestAndProfile.TestMode =“公益诉讼”;
在已连接的PIL模式下跟踪被检测对象:
startTestAndProfile(跟踪)
将物体放在摄像机前并移动物体。观察伺服电机跟随运动物体转动。
一个带有ROI和与训练网络匹配概率的摄像头窗口打开。打开一个单独的窗口来显示伺服电机的角度。
的raspi_object_tracking
函数在树莓派硬件板上执行目标跟踪算法。方法中指定的跟踪算法raspi_yolov2_detect
函数。
在将代码部署到树莓派目标板之前,请打开raspi_object_tracking.m
函数文件,并通过修改其中一个或多个来配置参数:
输入ResNet-18神经网络的图像大小
观察伺服电机的增量角度、启动位置等
用于捕获对象图像的相机接口类型
的raspi_yolov2_detect
函数使用基于yolov2的反卷积神经网络(DNN)保存为MAT文件。通过inputImg
作为被检测网络的输入。如果探测到该物体,outImg
包含被检测对象的包围框信息。posIncFactor
指示将对象维持在此包围框的框架中心所需的旋转因子。
打开raspi_yolov2_detect.m
文件,并输入保存的训练过的神经网络MAT文件的名称detectorSaved.mat
在yolov2obj
参数。
在MATLAB命令提示符下运行这些命令。
t = targetHardware(“树莓π”)
t.CoderConfig.TargetLang =“c++”;
DLCFG =编码器。DeepLearningConfig (“arm-compute”);
dlcfg。ArmArchitecture =v7的;
t.CoderConfig.DeepLearningConfig = dlcfg;
部署(t)“raspi_object_tracking”)
观察安装在伺服电机上的摄像机检测物体并跟踪其运动。在树莓派桌面,打开摄像头显示屏,观察实时跟踪结果。
对象的代码生成raspi_object_tracking
函数。代码生成完成后,MATLAB生成代码生成报告。使用此报告调试raspi_object_tracking
函数用于生成代码中的任何构建错误或警告。
在成功生成代码之后,支持包将加载对象分类算法并在硬件上作为独立的可执行文件运行。金宝app可执行文件开始检测所获取视频中的对象,并显示预测的标签及其相关概率。要查看树莓派屏幕,请使用VNC查看器并在硬件上打开远程会话以获得显示。您也可以将HDMI线从显示器连接到硬件。
训练YOLOv2对象检测器检测和跟踪多个对象。
使用ResNet-18以外的神经网络对目标进行训练,观察得到结果的差异。
中使用不同的算法贴标签机视频应用程序,并将结果与点跟踪器
算法。
方法中提供的输入图像大小raspi_yolov2_detect
功能和观察目标检测图像。