微波EDA网,见证研发工程师的成长!
首页 > 硬件设计 > 硬件工程师文库 > 了解基于FastCV视觉库的SVM机器学习算法

了解基于FastCV视觉库的SVM机器学习算法

时间:02-08 来源:互联网 点击:

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

Copyright © 2017-2020 微波EDA网 版权所有

网站地图

Top