關(guān) 閉

新聞中心

EEPW首頁(yè) > 工控自動(dòng)化 > 設(shè)計(jì)應(yīng)用 > 了解基于FastCV視覺(jué)庫(kù)的SVM機(jī)器學(xué)習(xí)算法

了解基于FastCV視覺(jué)庫(kù)的SVM機(jī)器學(xué)習(xí)算法

作者: 時(shí)間:2017-10-22 來(lái)源:網(wǎng)絡(luò) 收藏

是一種常用的算法,在人工智能、模式識(shí)別、圖像識(shí)別等領(lǐng)域有著非常廣泛的應(yīng)用,本節(jié)將結(jié)合庫(kù)提供的fcvPredict2Classf32函數(shù)API,對(duì)原理及用法進(jìn)行介紹,為后續(xù)大家在使用進(jìn)行圖像識(shí)別類(lèi)的應(yīng)用開(kāi)發(fā)提供參考。

本文引用地址:http://m.butianyuan.cn/article/201710/367555.htm

一、簡(jiǎn)介

FastCV是Qualcomm公司開(kāi)發(fā)提供的專注于移動(dòng)平臺(tái)的計(jì)算機(jī)視覺(jué)庫(kù)(Computer vision library),該庫(kù)針對(duì)ARM平臺(tái)進(jìn)行設(shè)計(jì),并且針對(duì)Qualcomm處理器進(jìn)行了優(yōu)化,相對(duì)于OpenCV和JavaCv其性能有了大幅度的提高,非常適合移動(dòng)設(shè)備各種圖像處理,如三維重建、目標(biāo)跟蹤、人臉識(shí)別等。

FastCV提供的API結(jié)構(gòu)如下圖1所示,根據(jù)其提供的功能分類(lèi)主要包括數(shù)學(xué)/適量運(yùn)算、圖像處理、圖像變換、特征檢測(cè)、對(duì)象檢測(cè)、三維重建、色彩轉(zhuǎn)換、聚類(lèi)和搜索、運(yùn)動(dòng)和對(duì)象跟蹤、形狀和繪圖、內(nèi)存管理和SVM13個(gè)部分,通過(guò)fastcv提供的這些API接口你可以方便的完成各種圖像處理應(yīng)用的設(shè)計(jì)。極大的簡(jiǎn)化的設(shè)計(jì)過(guò)程,提高程序的穩(wěn)定性和可靠性。后續(xù)將針對(duì)fastcv提供的SVM機(jī)器學(xué)習(xí)進(jìn)行詳細(xì)介紹。

圖1 fastCV功能結(jié)構(gòu)

二、SVM機(jī)器學(xué)習(xí)基本原理

支持向量機(jī),因其英文名為support vector machine,故一般簡(jiǎn)稱SVM,通俗來(lái)講,它是一種二類(lèi)分類(lèi)模型,其基本模型定義為特征空間上的間隔最大的線性分類(lèi)器,其學(xué)習(xí)策略便是間隔最大化,最終可轉(zhuǎn)化為一個(gè)凸二次規(guī)劃問(wèn)題的求解。具體的SVM的原理是非常深?yuàn)W的,其涉及到的數(shù)學(xué)理論非常多,并且通常還需要涉及到多維空間,從存粹的數(shù)學(xué)理論很難理解SVM的基本原理,并且介紹SVM的數(shù)學(xué)原理的內(nèi)容也非常多(如http://www.dataguru.cn/thread-371987-1-1.html就對(duì)SVM的原理進(jìn)行了詳細(xì)介紹),這里將通過(guò)一個(gè)經(jīng)典的SVM分類(lèi)例子來(lái)向大家介紹SVM的基本原理。

假設(shè)現(xiàn)在你是一個(gè)農(nóng)場(chǎng)主,圈養(yǎng)了一批羊群,但為預(yù)防狼群襲擊羊群,你需要搭建一個(gè)籬笆來(lái)把羊群圍起來(lái)。但是籬笆應(yīng)該建在哪里呢?你很可能需要依據(jù)牛群和狼群的位置建立一個(gè)“分類(lèi)器”,比較下圖這幾種不同的分類(lèi)器,我們可以看到SVM完成了一個(gè)很完美的解決方案,如下圖2所示,這就是景點(diǎn)的SVM分類(lèi)原理。

圖2 農(nóng)場(chǎng)主搭建籬笆SVM經(jīng)典例子示意圖

三、fastCV中SVM接口參數(shù)解析

在fastCV中提供了SVM方法調(diào)用API接口,通過(guò)調(diào)用該接口可以方便的實(shí)現(xiàn)SVM學(xué)習(xí)功能,起API函數(shù)原型如下:

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

該函數(shù)返回通過(guò)SVM學(xué)習(xí)策略計(jì)算得到的當(dāng)前樣本的置信度,其計(jì)算公式如下(同時(shí)該值還可以通過(guò)libSVM和OpenCV提供的SVM訓(xùn)練得到):

confidence(i) = sum_j( svCoef[j] * Kernel(vec_i, sv_j) - rho;

為了學(xué)會(huì)調(diào)用該函數(shù),就需要了解上述函數(shù)的各個(gè)參數(shù)的意義及具體的設(shè)置方法,以下是上述參數(shù)的意義和設(shè)置方法總結(jié):

kernelType:核函數(shù)類(lèi)型這里可以選擇 ‘FASTCV_SVM_LINEAR’,‘FASTCV_SVM_POLY’,‘FASTCV_SVM_RBF’,‘FASTCV_SVM_SIGMOID’等;

degree: 設(shè)置核函數(shù)的深度,為整數(shù),通常設(shè)置為3;

gamma:核函數(shù)中的gamma函數(shù)設(shè)置(針對(duì)多項(xiàng)式/rbf/sigmoid核函數(shù))(默認(rèn)1/ k);

coef0:核函數(shù)中的coef0設(shè)置(針對(duì)多項(xiàng)式/sigmoid核函數(shù))((默認(rèn)0);

sv :支持特征向量;

svLen: 特征長(zhǎng)度, (support vector length = feature length)。

svNum: 支持特征向量個(gè)數(shù)

svStride:支持向量跨度 ;

svCoef: sv系數(shù),長(zhǎng)度設(shè)置為sv個(gè)數(shù) ;

rho SVM 偏置參數(shù);

vec 檢測(cè)向量;

vecNum 檢測(cè)向量個(gè)數(shù);

vecStride 監(jiān)測(cè)向量跨度;

以上就是fastCV中提供的SVM接口介紹,在后續(xù)章節(jié)將進(jìn)一步結(jié)合圖像處理,來(lái)帶大家用SVM來(lái)實(shí)現(xiàn)相關(guān)的分類(lèi)和圖片識(shí)別,大家如果想進(jìn)一步了解更多的關(guān)于fastcv庫(kù)的內(nèi)容可以訪問(wèn)Qualcomm的https://developer.qualcomm.com/docs/fastcv/api/index.html網(wǎng)站查閱更多信息。



評(píng)論


相關(guān)推薦

技術(shù)專區(qū)

關(guān)閉