SVM方法步骤
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
SVM 方法步骤
彭海娟 2010-1-29
看了一些文档和程序,大体总结出SVM 的步骤,了解了计算过程,再看相关文档就比较容易懂了。
1. 准备工作
1) 确立分类器个数
一般都事先确定分类器的个数,当然,如有必要,可在训练过程中增加分类器的个数。分类器指的是将样本中分几个类型,比如我们从样本中需要识别出:车辆、行人、非车并非人,则分类器的个数是3。
分类器的个数用k
2) 图像库建立
SVM 方法需要建立一个比较大的样本集,也就是图像库,这个样本集不仅仅包括正样本,还需要有一定数量的负样本。通常样本越多越好,但不是绝对的。
设样本数为S
3) ROI 提取
对所有样本中的可能包含目标的区域(比如车辆区域)手动或自动提取出来,此时包括正样本中的目标区域,也包括负样本中类似车辆特征的区域或者说干扰区域。
4) ROI 预处理
包括背景去除,图像滤波,或者是边缘增强,二值化等预处理。预处理的方法视特征的选取而定。
5) 特征向量确定
描述一个目标,打算用什么特征,用几个特征,给出每个特征的标示方法以及总的特征数,也就是常说的特征向量的维数。
对于车辆识别,可用的特征如:车辆区域的灰度均值、灰度方差、对称性、信息熵、傅里叶描述子等等。
设特征向量的维数是L 。
6) 特征提取
确定采取的特征向量之后,对样本集中所有经过预处理之后的ROI 区域进行特征提取,也就是说计算每个ROI 区域的所有特征值,并将其保存。
7) 特征向量的归一化
常用的归一化方法是:先对相同的特征(每个特征向量分别归一化)进行排序,然后根据特征的最大值和最小值重新计算特征值。
8) 核的选定
SVM 的构造主要依赖于核函数的选择,由于不适当的核函数可能会导致很差的分类结果,并且目前尚没有有效的学习使用何种核函数比较好,只能通过实验结果确定采用哪种核函数比较好。训练的目标不同,核函数也会不同。
核函数其实就是采用什么样的模型描述样本中目标特征向量之间的关系。如常用的核函数:Gauss 函数
2
1),(21x x x p e x x k --=
对样本的训练就是计算p 矩阵,然后得出描述目标的模板和代表元。
2. 训练
训练就是根据选定的核函数对样本集的所有特征向量进行计算,构造一个使样本可分的
特征空间。
其训练步骤如下:
1) 用分类器将所有样本集的特征分类
2) 根据选定的核函数分别计算每个分类器中每个特征向量的有关值
3) 根据这些特征相关值计算协方差矩阵空间
4) 对这个协方差矩阵空间进行Householder 变换,也就是说将一个向量变换为由一个
超平面反射的镜像,是一种线性变换。超平面的法向量被称作Householder 向量。因为SVM 就是在特征空间中构造最优超平面。
具体变换方法可参照相关文章。里面涉及大量的矩阵运算。
5) 计算特征系数
得到协方差矩阵以及其对应的超平面矩阵,根据这两个矩阵分别计算每个特征的特征系数,并将特征系数对协方差矩阵进行缩放。
6) 获得模型参数paramInvSigma ,paramLogSigma
对缩放后的协方差矩阵paramSigma 求逆后,计算模型参数。其计算方法参照程序: for (i=0; i { for (j=0; j { sigma.pdata[j] = this->paramSigma[i*size+j]; } sigma.inv(invSigma); for (j=0; j { this->paramInvSigma[i*size+j] = invSigma.pdata[j]; } this-> paramLogSigma[i] = log(sigma.det())-2*log(((DOUBLE)classSample[i])/((DOUBLE)totalSample)); } 3. 比较测试 比较测试是SVM 方法的最后一步,也就是说通过训练得到训练模型参数之后,就可根据模型参数对一个ROI 区域进行计算,判断其归类。 比较测试首先是对测试图像进行预处理,然后提取特征,将这些特征参数与训练结果的模型参数进行比对,比对方法可参照文献中介绍的: b z w w x T +=),(σ 得到对应的类别标志: ⎩⎨⎧->+=other w x w x 10 ),(1 ),(σθ 4. 总结 SVM 方法最主要的工作是样本训练,获得训练模型参数。 由于时间关系,暂时只对SVM 有这些了解,只能算对SVM 有一个初步的认识。并且上述总结都是在阅读文献之后的认识,难免有不少错误和不足,所以本文只能作为一个小参考。在对SVM 有个初步的认识之后,需要仔细阅读其原理,分析其中的矩阵运算 及思想。SVM中涉及大量的矩阵运算和推导,需要弄清楚,这样才能明白模型参数的含义,以便于判断当前选定的核函数是否合适。