xiaoerlaigeid / Pedestrian_Detection

通过HOG+SVM训练进行行人检测,行人数据库使用INRIAPerson,程序基于OpenCV实现

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

HOG+SVM进行行人检测

运行环境为:Ubuntu 16.04 && OpenCV 2.4.13
代码参考自:http://blog.csdn.net/masibuaa/article/details/16105073
INRIA Person数据库下载: 【相关说明
【直接下载地址(970M)】ftp://ftp.inrialpes.fr/pub/lear/douze/data/INRIAPerson.tar

开始前的准备工作

开始前建立文件夹用于存储正负样本和HardExample,正样本图片直接复制INRIA中的正样本图片,负样本图片通过裁剪得到。

$ mkdir -p dataset/pos dataset/neg dataset/HardExample
$ cp INRIAPerson/96X160H96/Train/pos/* dataset/pos/

编译出可执行文件

$ cmake .
$ make

也可以在命令行使用g++编译出可执行文件,例如

$ g++ -o CropImage crop_image.cpp $(pkg-config opencv --cflags --libs)
$ g++ -o SvmTrainUseHog main.cpp $(pkg-config opencv --cflags --libs)
$ g++ -o GetHardExample find_save_HardExample.cpp $(pkg-config opencv --cflags --libs)
$ g++ -o ImageDetect image_detect.cpp $(pkg-config opencv --cflags --libs)
$ g++ -o VideoDetect video_detect.cpp $(pkg-config opencv --cflags --libs)
$ g++ -o PeopleDetect peopledetect.cpp $(pkg-config opencv --cflags --libs)

第一步,裁剪出负样本图片

INRIA中有1218张负样本图片,CropImage从每一张图片中随机裁剪出10张大小为64x128的图片,最终总共会得到12180张图片,存储在dataset/neg文件夹中。上面已经编译出了可执行文件,直接通过CropImage裁剪出负样本图片。

$ ./CropImage

第二步,使用正负样本进行训练

先修改 dataset.h 里面参数,将 TRAINfalse 改为 true , 以进行训练,参数修改后需通过 make 重新编译可执行文件,然后通过 SvmTrainUseHog 开始训练。

$ make
$ ./SvmTrainUseHog

到这里已经得到了 SVM_HOG.xml 可以用来进行检测,但是检测效果不太好,所以下面加入 HardExample 来进行进一步训练。

第三步,得到HardExample

通过 GetHardExample 从 INRIA 原始的负样本图片中检测出 HardExample ,图片会保存到 dataset/HardExample

$ ./GetHardExample

第四步,将正负样本和HardExample一起重新进行训练

将 HardExample 图片列表写入文件 HardExample_FromINRIA_NegList.txt , 修改 dataset.h 里面的参数,将 HardExampleNO0 改为第三步中得到的图片数目,修改后通过 make 重新编译可执行文件,最后通过 SvmTrainUseHog 重新训练。

$ ls dataset/HardExample/ >HardExample_FromINRIA_NegList.txt
$ make
$ ./SvmTrainUseHog

至此训练完成。

检测示例图片:
检测示例图片

其它说明

  • SVM_HOG.xml为最终训练好的SVM分类器
  • ImageDetect可对图片进行检测
  • VideoDetect可对视频进行检测
  • PeopleDetect为OpenCV默认参数的行人检测程序

About

通过HOG+SVM训练进行行人检测,行人数据库使用INRIAPerson,程序基于OpenCV实现


Languages

Language:C++ 94.9%Language:C 3.1%Language:CMake 2.0%