学生休息室

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

在MATLAB设计对象探测器

康奈尔大学D’索萨是游客博客,告诉我们关于对象检测在MATLAB。

- - - - - -

几周前,我去了佛罗里达大西洋大学的团队Owltonomous在RoboNation学生竞争比赛RoboBoat,RobotX从2019年起RoboSub!我们讨论了一系列的主题包括设计目标检测算法在MATLAB。对象探测器是至关重要的,允许一个自治系统,以确定是什么在其环境。团队认为工作流将有助于降低所需的时间来开发对象探测器由于开发周期1年。所以,我想分享一些我们的讨论在这篇文章中!讨论的代码在这个例子中可以找到这个文件交换条目

一个对象探测器是什么?

对象探测器是一种计算机程序,它采用计算机视觉,图像处理和/或人工智能算法来检测功能的兴趣图像或视频流。在塞巴斯蒂安说这篇文章关于自治系统的传感器相机是一种廉价的、重要的感知传感器受雇于自治系统。您可以使用一个物体检测算法来理解你的相机“看到”。我喜欢分类对象探测器分为3大类基于所使用的技术:

  1. 经典计算机视觉:采用经典的计算机视觉技术,如图像分割和特征检测和匹配识别感兴趣的对象。功能可能包括颜色,形状,边缘等。看看我们的网上教程系列在MATLAB计算机视觉要学习更多的知识。
    如。颜色阈值,Blob分析,渐变的柱状图,“骗健壮的特性
  2. 机器学习:机器学习是一种有效的方式对数据进行分类。这些探测器使用经典的计算机视觉算法从图像中提取功能或数据点,然后采用机器学习技术支持向量机对特征进行分类。金宝app
    如。级联对象探测器(Viola-Jones算法),总通道特性(ACF)
  3. 深度学习:深度学习探测器使用数据标记图像的形式来教一个卷积神经网络(CNN)感兴趣的特性。从头开始你可以训练一个网络或执行转移pre-trained网络学习。检查深度学习斜坡弯道学习如何开始吧!
    如。YOLO v2意思,R-CNNs R-CNN、快速R-CNN和更快

我们将讨论设计一个ACF对象探测器是一个机器学习的探测器。然而,正如您将看到的,通过更换一些功能和使用正确的计算能力可以遵循相同的过程深上优于探测器。

设计器

使用地面真理的工作流对象检测下图所示。我将使用接下来的几节简要解释。

生成地面实况

地面实况指信息提供的经验证据或观察。在我们的例子中这是一组标记图像。标记包含图像,图像、对象类描述符像bigRedBuoy, smallGreenBuoy,如上所示,位置感兴趣的区域(roi)的图像。设计师需要提供这个数据集训练检测器。有很多公开的,开源的标签数据集,但可能会有一个机会,为您的特定的应用程序没有可用数据集。这将保证您创建自己的真理。

MATLAB -为您提供了一个工具地面实况贴标签机自动化这个过程。这个程序提供了一个简单的方法来标签矩形ROI的折线ROI,像素,和场景。你也可以使用内置自动化算法或自动化这个过程提供你自己的算法。一旦你已经完成了标签的图片或视频您可以导出地面真理作为地面实况数据对象。看下面的视频来学习如何自动化地面实况标签!

(视频)MATLAB和Simu金宝applink机器人领域:使用对象检测地面实况,第1部分

培训对象探测器

现在,您已经有了一个标签数据集或地面真理,计算机视觉工具箱提供了内置的训练函数,可以用来训练机器学习或深度学习探测器。下图显示了函数和工作流,可以帮助你训练这些探测器。

trainACFObjectDetector函数是用来训练一个ACF对象探测器,正如我们前面所讨论的是一个机器学习探测器。这个函数调用可以取代了其他类似的功能

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

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

评估对象探测器

一旦你有了一个训练有素的探测器和直观地证实,它是检测它的目的是什么,你可能想要评估这些探测器和一些数值指标。这可能的形式混淆矩阵或其他共同的标准错过率精度。MATLAB提供的内置函数来执行这些评估。

当谈到错过率和精度,使用阈值的一个重要参数。阈值参数确定的范围重叠感兴趣的物体周围的边界框的探测器的边界框相同的对象在地面真理。这是计算的十字路口在联盟(借据)或Jaccard指数。如下图中所示相同的探测和地面实况数据变化阈值参数的值大幅变化的价值评估指标。选择一个重叠阈值最适合您的应用程序并记住一个更高的门槛意味着你预计你的检测结果重叠面积较大的地面真理。

当选择一个数据集测试探测器确保你使用的数据集独立的一个用来训练检测器。这将帮助确保你没有过度拟合探测器一个特定的数据集。看下面这个视频,看看这段代码是如何工作的!

(视频)MATLAB和Simu金宝applink机器人领域:使用对象检测地面实况,第2部分

生成C / c++代码

使用这个探测器在机器人/汽车的电脑,您将需要将MATLAB代码转换成低级语言(如C / c++),可以在嵌入式系统上执行。在R2019a,我们添加了代码生成支持一些对象探测器上面所讨论的,金宝app包括ACF对象在这个例子中所使用的探测器。生成C / c++代码,MATLAB代码必须打包在一个函数。的ACFObjectDetector对象,无法通过接口作为参数的函数在生成的代码是一个MATLAB对象,您将不得不构造函数内的对象通过调用构造函数的方法acfObjectDetector类的分类器TrainingOptions属性作为参数。这可以通过将对象转换为一个结构与属性字段并将其保存为MAT-file如下所示。

s = toStruct(探测器);保存(“detectorCodegen.mat”、“结构”,“年代”,“分类”,“ModelName”,…“NumWeakLearners”、“ObjectTrainingSize ', ' TrainingOptions ')

下一个负载中的MAT-file功能使用coder.load函数如下所示和调用构造函数。你要声明这是持久的,所以它是存储在内存中,不需要在每一个调用构造函数。一旦你修改你的代码你可以遵循MATLAB编码器应用工作流获得C / c++代码。不熟悉MATLAB编码器应用?查看本系列教程代码生成。

函数(盒、分数)= ACFDetector (img)% # codegen持久的探测器如果isempty(探测器)年代= coder.load (“detectorCodegen.mat”);探测器= acfObjectDetector (s.Classifier s.TrainingOptions);结束(盒、分数)=检测(探测器,img);)

最后,我将鼓励你下载代码和尝试。看到几行MATLAB代码可以帮助您开发健壮的对象探测器,以及将它转换成C / c++。

|

评论

留下你的评论,请点击在这里MathWorks账户登录或创建一个新的。