做行人检测时用SVM训练模型,读取文件时老是出现错误

半导体行业的小白 半导体行业的小白 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
#include <opencv.hpp>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace cv;
using namespace cv::ml;
using namespace std;
#define CENTRAL_CROP true
#define NUMPOS 2416//正样本
#define NUMNEG 12180//负样本
#define NUMHARD 0//负样本个数
int main()
{
int DescriptorDim;
string ImgName;
ifstream pos("POS.txt");
ifstream neg("NEG.txt");
Mat sampleFeatureMat;
Mat sampleabelMat;
for (int num = 0; num < NUMPOS&&getline(pos, ImgName); num++)
{
cout << "处理:" << ImgName << endl;
Mat src = imread(ImgName);
if (CENTRAL_CROP)
{
src = src(Rect(16, 16, 64, 128));
}
HOGDescriptor *hog = new HOGDescriptor(cvSize(64, 128), cvSize(16, 16), cvSize(8, 8), cvSize(8, 8), 9);
vector<float>descriptor;
hog->compute(src, descriptor, Size(8, 8));
if (0 == num)
{
DescriptorDim = descriptor.size();
sampleFeatureMat = Mat::zeros(NUMPOS + NUMNEG + NUMHARD, DescriptorDim, CV_32SC1);
sampleabelMat = Mat::zeros(NUMPOS + NUMNEG + NUMHARD, 1, CV_32SC1);
}
for (int i = 0; i < DescriptorDim; i++)
{
sampleFeatureMat.at<float>(num, i) = descriptor[i];
sampleabelMat.at<float>(num, 0) = 1;
}
}
for (int num = 0; num < NUMNEG&&getline(neg, ImgName); num++)
{
cout << "处理:" << ImgName << endl;
Mat src = imread(ImgName);
HOGDescriptor *hog = new HOGDescriptor(cvSize(64, 128), cvSize(16, 16), cvSize(8, 8), cvSize(8, 8), 9);
vector<float>descriptor;
hog->compute(src, descriptor, Size(8, 8));
for (int i = 0; i < DescriptorDim; i++)
{
sampleFeatureMat.at<float>(num + NUMNEG, i) = descriptor[i];
sampleabelMat.at<float>(num + NUMNEG, 0) = -1;
}
}
ofstream fout("SampleFeatureMat.txt");
for(int i=0; i<NUMPOS+NUMNEG;i++)
{
fout<<i<<endl;
for(int j=0; j<DescriptorDim; j++)
fout<<sampleFeatureMat.at<float>(i,j)<<" ";
fout<<endl;
}
cout << "Starting training process" << endl;
Ptr<SVM> svm = SVM::create();
CvTermCriteria criteria = cvTermCriteria(CV_TERMCRIT_ITER + CV_TERMCRIT_EPS, 1000, FLT_EPSILON);
svm->setType(SVM::Types::C_SVC);
svm->setKernel(SVM::KernelTypes::LINEAR);
svm->setTermCriteria(TermCriteria(TermCriteria::MAX_ITER, 100, 1E-6));
Ptr<TrainData> tData = TrainData::create(sampleFeatureMat, ROW_SAMPLE, sampleabelMat);
svm->train(tData);
cout << "训练完成" << endl;
svm->save("E:\\视觉检测\\SVM.xml");
system("pause");
}
...全文

相关推荐

自己训练SVM分类器进行HOG行人检测

标题 "自己训练SVM分类器进行HOG行人检测" 涉及到的是计算机视觉领域的一个经典任务,即行人检测。在这个过程中,SVM(支持向量机)被用作分类器,而HOG(方向梯度直方图)则是特征提取的方法。

weixin_38669655

hog+svm行人检测分类器训练

描述中提到的“注意样本的路径问题”,这强调了在训练过程中,正确管理图像文件和其对应的标签文件路径至关重要。如果路径错误,可能会导致模型无法找到相应的训练数据,从而影响训练结果。

william_yang2009

用首次训练获得的SVM在负样本原图上检测HardExample

将这些Hard Examples保存为文件,以便后续的模型优化或训练使用。总之,这个任务涉及的是利用SVM和HOG特征进行目标检测,特别是关注那些难分类的Hard Examples,以提升模型的性能。

masikkk

用opencv实现HOG+SVM行人检测

用opencv实现HOG+SVM行人检测HOG Descriptors 是Navneet Dalal在2005年提出的一种特征,是行人检测方面的经典特征。在opencv中当然也提供了这种方法的实现。我们可以先跑一跑opencv自带的实现方法,使用opencv中已经训练好的SVM分类器,代码如下。 #include <iostream> #include <opencv2/opencv.hpp> in

touch丶

python,sklearn,svm,遥感数据分类,代码实例

@python,sklearn,svm,遥感数据分类,代码实例 python_sklearn_svm遥感数据分类代码实例 (1)svm原理简述** 支持向量机(Support Vector Machine,即SVM)是包括分类(Classification)、回归(Regression)和异常检测(Outlier Detection)等一系列监督学习算法的总称。对于分类,SVM最初用于解决二分类问...

huhu_yzz
评论 7
收藏 已收藏
分享
返回顶部
半导体行业的小白
C++ 语言 65,214 成员 250,514 内容