【问题标题】:Use Azure Machine learning to detect symbol within an image使用 Azure 机器学习检测图像中的符号
【发布时间】:2015-08-31 19:31:50
【问题描述】:

4 年前我发布了this question 并得到了一些不幸超出我技能水平的答案。我刚刚参加了一个构建巡回会议,他们谈到了机器学习,这让我想到了使用 ML 作为我的问题的解决方案的可能性。我在 azure 网站上找到了this,但我认为它对我没有帮助,因为它的范围很窄。

这是我想要实现的目标:

我有一个源图像:

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

比较需要支持轻微的失真、缩放、颜色差异、旋转和亮度差异。

要匹配的符号数量最终将至少大于 100。

机器学习是解决这个问题的好工具吗?如果有,有什么入门技巧吗?

【问题讨论】:

    标签: opencv azure image-processing machine-learning azure-machine-learning-studio


    【解决方案1】:

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

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

    例如,您可以使用以下简单的方法:

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

    如果您的数据集中的某些图像大小不同,您需要将它们重新缩放为通用大小。您不需要对尺寸过于疯狂,可能 30x30 的图像就足够了。为了让事情变得更容易,我也会将图像转换为灰度。

    2) 选择一个分类算法并对其进行训练: 那里有大量的分类算法。但如果你是机器学习的新手,我会选择我最了解的一个。记住这一点,我会检查逻辑回归,它给出了不错的结果,对于初学者来说很容易,并且有很多库和教程。例如,this onethis one。一开始我会说专注于二分类问题(比如图片中是否有 UD 标志),当你掌握了这个问题后,你可以跳转到多分类案例。有too 的资源,或者您始终可以为每个徽标提供多个模型,并为每个模型单独运行此配方。

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

    您还需要拆分数据集,保留一些示例用于训练,一个子集用于验证,另一个用于测试。同样,有不同的方法可以做到这一点,但我尽量保持这个答案很幼稚。

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

    您将扫描图片,在“窗口”中提取像素,将这些像素重新缩放为您在步骤 1 中选择的大小,然后将它们提供给您的模型。

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

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

    一旦您对自己的解决方案感到相当满意,您可能想要改进它。您可能想尝试其他分类算法,例如SVMDeep Learning Artificial Neural Networks,或者尝试更好的对象检测框架,例如Viola-Jones。此外,您可能需要使用crossvalidation 来比较您的所有解决方案(您实际上可以从一开始就使用交叉验证)。到现在为止,我敢打赌,您将有足够的信心使用 OpenCV 或其他现成的框架,在这种情况下,您将对幕后发生的事情有一个公平的了解。

    您也可以忽略所有这些答案,然后去学习像 one 这样的 OpenCV 对象检测教程。或者从像one 这样的另一个问题中得到另一个答案。祝你好运!

    【讨论】:

    • 哇,好棒的答案。对此,我真的非常感激。不幸的是,我跳过了大学的计算机视觉课程,所以我需要一些时间才能浏览您提供的所有链接和信息。我还不想将其标记为答案,因为我想看看我是否可以使用 Azure ML(而不是 oxford 项目),它可能抽象了您上面写的一些内容,理想情况下会将学习曲线降低到一个可行的解决方案。我也在 msdn 论坛上发布了这个问题 (bit.ly/1FmU05e)。
    • @josh Cool... 让我们知道这是怎么回事。上次我尝试 Azure ML Studio 时,它不能直接处理图像(除非你使用 oxford 项目),但如果你编写 R 脚本将数据从二进制转换为文本,反之亦然,它应该是可能的。
    • 为了一些结束:得到了一个使用customvision.ai的概念证明,但从来没有时间超越它。刚刚使用 Apple 的 CreateML 找到了某人 beat me to the bunch。再次感谢您花时间帮助开发人员
    猜你喜欢
    • 2019-06-22
    • 2014-11-15
    • 2017-06-24
    • 1970-01-01
    • 2017-12-09
    • 2017-11-22
    • 2018-08-25
    • 2015-03-15
    • 2013-02-04
    相关资源
    最近更新 更多