使用Azure机器学习来检测图像中的符号

4年前,我发布了这个问题,并得到了一些不幸的是我的技能水平以外的答案。 我刚参加了一个构建巡回研讨会,他们谈论机器学习,这让我想到使用ML作为解决我的问题的可能性。 我发现这在蔚蓝的网站上,但我不认为它会帮助我,因为它的范围很窄。

这是我想要实现的:

我有一个源图像:

源图像

我想要在上面的图片中包含以下哪个符号(如果有的话):

比较需要支持较小的失真,缩放,色差,旋转和亮度差异。

符合的符号数量最终将至少大于100。

ML是解决这个问题的好工具吗? 如果是的话,任何启动提示?


据我所知,Project Oxford(MS Azure CV API)不适合你的任务。 他们的API非常专注于人脸相关任务(检测,验证等),OCR和图像描述。 显然你不能扩展他们的模型或者从现有的模型中培训新的模型。

但是,即使我不知道您的对象检测问题的开箱即用解决方案, 有足够简单的方法,你可以尝试,这会给你一些起点的结果。

例如,以下是您可以使用的一种天真的方法:

1)创建你的数据集:这可能是更乏味的一步,矛盾的是至关重要的一步。 我会假设你有大量的图像可供使用。 你需要做的是选择一个固定的窗口大小,并提取正面和负面的例子。 在这里输入图像描述

如果数据集中的某些图像大小不同,则需要将它们重新缩放至一个通用大小。 你不需要为这个尺寸太疯狂,大概30x30的图片就足够了。 为了使事情更容易,我会将图像变成灰度。

2)选择一种分类算法并对其进行训练:这里有非常多的分类算法。 但是如果你是机器学习的新手,我会选择一个我最了解的人。 牢记这一点,我会检查逻辑回归,它给出了不错的结果,对于初学者来说很容易,并且有很多库和教程。 例如,这一个或这一个。 起初,我会说要专注于二元分类问题(如图片中是否有UD徽标),并且掌握该问题时,您可以跳转到多类案例。 这方面也有资源,或者您可以每个徽标始终有多个模型,并分别为每个徽标运行此配方。

要训​​练模型,只需读取步骤1中生成的图像,并将它们转换为矢量并相应地标记它们。 那将会是你的模型的数据集。 如果您正在使用灰度图像,则矢量中的每个位置将对应于0-255范围内的像素值。 根据算法的不同,您可能需要将这些值重新设置为范围[0-1](这是因为有些算法在该范围内的值更好)。 请注意,在这种情况下重新缩放范围相当容易(new_value = value / 255)。

您还需要拆分数据集,为培训预留一些示例,用于验证的子集以及用于测试的子集。 再次,有不同的方式来做到这一点,但我保持这个答案尽可能幼稚。

3)执行检测:现在让我们开始有趣的部分。 给定任何图像你想运行你的模型,并在有图标的图片中产生坐标。 有不同的方法可以做到这一点,我会描述一个可能不是最好也不是更高效的方法 ,但在我看来,这更容易发展。

您将扫描图片,在“窗口”中提取像素,将这些像素重新缩放到您在步骤1中选择的尺寸,然后将它们馈送到您的模型。

提取窗口以提供模型

如果模型给你一个肯定的答案,那么你在原始图像中标记该窗口。 由于徽标可能以不同的比例出现,因此需要使用不同的窗口大小重复此过程。 您还需要调整窗口之间的空间量。

4)冲洗并重复:在第一次迭代时,很可能会得到很多误报。 然后你需要把这些作为反面的例子,并重新训练你的模型。 这将是一个迭代过程,希望在每次迭代中,您的误报越少,漏报的次数越少。

一旦你对你的解决方案感到满意,你可能想要改进它。 您可能想尝试其他分类算法,如SVM或深度学习人工神经网络,或尝试更好的对象检测框架,如Viola-Jones。 此外,您可能需要使用交叉验证来比较所有解决方案(您可以从头开始实际使用交叉验证)。 通过这一刻,我敢打赌你会有足够的信心,你想使用OpenCV或其他准备好使用的框架,在这种情况下,你将对引擎盖下的情况有一个公正的理解。

你也可以忽略所有的答案,然后去找一个像这样的OpenCV对象检测教程。 或者从另一个问题的另一个答案,如这一个。 祝你好运!

链接地址: http://www.djcxy.com/p/79575.html

上一篇: Use Azure Machine learning to detect symbol within an image

下一篇: Matching images with different orientations and scales in MATLAB