【原文:http://www.cnblogs.com/miracled/archive/2012/05/12/2497271.html】

整体框架: 样本制作+训练+检测 - (vs2008 + opencv2.3.1 + libsvm(可换用svmlight需改动部分源代码))

1. 样本制作:Make_Sample类

1.1功能大致如下(如需要详细的介绍,请直接参看源码)

  Make_Sample() : 加载抠选参数可以采用这种方式,构造实例。

  Make_Sample(Size winSize,Point tl = Point(),double ratios = 1.0,int numPerPic = 1);

     winsize:指定抠选区域的大小

      tl:指定抠选窗口的左上顶点,如果为(-1,-1)则随机在输入图像有效区域内随机选取。

      ratios:指定输入图像的缩放比例,如果 <0则随机有效的比率。最大比率定义在make_sample.h中的MAXRATIOS中,可以自行修改。

      numPerPic:指定每张输入图片中输出样本的数量,为随机抠选选项。

  int Make(string root,string type,string savePath,void (*Proccess)(Mat& ) = 0);

      root:输入图片的路径。

      type:输入图片的格式。

      savePath:抠选样本保存的路径。

      void Process(Mat& image):图像的预处理函数,这个函数可以自行编写你的预处理过程。

int Make(string parmFile, string savePath,void (*Proccess)(Mat& ) = 0);

      parmFile:抠选参数,形如

        G:/database/test/imagexx.jpg 0 0 128 64 1

        G:/database/test/366.jpg 0 0 128 64 1

        G:/database/test/1568.jpg 0 0 128 64 1

        G:/database/test/1939.jpg 0 0 128 64 1

        path (x,y) winSize ratios // 路径 左上顶点 窗口大小 缩放比例

        savePath:样本保存路径。

        void Process(Mat& image):自定义预处理函数。

2. 训练

2.1 HOG特征提取(使用前请参看后面的5个注意事项)

  bool initHogs(int num);

    功能:初始化训练参数

    num:提取样本的个数

  void DetectPacket(Mat& img,Mat& grad_ang);

    功能:计算输入图像img的角度和梯度,保存在grad_ang中

  void calculateHogs(Mat& grad_ang,Point tl);

    功能:计算一张大图中以tl为左上顶点检测窗口的HOG特征(为检测和寻找困难样本而设置)

    grad_ang:梯度和角度

    tl:检测窗口的左上顶点

  void calculateHogs(Mat& grad_ang,int ipic);

    功能:计算样本大小,第ipic个样本的HOG特征(为训练而设置)

    grad_ang:梯度和角度

    ipic:样本的编号。

  void saveHog(char *hpath,int label,bool iscls = false) const;

    功能:保存训练得到的hog特征

    hapth:保存的全路径

    label:保存的标签

    iscls:是否清除上次保存的结果,默认不清除,使用append写入。

  Mat getHogs() const { return vfeature; }

    功能:获取训练得到的hog特征

  float *getHogs(int ipic) const

    功能:获取索引为ipic的样本hog特征

  int FeatureLength() const { return parm.len; }

    功能:获取特征的维数

  int Height() const { return parm.height; }

    功能:获取检测窗口的高度

  int Width() const { return parm.width; }

    功能:获取检测窗口的宽度

2.2使用hog特征需要注意的几点:

  1、只定义了9方向

  2、只定义L2归一化

  3、需要使用请解开//#define _GAMMA_COMPRESS_的注释

  4、高斯加权模板采用的16x16的如果block大小不是(16,16)则需要改动,请参看并修改static double* getGaussMask()函数

  5、提取前需要加载配置文件Hogcfg.ini

      width: 128  

      height: 64

      block: 2

      cell: 8

      normt: 0  //这个参数预留,需要自己添加block归一化方法

3. 训练分类器

3.1获取训练数据

  void getTrainData(char *root, char *type, int label, char *matlab_data)

    功能:获取hog训练数据。

    root:当前训练样本位置

    type:训练样本格式

    label:训练样本标签

    matlab_data:训练样本保存名称

  注意:样本必须同检测窗口大小,并且具有相同的标签,例如

  getTrainData("G:/database/car_detect/pos4/",".jpg",1,"train.txt");

  getTrainData("G:/database/car_detect/neg4/",".jpg",-1,"train.txt"); 保存名称需要相同,不然需要自己黏贴    到一个文件中参与训练。

3.2 训练

  step1:训练一轮

    训练方法主要有两种

  第一种:

    需要下载libsvm,使用其中的svm-train.exe文件

    已经打包到一起了,在根目录下找到training_bat.bat,将其中的train.txt修改成你的训练数据名字,双击运行training_bat.bat就可以直接训练一轮得到一个libsvm的model,想自己设定参数请参看svm-train-usage.txt,如何使用svm-train.exe文件。

  第二种:

    使用matlab训练,不过需要修改hog特征提取中的

    void saveHog(char *hpath,int label,bool iscls = false) const方法。然后将训练数据加载到matlab里训练就可以了。

注:这里得到的libsvm-model都比较大,如果使用的是线性的model的话,使用void changeModel(char *modelname,char *newmodelname,int fealen)方法转化一下就可以得到一个比较小的model,

    modelname:libsvm的model,

    newmodelname:自定义保存model的名字,

    fealen:特征的维数,使用第二种方式训练的在matlab中转化可以参看源码(很简单的)。

  step2:搜索困难样本

    void findHardSample(char *modelname,char *hardroot,char *type,char *matlab_hard);

      功能:利用训练好的线性模型搜索困难样本集,将困难样本数据保存在matlab_hard中

      modelname:一个已训练好的线性mode

      hardroot:困难样本集路径

      type:样本扩展名

      matlab_hard:保存困难样本的文件名

