如何将个人 PNG 数据集放入 Sci-Kit Learn 进行图像识别?

Posted

技术标签:

【中文标题】如何将个人 PNG 数据集放入 Sci-Kit Learn 进行图像识别?【英文标题】:How to put personal PNG dataset into Sci-Kit Learn for Image Identification? 【发布时间】:2015-10-21 01:55:02 【问题描述】:

我正在尝试创建一个可以识别图像的 Python 程序,并且我正在使用 Sci-Kit Learn 机器学习包。我已经完成了他们提供的用于识别数字的教程(这是教程的链接:http://scikit-learn.org/stable/tutorial/basic/tutorial.html#introduction)。现在,我想使用 Sci-Kit Learn 的 svm.SVC 分类器从我自己的 PNG 图像数据集中识别图像,但我不知道该怎么做。我读到fit(X, y) 方法需要接受[n_samples, n_features] 数组和[n_samples] 数组;但是,我不太明白n_samplesn_features 的含义。这是我程序中的相关代码:

from PIL import Image
import numpy as np
import glob
event_png_pair = []
for file in glob.glob('../../Pictures/Trial/*.png'):
    img = Image.open(file, 'r')
    ''' Some image resizing code '''
    img_conv = img.convert("L")
    datum = np.array(img_conv)
    ''' Some name parsing below '''
    name = file
    name = name.replace('.png', '')[::-1]
    name_list = list(name)
    number_char_list = name_list[:name_list.index('_')]
    number_list = number_char_list[::-1]
    event_number = int(''.join(number_list))
    ''' Create tuple with event number and corresponding np array from image '''
    event_png_pair.append((event_number, datum))

显然,以上内容并没有那么有用,它只是展示了我如何解释 PNG 图像中的数据。谁能提供有关如何创建可由 Sci-Kit Learn 解释的数据集的任何指导?

更新:我现在将尝试创建一个类似于数字数据集的数据集,除了我自己的图像。我将使n_samples 图像的数量和n_features 图像数据。我的target 将是一个数组[1, 2],因为我只是想区分两种类型的图像。如果有任何有关如何将图像数据集放入 Sci-Kit Learn 的相关信息,请提供该信息。

【问题讨论】:

根据您的图像,将原始像素输入分类器可能不起作用。您可以尝试一下,但使用 scikit-image 或训练有素的卷积神经网络(例如 sklearn-theano)进行特征提取可能会更成功。 【参考方案1】:

如果您想使用原始像素作为特征(如数字示例中),您需要调整图像大小/重塑/填充图像以使每个图像具有相同数量的像素。然后您需要将每个图像展平为一行,并将它们堆叠成一个数组。 这仅适用于非常简单、对齐和规范化的图像。

【讨论】:

我这样做了,它在某种程度上有效,但是我的图像比数字数据集更复杂,所以我有内存错误。有没有更好的方法来分析更复杂的图像? @Troll_Hunter 如果您使用 CNN-s,则无需将图像展平为单行,只需使用 2D 卷积层即可。【参考方案2】:

n_samples 是图片的数量。

n_features 是图像数据本身。

您必须创建一个形状为(number of images x number of image points) 的矩阵,然后传递给分类器。

您必须将所有图像的大小调整为恒定的相同尺寸,例如 256x256 或 128x128,或 96x96 或任何适合从中提取相关信息的尺寸。每个图像(大部分)属于一个(灰度)或三个(RGB)值,代表给定的颜色。

如果您真的打算以最高性能对图像进行分类,您应该使用 卷积网络,并且应该获得性能合理的 GPU,但是该过程适用于 CPU 也是,但要慢得多。

【讨论】:

像素。所有图像都需要具有相同的像素数。 @Troll_Hunter 您必须将所有图像的大小调整为恒定的相同尺寸,例如 256x256 或 128x128,或 96x96 或任何适合从中提取相关信息的尺寸。每个图像(大部分)属于一个(灰度)或三个(RGB)值,代表给定的颜色。

以上是关于如何将个人 PNG 数据集放入 Sci-Kit Learn 进行图像识别?的主要内容,如果未能解决你的问题,请参考以下文章

将 IMDB 数据用于 sci-kit 回归模型包,该包在特征变量中具有文本值

使用 Sci-kit Learn SVM 时预测始终相同

如何将数据集放入 R 包中

Oracle 将结果集放入 FORALL 中的变量中

使用 sci-kit 中的训练/测试数据而不是交叉验证的学习曲线

将数据集放入文件夹时出错[关闭]