主要内容

基于树莓派的深度学习目标检测与跟踪

这个例子展示了如何使用MATLAB®支持包的树莓派™硬件部署一个深度学习算法,检测和金宝app跟踪对象在连接IO和PIL模式。该算法使用基于resnet -18的YOLOv2神经网络来识别安装在伺服电机上并连接到树莓派硬件板的摄像机捕捉到的物体。你可以在你周围的不同物体上做实验,看看网络在树莓派硬件上检测图像的准确性。

注意:你不能使用macOS在树莓派硬件上生成和部署深度学习代码。

先决条件

配置树莓派网络硬件设置窗口。在此过程中,下载MathWorks®Raspbian图像用于深度学习。如果您选择自定义硬件上的现有映像,请确保选择安装ARM®计算库,而不是使用MathWorks Raspbian映像。

所需的硬件

硬件设置

  1. 启动树莓派目标板。

  2. 用跳线将伺服电机连接到树莓派靶板上。连接GND和VCC引脚。此外,在本例中,您将伺服电机信号引脚连接到树莓派目标板的GPIO引脚12。

  3. 用胶带或粘合剂将摄像机安装在伺服电机的顶部。本例使用USB网络摄像头。

创建跟踪对象

创建跟踪器目标获取地面真实数据。

追踪= raspiObjectTracker
追踪=
raspiObjectTracker属性:
BoardDetails: [1x1 struct] Setup: [1x1 struct] Detector: [1x1 struct] testprofile: [1x1 struct]

查看树莓派目标板详细信息。

跟踪器。BoardDetails
ans =
结构体字段:
名称:'Raspberry Pi' DeviceAddress: '192.168.0.100'用户名:' Pi'密码:'Raspberry '

该结构显示了树莓Pi单板的名称、设备地址、用户名和密码。您可以使用点符号来更改这些值。例如,将密码修改为MATLAB

tracker.BoardDetails.Password =MATLAB的

通过再次查看属性来检查您的更改。

跟踪器。BoardDetails
ans =
结构体字段:
名称:“Raspberry Pi”DeviceAddress:“192.168.0.100”用户名:“Pi”密码:“MATLAB”

该结构显示了更新后的密码。

查看图像捕获设置属性。

跟踪器。设置
ans =
结构体字段:
DataCaptureTime: 120 CameraInterface: 'webcam'

该结构显示了接口类型和捕获时间。

  • DataCaptureTime—被跟踪对象的图像捕获的时间持续时间,以秒为单位。默认时间为120秒。您可以使用点符号来更改这些值。在检测和跟踪目标时,可以通过增加捕获时间来提高神经网络的训练效率。将捕获时间更改为300秒。

tracker.Setup.DataCaptureTime = 300;
  • CameraInterface-用于检测和跟踪对象的摄像机接口类型,可以是网络摄像头cameraboard对象。默认接口为网络摄像头

将要检测和跟踪的对象放置在摄像机前面,并在MATLAB命令窗口中运行以下命令:

objectTrackingSetup(跟踪)

该命令与树莓派硬件建立IO连接,从摄像头获取地面真实数据。它也打开了贴标签机视频应用程序。

文件中指定的时间,相机就会捕获图像DataCaptureTime财产。应用程序将图像保存到当前工作目录下名为数据-_date_ -_timestamp_,日期当前日期是和吗时间戳为当前时间。

复制一个样本图像从数据-_date_-_timestamp_文件夹,并粘贴到当前工作目录。注意文件名,以便您可以在训练网络时使用它作为参考图像tracker.Detector.SampleImage财产。

运行objectTrackingSetup(跟踪)命令同时打开贴标签机视频这个应用程序允许你标记感兴趣的区域(ROI),自动标签跨图像帧使用自动化算法,并导出标记的地面真相。

在视频标签应用程序中遵循以下步骤:

  1. ROI标签窗格中,单击标签.创建一个矩形标签,命名,然后单击好吧.在本例中,对象具有名称

  2. 使用鼠标在图像中绘制一个矩形感兴趣区域。

  3. 自动贴标部分中,使用选择算法按钮以选择点跟踪器算法,然后点击自动化.算法说明出现在右窗格中,所选标签可用于自动化。

  4. 运行部分中,点击运行自动标记图像序列。

  5. 当你对算法结果满意时,在关闭部分中,点击接受

  6. 出口标签中,选择到文件将标记的数据导出到MAT文件objectLabel.mat

关于如何使用视频标签应用的详细信息,请参见贴标签机视频开始使用视频标签

检测对象

从捕获的地面真实数据中训练YOLOv2物体探测器,并在Connected IO和PIL模式下验证被检测物体。

使用跟踪器。探测器命令检查LabeledData字段是使用Video Labeler应用程序导出的MAT文件的名称。

跟踪器。探测器
ans =
结构体字段:
LabeledData:“objectLabel。ImageSize: [224 224 3] NumClasses: 1 SampleImage: ' SampleImage .jpg' Network: [1x1 struct] TrainingOptions: [1x1 struct] DetectorMatFile: ' detectorsave .mat'

火车YOLOv2物体探测器

