关于训练程序我封装了一份,大家可以参考一下

http://download.csdn.net/detail/xidianzhimeng/8270413

样本的配置与OpenCV训练Adaboost的类似,相信训练过Adaboost的同学能很快入手的。

行人训练:http://www.tuicool.com/articles/MvYfui

字符识别:http://www.haogongju.net/art/2328003

用OpenCV使用HOG特征进行SVM算法训练的大概流程是

1)设置训练样本集

需要两组数据,一组是数据的类别,一组是数据的向量信息。

2)设置SVM参数,参考《机器模式->libSVM之参数说明》

注意必须使用线性SVM进行训练,因为HogDescriptor检测函数只支持线性检测!!!

3)使用HOGDescriptor计算hog特征

4)训练SVM

调用CvSVM::train函数建立SVM模型,第一个参数为训练数据,第二个参数为分类结果,最后一个参数即CvSVMParams

5)用这个SVM进行分类

调用函数CvSVM::predict实现分类,可以采用穷举的方法训练HardExample

6)获得支持向量

调用函数CvSVM::get_support_vector_count获得支持向量的个数,CvSVM::get_support_vector获得对应的索引编号的支持向量。

7)保存支持向量与alpha、rho

SVM训练完成后得到的XML文件里面,有一个数组,叫做support vector,还有一个数组,叫做alpha,有一个浮点数,叫做rho;

将alpha矩阵同support vector相乘,注意,alpha*supportVector,将得到一个列向量,将该向量前面乘以-1。之后,再该列向量的最后添加一个元素rho。

如此,变得到了一个分类器,利用该分类器,直接替换opencv中行人检测默认的那个分类器(cv::HOGDescriptor::setSVMDetector()),

int supportVectorNum = svm_train->get_support_vector_count();

cout<<"support vector size of SVM : " << supportVectorNum << "\n";

//支持向量矩阵

Mat sv = Mat::zeros(supportVectorNum, fet_num, CV_32FC1);

//alpha向量,长度等于支持向量个数

Mat alp = Mat::zeros(1, supportVectorNum, CV_32FC1);

//alpha向量乘以支持向量矩阵的结果

Mat re = Mat::zeros(1, fet_num, CV_32FC1);

//将支持向量的数据复制到supportVectorMat矩阵中

for(int i=0; i<supportVectorNum; i++)

{   //返回第i个支持向量的数据指针

const float * pSVData = svm_train->get_support_vector(i);

for(int j=0; j< fet_num; j++)

sv.at<float>(i,j) = pSVData[j];

}

//将alpha向量的数据复制到alphaMat中,返回SVM的决策函数中的alpha向量

double * pAlphaData = svm_train->get_alpha_vector();

for(int i=0; i<supportVectorNum; i++)

alp.at<float>(0,i) = (float)pAlphaData[i];

//计算-(alphaMat * supportVectorMat),结果放到resultMat中,注意因为svm.predict使用的是alpha*sv*another-rho,如果为负的话则认为是正样本,在HOG的检测函数中,使用rho+alpha*sv*another如果为正的话是正样本,所以需要将后者变为负数之后保存起来

re = -1 * alp * sv;

// 将乘积保存起来

ofstream ofs(hog_name.c_str(), ios::out);

if (!ofs.is_open())

cerr << "open file " << hog_name << " failed\n";

for(int i=0; i<fet_num; i++)

ofs << re.at<float>(0, i) << "\n";

float rho = svm_train->get_rho();

ofs << rho << "\n";

ofs.close();

