使用hog实现opencv
Using hog implementation of opencv
我想使用opencv的hog实现来检测图像中的身体。我在opencv的文件夹中发现了peopledetect.cpp样本,这是使用预训练模型的hog算法的默认实现。通过一点谷歌搜索,我发现这种默认方法并不能令人满意地工作。我必须使用libSvm创建自己的模型。我的第一个问题是,有什么教程或例子可以解释这个过程吗?第二个问题,我的模型应该学习什么?我的训练样本是什么?只包含人的图像?
编辑问题:是否有机会训练一个只包含人体图像的一类模型?我正在努力理解这里的代码。它计算数据库的hog特征,并训练svm模型。在评估过程中,它使用了带有detectMultiScale的hog级联。detectMultiScale与SVM的关系是什么?
我已经用这里提供的图像训练了一个具有线性内核的libsvm。图像有两种,一种是有人的图像,另一种是没有人的图像。训练结果接近98%(wuth svm_predict)。如何在测试图像中定位身体的位置?我可以使用detectmultiscale吗?用svm模型馈送多个cadlefunction?我在我的svm模型中注意到,一些支持向量在开始时没有标签,但只有符号。这是正常的吗,还是可能是错误?
Hoggcascade似乎对我不起作用(如图所示):
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个尸体。
- 拍摄一组包含人物的图像。你需要用一个矩形标记所有人
- 将这些ROI转换为HOG特征(这些将是积极的训练数据)。还将图像的非人物区域转换为HOG特征(负训练数据)。HOG特征需要具有相同的尺寸。在各自的论文中查看最佳参数,即每个矩形有多少HOG单元,每个HOG单元的维度(通常为31)。这要求所有矩形都具有相同的纵横比(我认为)
- 训练分类器。您的训练数据是您在上一步中计算的所有特征,正面训练数据(指人的HOG特征)的标签为+1,负面训练数据的标签为-1。您可以将这两者都传递给libsvm。再次,阅读论文,看看他们使用了哪些参数来训练SVM。我猜这是一个线性SVM,可能具有L1距离度量,因为HOG是非常多的直方图,而直方图与L2范数不太匹配。但这只是猜测
- Libsvm将返回一个模型。你应该通过测量你的测试数据的精确度/召回率来测试它有多好。(或者测量ROC,或者任何你想要的)。Libsvm也有这个功能
- 这个程序在纸面上很直接。从图像中提取HOG特征,创建训练向量,分配标签并将其交给分类器进行学习。这将是一个很好的实验场所。我不确定这有多有效,但它绝对是一个很好的来源。这里也有一些智慧
- 你的模型应该了解一个人的图像的HOG特征是什么样子的。一个训练样本将是HOG特征向量(而不是直接图像本身)。对于负面类,它将再次是不包含人的图像中的HOG特征
相关文章:
- CV_OCL_RUN宏如何在OpenCV(版本3.4.5)的goodFeaturesToTrack实现中工作?
- 在头文件中使用opencv类型来实现未定义的标识符
- 如何以及在何处使用带QT的Basler Cam实现opencv人脸检测代码
- OpenCV 混合模式实现:为什么看似等效的操作会产生不同的结果?
- OpenCV Mat 的逗号分隔初始值设定项是如何用C++实现的?
- OPENCV错误:未指定的错误(未实现该函数)
- 在OpenCV中像素化实现
- 如何使用opencv和c++实现三维sift算法
- 如何在OpenCV中实现颜色分割以及前景检测
- OpenCV IOS Swift 2:如何实现 CvVideoCameraDelegate 协议处理视频帧
- 在OpenCV中实现复值矩阵方程
- Android NDK OpenCV - 找不到本机的实现
- 使用OpenCV 2.4.10实现BRIEF
- C++ 运算符重载 如何在 OpenCV 中实现像 Mat_ 的 CTOR 这样的模式<type>
- 为什么使用TBB的OpenCV函数比基于Boost的实现快得多
- 未实现 OpenCV SURF 函数
- 解释在opencv中实现的阴影检测代码的工作原理
- C++ / OpenCV 中的本地阈值实现
- 在 Opencv 2.4.6 ubuntu 中筛选实现
- 如何在c++中通过OpenCV实现poly1d