如何在scikit-learn中使用自己的数据集(计算机视觉)?

9

如何在scikit-learn中使用自己的数据集?Scikit教程通常以加载他的数据集(数字数据集、花卉数据集等)作为示例。

http://scikit-learn.org/stable/datasets/index.html 例如:从sklearn.datasets导入load_iris。

我有我的图片,但不知道如何创建新的数据集。

特别是,在开始时,我使用了我找到的这个例子(我使用opencv库):

img =cv2.imread('telamone.jpg')

# Convert them to grayscale
imgg =cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)

# SURF extraction
surf = cv2.SURF()
kp, descritors = surf.detect(imgg,None,useProvidedKeypoints = False)

# Setting up samples and responses for kNN
samples = np.array(descritors)
responses = np.arange(len(kp),dtype = np.float32)

我希望能提取一组图片的特征,以便实施机器学习算法!
1个回答

5
您首先需要明确您想要实现什么目标:“以一种有用于实现机器学习算法的方式,提取一组图像的特征!”这个描述过于模糊,无法给您任何指导。
您是在尝试做以下哪些事情:
- 整张图片的图像分类(例如室内场景与室外场景)? - 对一组图片的子部分进行对象识别(例如使用不同大小的窗口扫描程序来识别同一对象的几个实例)? - 对象检测和基于类别的分类(例如在图片中找到所有汽车或行人的出现,并在每个出现的实例周围绘制边界框)? - 完整的图片语义分割,即像素的分割+每个部分的类别分类(建筑物、道路、人、树)...
每个任务都需要不同的管道(特征提取+机器学习模型组合)。
您可能应该从阅读这方面的书开始,例如:http://szeliski.org/Book/

另外顺带一提,stackoverflow可能不是询问此类开放性问题的最佳场所。


1
对于整张图像分类(假设图像已经居中且缩放到标志上),scikit-learn 希望输入数据为形状为 (n_images, n_features) 的 numpy 数组,以及形状为 (n_images,) 的 numpy 数组用于目标预测,每个不同的标志都有不同的整数。提取特征的方法。您可以尝试使用 scikit-image 中的 HoG 特征,它们提供了固定大小的数组,而不是基于关键点的特征,例如 SURF 或 SIFT,这些特征具有动态结构(关键点数量因图像而异)。 - ogrisel
2
如果您真的想使用SURF特征,您可能需要使用聚类算法在语料库中的所有SURF特征向量上构建1000个视觉单词(或更多)的词汇表。然后对于每个图像,将提取的SURF特征向量分配到它们最近的质心(量化)中,以将每个图片编码为一个视觉单词袋(BoW)。但是,如果您对numpy/scikit-learn和计算机视觉一般都很陌生,那么这些步骤会更加复杂。 - ogrisel
1
我在这里找到了我问题的部分答案(创建数据集):不幸的是,scikit中没有:http://www.coccidia.icb.usp.br/coccimorph/tutorials/Tutorial-2-Creating-a-Dataset.pdf - postgres
@ogrisel 我认为你的回答没有什么意义。问题很清楚:如何使用自己的图像准备类似IRIS数据集的数据集。但是你谈论复杂性、调查、不同的方法等等,却没有涉及到问题的要点。 - Roman Podlinov
@Roman scikit-learn接受任何numpy数组作为输入:在鸢尾花数据集中,它不基于图像,因此很容易:您可以加载CSV文件的数值。鸢尾花数据集是通过人工测量花瓣和萼片长度创建的。因此,这不是一个计算机视觉问题。另一方面,计算机视觉问题要复杂得多。对于CV,您需要使用OpenCV等工具进行特定任务的特征提取。scikit-learn本身不是CV库。 - ogrisel
显示剩余8条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接