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

标签 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 中创建训练数据矩阵?

想法 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
 . 
 .

想法 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
 . 
 .

提前致谢

最佳答案

Q1 如果可行,您应该更喜欢想法 1。原因是它需要的培训要少得多。如果有 N 个类,对于多类分类,LIBSVM 在内部训练 N(N-1)/2 个分类器。

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

Q2 这无法回答,因为它取决于您没有提到的事情,并且有点见仁见智。

关于opencv - libsvm - 用于多类分类的训练数据格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25056948/

相关文章:

python - 使用 Knn 分类器时出现无效形状错误

machine-learning - 新闻文章多类分类算法

c - 使用 OpenCV 检测小圆圈(图像质量差)

c++如何在给定一组点的情况下绘制区域?

c++ - 使用 OpenCV 寻找最近的像素值

code-generation - 机器学习和字符串代码生成器

r - 在 r 中使用 SVM 对 pincode 类型进行分类

python - python中的SVM(支持向量机)总是给出相同的预测

machine-learning - 支持向量机距超平面的距离和确定性

括号中的 Python bool 值?