step2完成以后,挑选需要再次训练的困难样本与第一轮训练的数据合并,重复step1可以得到最终的分类器。

3. 检测

  int detectCar(char *modelname,char *imfile);

    功能:检测一张图片中是否含有目标。

    modelname:分类器的路径

    imfile:图片的路径

注意:

1、显示结果请打开//#define _SHOW_DETECT_RESULT_前的注释

2、关于多框的问题请调节,一下方法,具体如何调节请参看源码或网络

    //PostProcess(carRect,1);

PostProcess(carRect,2);

    //RemoveCoveredRectangles(carRect);

使用注意事项:code供学习使用,本人测试能用于检测,但不保证没有任何bug。

以上文档下载包已包含

下载地址:http://pan.baidu.com/share/link?shareid=137019&uk=3104776594

开篇-HOG提取训练检测+样本制作相关推荐

  1. HOG提取训练检测+样本制作

    转自 http://www.cnblogs.com/miracled/archive/2012/05/12/2497271.html 利用HOG特征训练分类器说明文档-By miracled 整体框架 ...

  2. HOG+SVM行人检测python实现

    目录 原理介绍 HOG与SVM行人检测 NMS非最大值抑制 数据集 算法实现 行人检测 在图像上给行人画框 完整代码 Reference 原理介绍 HOG与SVM行人检测   HOG算法是在2005年 ...

  3. 视频教程-遥感影像深度学习样本制作-深度学习

    遥感影像深度学习样本制作 遥感专业硕士,拥有3年以上的遥感图像数据处理经验,对遥感.GIS等行业的应用有深刻的认识. 郑新杰 ¥20.00 立即订阅 扫码下载「CSDN程序员学院APP」,1000+技 ...

  4. 人脸检测(二)--人脸识别样本制作及训练测试

    闲得没事,折腾下opencv 人脸识别,从样本制作到评估. 1.直接copy opencv里的源码,创建工程,添加opencv库,可以直接cmake源码,但我之所以自己创建工程,是想多学习,并且降低与 ...

  5. 人脸识别之人脸检测(二)--人脸识别样本制作及训练测试

    原文:https://blog.csdn.net/app_12062011/article/details/51422604 闲得没事,折腾下opencv 人脸识别,从样本制作到评估. 1.直接cop ...

  6. SVM人脸样本训练检测流程

    =++++++++++++++++++++++提取 HOG 特征+++++++++++++++++++++++++= //样本矩阵,nImgNum:横坐标是样本数量. 列数是该 样本对应的 特征维数. ...

  7. caffe安装使用、样本制作、网络修改、错误重新训练!

    总的参考博客: 1.安装: 转 Windows+VS2013爆详细Caffe编译安装教程 [caffe-Windows]caffe+VS2013+Windows无GPU快速配置教程 Caffe初试(一 ...

  8. 随机森林提取Landsat8水体的样本制作

    思路来源于下面文章 python实现随机森林遥感图像分类 - 知乎 制作水体非水体样本,我在envi5.3中制作后无法导出为TIFF格式,遂利用arcgis进行样本制作. 首先打开需要提取的影像TIF ...

  9. HOG+SVM行人检测

    前言 在前面的博客:HOG特征检测学习笔记中,介绍了HOG特征,也附有代码实现.这篇博客中将会使用HOG+SVM这一经典的目标检测算法来进行行人检测,但是不会讨论HOG或者SVM的理论部分,如果有不懂 ...

最新文章

  1. RunLoop 详解
  2. 测试集准确率不变_这个医疗AI准确率突破天际,招来了铺天盖地的质疑
  3. 手把手教你用Python求均值、中值和众数
  4. C语言——选择法排序_数组
  5. Java基础学习总结(129)——Arrays.asList得到的List进行add和remove等操作出现异常解析
  6. php二分查找例题,PHP实现的二分查找算法实例分析
  7. clarity, texture and sharpening
  8. Hdu2558(欧拉函数)
  9. PCL visualizer
  10. 【回归预测】基于matlab麻雀算法优化LSSVM回归预测【含Matlab源码 1128期】
  11. Emotet***病毒升级,对抗杀毒软件的能力再次增强
  12. 无线RTU入库四川省地质灾害专业监测设备目录教程
  13. iphone手机屏幕投射电脑 简单几步教你完成
  14. Python 数据分析微专业课程--项目实战09 房价影响因素挖掘
  15. pipe 半双工_linux进程间通信之管道(无名管道pipe)实现全双工双向通信
  16. Apache Ant简介
  17. Nginx完全正向保密(perfect forward secrecy)设置
  18. 自然语言处理简介及研究方向
  19. 实例演示使用RDIFramework.NET 框架的工作流组件进行业务流程的定义—请假申请流程-WinForm
  20. mac 查看本地php 版本,Mac系统版本怎么看

热门文章

  1. postfix+dovecot+foxmail虚拟用户配置
  2. 当当狸智能显微镜单体轻巧便携
  3. 大数据开发【3】 -- hadoop的云集群配置
  4. RANSAC及图像拼接上的应用
  5. 基于python的网络爬虫编程_基于Python的网络爬虫程序设计
  6. 应届生做技术支持好吗_应届生第一份工作做销售合适吗?难吗?对吗?谁能给我答案?...
  7. 微信小程序(二)--- 数据绑定,事件绑定,全局配置window,tabBar,网络数据请求,request合法域名,GET,POST
  8. 软银巨资收购ARM:这是场天作之合?
  9. pyqt和pyside如何导入第三方绘图库pyqtgraph
  10. 杭电OJ--1717