Fastcv——机器学习SVM初识

来源:互联网 发布:扫描服务器开放的端口 编辑:程序博客网 时间:2024/06/15 19:44

      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网站查阅更多信息。

0 0