当前位置 : 首页

用DPM(Deformable Part Model,voc-release3.1)算法在INRIA数据集上训练自己的人体检测模型


实验环境

DPM源码版本:voc-release3.1
VOC开发包版本:VOC2007_devkit_08-Jun
Matlab版本:MatlabR2012b
c++编译器:VS2010
系统:Win7 32位
learn.exe迭代次数:5万次
数据集:INRIA 人体数据集,Spinello RGBD数据集

在windows下运行Felzenszwalb的Deformable Part Model(DPM)源码voc-release3.1来训练自己的模型


实验准备

实验环境
DPM源码版本:voc-release3.1
VOC开发包版本:VOC2007_devkit_08-Jun
使用的训练数据集:VOC2007
包括:训练验证集:VOC2007_trainval_06-Nov(438MB),测试集:VOC2007_test_06-Nov-2007(430MB)
Matlab版本:MatlabR2012b
c++编译器:VS2010
系统:Win7 32位

在Windows下运行Felzenszwalb的star-cascade DPM(Deformable Part Models)目标检测Matlab源码

可变形部件模型Deformable Part Models(DPM)是非常经典的目标检测算法,由Felzenszwalb提出,本文介绍如何在windows下运行Felzenszwalb给出的DPM算法的star-cascade版本voc-release4.01-star-cascade,相比于基本版本voc-release4.01,star-cascade版本增加了PCA降维,检测速度可提高十几倍。

2013年运动记录

^_^

在Windows下运行Felzenszwalb的Deformable Part Models(voc-release4.01)目标检测matlab源码

可变形部件模型Deformable Part Models是目前最好的目标检测算法,由Felzenszwalb提出,本文介绍如何在windows下运行Felzenszwalb给出的matlab源码。

有关可变形部件模型(Deformable Part Model)的一些说明


(1)可变形部件模型

可变形部件模型(DeformablePart Model)由三部分组成:

  • (1) 一个较为粗糙的,覆盖整个目标的全局根模版(或叫做根滤波器)。
  • (2) 几个高分辨率的部件模版(或叫做部件滤波器)。
  • (3) 部件模版相对于根模版的空间位置。

利用FinalData恢复shift+delete误删的文件

花了两天时间写完开题报告,刚写完就被当做没用的文档shift+delete删除了,一下子慌了。
看了网上的建议,误删文件所在的分区最好不要再有存储删除等操作,否则容易将之前误删的冲掉,可我的正好是在C盘的桌面上,时时刻刻都有程序在对C盘操作,不知道还能不能恢复。
先试了试360安全卫士自带的误删回复小工具,根本不行。
又去找了大名鼎鼎的EasyRecovery,在国内一个下载网站上下载的,但感觉界面很粗糙,有国产付费小软件的感觉,试了试,倒是查找出几个误删的word文档,但在最后一步恢复数据的时候,需要输入注册码,放弃。看到网上说,EasyRecovery有真假之分,冒牌的是国内自己开发的一款,界面上有开发者的QQ和电话,原版的是叫Kroll Ontrack Easyrecovery。
然后又找了一款叫Recuva,在用它进行查找的时候又装了一款Renee,这两个都能将找到的误删word恢复,但是恢复出来的是损坏的word,打不开。
又去找损坏word恢复的方法,试了几个都不行。
无奈之际,又下载了FinalData企业版,想碰碰运气,搜索文件花了10分钟,搜索出来可以按文件类别恢复,有的文件甚至还保留着原文件名(一般这种恢复出来的文件都会丢失原文件名,变成字母加数字)。试着将几个word恢复,竟然可以打开了,只不过丢失了全部格式,变成了一堆文本,但这也比重写好。
下面说说方法:

用初次训练的SVM+HOG分类器在负样本原图上检测HardExample

难例(或叫做难样本,Hard Example,Hard Negative,Hard Instance)是指利用第一次训练的分类器在负样本原图(肯定没有人体)上进行行人检测时所有检测到的矩形框,这些矩形框区域很明显都是误报,把这些误报的矩形框保存为图片,加入到初始的负样本集合中,重新进行SVM的训练,可显著减少误报。
这种方法叫做自举法(Bootstrap),自举法首先使用初始负样本集来训练一个模型,然后收集被这个初始模型错误分类的负样本来形成一个负样本难例集。用此负样本难例集训练新的模型,此过程可以重复多次。

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


实验准备

样本选择

正样本来源是INRIA数据集中的96*160大小的人体图片,使用时上下左右都去掉16个像素,截取中间的64*128大小的人体。
负样本是从不包含人体的图片中随机裁取的,大小同样是64*128,详见:

分类器选择

SVM使用的是OpenCV自带的CvSVM类。

训练及检测过程

首先计算正负样本图像的HOG描述子,组成一个特征向量矩阵,对应的要有一个指定每个特征向量的类别的类标向量,输入SVM中进行训练。
训练好的SVM分类器保存为XML文件,然后根据其中的支持向量和参数生成OpenCV中的HOG描述子可用的检测子参数,再调用OpenCV中的多尺度检测函数进行行人检测。

难例(Hard Example)

难例(或叫做难样本,Hard Example,Hard Negative,Hard Instance)是指利用第一次训练的分类器在负样本原图(肯定没有人体)上进行行人检测时所有检测到的矩形框,这些矩形框区域很明显都是误报,把这些误报的矩形框保存为图片,加入到初始的负样本集合中,重新进行SVM的训练,可显著减少误报。
用训练好的分类器在负样本原图上检测Hard Example见:

从完全不包含人体的图片中随机剪裁出用于人体检测的负样本

进行行人检测的分类器训练时,负样本是从完全不包含人体的图片中随机剪裁出来的,下面程序的目的就是从完全不包含人体的图片中随机剪裁出64×128大小的用于人体检测的负样本:

利用TinyXML读取VOC2012数据集的XML标注文件裁剪出所有人体目标保存为文件

PASCAL VOC目标检测(The PASCAL Visual Object Classes)数据集可从其官网页面上下载:
http://host.robots.ox.ac.uk/pascal/VOC/

图片中的目标用XML文件标注,例如其中一张图片的标注为:

OpenCV读入图片序列进行HOG行人检测并保存为视频

此程序是用OpenCV的默认SVM参数进行检测,若图片过大过多,处理起来会比较慢。

OpenCV imshow()之后没有waitKey()无法显示图像

今天突然遇到了这么个奇怪的问题,之前一直没有注意到。
imshow()之后要加waitKey()才能正确显示图像。

OpenCV2.4.4实现HOG行人检测

利用OpenCV中默认的SVM参数进行HOG行人检测,默认参数是根据Dalal的方法训练的。

Histograms of Oriented Gradients for Human Detection 中文翻译

用于人体检测的方向梯度直方图

Navneet Dalal,Bill Triggs

摘要

  我们研究了视觉目标检测的特征集问题,并用线性SVM方法进行人体检测来测试,通过与当前的基于边缘和梯度的描述子进行实验对比,得出方向梯度直方图(Histograms of Oriented Gradient,HOG)描述子在行人检测方面表现更加突出。我们研究了计算过程中每一阶段的影响,得出小尺度梯度(fine-scale gradients)、精细方向采样(fine orientation binning)、粗糙空域抽样(coarse spatial binning)以及重叠描述子块的局部对比度归一化(local contrastnormalization in overlapping descriptor blocks)都对最终结果有重要作用。这种方法在最初的MIT行人数据库上表现近乎完美,所以我们引入了一个更具挑战性的包含1800个不同姿势和背景的已标注人体数据集。