做了一段时间的adaboost训练一个可以检测张开的手掌的检测器,最后训练出来的效果不错,在保证较高的检测率的情况下还能保持几乎没有误检的情况出现,adaboost用在物体检测上的效果让我大吃一惊。adaboost的特点是误检测少,且速度快,因为在检测的时候采用滑窗法对窗口挨个进行一个二分类(是手掌或者不是手掌),但是大多数窗口无法通过前面几个stage的分类器就直接被判断为负样本了,因此有着速度快的特点,但是限于检测过程是在手机端运行的,手机的计算能力不比电脑,所以fps还是会存在一点问题,对此我也进行了相应的方法来加速检测的过程,以提高检测速度。这篇博客分为两个部分,一部分是如何准备数据集,包括正样本和负样本,另一个部分是如何进行训练以及训练过程中一些需要注意的地方。下面开始啦~
一、准备数据集
数据集包括了正样本和负样本,正样本毫无疑问就是真正包括想要检测的物体。举个栗子:
截图工具大概就是QQ截图之类的东西了。。图像的大小可以不一样,也可以都缩放为一个尺寸,最好是缩放为一个尺寸,方便后面准备info.data文件,但原则上是只要保证正样本图像中基本恰好包括了想检测的物体即可。把它们放在一个叫做pos的文件夹中。我用到的正样本个数是1400个。正样本这样截好图放在pos文件夹之后就告一段落了,接下来是负样本。关于负样本,有一点值得注意,就是负样本不需要自己去截取,可以拿任何不包括正样本图像的大图作为负样本,再举个栗子,我想检测的是手掌,那么只要一张图片中没有手掌,我就可以把这张图片拿来当做负样本的一部分。也就是说,负样本是大图而不是截图,只要这个大图不包括正样本。还是拿图举个栗子:
这是拿视频存成图片来作为负样本的,图片的个数是1180张,但是图片的个数不代表负样本的个数,这点后面会解释到。把这些图片放在一个叫做neg的文件夹中,pos和neg文件夹在同一个目录下。还是上图吧:</