多亏了一套新的计算机视觉变压器,FME 2019可以识别图像中的物体。下面介绍如何训练FME在大量输入的光栅数据中识别自定义对象,以及一个使用停车标志的可下载示例。

你在这张照片上看到了什么?你可能对这个问题比图片更困惑——你在这里看到一条狗,那么我为什么要问这样一个琐碎的问题?

我们很容易看到图像上的物体,它们只是不同颜色像素的组合。我们的大脑在理解这些组合方面做得很好。

教机器在图像上查找对象是一个复杂的过程,但在过去几十年中,计算机视觉领域进行了大量的研究。目前,专业软件库能够完成人类视觉系统可以完成的许多任务,如对象识别和识别、状态检测、,文本阅读等等

现在,有了FME 2019,你也可以试试你的教学才能,展示你最喜欢的节目,如何识别图片上的狗、猫或路标。这听起来令人兴奋吗?让我们深入了解细节。

训练FME进行目标识别

在引擎盖下,FME使用OpenCV,一个计算机视觉和机器学习软件库。对于FME 2019,我们实现了目标检测功能,这是一个系列的RasterObjectDetector*变压器:

这里机器学习的思想是为程序提供训练数据照片,在这种情况下,我们将识别我们感兴趣的对象。我们还将向FME展示没有我们正在寻找的对象的照片。在研究了数据之后,该程序将学习对新照片上可能存在或不存在的对象做出决定,这些对象在训练期间从未使用过。

教机器识别物体的过程有点类似于教幼儿认识世界:“这是一只猫,这是一只猫,没错,这也是一只猫。”不,这不是一只猫。”

RasterObjectDetector变压器带有一些预定义的人脸、身体部位、猫和其他用途的检测模型,但我们自己训练这个模型来识别一些适用于地理空间行业的东西,以便结果可以出现在地图上,这将是非常有趣的。

例如:识别停车标志

在实践中,找到一个合适的数据集可能是最大的问题。大多数人并没有成百上千张他们想要探测的物体的照片(除非是他们最喜欢的动物的照片)。

我有500张照片FME CoiN这是2016年提交给我们的比赛,但承认这一有价值的FME大事记并没有太大的实用性。

另一个很好的图片来源是视频。一个录音可以提供成百上千的图像,如果其中有有趣的东西,我们可以尝试提取它。一年前,当我用FME做了很多视频实验的时候,我一边开车一边拍了一些视频片段。我还记录了这些旅程中的GPS轨迹,所以地理空间组件就在那里,还有什么比沿着路线找到停车标志更令人兴奋的呢?(好吧,其实还有很多更令人兴奋的事情,但停车标志是出现在地图上合乎逻辑的候选者。)

我找到了一个很好的停车标志训练数据集在这里。它包括100张带有停车标志的道路场景照片(正片)和100张没有标志的类似道路照片(负片)。通过我的场景所需的所有组件,我可以教FME识别新对象。

准备

步骤一:绘制矩形表示对象

老实说,最初的部分是无聊和乏味的。我看了一百张图片,在每个停车标志周围画了一个矩形。FME 2019附带了一个名为opencv_annotation.exe (OpenCV库的一部分)的实用程序,从命令行运行,并提供了一个简单的GUI,用于指定一张照片上的标识(或几个标识)的位置。该实用程序位于FME 2019安装的plugins\opencv\文件夹中。

这个实用程序相当烦躁,制作正确的命令行需要一些注意。下面是一个工作命令行的示例:

C:\apps\FME2019\plugins\opencv\opencv\u annotation.exe--annotations=“C:\Temp\StopSignDataset\annotations.txt”--images=“C:\Temp\StopSignDataset\Positive”--maxWindowHeight=1000

“annotations”参数指示输出文件的位置。“Images”指定包含正面照片的文件夹。最后一个参数表示显示图像的最大高度,这对于高分辨率的照片很有用。

这个工作的结果是一个注释文件,包含图像的名称(注意,图像的路径必须相对于注释文件-你可能需要在第二步之前编辑文件)和它们上的符号的像素坐标:

Positive\1.jpg 1 217 2 114 110 Positive\10.jpg 1 288 352 552 546 Positive\11.jpg 1 330 60 404 418 Positive\38.jpg 2 511 64 58 70 849 199 146 147

第二步:准备训练数据集

下一步,我们将为培训准备数据。RasterObjectDetectorSamplePreparer使用带有和不带标志的照片,以及注释文件来创建两个实际将参与培训的新文件–准备好的正片文件和背景描述文件。

第三步:培训

训练的最后一步包括将这些文件发送到RasterObjectDetectionModelTrainer,并设置训练的参数-模型类型(HAAR或LBP)、阶段数量、并行度和一些其他参数。' Number of Stages '参数增加了处理数据集所需的时间。当它的值设置为20时,我们的数据集上的训练几乎是即时的,而如果设置为24,则需要大约30分钟。将该值设置为更大的数字将导致非常长的处理时间,但没有多大改善。

