我正在使用PCA和SVM进行人脸识别。在matlab中使用libSVM进行SVM实现。我正在尝试实施一个与所有分类。我有三个问题。
第一: 我在第1类(面部1)中有10个图像,然后第2类应该有60个图像(6个面部各有10个图像)?
第二: 准确度是否取决于我在两个班级中拍摄的图像数量?如果是,那么 由于第二类中的大量图像,精度可以达到100%(不合理的高)吗?
第三: 可以使用单个图像进行测试吗?
任何帮助都将深受赞赏。
答案 0 :(得分:1)
你问三个问题:
(1)编辑:是的,正如您在评论中所解释的那样。如果你有7个班级,你将训练7个分类。对于每个分类器,您将训练个体i的正面图像,以及所有其他个体的负面图像。
您所描述的内容称为一对一分类,它是使用基本二进制分类器(例如SVM)进行多类分类的常用方法。我还要补充说,还有其他方法可以将二进制分类器扩展到多类分类,例如一对一和纠错锦标赛。
编辑#2: 让我补充一点,在LIBSVM中已经实现了一对一的分类,你真的不需要做任何特别的事情。您需要做的就是为训练数据中的每个类添加不同的双精度数(因此您可以使用0,1,... 7类)。
如果你真的想做一个对所有人(也称为一对比其他人),你也可以使用它。由于您似乎正在使用MATLAB,因此存在代码(它不直接在LIBSVM中实现),但LIBSVM的作者提供了实现该代码的代码:direct link to FAQs
(2)准确度取决于图像的数量。在理想的条件下,您将拥有许多所有人的图像。但是你可以进入诸如不平衡数据集之类的情况,例如,如果你训练了一百万个x类图像,只有2个y类图像和2个z类图像,你会遇到问题因为你的分类器得到了类x的详细视图比其他两个类更详细。为了评估你将需要一个完整的混淆矩阵(即x类的实际对象有多少是y类的分类器,有多少y类的真实对象被分类为x类,依此类推每对类。)
(3)是的,它可以。
编辑#3:
从LIBSVM的作者的评论来看,似乎一对一的准确性与一对一的准确性相似,不同之处在于训练一对一的速度更快,这就是他们在系统中实现一对一的原因。
要使用LIBSVM训练多类模型,您将使用svmtrain并仅调用一次。 1类是个体1的图像,2类是个体2的图像,... 7类是个体7的图像。
预测,在训练模型后,您将使用svmpredict