jos*_*osh 12 opencv machine-learning image-processing azure azure-machine-learning-studio
4年前,我发布了这个问题并得到了一些不幸在我的技能水平之外的答案.我刚刚参加了他们谈到机器学习的构建巡回会议,这让我想到了使用ML作为我的问题的解决方案的可能性.我在天蓝色的网站上发现了这个,但我认为它不会对我有所帮助,因为它的范围很窄.
这是我想要实现的目标:
我有一个源图像:

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

比较需要支持轻微失真,缩放,色差,旋转和亮度差异.
要匹配的符号数最终至少大于100.
ML是解决这个问题的好工具吗?如果有,任何开始提示?
Ped*_*rom 22
据我所知,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的物体检测教程这样的一个.或采取另一种答案,从这样一个问题一个.祝好运!
| 归档时间: |
|
| 查看次数: |
5408 次 |
| 最近记录: |