输出是一个XML文件,这是一个经过训练的模型,它足够智能,可以检测照片上的停止标志。

分析

最令人兴奋的部分是分析本身。现在我们可以把我们的照片交给FME,看看它能处理得多好。

为了将视频分割成帧,我使用SystemCaller,它运行FFmpeg程序(查看这篇关于使用FME处理视频的博客文章)。对于使用有损压缩算法的JPEG图像,将图像质量设置为高(-qscale:v2参数)非常重要。

"ffmpeg.exe" -i "C:\temp\video\ drive .mp4" -qscale:v 2 -vf fps=1 "C:\temp\images\img_%05d.jpg"" "

然后图像可以直接进入RasterObjectDetector,它将尝试找到对象。

如果找到一个对象,转换器将在其周围放置一个矩形,这就是转换器的输出。

提高输出

主要目标实现了:FME识别了大多数照片上的停车标志。我没有选择收集数据的最佳时间,因为在日落时拍摄的照片没有清晰的对比度,所以在中午或多云的天空下驾驶应该会得到更好的结果。没有假阳性,这有时会发生。在这种情况下,将“最小邻居数”参数设置为更高的值将减少错误数(也可能返回更少的正确结果)。

为了从这个过程中获得一些真正的价值,最好知道所有这些已识别的符号的位置。为此,我用了我的GPS轨道.有关工作流的更多细节,请查看亚搏在线关于视频的博客文章,但主要想法是,根据视频创作的时间,我们可以计算每一帧拍摄的时间,并将其匹配到两个最近的GPS路径点(之前和之后),然后插值位置。当一个符号被多次检测时,我们可以通过测量被检测多边形的面积来选择最接近其实际位置的图像——最大的多边形比较小的多边形更接近符号位置。

这个过程的最后一步是把符号放在网络地图.我谈到了使用FME和JS库在用于在Web浏览器中可视化地理空间数据的工具“网络研讨会。简而言之,每个功能都为自己编写代码片段,然后使用Aggregator和AtttirbuteCreator,FME创建完整的HTML文件。这是整个过程的结果。

自己试试

工作空间、经过训练的识别停车标志的模型、GPS轨迹和从视频中提取的图像可用下载FME中心。注意,训练模板(StopSignModelTrainer.fmwt)包含在主模板StopSignDetector.fmwt中。

FME社区的角色亚搏国际在线官网

快速有效地部署这项技术的主要障碍之一是需要大量的正面数据集,理想情况下,也需要类似的负面数据集来训练FME。不再需要教FME停车标志是什么样子了——我的训练模型人人都可以使用——下载、试用,并让我知道结果(或者再次重复整个过程,通过制作一个比我更可靠的模型,或许可以成为一名更好的老师)。当然,FME用户想要在他们的图像中找到更多的对象。

总之,FME社区可以通过培训它识别更亚搏国际在线官网多的路标、屋顶、电线杆、船只或卡通人物来扩展FME对世界的了解。所以,如果您有一个好的数据集,可以培训FME检测新对象,那么如何与世界上的每个FMEer共享您的模型?创建一个FME工作区模板(*.fmwt)包括您经过培训的模型并上载到集线器

我认为目标检测是FME 2019中非常棒的新功能。与大多数其他变压器不同,这种新型变压器需要一些手工准备,但这种解决方案在许多领域的有效性可能是巨大的。关于FME应该能够检测什么,你有什么想法?你想用自己的数据集训练FME吗?让我们知道你想做什么样的侦探工作!

关于FME 计算机视觉 Fme 2019 Fme社亚搏国际在线官网区 FME桌面 全球定位系统 对象数据 目标检测 目标识别 光栅 Rasterobjectdetector

德米特里·巴格

Dmitri是安全软件公司的场景创建专家,这意味着他每天都在玩FME,测试它能做什么亚搏在线惊人的事情。

评论

