libsvm - 多类分类的训练数据格式

时间:2014-07-31 10:47:07

标签: opencv classification svm libsvm

我在OpenCV中进行了禁止交通标志检测。现在,我想认识他们。例如,我需要区分速度限制20km / h和速度限制30km / h。

为了节省时间,我决定使用德国交通标志识别(GTSRB)基准的预先计算的特征进行分类训练。 在GTSRB中有12种不同的禁止交通标志类,其余的是其他类 。对于每个训练图像,计算HOG,HAAR和Hue直方图特征并将其存储在不同的文件夹中。我正在使用预先计算的HOG特征,每个训练图像的矢量维度为1568。

我有两个关于以LIBSVM格式准备训练数据矩阵的想法。我不确定我应该使用哪种格式进行多类分类。我已经编写了C ++程序,将不同文件中的功能转换为LIBSVM格式。

问题1 :以下哪种想法是正确识别禁止交通标志的方法?

问题2 :我需要实时显示已识别的标志。但是,libsvm中的示例仅显示准确性级别。 libsvm是正确的选择还是应该在运行我的交通标志检测程序时在OpenCV中创建训练数据矩阵?

IDEA 1:为所有禁止类分配+1标签,为其他类分配-1

 +1 1:0.32 2:0.27 3: 0.01 ... 1568:0.04 //class 1 - speed limit 20
 .                                      //features of training images
 .                                      
 .                                     
 +1 1:0.44 2:0.12 3: 0.23 ... 1568:0.03 //class 2 - speed limit 30
 .                                      //features of training images
 .                       
 .               
 +1 1:0.32 2:0.27 3: 0.01 ... 1568:0.04 //class 12 - speed limit 80
 .                                      //features of training images
 . 
 .
 -1 1:0.32 2:0.27 3: 0.01 ... 1568:0.04 //other classes
 .                                     //features of training images
 . 
 .

IDEA 2:为每个禁止类分配12个不同的标签,为所有其他类分配-1。

 +1 1:0.32 2:0.27 3: 0.01 ... 1568:0.04 //class 1 - speed limit 20
 .                                      //features of training images
 .                                      
 .                                     
 +2 1:0.44 2:0.12 3: 0.23 ... 1568:0.03 //class 2 - speed limit 30
 .                                      //features of training images
 .                       
 .               
 +12 1:0.32 2:0.27 3: 0.01 ... 1568:0.04 //class 12 - speed limit 80
 .                                       //features of training images
 . 
 .
 -1  1:0.65 2:0.72 3: 0.12 ... 1568:0.12 //all other classes 
 .                                       //features of training images
 . 
 .

提前致谢,

1 个答案:

答案 0 :(得分:2)

Q1 如果它有效,你应该更喜欢创意1.原因是它将涉及更少的培训。如果有N个类,对于多类分类,LIBSVM内部训练N(N-1)/ 2个分类器。

因此,如果N = 2(想法1),LIBSVM训练一个分类器。但如果N = 13(想法2),LIBSVM训练78个分类器。 但这并不意味着它会慢78倍,但它会变得复杂。

Q2 这不能回答,因为它取决于你没有提到的事情,而且有点意见。