了解基于FastCV视觉库的SVM机器学习算法
扫描二维码
随时随地手机看文章
SVM是一种常用的机器学习算法,在人工智能、模式识别、图像识别等领域有着非常广泛的应用,本节将结合FastCV库提供的fcvSVMPredict2Classf32机器学习函数API,对SVM原理及用法进行介绍,为后续大家在使用FastCV进行图像识别类的应用开发提供参考。
一、FastCV简介FastCV是Qualcomm公司开发提供的专注于移动平台的计算机视觉库(Computer vision library),该库针对ARM平台进行设计,并且针对Qualcomm处理器进行了优化,相对于OpenCV和JavaCv其性能有了大幅度的提高,非常适合移动设备各种图像处理,如三维重建、目标跟踪、人脸识别等。
FastCV提供的API结构如下图1所示,根据其提供的功能分类主要包括数学/适量运算、图像处理、图像变换、特征检测、对象检测、三维重建、色彩转换、聚类和搜索、运动和对象跟踪、形状和绘图、内存管理和SVM机器学习13个部分,通过fastcv提供的这些API接口你可以方便的完成各种图像处理应用的设计。极大的简化的设计过程,提高程序的稳定性和可靠性。后续将针对fastcv提供的SVM机器学习进行详细介绍。
图1 fastCV功能结构
二、SVM机器学习基本原理支持向量机,因其英文名为support vector machine,故一般简称SVM,通俗来讲,它是一种二类分类模型,其基本模型定义为特征空间上的间隔最大的线性分类器,其学习策略便是间隔最大化,最终可转化为一个凸二次规划问题的求解。具体的SVM的原理是非常深奥的,其涉及到的数学理论非常多,并且通常还需要涉及到多维空间,从存粹的数学理论很难理解SVM的基本原理,并且介绍SVM的数学原理的内容也非常多(如http://www.dataguru.cn/thread-371987-1-1.html就对SVM的原理进行了详细介绍),这里将通过一个经典的SVM分类例子来向大家介绍SVM的基本原理。
假设现在你是一个农场主,圈养了一批羊群,但为预防狼群袭击羊群,你需要搭建一个篱笆来把羊群围起来。但是篱笆应该建在哪里呢?你很可能需要依据牛群和狼群的位置建立一个“分类器”,比较下图这几种不同的分类器,我们可以看到SVM完成了一个很完美的解决方案,如下图2所示,这就是景点的SVM分类原理。
图2 农场主搭建篱笆SVM经典例子示意图
三、fastCV中SVM接口参数解析在fastCV中提供了SVM方法调用API接口,通过调用该接口可以方便的实现SVM学习功能,起API函数原型如下:
FASTCV_API fcvStatus fcvSVMPredict2Classf32( fcvSVMKernelType kernelType,
uint32_tdegree,
float32_tgamma,
float32_tcoef0,
const float32_t *__restrictsv,
uint32_tsvLen,
uint32_tsvNum,
uint32_tsvStride,
const float32_t *__restrictsvCoef,
float32_trho,
const float32_t *__restrictvec,
uint32_tvecNum,
uint32_tvecStride,
float32_t *__restrictconfidence
)
该函数返回通过SVM学习策略计算得到的当前样本的置信度,其计算公式如下(同时该值还可以通过libSVM和OpenCV提供的SVM训练得到):
confidence(i) = sum_j( svCoef[j] * Kernel(vec_i, sv_j) - rho;
为了学会调用该函数,就需要了解上述函数的各个参数的意义及具体的设置方法,以下是上述参数的意义和设置方法总结:
kernelType:核函数类型这里可以选择 ‘FASTCV_SVM_LINEAR’,‘FASTCV_SVM_POLY’,‘FASTCV_SVM_RBF’,‘FASTCV_SVM_SIGMOID’等;
degree: 设置核函数的深度,为整数,通常设置为3;
gamma:核函数中的gamma函数设置(针对多项式/rbf/sigmoid核函数)(默认1/ k);
coef0:核函数中的coef0设置(针对多项式/sigmoid核函数)((默认0);
sv :支持特征向量;
svLen: 特征长度, (support vector length = feature length)。
svNum: 支持特征向量个数
svStride:支持向量跨度 ;
svCoef: sv系数,长度设置为sv个数 ;
rho SVM 偏置参数;
vec 检测向量;
vecNum 检测向量个数;
vecStride 监测向量跨度;
以上就是fastCV中提供的SVM接口介绍,在后续章节将进一步结合图像处理,来带大家用SVM来实现相关的分类和图片识别,大家如果想进一步了解更多的关于fastcv库的内容可以访问Qualcomm的https://developer.qualcomm.com/docs/fastcv/api/index.html网站查阅更多信息。