14对“FME做计算机视觉”的回应

  1. 奥利维尔·拉姆波特 说:

    谢谢你,德米特里!你看到从卫星图像中自动提取特征的潜力了吗?例如停车场、体育场、运动场(网球场等)、带有“H”的直升机着陆点、人行横道等,…

  2. 德米特里·巴格 说:

    你好奥利弗,

    我认为有理由期待使用这项技术可以找到像直升机着陆点这样的东西,它们的H或人行横道清晰可见。我在这方面还没有太多的经验,但我的感觉是,有更多细节的东西可能效果不太好。我在文章中提到了FME币——我实际上尝试用该数据集训练FME,结果与停车或消防逃生标志相比并没有那么好。因此,理想情况下,我们应该尝试使用您提到的特性来训练FME,看看哪些功能运行良好。收集足够的样本可能相当耗时,我认为这是测试过程中的一个严重障碍。

    德米特里

  3. 干燥 说:

    嗨,迪米特里,
    我确实玩过这些新的变形金刚。我确实尝试在一些图像中检测面孔,但我偶然发现了太多的“面孔”。我知道你会摆弄模型和设置,但很难找到一个平衡,要么找到所有的脸,要么找到一半的图像(和100个正片)。大多数脸的位置都不理想,或者戴着围巾……
    是否有办法将objectdetector限制在图像的一小部分(像素级)?(考虑到需要扫描数千张图像,这对资源友好)?
    未来有增加字母/数字检测的计划吗?
    干燥

    • 德米特里·巴格 说:

      嗨,德里斯,

      该算法的工作原理是这样的——它在图像上移动一个包含对象签名的窗口,并查找匹配模式。如果找到,它会将它们标记为阳性。当一个特定的特征周围没有一个匹配时,我们可以要求它是肯定的,但是更多的是,这个数字是由“最小邻居数”参数定义的。如果你增加它,你会得到较少的误报,但也可能失去一些真正的对象。更好的培训可能会有所帮助。

      如果你知道你的数据允许的话,限制图片上的搜索区域是可能的。例如,以我的停止标志为例,在大多数情况下,我可以只保留原始图像的右上方四分之一。对于脸部,你可能只能拍摄照片的上半部分等等。

      我们认为我们不会在未来添加很多新的检测模型——无论你在转换器中看到的是什么,OpenCV库都提供了。我创建的唯一模型就是这个停车标志模型。如果我们看到需要,我们可能在未来有更多,但我们希望我们的用户培训FME,并与世界分享他们的模型。

      目前,我只计划添加一个消防栓模型,今年春天晚些时候,我将看看我们可以用航拍来做什么,比如,我们是否能找到屋顶。

      德米特里

  4. 2019年将获得目标检测功能。用户将能够训练机器识别图像中感兴趣的物体[…]

  5. 奶奶 说:

    是否有办法将objectdetector限制在图像的一小部分(像素级)?(考虑到需要扫描数千张图像,这对资源友好)?

    • Ada李 说:

      来自Dmitri:在ObjectDetector中使用之前,我会先剪辑图像。所以,基本上,一些区域是裁剪器(例如,停车场)——我们会裁剪光栅,这样我们只有停车场,并将它们发送到对象检测器。我希望这有帮助!

  6. 安德森·韦伯 说:

    与其在步骤1中单独注释每张照片,不如简单地使用标志面的数据集,或者如果可以获得该数据集,则关闭该数据集?

    • 斯蒂芬妮·华纳 说:

      来自Dmitri:对于某些路标,即使没有CV工具,也可能是这样。例如,可以通过查找非常红色的区域并估计提取的红色区域的形状来提取停车标志。但一般来说,我们可能想要检测的对象在非常不同的背景下可能会非常不同-例如,想象一下,猫,有着所有的颜色他们生活的环境,他们可能拥有的所有颜色,以及他们可以采取的所有姿势。因此,为了进行适当的CV训练,我们需要尽可能多的样本——毕竟,目前,CV是一种纯粹的统计数据,是一种处理数字的蛮力。
      顺便说一句,这里可以找到很多ML数据集——https://www.datasetlist.com/

  7. 艾伦·克利斯 说:

    嗨,德米特里,
    我玩了所有的工作空间和技术,并观看了你伟大的视频。
    虽然我可以让所有的示例工作并生成VEC文件,但出于某种奇怪的原因,我所有的XML文件最终都是17kb?
    我对此感到困惑,因为即使我自己的数据集变得相当大,VEC文件也会变得更大,但XML文件(知识文件)保持不变的17kb。
    查看Knowledge文件夹中的XML文件,它们分别为33、63和100kb,所以我想知道我是否做错了什么?

    这是一个非常棒的教程和例子。

  8. 如果您在启动基于OpenCV的注释工具GUI时遇到问题,我在图像段下的命令提示符下发现了一个问题。在\Positive后面的反斜杠' \ '应该被删除。

    C:\apps\FME2019\plugins\opencv\opencv_annotation.exe -annotations = " C: Temp\StopSignDataset\annotations.txt " -images = " C: Temp\StopSignDataset\Positive " -maxWindowHeight =1000

    • 德米特里·巴格 说:

      嗨,亚历山大,

      这是正确的观察,谢谢。如果我们使用Windows cmd.exe,那么是的,在正数路径的末尾的反斜杠不允许实用程序打开照片窗口。这不适用于Windows PowerShell,它目前是这个操作系统的默认命令行工具,我在那里做了我的测试-无论反斜杠是否存在,它都能正常工作。

      我们将删除上面一行中的反斜杠,使两个Windows命令行工具的语法都通用。

      德米特里

回信匿名的取消回复

您的电子邮件地址将不会被公布。已标记必填字段*

相关职位