了解基于FastCV視覺(jué)庫的SVM機器學(xué)習算法
SVM是一種常用的機器學(xué)習算法,在人工智能、模式識別、圖像識別等領(lǐng)域有著(zhù)非常廣泛的應用,本節將結合FastCV庫提供的fcvSVMPredict2Classf32機器學(xué)習函數API,對SVM原理及用法進(jìn)行介紹,為后續大家在使用FastCV進(jìn)行圖像識別類(lèi)的應用開(kāi)發(fā)提供參考。
本文引用地址:http://dyxdggzs.com/article/201710/367555.htm一、FastCV簡(jiǎn)介
FastCV是Qualcomm公司開(kāi)發(fā)提供的專(zhuān)注于移動(dòng)平臺的計算機視覺(jué)庫(Computer vision library),該庫針對ARM平臺進(jìn)行設計,并且針對Qualcomm處理器進(jìn)行了優(yōu)化,相對于OpenCV和JavaCv其性能有了大幅度的提高,非常適合移動(dòng)設備各種圖像處理,如三維重建、目標跟蹤、人臉識別等。
FastCV提供的API結構如下圖1所示,根據其提供的功能分類(lèi)主要包括數學(xué)/適量運算、圖像處理、圖像變換、特征檢測、對象檢測、三維重建、色彩轉換、聚類(lèi)和搜索、運動(dòng)和對象跟蹤、形狀和繪圖、內存管理和SVM機器學(xué)習13個(gè)部分,通過(guò)fastcv提供的這些API接口你可以方便的完成各種圖像處理應用的設計。極大的簡(jiǎn)化的設計過(guò)程,提高程序的穩定性和可靠性。后續將針對fastcv提供的SVM機器學(xué)習進(jìn)行詳細介紹。
圖1 fastCV功能結構
二、SVM機器學(xué)習基本原理
支持向量機,因其英文名為support vector machine,故一般簡(jiǎn)稱(chēng)SVM,通俗來(lái)講,它是一種二類(lèi)分類(lèi)模型,其基本模型定義為特征空間上的間隔最大的線(xiàn)性分類(lèi)器,其學(xué)習策略便是間隔最大化,最終可轉化為一個(gè)凸二次規劃問(wèn)題的求解。具體的SVM的原理是非常深奧的,其涉及到的數學(xué)理論非常多,并且通常還需要涉及到多維空間,從存粹的數學(xué)理論很難理解SVM的基本原理,并且介紹SVM的數學(xué)原理的內容也非常多(如http://www.dataguru.cn/thread-371987-1-1.html就對SVM的原理進(jìn)行了詳細介紹),這里將通過(guò)一個(gè)經(jīng)典的SVM分類(lèi)例子來(lái)向大家介紹SVM的基本原理。
假設現在你是一個(gè)農場(chǎng)主,圈養了一批羊群,但為預防狼群襲擊羊群,你需要搭建一個(gè)籬笆來(lái)把羊群圍起來(lái)。但是籬笆應該建在哪里呢?你很可能需要依據牛群和狼群的位置建立一個(gè)“分類(lèi)器”,比較下圖這幾種不同的分類(lèi)器,我們可以看到SVM完成了一個(gè)很完美的解決方案,如下圖2所示,這就是景點(diǎn)的SVM分類(lèi)原理。
圖2 農場(chǎng)主搭建籬笆SVM經(jīng)典例子示意圖
三、fastCV中SVM接口參數解析
在fastCV中提供了SVM方法調用API接口,通過(guò)調用該接口可以方便的實(shí)現SVM學(xué)習功能,起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
)
該函數返回通過(guò)SVM學(xué)習策略計算得到的當前樣本的置信度,其計算公式如下(同時(shí)該值還可以通過(guò)libSVM和OpenCV提供的SVM訓練得到):
confidence(i) = sum_j( svCoef[j] * Kernel(vec_i, sv_j) - rho;
為了學(xué)會(huì )調用該函數,就需要了解上述函數的各個(gè)參數的意義及具體的設置方法,以下是上述參數的意義和設置方法總結:
kernelType:核函數類(lèi)型這里可以選擇 ‘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: 特征長(cháng)度, (support vector length = feature length)。
svNum: 支持特征向量個(gè)數
svStride:支持向量跨度 ;
svCoef: sv系數,長(cháng)度設置為sv個(gè)數 ;
rho SVM 偏置參數;
vec 檢測向量;
vecNum 檢測向量個(gè)數;
vecStride 監測向量跨度;
以上就是fastCV中提供的SVM接口介紹,在后續章節將進(jìn)一步結合圖像處理,來(lái)帶大家用SVM來(lái)實(shí)現相關(guān)的分類(lèi)和圖片識別,大家如果想進(jìn)一步了解更多的關(guān)于fastcv庫的內容可以訪(fǎng)問(wèn)Qualcomm的https://developer.qualcomm.com/docs/fastcv/api/index.html網(wǎng)站查閱更多信息。
評論