您将如何处理以下问题:我有 5 类图像(总共 500 张图像):汽车、房屋、树木、椅子和脸。然后我有一个包含 20 个无序图像的文件夹,这意味着我知道它们属于 5 个类别之一,但还不知道属于哪一个,我希望我的系统根据 5 个受控类别对它们进行分类。我正在使用几个提取器(色调、边缘)来完成这项任务,但我正在努力寻找合适的分类方法。特别是一些python库需要以与类文件夹相同的方式命名不受控制的图像文件夹(例如/dir/受控/汽车和/dir/uncontrolled/car),这对我的分析来说根本不可行。至于我正在寻找替代方法,您能否在 sklearn 中提供一些方法论建议/解决方法?
1 回答
也许使用诸如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_proba
or之类的方法decision_function
)并内省具有最高和最低置信度分数的分类质量:
- 如果所有最高分类都是正确的,则将所有高于某个安全阈值的图片添加到包含原始 imagenet 子集和那些新图片的“阶段二”训练集中。
- 手动重新注释最低置信度预测中最令人讨厌的错误,并将它们添加到“阶段二”训练集中。
通过在这个丰富的数据集上重新训练一个新模型来进行迭代,直到分类算法能够正确地注释你的大部分图片。
顺便说一句,一旦开始注释数据并使用分类器进行迭代以避免过度拟合,请不要过多地更改参数。如果要重新进行参数选择,则应再次进行交叉验证。