劉妙閣
摘要:隨著嵌入式設(shè)備智能化水平不斷提高,人和設(shè)備交互方式也多樣化,手勢就是其中一種新的更自然的人和設(shè)備交互方式。實現(xiàn)有效的手勢識別系統(tǒng)具有實際意義。分類算法的選擇對手勢識別性能有重要影響,本文選擇改進SVM算法作為識別算法。SVM算法相比神經(jīng)網(wǎng)絡(luò)算法具有更好的泛化性能。但原始SVM算法直接作為手勢的分類算法還是無法滿足應(yīng)用需求,所以本文提出了改進SVM算法。經(jīng)過實驗驗證了改進算法比原算法有更快的訓(xùn)練、識別速度。
關(guān)鍵詞:手勢識別 支持向量機 嵌入式系統(tǒng)
中圖分類號:TN912 文獻標(biāo)識碼:A 文章編號:1007-9416(2016)05-0000-00
手勢識別的分類器選擇對識別性能有較大影響,選擇好的分類器才能達到較好的識別準(zhǔn)確率。SVM算法(SVM,Support Vector Machine)是基于統(tǒng)計學(xué)習(xí)理論的分類算法[1],SVM相對較早的神經(jīng)網(wǎng)絡(luò)等分類算法有更好的泛化性能,本論文選擇它作為分類算法。SVM算法一般運行在PC機或服務(wù)器,將整個SVM算法在嵌入式平臺實現(xiàn)有很多問題要解決。本文針對手勢識別應(yīng)用,改進SVM算法,然后將算法以C++庫的形式提供給手勢識別應(yīng)用程序。
1 系統(tǒng)設(shè)計
本文實驗使用的嵌入式平臺是飛凌的OK6410開發(fā)板,處理器采用的是SAMSUNG公司的基于ARM11的S3C6410芯片,采用USB攝像頭ZC301采集視頻圖像。SVM算法是智能算法,與模板匹配等分類算法相比有自身獨有的學(xué)習(xí)能力。為了縮短識別時間,提高實時性,本文手勢識別的過程在使用簡單的膚色模型分割出膚色區(qū)域后直接提取特征訓(xùn)練SVM分類器,省去了預(yù)處理等步驟。
2 改進SVM手勢識別算法
2.1樣本子集篩選
SVM算法適用于小規(guī)模訓(xùn)練樣本集,較大的樣本集會降低運算速度,占用較大內(nèi)存空間。SVM模型訓(xùn)練時所需存儲空間與訓(xùn)練樣本數(shù)的平方成正比,時間復(fù)雜度與訓(xùn)練樣本數(shù)的立方成正比[2]。
為獲得分類模型,不總是需要提供完整的訓(xùn)練集,因為訓(xùn)練集中有噪聲樣本和不影響分類模型的樣本,尤其當(dāng)使用SVM作為分類器時。SVM算法尋求最大間隔超平面將兩類樣本分開,訓(xùn)練得到的模型只需要少部分樣本(支持向量)信息,這些樣本分布在特征空間中同類樣本集合的邊緣,去掉位于其它位置的樣本得到的模型是一樣的?;谶@一點,本文首先對正負(fù)樣本分別進行聚類,得到若干集合,然后去掉集合內(nèi)部的樣本,保留集合邊緣附近的樣本構(gòu)成訓(xùn)練樣本子集。首先對正負(fù)樣本分別進行聚類,得到若干集合。 K均值聚類等劃分類型的聚類算法都存在一個問題,就是k值的選取需要花費時間。為了減少訓(xùn)練時間,本文采用無需選取參數(shù)的層次聚類,聚類完成后去除每個集合內(nèi)部樣本。
2.2 SVM核函數(shù)選擇
SVM核函數(shù)的選擇對于算法的性能有較大影響[3],目前核函數(shù)的選擇還沒有很強的規(guī)律可循,可以通過對比不同核函數(shù)的SVM分類各方面性能(如錯誤率和支持向量個數(shù))來選擇最適用的核函數(shù)。常用的核函數(shù)有多項式核函數(shù)、徑向基核函數(shù)、sigmoid核函數(shù)。
近些年也有較多新的核函數(shù)被提出像切比雪夫核函數(shù),小波核函數(shù)等新的核函數(shù)。切比雪夫核是用于標(biāo)量值的標(biāo)準(zhǔn)核。一種構(gòu)成新核函數(shù)的方法是混合現(xiàn)有的核函數(shù),但是需要注意不能增加過多參數(shù),否則會降低訓(xùn)練速度。徑向基核函數(shù)的參數(shù)只有一個,而且經(jīng)對比它是常用核函數(shù)中應(yīng)用于手勢識別性能最好的核函數(shù)。本文將切比雪夫核函數(shù)、小波核函數(shù)和徑向基核函數(shù)結(jié)合,產(chǎn)生新的核函數(shù),將兩個核函數(shù)相乘得到的核函數(shù)一般有兩個核函數(shù)的特性和優(yōu)點,對比新的混合核函數(shù)和單一核函數(shù)的性能,選取性能最佳的核函數(shù)。
對比實驗結(jié)果表明徑向基核函數(shù)和切比雪夫核函數(shù)混合成的核函數(shù)有最低錯誤率和最少支持向量數(shù),說明它是手勢識別應(yīng)用的最適合的核函數(shù),所以本文選其作為核函數(shù)。
3 實驗結(jié)果及分析
本系統(tǒng)選擇Linux作為嵌入式操作系統(tǒng),界面設(shè)計基于當(dāng)前流行的android實現(xiàn)。由于手勢識別算法的運算量較大,所以適合用執(zhí)行效率高的C/C++語言而不是JAVA實現(xiàn)。SVM算法的訓(xùn)練和預(yù)測均用到了浮點數(shù),一般嵌入式系統(tǒng)并不支持浮點運算。如果在嵌入式系統(tǒng)中采用軟浮點運算,運算速度會大大降低,不能滿足實時性要求。為加快手勢識別算法在嵌入式系統(tǒng)的運行速度,本文將浮點運算轉(zhuǎn)化為定點運算。然后將改進SVM的C++算法源程序編譯成.so庫文件,將生成的.so庫文件拷貝到工程根目錄 /libs/armeabi/中,android應(yīng)用程序就可以調(diào)用庫文件中函數(shù)。程序分成手勢圖像樣本采集,分類模型訓(xùn)練和手勢識別三部分。實驗結(jié)果表明系統(tǒng)能較好地識別出手勢代表的數(shù)字,光照條件的變化和手的旋轉(zhuǎn)對手勢識別的影響較小。
本文對比了基于SVM算法和本文提出的改進SVM算法兩種分類器的手勢識別程序在嵌入式系統(tǒng)中的性能如表1。
從表中可以看出改進SVM算法在識別準(zhǔn)確率,訓(xùn)練時間和測試時間上都比原始SVM算法要好。實驗結(jié)果驗證了本文提出的SVM手勢識別算法的可行性。
4 結(jié)語
本文對SVM算法的改進包括:
(1)篩選訓(xùn)練樣本子集,減少訓(xùn)練時間。
(2)采用切比雪夫-徑向基混合核函數(shù)作為手勢識別SVM算法的核函數(shù)。
(3)采用定點運算代替浮點運算,以較小的代價換取了更快的運算速度。
最后對比了基于不同分類算法的嵌入式手勢識別系統(tǒng)的性能,驗證了本文提出的改進SVM手勢識別算法的可行性。
參考文獻
[1] 李航.統(tǒng)計學(xué)習(xí)方法[M].北京:清華大學(xué)出版社,2012:95.
[2] Ha M, Wang C, Chen J.The support vector machine based on intuitionistic fuzzy number and kernel function[J].Soft Computing,2013,17(4):635-641.