最近正在做一个基于目标检测的项目,里面涉及到行人检测、跟踪,这里记录项目历程,以备后期研习。
【00】前言
在做这个之前,看的论文也比较少,主要是百度、必应一些关键词 行人检测、目标检测等,比较多的算法介绍为HoG+SVM、还有一些机器学习相关的算法,如YOLO等,因为之前在HoG和SVM上花了时间较多,所以现阶段任务是在项目上把它们用起来,后期再考虑往深度学习上走
【01】基础介绍
HoG+SVM
HoG,Histogram of Oriented Gradient, 方向梯度直方图,主要用来描述图像特征,最先由Dalal在2005CVPR上提出,后期在他们的基础上作改进的比较多。SVM,support vector machine,支持向量机,主要是通过训练样本库找到正负样本之间的超平面....
工作时接触过国外如日本的一些ADAS产品,国内北上广深一些厂家待量产产品,普遍根据HoG特征进行改进,都没有离开HoG+SVM的模型,除了mobileye里涉及了深度学习,好像其他公司的产品也都差不多
原理性介绍:
· HoG
待补
· SVM
待补
【02】实现过程
流程图在网上找个贴下
【03】细节描述
算法基本上了解后,在各自项目实际实施的过程中遇到了很多的问题
(1)样本制作
样本制作上有两种方法,一种是利用手动裁剪样本;一种利用目标在图像中的位置不进行样本裁剪,只对目标用标签进行标注。
本文先介绍裁剪的方法。首先在正负样本制作上。Dalal在样本制作时采用的是INRIA的数据集,有些人用的时候直接把他们的样本集水平或垂直删减多少像素来达到64*128尺寸窗口。但是在项目实际操作时,我用工具根据项目场景将含有行人场景内容给他裁剪下来,基于不同距离、尺寸的行人都有,所以造成了最后样本分布各种大小尺寸都有,而OpenCV自带的函数在提取HoG特征时对样本窗口尺寸有要求,所以这就来问题了,怎么将项目上各种尺寸统一到同一尺寸?如果用resize强行缩放到目标尺寸,那么这个操作会不会对图像中的HoG特征造成改变呢?如果事先用固定尺寸来制作样本,负样本可能影响较小,但是制作正样本时,不同尺度的行人样本所占相同尺寸窗口的比例不同,如果差异较小还好,差异太大,到时候势必对该样本窗口的HoG特征产生影响,这个怎么解决呢?
(2)训练样本
*****基于C++版本****
(3)LibSVM
LibSVM是台湾 林智仁(Chih-Jen Lin) 教授2001年开发的一套支持向量机的库,这套库运算速度快,方便对数据做分类或回归。由于libSVM程序小,运用灵活,输入参数少,并且是开源的,易于扩展,因此成为目前国内应用最多的SVM库。目前已经更新到3.22版本
【参考文档】