概述
1. 准备工作
1) 确立分类器个数
一般都事先确定分类器的个数,当然,如有必要,可在训练过程中增加分类器的个数。分类器指的是将样本中分几个类型,比如我们从样本中需要识别出:车辆、行人、非车并非人,则分类器的个数是3。
分类器的个数用k
2) 图像库建立
SVM方法需要建立一个比较大的样本集,也就是图像库,这个样本集不仅仅包括正样本,还需要有一定数量的负样本。通常样本越多越好,但不是绝对的。
设样本数为S
3) ROI提取
对所有样本中的可能包含目标的区域(比如车辆区域)手动或自动提取出来,此时包括正样本中的目标区域,也包括负样本中类似车辆特征的区域或者说干扰区域。
4) ROI预处理
包括背景去除,图像滤波,或者是边缘增强,二值化等预处理。预处理的方法视特征的选取而定。
5) 特征向量确定
描述一个目标,打算用什么特征,用几个特征,给出每个特征的标示方法以及总的特征数,也就是常说的特征向量的维数。
对于车辆识别,可用的特征如:车辆区域的灰度均值、灰度方差、对称性、信息熵、傅里叶描述子等等。
设特征向量的维数是L。
6) 特征提取
确定采取的特征向量之后,对样本集中所有经过预处理之后的ROI区域进行特征提取,也就是说计算每个ROI区域的所有特征值,并将其保存。
7) 特征向量的归一化
常用的归一化方法是:先对相同的特征(每个特征向量分别归一化)进行排序,然后根据特征的最大值和最小值重新计算特征值。
8) 核的选定
SVM的构造主要依赖于核函数的选择,由于不适当的核函数可能会导致很差的分类结果,并且目前尚没有有效的学习使用何种核函数比较好,只能通过实验结果确定采用哪种核函数比较好。训练的目标不同,核函数也会不同。
核函数其实就是采用什么样的模型描述样本中目标特征向量之间的关系。如常用的核函数:Gauss函数
对样本的训练就是计算p矩阵,然后得出描述目标的模板和代表元。
2. 训练
训练就是根据选定的核函数对样本集的所有特征向量进行计算,构造一个使样本可分的特征空间。
其训练步骤如下:
1) 用分类器将所有样本集的特征分类
2) 根据选定的核函数分别计算每个分类器中每个特征向量的有关值
3) 根据这些特征相关值计算协方差矩阵空间
4) 对这个协方差矩阵空间进行Householder变换,也就是说将一个向量变换为由一个超平面反射的镜像,是一种线性变换。超平面的法向量被称作Householder向量。因为SVM就是在特征空间中构造最优超平面。
具体变换方法可参照相关文章。里面涉及大量的矩阵运算。
5) 计算特征系数
得到协方差矩阵以及其对应的超平面矩阵,根据这两个矩阵分别计算每个特征的特征系数,并将特征系数对协方差矩阵进行缩放。
6) 获得模型参数paramInvSigma,paramLogSigma
对缩放后的协方差矩阵paramSigma求逆后,计算模型参数。其计算方法参照程序:
for (i=0; i<numClass; i++)
{
for(j=0; j<size; j++)
{
sigma.pdata[j]= this->paramSigma[i*size+j];
}
sigma.inv(invSigma);
for(j=0; j<size; 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区域进行计算,判断其归类。
比较测试首先是对测试图像进行预处理,然后提取特征,将这些特征参数与训练结果的模型参数进行比对,比对方法可参照文献中介绍的:
得到对应的类别标志:
4. 总结
SVM方法最主要的工作是样本训练,获得训练模型参数。
由于时间关系,暂时只对SVM有这些了解,只能算对SVM有一个初步的认识。并且上述总结都是在阅读文献之后的认识,难免有不少错误和不足,所以本文只能作为一个小参考。在对SVM有个初步的认识之后,需要仔细阅读其原理,分析其中的矩阵运算及思想。SVM中涉及大量的矩阵运算和推导,需要弄清楚,这样才能明白模型参数的含义,以便于判断当前选定的核函数是否合适。
最后
以上就是机智身影为你收集整理的支持向量机(svm)新手入门篇的全部内容,希望文章能够帮你解决支持向量机(svm)新手入门篇所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复