image - Scikit 学习。对无序 jpg 进行分类

标签 image classification scikit-learn

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

最佳答案

也许使用带标签的数据集会更容易,例如 ImageNet首先在这 5 个类别上训练分类器(+1 个额外的“杂项”类别,您将用不是来自这 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 等方法),并用最高和最低置信度分数内省(introspection)分类的质量:

  • 如果所有最高分类都是正确的,则将高于某个安全阈值的所有图片添加到由原始 imagenet 子集和这些新图片组成的“分阶段二”训练集。
  • 手动重新注释最低置信度预测中最令人反感的错误,并将其添加到“第二阶段”训练集中。

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

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

关于image - Scikit 学习。对无序 jpg 进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12476533/

相关文章:

image - 如何找到错误图像?

algorithm - 如何计算分类错误率

machine-learning - F1 - 数据不平衡的得分

python - predict_proba 用于交叉验证模型

python - 我应该先 train_test_split 然后使用交叉验证吗?

python - FeatureUnion ,管道分类特征与 tfidf 特征抛出错误

java - 如何识别 byte[] 的内容是 JPEG?

java - 如何每秒将图像绘制到帧上?

python-3.x - 在Python中减少图像尺寸

python - 在预测类别概率时检查 GradientBoostingClassifier 的准确性