Scikit学习。对无序的jpgs进行分类

时间:2012-09-18 11:55:21

标签: image classification scikit-learn

您将如何处理以下问题:我有5类图像(总共500张图像):汽车,房屋,树木,椅子和脸部。然后我有一个包含20个无序图像的文件夹,这意味着我知道它们属于5个类中的一个,但还不知道哪个类,我希望我的系统根据5个受控类对它们进行分类。我正在使用几个提取器(色调,边缘)来完成此任务,但我正在努力获得合适的分类方法。特别是一些python库需要以与类文件夹相同的方式命名不受控制的图像文件夹(例如/ dir / controlled / car和/ dir / uncontrolled / car),这对我的分析来说是不可行的。至于我正在寻找替代方法,你能否在sklearn中提供一些方法建议/解决方法?

1 个答案:

答案 0 :(得分:2)

使用标记数据集(例如ImageNet)可能更容易在这5个类上首先训练分类器(+1个额外的“misc”类,您将填充不是来自这5个类的随机图像)。

尽可能多地从图像网中提取示例来构建训练集,同时保持课程近似平衡。例如,imagenet有近8000张汽车图片:http://www.image-net.org/synset?wnid=n02958343但只有大约1500张脸:http://www.image-net.org/synset?wnid=n02958343。在这种情况下,某些分类器可能无法正常工作,对汽车类进行二次抽样可能会在f1分数方面产生更好的结果。除非你找到另一张面孔图片来源。

一旦找到一组特征提取+分类器链的参数,可以在ImageNet子集上产生良好的交叉验证分数,重新训练该完整子集上的模型并应用它来预测您自己的数据集的标签。

选择一个为您提供置信度分数的分类器(例如使用predict_probadecision_function等方法),并使用最高和最低置信度分数内省分类质量:

  • 如果所有最高分类都是正确的,请将所有高于某个安全阈值的图片添加到包含原始imagenet子集和新图片的“分阶段两个”训练集。
  • 手动重新注释最低置信度预测中的大多数违规错误,并将它们添加到“分阶段两个”训练集中。

通过在此丰富数据集上重新训练新模型进行迭代,直到分类算法能够正确地正确注释大部分图片为止。

顺便说一句,一旦开始注释数据并使用分类器进行迭代以避免过度拟合,请不要过多地更改参数。如果要重新进行参数选择,则应再次进行交叉验证。