据我所知,Project Oxford(MS Azure CV API)不适合您的任务。他们的API非常专注于人脸相关任务(检测,验证等),OCR和图像描述。而且显然您不能扩展他们的模型或从现有模型中训练新模型。
但是,即使我不知道针对您的对象检测问题的开箱即用的解决方案;您可以尝试使用足够简单的方法,这将为您提供一些起点结果。
例如,这是您可以使用的幼稚方法:
1)创建数据集:这可能是更繁琐的步骤,而且矛盾的是至关重要的一步。我将假定您有大量的图像可以使用。您需要做的是选择一个固定的窗口大小并提取正例和负例。
如果数据集中的某些图像大小不同,则需要将其重新缩放为通用大小。您不需要太担心尺寸,也许30x30的图像就足够了。为了使事情变得容易,我也将图像转换为灰度。
2)选择一个分类算法并对其进行训练:那里有很多分类算法。但是,如果您是机器学习的新手,我会选择我最了解的一种。记住这一点,我将检查logistic回归,它给出了不错的结果,对于初学者来说很容易,并且有很多库和教程。例如,这个或这个。首先,我想说的是关注二进制分类问题(例如图片中是否有UD徽标),当您掌握了该分类时,可以跳到多类情况。有资源为过,或者你总是可以有几种模式每一个标识,并分别运行这几招每一个。
要训练模型,您只需要阅读在步骤1中生成的图像,然后将它们转换为矢量并相应地标记它们即可。那将是将提供模型的数据集。如果使用的是灰度图像,则矢量中的每个位置将对应于0-255范围内的像素值。根据算法的不同,您可能需要将这些值重新缩放到[0-1]范围(这是因为某些算法在该范围内的值表现更好)。请注意,在这种情况下重新缩放范围非常容易(new_value = value / 255)。
您还需要拆分数据集,保留一些用于训练的示例,一个用于验证的子集,另一个用于测试的子集。同样,有不同的方法可以做到这一点,但我将这个答案保持得尽可能幼稚。
3)执行检测:现在开始有趣的部分。给定任何要运行模型并在带有徽标的图片中生成坐标的图像。有多种方法可以做到这一点,我将描述一种可能既不是最佳方法也不是效率更高的方法,但我认为它更容易开发。
您将扫描图片,在“窗口”中提取像素,将这些像素重新缩放为在步骤1中选择的大小,然后将其输入模型。
如果模型给出了肯定的答案,则您会在原始图像中标记该窗口。由于徽标可能会以不同的比例出现,因此您需要使用不同的窗口大小重复此过程。您还需要调整窗口之间的空间量。
4)漂洗并重复:在第一次迭代中,您很可能会收到很多误报。然后,您需要将其作为负面示例,然后重新训练模型。这将是一个反复的过程,希望在每次迭代中您将有越来越少的误报和更少的误报。
对解决方案感到满意后,您可能需要对其进行改进。您可能想尝试其他分类算法(例如SVM或深度学习人工神经网络),或尝试更好的对象检测框架(例如Viola-Jones)。另外,您可能需要使用交叉验证来比较所有解决方案(实际上可以从一开始就使用交叉验证)。至此,我敢打赌,您将有足够的信心要使用OpenCV或其他准备使用的框架,在这种情况下,您将对幕后的情况有一个清晰的了解。
你也可能只是不顾一切的这个答案,去一个OpenCV的物体检测教程这样的一个。或采取另一种答案,从这样一个问题一个。祝你好运!
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句