首先是SVM原理,这篇里写的很详细。
然后是如何将图像用SVM进行分割。这篇里讲的比较清楚,这里直接引用他的概括:
- 提取训练集中图片的feature
- 将这些feature聚成n类。这n类中的每一类就相当于是图片的“单词”,所有的n个类别构成“词汇表”。我的实现中n取1000,如果训练集很大,应增大取值。
- 对训练集中的图片构造bag of words,就是将图片中的feature归到不同的类中,然后统计每一类的feature的频率。这相当于统计一个文本中每一个单词出现的频率
- 训练一个多类分类器,将每张图片的bag of words作为feature vector,将该张图片的类别作为label。
接下来是牛津文献Integrating metric and semantic maps for vision-only automated parking中是如何做的:
1.结合定位信息,用关键帧投影方法获得俯视地图,投影重叠的部分取平均值。
2.用地图数据训练了在主动学习(Active Learning)中表现较好的线性高斯过程分类器(linear Gaussian process classifier)。
3.一开始没有训练数据,先手标几个正确样本,样本会用图片的HOG特征进行描述。然后系统会返回固定数量的可能样本。
4.返回样本大小由之前人工送的正确样本大小求平均确定,包含几种大小。
5.用了非极大值抑制算法消除多个重叠框。
然后开始搭建SVM,用的Qt以方便样本标注以及实现后期的主动学习。首先尝试了OpenCV自带的SVM,其分类效果还不错,但是没找到如何输出分类标签的概率值,故而转投LibSVM。LibSVM的实现这篇里说的比较详细。最终实现了在地图上生成可能车位方框。但是有很多重叠,所以还需要非极大值抑制。