libsvm - 多类分类的训练数据格式
Posted
技术标签:
【中文标题】libsvm - 多类分类的训练数据格式【英文标题】:libsvm - training data format for multiclass classification 【发布时间】:2014-09-23 06:47:23 【问题描述】:我在 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
.
.
想法 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】:Q1 如果可行,您应该更喜欢想法 1。原因是它需要更少的培训。如果有 N 个类,对于多类分类,LIBSVM 在内部训练 N(N-1)/2 个分类器。
所以如果 N=2(想法 1)LIBSVM 训练一个分类器。但是如果 N=13(想法 2),LIBSVM 训练 78 个分类器。 但这并不意味着它会慢 78 倍,但它变得复杂了。
Q2这个问题无法回答,因为它取决于你没有提到的事情,而且有点见仁见智。
【讨论】:
非常感谢。我将比较两种方法,看看有什么不同。以上是关于libsvm - 多类分类的训练数据格式的主要内容,如果未能解决你的问题,请参考以下文章