对服装照片进行分类都有哪些好的功能? [关闭]

Posted

技术标签:

【中文标题】对服装照片进行分类都有哪些好的功能? [关闭]【英文标题】:What are good features for classifying photos of clothing? [closed]对服装照片进行分类有哪些好的功能? [关闭] 【发布时间】:2013-09-24 20:21:37 【问题描述】:

我想构建一个服装分类器,对一件衣服拍照并将其分类为“牛仔裤”、“连衣裙”、“运动鞋”等。

一些例子:

这些图片来自零售商网站,因此通常是从同一角度拍摄的,通常是在白色或浅色背景上——它们往往非常相似。

我有一组数千张我已经知道其类别的图像,我可以用它们来训练机器学习算法。

但是,我正在努力寻找应该使用哪些功能的想法。我目前拥有的功能:

def get_aspect_ratio(pil_image):
    _, _, width, height = pil_image.getbbox()

    return width / height


def get_greyscale_array(pil_image):
    """Convert the image to a 13x13 square grayscale image, and return a
    list of colour values 0-255.

    I've chosen 13x13 as it's very small but still allows you to
    distinguish the gap between legs on jeans in my testing.

    """
    grayscale_image = pil_image.convert('L')
    small_image = grayscale_image.resize((13, 13), Image.ANTIALIAS)

    pixels = []
    for y in range(13):
        for x in range(13):
            pixels.append(small_image.getpixel((x, y)))

    return pixels


def get_image_features(image_path):
    image = Image.open(open(image_path, 'rb'))

    features = 
    features['aspect_ratio'] = get_aspect_ratio(image)

    for index, pixel in enumerate(get_greyscale_array(image)):
        features["pixel%s" % index] = pixel

    return features

我正在提取一个简单的 13x13 灰度网格作为形状的粗略近似。但是,将这些功能与 nltk 的 NaiveBayesClassifier 一起使用只能使我获得 34% 的准确率。

哪些功能在这里可以很好地发挥作用?

【问题讨论】:

如果你使用比 13x13 更大的图像,你会得到更好的精度吗? @JoranBeasley 移动到 20x20 图像实际上会降低 2% 的准确性并显着影响性能。 如果您将其简化为“鞋还是不鞋”并以此开始...可能会更改您的某些分类(我不知道您是否手动设置分类,而不是使用 bltk) 致那些将此问题标记为过于宽泛的人:您认为有可能进行更改以使其不那么宽泛,还是无法解决?我在谈论一个特定的数据集,并收到了一些很好的答案。 本文提出带PCA的SVM:medium.com/@dimart/pok%C3%A9mon-recognition-d3ad5cadc61e 【参考方案1】:

这是一个棘手的问题,因此有很多方法。

在常用方法(尽管很复杂)中,获取输入图像,对图像进行超像素化并计算这些超像素的描述符(例如 SIFT 或 SURF),通过累积每个超像素的直方图来构建词袋表示,这个操作从一堆降维像素中提取关键信息。然后 Conditional Random Field 算法搜索图像中超像素之间的关系,并将像素组分类到已知类别中。对于像素化图像 scikit-image 包实现 SLIC 算法 segmentation.slic,对于 CRF,您应该查看 PyStruct 包。 SURF 和 SIFT 可以使用 OpenCV 计算。

另一个简单的版本是计算给定图像的描述符(SIFT、SURF、边界、直方图等)并将它们用作分类器算法的输入,您可能希望从这里开始,也许scikit-learn.org 是最简单和最执行此操作的强大软件包。

【讨论】:

【参考方案2】:

HOG 常用于对象检测方案。 OpenCV 有一个 HOG 描述符包:

http://docs.opencv.org/modules/gpu/doc/object_detection.html

您还可以使用基于 BoW 的功能。这是解释该方法的帖子: http://gilscvblog.wordpress.com/2013/08/23/bag-of-words-models-for-visual-categorization/

【讨论】:

【参考方案3】:

直接使用图像中的所有原始像素值作为特征并不是很好,尤其是随着特征数量的增加,由于搜索空间非常大(169 个特征代表一个很大的搜索空间,这对于任何人来说都很难)分类算法来解决)。这也许就是为什么移动到 20x20 图像实际上会降低性能与 13x13 相比。减少特征集/搜索空间可能会提高性能,因为您简化了分类问题。

实现此目的的一种非常简单(通用)的方法是使用像素统计信息作为特征。这是图像给定区域中原始像素值的平均值和标准偏差 (SD)。这会捕获给定区域的对比度/亮度。

您可以根据反复试验选择区域,例如,这些可以是:

图像中心的一系列同心圆形区域,半径增加。四个不断增大的圆形区域的平均值和 SD 给出了八个特征。 一系列矩形区域,大小增加或固定大小,但放置在图像中的不同区域周围。图像四个角和中心 1 个不重叠区域(大小为 6x6)的平均值和 SD 给出 10 个特征。 圆形和方形区域的组合。

【讨论】:

【参考方案4】:

你试过支持向量机吗?它通常比朴素贝叶斯表现更好。

【讨论】:

以上是关于对服装照片进行分类都有哪些好的功能? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

opencv训练好的分类器都有哪些

文本分类方法都有哪些

现在好的组卷系统或者软件都有哪些,好在哪里呢??

数据挖掘的方法都有哪些?

java 流的分类都有哪些?

聚类分析方法都有哪些