使用dlib提取高维lbp描述符后使用LIBSVM进行训练

时间:2016-07-04 07:42:46

标签: c++ libsvm dlib

我正在进行面部表情识别项目,使用dlib获取面部并提取描述符和libsvm来训练获得的数据。我在Visual Studio Community 2015中使用c ++。到目前为止,我已经提取了高维LBP描述符,现在想要了解所获得的功能并使用libsvm进行训练。我被困在这里,因为我无法理解我的功能中的数据。矢量,并且还无法将其转换为libsvm公认的培训格式。

以下是代码段。在此之前,我猜几乎一切都是不言自明的。



  std::vector<std::vector<double>> features;//storing features for all images

  std::vector<double> feat;//for a single image

  extract_highdim_face_lbp_descriptors(img, shape, feat); //dlib's function, storing extracted info in 'feat'

  features.push_back(feat);

  //Now all the info for all the images is stored in 'features' vector. I now need to train the data and make a suitable model using libsvm, precisely RBF kernel. 
&#13;
&#13;
&#13;

1 个答案:

答案 0 :(得分:1)

您需要存储为功能,作为标签来进行学习过程。 LibSVM使用基于空间的文本格式。以下是可以编写此格式convert from CSV

的代码

写作可以是这样的(未经测试):

ofstream f("data_file");
for (auto img : images) //each image should be 
{
    std::vector<double> feat;
    shape = predictor(img);
    extract_highdim_face_lbp_descriptors(img, shape, feat);
    double label = is_neutral ? -1.0 : +1.0;
    f << label;
    for (int i = 0; i < feat.size(); ++i)
       if (feat[i] != 0.0)
           f<< " " << i << ":" << feat[i];
    f << endl;
}

如果您使用的是Dlib - 您不需要LibSVM - 您可以使用Dlib进行培训,here is an example of SVM training with dlib