用摄像机捕捉到的图像训练YOLOv2物体探测器。的objectLabel.mat文件包含导出的ground truth数据。使用此文件训练YOLOv2对象检测器。

从捕获的目标图像的当前目录中选择一个有效的样本图像作为神经网络训练的参考。对于本例,将示例图像设置为image_50.png

tracker.Detector.SampleImage =“image_50.png”

训练YOLOv2对象检测器,并将其保存为MAT文件detectorSaved.mat

createObjectDetector(跟踪)

当YOLOv2神经网络完成对图像的训练后,就会打开包含所选样本图像的图形窗口。该图像显示了ROI和训练网络内的匹配概率。

请注意:可在Connected IO或PIL模式下验证物体检测。

在连接的IO模式下验证对象检测

使用“已连接IO”模式验证检测到的对象。图像捕捉过程是在树莓派的硬件上进行的。

在MATLAB命令窗口中运行以下命令:

跟踪器。TestAndProfile
ans =
结构体字段:
PredictFunction: 'raspi_yolov2_detect' TestMode: 'IO' TestDuration: 60

默认的TestMode值是“输入输出”

IO模式下验证对象检测:

startTestAndProfile(跟踪)

摄像机窗口会打开,显示出检测目标的感兴趣区域和训练网络内匹配的概率。

在PIL模式下验证对象检测

使用PIL模式验证检测到的对象。图像捕捉过程是在树莓派的硬件上进行的。的raspi_yolov2_detect功能在PIL模式下运行在Raspberry Pi板上。

注意:PIL模式下的目标检测和跟踪需要一定的时间来执行。

将对象检测模式更改为“公益诉讼”

tracker.TestAndProfile.TestMode =“公益诉讼”

在MATLAB command提示符下运行此命令以验证PIL模式下的对象检测。

startTestAndProfile(跟踪)

摄像机窗口会打开,显示出检测目标的感兴趣区域和训练网络内匹配的概率。

查看代码执行分析报告,单击执行分析报告链接。

配置伺服电机参数

要跟踪成功检测到的目标,必须配置伺服电机参数。

查看伺服电机参数。

tracker.TestAndProfile.Servo
ans =
结构体字段:
TestWithServo: 0增量:0.5000 PinNumber: 12 StartPosition: 90 MinPulseDuration: 5.0000e-04 MaxPulseDuration: 0.0025
  • TestWithServo-启用或禁用跟踪目标的伺服电机标志。该字段的默认值为.使用以下命令启用伺服电机:

tracker.TestAndProfile.Servo.TestWithServo = true;

您可以根据伺服电机的数据表修改这些参数:

1.增量-伺服电机旋转步进角度大小。默认步长角度值为0.5度。

2.PinNumber—伺服电机所连接的树莓Pi目标板的GPIO管脚号。

3.起动位置-伺服电机的启动角度位置。伺服电机从0到180度旋转。默认的起始角度是90度。

4.MinPulseDuration-最小脉冲持续时间移动到0度。

5.MaxPulseDuration-最大脉冲持续时间移动到180度。

在连接IO模式下跟踪对象

使用这些命令来确保伺服电机上的目标跟踪是启用的,并且测试模式设置为IO:

tracker.TestAndProfile.Servo.TestWithServo = true;
tracker.TestAndProfile.TestMode =“输入输出”

在连接IO模式下跟踪检测到的对象:

startTestAndProfile(跟踪)

将对象放置在摄像机前面并移动对象。观察伺服电机跟随运动物体旋转。

随着ROI和训练网络匹配概率的增加,摄像机窗口打开。一个单独的窗口打开来显示伺服电机的角度。

在PIL模式下跟踪对象

使用这些命令来确保伺服电机上的目标跟踪是启用的,并且测试模式设置为PIL:

tracker.TestAndProfile.Servo.TestWithServo = true
tracker.TestAndProfile.TestMode =“公益诉讼”

在连接PIL模式下跟踪被检测对象:

startTestAndProfile(跟踪)

将对象放置在摄像机前面并移动对象。观察伺服电机跟随运动物体旋转。

随着ROI和训练网络匹配概率的增加,摄像机窗口打开。一个单独的窗口打开来显示伺服电机的角度。

部署在树莓派目标板上

raspi_object_tracking函数在树莓派硬件板上执行目标跟踪算法。的跟踪算法raspi_yolov2_detect函数。

在部署树莓派目标板上的代码之前,打开raspi_object_tracking.m函数文件,并通过修改其中一个或多个参数来配置参数:

  • 用于ResNet-18神经网络的输入图像大小

  • 观察伺服电机的增量角度、启动位置等

  • 用于捕获物体图像的相机接口类型

raspi_yolov2_detect函数使用保存为MAT文件的基于yolov2的反卷积神经网络(DNN)。通过inputImg作为检测网络的输入。如果检测到该对象,outImg包含被检测对象的边界框信息。posIncFactor指示在此包围框中保持物体在框架中心所需的旋转因子。

打开raspi_yolov2_detect.m文件,并输入保存的训练神经网络MAT文件的名称detectorSaved.matyolov2obj参数。

在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函数,观察目标检测图像。

另请参阅