你会如何解决以下问题:我有 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_proba
或 decision_function
等方法),并用最高和最低置信度分数内省(introspection)分类的质量:
- 如果所有最高分类都是正确的,则将高于某个安全阈值的所有图片添加到由原始 imagenet 子集和这些新图片组成的“分阶段二”训练集。
- 手动重新注释最低置信度预测中最令人反感的错误,并将其添加到“第二阶段”训练集中。
通过在这个丰富的数据集上重新训练新模型进行迭代,直到分类算法能够正确注释大部分图片。
顺便说一句,一旦开始注释数据并使用分类器迭代,就不要过多更改参数,以避免过度拟合。如果要重新进行参数选择,则需要重新进行交叉验证。
关于image - Scikit 学习。对无序 jpg 进行分类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12476533/