学生休息室

分享学生如何在日常项目中使用Matlab和Simulink的技术和现实生活示例#studentsuccess金宝app

在Matlab中设计对象探测器

Connell D'Souza是博客博客,并告诉我们Matlab中的对象检测。

-

几周前,我访问了佛罗里达大西洋大学团队owltononous,谁竞争罗布纳学生比赛Roboboat.robotx.从2019年开始罗缎还有!我们的讨论跨越了一系列主题,包括在MATLAB中设计对象检测算法。对象探测器对于允许自主系统识别其周围环境的内容至关重要。该团队认为工作流程将有助于减少在给出1年开发周期的情况下开发对象探测器所需的时间。所以,我以为我会分享我们在这篇文章中的一些讨论!可以在此示例中讨论的代码此文件Exchange条目

什么是物体探测器?

对象检测器是一种计算机程序,该计算机程序采用计算机视觉,图像处理和/或人工智能算法来检测图像中感兴趣的特征或视频流。正如塞巴斯蒂安所说的那样这篇文章关于自治系统的传感器,相机是自主系统采用的便宜和重要的感知传感器。您可以使用对象检测算法来了解您的相机“看到”。我喜欢根据所用技术将对象探测器分为3种广泛类别:

  1. 古典电脑愿景:采用古典计算机视觉技术,如图像分割和特征检测和匹配,以识别感兴趣的对象。功能可能包括颜色,形状,边缘等。查看我们的在线教程系列Matlab的电脑愿景了解更多。
    例如颜色阈值BLOB分析渐变的直方图加速强大的功能
  2. 机器学习:机器学习是对数据进行分类的有效方法。这些探测器使用经典的计算机视觉算法来提取来自图像的特征或数据点,然后使用支持向量机等机器学习技术来分类功能。金宝app
    例如级联对象检测器(Viola-Jones算法)聚合通道功能(ACF)
  3. 深度学习:深度学习探测器使用标记图像形式的数据来教导感兴趣的卷积神经网络(CNN)特征。您可以从划伤或执行预先训练的网络进行传输学习的网络。看看深度学习ondramp.要了解如何开始!
    例如yolo v2.R-CNN,FAST R-CNN和更快的R-CNNS

我们将讨论设计作为机器学习检测器的ACF对象检测器。但是,正如您将通过替换少数功能和正确的计算电源来看,您也可以遵循基于深度学习的探测器的相同过程。

设计探测器

使用对象检测的地面真相的工作流程如下图所示。我将使用下几个部分简要解释它们。

产生地面真理

地面真理是指经验证据或观察提供的信息。在我们的情况下,这是一组标记的图像。标记的图像包含图像,图像类描述符,如bigredbuoy,smallgreenbuoy,如上面所示,以及这些图像中的兴趣区域(Rois)的位置。设计人员需要提供此数据集以培训探测器。有许多可公开的开源标记数据集,但可能有机会在任何数据集可用于您的特定应用程序。这将保证您创建自己的实际真相。

Matlab为您提供工具 -地面真理贴标机自动执行此过程。此应用为您提供了一种简单的方法来标记矩形ROI,折线ROI,像素和场景。您还可以使用内置自动化算法或其自动化此过程提供自己的算法。完成标记图像或视频后,您可以将地面真理导出为地面真实数据对象。观看下面的视频,了解如何自动化地面真理标签!

[视频]Matlab和Simu金宝applink机器人竞技场:使用地面真相进行对象检测,第1部分

训练对象探测器

既然您有一个标签的数据集或地面真理,计算机视觉工具箱提供内置的培训功能,可用于培训机器学习或深度学习探测器。下面的图形显示了可以帮助您培训这些探测器的功能和工作流程。

trainacfobjectdetector功能用于培训ACF对象检测器,就像我们之前讨论的那样是机器学习探测器。此函数调用可以由其他类似的功能替换

一个警告是,您需要提供一些特定于这些深度学习探测器的培训选项,您可以在上面的文档链接中读取它。

现在您有一个训练有素的探测器,您可以使用对象检测器对象的检测方法来识别图像的感兴趣对象!

评估对象探测器

一旦您有训练有素的探测器,并且在视觉上确认它正在检测到它的目的,您可能希望通过一些数值指标评估这些探测器。这可能是一个形式混乱矩阵或其他常见的指标比较率精确。Matlab提供内置功能,以执行这些评估。

涉及到错过率和精度时,使用的一个重要参数是阈值。阈值参数确定边界框周围的边界框的重叠程度,在地面真实中相同对象的边界框上给出了探测器的感兴趣对象。它计算为联盟(IOO)或Jaccard指数交叉口。如下图所示,用于相同的检测和地面真理数据,改变阈值参数的值大大地改变了评估度量的值。选择最适合您的应用程序的重叠阈值,并记住更高的阈值意味着您期望您的检测结果与地面真理的更大区域重叠。

选择数据集时要测试检测器,请确保使用数据集独立用于训练探测器的那个。这将有助于确保您不会将检测器过度接收到特定数据集。观看下面的视频,看看这个代码如何工作!

[视频]MATLAB和SIMU金宝appLINK机器人竞技场:使用地面真相进行对象检测,第2部分

生成C / C ++代码

要在机器人/车辆的计算机上使用此探测器,您需要将MATLAB代码转换为像C / C ++这样的低级语言,可以在嵌入式系统上执行。在R2019A中,我们为上面讨论的某些对象检测器添加了代码生成支持,金宝app包括在此示例中使用的ACF对象检测器。要生成C / C ++代码,MATLAB代码必须在函数中打包。当AcfObjectDetector对象,不能通过函数接口作为生成代码中的参数,因为它是一个MATLAB对象,您必须通过调用构造函数方法来构造功能内的对象AcfObjectDetector.班上分类器培训选项属性作为参数。这可以通过将对象转换为属性作为字段的结构来完成,并将其另存为如下图所示。

s = tostruct(探测器);保存('detectorcodegen.mat',' -  struct','s','classifier','modelname',...'numweaklearners','objecttrainingsize','trainingoptions')

接下来使用函数内的垫文件加载编码器功能如下所示,并调用构造函数。您将希望将其声明为持久性,因此它存储在内存中,不需要在每个调用该函数时构建。修改了代码后,您可以按照MATLAB编码器应用程序流程获取C / C ++代码。不熟悉MATLAB编码器应用程序?查看代码生成的本教程系列。

功能[框,分数] = ACFDetector(IMG)%#codegen.持久性探测器如果是isempty(探测器)s = coder.load('detectorcodegen.mat');探测器= AcfObjectDetector(S.Classifier,S.TringOptions);结束[框,分数] =检测(探测器,IMG);)

要结束,我会鼓励你下载代码并尝试一下。请参阅几行Matlab代码可以帮助您开发强大的对象探测器,并将其转换为C / C ++。

|

评论

要发表评论,请点击在这里登录您的MathWorks帐户或创建新的。