OpenCV的HOG+SVM训练程序注意事项相关推荐

  1. MATLAB 生成 HOG+SVM训练所需的txt文件

    MATLAB 生成 HOG+SVM训练所需的txt文件 前言 很简单的一段代码,用于生成HOG+SVM训练所需的数据的文件列表和标签, txt内容就是一行文件路径和一行标签. 本文是为另一篇博文A服务 ...

  2. OpenCV的支持向量机SVM的程序

    步骤: 1,生成随机的点,并按一定的空间分布将其归类 2,创建SVM并利用随机点样本进行训练 3,将整个空间按SVM分类结果进行划分,并显示支持向量 [cpp] view plaincopy #inc ...

  3. 行人检测HOG+SVM:综述、INRIADATA数据集、线性SVM

    目录 1. 行人检测算法研究综述 2. 基于机器学习的方法:人工特征+分类器 2.1 HOG+SVM 2.2 HOG+Adaboost 2.3 ICF+AdaBoost 2.4 DPM+ latent ...

  4. 车牌识别技术详解五--采用LBP+HOG SVM做目标分类,车牌检测,字符检测等

    在样本数量比较少的情况下,可以采用HOG.SVM对样本进行初步的筛选出,正负样本,本文接着上一节二值化出来部分样本后,用pictureRelate做初步筛选出正负样本各500,准确训练. 1.pict ...

  5. 07-机器学习(Hog+SVM实现小狮子识别)

    一.SVM支持向量机 什么是SVM支持向量机? SVM支持向量机本质仍是一个分类器,其核心为寻求一个最优超平面最终实现分类,实现分类问题 在寻求超平面的时候有多种方式,可以使用若干条直线或曲线进行分类 ...

  6. 用opencv的traincascade.exe训练行人的HAAR、LBP和HOG特征的xml

    opencv中有两个函数可以训练分类器opencv_haartraining.exe和opencv_traincascade.exe,前者只能训练haar特征,后者可以用HAAR.LBP和HOG特征训 ...

  7. OpenCV实战【2】HOG+SVM实现行人检测

    目录 HOG是什么? HOG vs SIFT HOG步骤 HOG在检测行人中的方式 Opencv实现 HOGDescriptor的构造函数: 行人检测HOG+SVM步骤 简化版的HOG计算 HOG是什 ...

  8. OpenCV实战4: HOG+SVM实现行人检测

    目前基于机器学习方法的行人检测的主流特征描述子之一是HOG(Histogram of Oriented Gradient, 方向梯度直方图)HOG 特征是用于目标检测的特征描述子,它通过计算和统计图像 ...

  9. opencv HOG SVM 二

    这一部分是hog svm 识别部分 训练部分 show me the code #include <iostream> #include <fstream> #include ...

最新文章

  1. 丙类放大电路实验报告_电子工程师入门基础:那些关于电子电路设计的基础知识...
  2. Java开发面试题,Java常用类使用总结
  3. IDEA中安装Free Mybatis plugin插件实现从dao层到mapper层自由跳转
  4. C++中类和对象的一些注意事项 ---继承
  5. python获取字典长度_Python基础-字典
  6. jdbc postgresql mysql_jdbc无法连接postgresql数据库
  7. chrome样式不生效_Chrome开发者工具的11个使用技巧
  8. oracle11g日志分析,Oracle11g在Windows环境下监听日志文件达到4G问题解决方案
  9. 文本文件上传漏洞[任意.绕过.解析]
  10. TVS ESD 二极管介绍与应用
  11. JS获取浏览器高度、屏幕高度、宽屏
  12. 【学堂在线数据挖掘:理论方法笔记】第八天(4.2)
  13. JDBC作用接口和创建的步骤详细解析
  14. 「精品」无损批量压缩图片工具 - Caesium Image Compressor
  15. jwt的token自动续约_关于 JWT Token 自动续期的解决方案
  16. Ubuntu 20.04安装绿联PL2303串口驱动
  17. 贺州旱改水新丰景 国稻种芯·中国水稻节:广西改出乡村振兴
  18. c语言数组相同字符主元素,C语言数组考点归纳
  19. Z 字形变换(java版)
  20. 信息竞赛中的INF的含义

热门文章

  1. 6-tips-for-managing-property-files-with-spring--转
  2. 分布式计算的模式语言读后感
  3. android studio 与gradle的版本对应
  4. 元宇宙iwemeta: 苹果Apple推动元宇宙产业的生态体系
  5. 这些deep learning(rnn、cnn)调参的经验值得分享
  6. uni-app 使用vue的语法+小程序的标签和API。
  7. 抽象类(abstract class)和接口(Interface)的区别
  8. jvm性能调优 - 02JVM中内存区域
  9. Redis进阶-5.x 单节点 及Redis Cluster 3主3从集群部署
  10. Linux 备份及恢复 Linux 文件权限