您将如何处理以下问题:我有5类图像(总共500个图像):汽车、房子、树、椅子和脸。然后我有一个文件夹,里面有20个无序的图像,这意味着我知道它们属于5个类中的一个,但还不知道属于哪一个,我希望我的系统根据5个受控类对它们进行分类。我使用了几个提取器(色调、边缘)来完成这项任务,但我很难找到合适的分类方法。特别是,一些python库要求以与类文件夹相同的方式命名未控制的映像文件夹(例如/dir/controlled/car和/dir/uncontrolled/cal),这对我的分析来说根本不可行。就我正在寻找替代方法而言,你能在sklearn中给出一些方法建议/变通方法吗?
也许使用一个标记的数据集(如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
或decision_function
等方法),并反思信心分数最高和最低的分类质量:
- 如果所有最高分类都是正确的,则将高于某个安全阈值的所有图片添加到"分阶段二"训练集,该训练集包括原始图像网子集和那些新图片
- 手动重新注释置信度最低的预测中最令人反感的错误,并将其添加到"阶段性二"训练集中
通过在这个丰富的数据集上重新训练一个新模型进行迭代,直到分类算法能够正确地注释大多数图片。
顺便说一句,一旦开始注释数据并使用分类器迭代,就不要过多地更改参数,以避免过度拟合。如果你想重新进行参数选择,你应该再次进行交叉验证。