gpt4 book ai didi

c++ - 使用 opencv 的 hog 实现

转载 作者:行者123 更新时间:2023-11-27 23:02:35 27 4
gpt4 key购买 nike

我想使用 opencv 的 hog 实现来检测图像中的人体。我在 opencv 的文件夹中找到了 peopledetect.cpp 样本,它是使用预训练模型的 hog 算法的默认实现。通过一些谷歌搜索,我发现这种默认方法的效果并不令人满意。我必须使用 libSvm 创建自己的模型。我的第一个问题是有任何教程或示例可以解释此过程吗?第二个,我的模型应该学习什么?我的训练样本是什么?只包含人的图像?

编辑问题:是否有机会训练一个单类模型,只包含人体图像?我试图理解代码 in here .它计算数据库的 hog 特征并训练 svm 模型。在评估过程中,它使用带有 detectMultiScale 的 hog 级联。 detectMultiScale和SVM有什么关系?

我已经使用提供的图像训练了一个带有线性内核的 libsvm from here .图像有两种,一种是有人物的,一种是没有人物的。训练结果接近 98%(wuth svm_predict)。如何在测试图像中定位 body 的位置?我可以为此目的使用 detectmultiscale 吗?使用 svm 模型提供多尺度函数?我注意到在我的 svm 模型中,一些支持 vector 在行的开头没有标签但只有符号。这是正常现象,还是可能是错误?

Hogcascade 似乎对我不起作用(f.e 在 image 中):

CascadeClassifier body_cascade;
body_cascade.load("cascades/hogcascade_pedestrians.xml");
Mat image, gray_image;
image = imread( fileName, 1 );
resize(image, image, Size(150, 200));

vector<Rect> bodies;
cvtColor(image, gray_image, CV_BGR2GRAY);
body_cascade.detectMultiScale( gray_image, bodies, 1.3, 5 );
cout << "size of detection" << bodies.size() << endl;

每次我得到 0 个 body 。

最佳答案

  1. 拍摄一组包含人物的图像。您需要所有人员周围都标有一个矩形。
  2. 将这些 ROI 转换为 HOG 特征(这些将是正训练数据)。还将图像的非人物区域转换为 HOG 特征(负训练数据)。 HOG 特征需要具有相同的维度。在各自的论文中查看最佳参数,即每个矩形有多少 HOG 单元,每个 HOG 单元的维度(通常为 31)。这要求所有矩形都具有相同的纵横比(我认为)。
  3. 训练分类器。您的训练数据是您在上一步中计算出的所有特征,正训练数据的标签为 +1(指人的 HOG 特征),负训练数据的标签为 -1。您可以将这两个传递给 libsvm。再次阅读论文,了解他们使用了哪些参数来训练 SVM。我猜它是一个线性 SVM,可能具有 L1 距离度量,因为 HOG 是非常直方图,而直方图不能很好地与 L2 范数配合使用。但这只是一个猜测。
  4. Libsvm 将返回一个模型。您应该通过测量测试数据的精度/召回率来测试它的好坏。 (或测量 ROC,或任何你想要的)。 Libsvm 也有这方面的功能。

关于c++ - 使用 opencv 的 hog 实现,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26254181/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com