刁艷俠,吳 浩
(康佳集團(tuán)股份有限公司,廣東 深圳 518000)
智能電視作為智能家居的重要載體,已經(jīng)逐步開啟全面智能化的發(fā)展進(jìn)程。對于智能電視來說,傳統(tǒng)的遙控器操作不夠便捷,語音操控雖然在搜索媒資時非常便捷,但是受制于用戶群體和使用場景等因素的影響,并不能完美覆蓋智能電視的各種應(yīng)用場景,手勢操控因為靈活便捷又不受環(huán)境噪音等影響,成為人與智能電視交互的一種很好的補充方式。本文就從手勢識別的基礎(chǔ)技術(shù)原理出發(fā),介紹在智能電視硬件性能受限的情況下如何做手勢識別算法設(shè)計,以及手勢識別的基本流程。
手勢的分類方法有很多種,最常見的是根據(jù)空間特性來將手勢分為靜態(tài)手勢和動態(tài)手勢。靜態(tài)手勢強調(diào)的是某個時間點的手形、與身體的相對位置以及方向,動態(tài)手勢則強調(diào)手的動作過程。
最早的手勢識別是通過設(shè)備“數(shù)據(jù)手套”完成的[1],通過利用傳感器等設(shè)備直接來檢測人手和各個關(guān)節(jié)的位置信息來識別手勢。雖然有較高的穩(wěn)定性和準(zhǔn)確性,但可識別的手勢較少,檢測的限制也較多。另一種手勢識別的方式——基于視覺的手勢識別方式則是根據(jù)攝像頭采集到的數(shù)據(jù),通過計算機處理后對手勢進(jìn)行識別的。其優(yōu)點在于交互操作更加便捷,而且隨著電子設(shè)備上攝像頭的推廣,手勢識別的硬件門檻更低。
基于視覺的手勢識別系統(tǒng)由手勢輸入、圖像預(yù)處理、手勢檢測及分割、手勢分析及手勢識別等組成,系統(tǒng)框架如圖1所示。
圖1 基于視覺的手勢識別系統(tǒng)框架
用戶手勢通過攝像頭獲取圖像輸入后,需要進(jìn)行預(yù)處理。預(yù)處理的目的是提升畫面質(zhì)量、去除噪聲,以便更好地進(jìn)行手勢識別。常用的圖像預(yù)處理方法有去噪化、銳化處理等。
手勢檢測是識別的前提。通過手勢檢測來分辨圖像中是否存在手勢和手勢的空間位置,來識別視頻流圖像中的手勢目標(biāo)。若存在手勢,就需要進(jìn)行手勢分割,將手勢從背景中分割出來。常用的手勢檢測方法分為基于運動信息和基于表觀特征的檢測兩種?;谶\動信息的檢測方式利用手勢與背景的差異來實現(xiàn)手部動作的跟蹤,如光流法[2]?;诒碛^特征的檢測方式常用膚色、手型和輪廓等特征來分割手勢,其中最常用的特征是膚色,如通過YUV顏色空間[3]或是人體膚色的聚類特性[4]來進(jìn)行手勢分割。此方法雖然排除了手的形狀的干擾,但是更容易受到如光照等外界環(huán)境的干擾。實際的技術(shù)落地中,環(huán)境往往非常復(fù)雜,單一方法難以往往難以應(yīng)付,所以實際使用時最常見的做法是采取將多種特征融合的方式進(jìn)行檢測分割,如結(jié)合膚色和運動檢測技術(shù)設(shè)計分割算法[5],可以克服單一標(biāo)準(zhǔn)分割的局限性。此外,通過識別深度信息也是一個克服復(fù)雜環(huán)境的常用方法,例如,談家譜等[6]、王松林[7]基于微軟公司開發(fā)的Kinect設(shè)備通過深度信息改善了手勢識別的效果。但是這種方法需要能識別深度信息的硬件支持,在實際落地過程中存在成本壓力。
手勢建模是手勢識別過程中最重要的步驟之一。只有模型足夠高效精確,才能保證識別的準(zhǔn)確率。對于靜態(tài)的手勢識別,需要基于表觀特征來建立手勢模型。常見的建模方式有基于運動參數(shù)、基于圖像特征、基于可變性模板和基于灰度圖來建模。對于動態(tài)手勢而言,需要基于三維模型來建立手勢模型。常見的建模方式有三維骨架模型、網(wǎng)絡(luò)模型、紋理模型和幾何模型。
手勢分析是根據(jù)手勢模型來分析手勢,獲取手勢的特征值。特征提取是在手勢分割的基礎(chǔ)上提取手勢的關(guān)鍵特征。根據(jù)分割的結(jié)果得到手勢邊緣,進(jìn)而得到手勢形狀,具體的特征有邊緣、手指的位置和方向等。
手勢識別是基于手勢分析的結(jié)果,進(jìn)行手勢軌跡空間分類的過程。手勢分為靜態(tài)和動態(tài)兩種,其中靜態(tài)對應(yīng)的是模型參數(shù)中的一個點,動態(tài)手勢對應(yīng)的則是一個軌跡。靜態(tài)手勢的識別的常用算法是模板匹配和BP神經(jīng)網(wǎng)絡(luò)等。動態(tài)手勢則適合用1968年提出的HMM模型[8]等。
通過設(shè)計計算機視覺算法實現(xiàn)識別OK手勢、手槍手勢、拇指向上、拇指向下、拇指向左、拇指向右,以及拳頭左滑和拳頭右滑8種手勢,分別實現(xiàn)確認(rèn)、返回、上下左右移動和加減音量的功能;并將算法移植到Hi3516DV300上,從而實現(xiàn)通過手勢控制電視完成相應(yīng)的功能。另外,算法移植到芯片上,單人單任務(wù)速度不大于30 ms。
按實現(xiàn)功能的方式分類,實現(xiàn)設(shè)計目標(biāo)的算法設(shè)計思路有以下三種。
(1)采用3D ConvNet對連續(xù)的圖像序列建模進(jìn)行手勢判斷,進(jìn)而進(jìn)行連續(xù)的動作識別。對檢測到的手勢圖像序列進(jìn)行手勢動作識別,同樣可以采用3D ConNet或者LSTM Net對連續(xù)的圖像序列構(gòu)建動作模型,對連續(xù)的手勢圖像序列做最終的手勢動作判別。
(2)對視頻圖像序列先進(jìn)行手部骨架關(guān)鍵點定位,然后對提取到的手部關(guān)鍵點進(jìn)行關(guān)聯(lián)計算,來對各種手勢進(jìn)行識別判斷。
(3)采用目標(biāo)檢測的思想,通過設(shè)計2D ConvNet,直接對圖像序列存在的手部檢測與手勢分類實現(xiàn)靜態(tài)手勢識別、連續(xù)多幀位置關(guān)系判斷,實現(xiàn)動態(tài)手勢識別。
從數(shù)據(jù)標(biāo)注的周期、制作的難易程度以及算法最終需要移植到中低端算力有限的芯片上考慮,本文設(shè)計的算法主要采用目標(biāo)檢測的方式實現(xiàn)手勢識別功能。
根據(jù)芯片的實際性能參數(shù),在設(shè)計算法模型時設(shè)定了以下原則:在設(shè)計網(wǎng)絡(luò)結(jié)構(gòu)時,盡量采用芯片可以支持的算子;盡量采用輕量級的網(wǎng)絡(luò)結(jié)構(gòu),因為過深的網(wǎng)絡(luò)結(jié)構(gòu)會導(dǎo)致芯片的處理速度變慢;謹(jǐn)慎使用分組卷積。
訓(xùn)練數(shù)據(jù)集的手勢類別總共8類,即OK手勢、手槍手勢、拇指向上手勢、拇指向下手勢、拇指向左手勢、拇指向右手勢、拳頭手勢以及負(fù)樣本手勢(除上述以外的手勢)。數(shù)據(jù)場景主要是四個不同室內(nèi)場景,包含不同距離(人離攝像頭距離)、不同高度(攝像頭距離地面高度)、不同光照以及不同人,數(shù)據(jù)格式包括視頻數(shù)據(jù)和靜態(tài)圖像數(shù)據(jù)。
2.4.1 YOLOv4-tiny檢測模型設(shè)計
YOLOv4-tiny主干網(wǎng)絡(luò)主要由CBL以及CSP網(wǎng)絡(luò)結(jié)構(gòu)組成。CBL具體是由卷積層、BN層和激活層(LeakyRelu)組成。CSP是一個類似殘差結(jié)構(gòu),由若干個CBL塊組成。
考慮到算法移植和最終板端的速度問題,設(shè)計模型時主要做了如下幾個部分的改進(jìn)。
(1)CBL模塊中l(wèi)eakyRelu激活函數(shù)改成relu激活函數(shù),板端實驗驗證leakyRelu激活函數(shù)耗時要比relu激活函數(shù)耗時多。
(2)原始基于最近鄰插值算法上采樣層改成轉(zhuǎn)置卷積層,原因是由于HI3516上不支持最近鄰插值算法的上采樣層。
(3)考慮到原始網(wǎng)絡(luò)輸入416×416相對于1 920×1 080這樣大的分辨率圖像而言,手部所占原始圖片相對比較小,網(wǎng)絡(luò)模型檢測手勢這種小目標(biāo)難度有點大,故網(wǎng)絡(luò)輸入采用的是512×512大小。而網(wǎng)絡(luò)輸入的增大也會帶來計算量的增加,在板端就無法滿足速度需求。
2.4.2 YOLOv4-tiny網(wǎng)絡(luò)模型壓縮方法
具體融合方案如下。
(1)卷積層,進(jìn)行卷積處理:
式中:x代表輸入數(shù)值,w代表權(quán)重,b代表偏差。
BN層,對數(shù)據(jù)做歸一化處理,作用是加快模型訓(xùn)練時的收斂速度,使得模型訓(xùn)練過程更加穩(wěn)定:
式中:γ,β代表可訓(xùn)練參數(shù)。
為了加快運算速度,先對公式進(jìn)行融合,將Conv層的公式代入BN層的公式得到:
融合后的新層的權(quán)重與偏差是:
2.4.3 瞄點框anchor設(shè)置
YOLOv4-tiny檢測網(wǎng)絡(luò)采用兩個檢測層,每個檢測層有3組瞄點框,總共有6組瞄點框。六組瞄點框是通過訓(xùn)練集利用聚類算法聚類而來。本算法通過聚類得到的瞄點框大小是[9,25 10,33 13,28 14,38 19,45 19,18]。
本網(wǎng)絡(luò)模型算法主要用到的訓(xùn)練策略包括數(shù)據(jù)預(yù)處理、數(shù)據(jù)增強、調(diào)整學(xué)習(xí)率下降策略以及修改loss損失函數(shù)。
(1)數(shù)據(jù)預(yù)處理。按照寬高縱橫比例進(jìn)行縮放,將原始1 920×1 080的圖像縮放至512×512大小,這樣保證縮放后的圖像不會產(chǎn)生畸變。
(2)數(shù)據(jù)增強。為了提高模型的魯棒性以及模型的泛化能力,訓(xùn)練過程采用了如下幾種方法:對圖像隨機添加噪聲以及模糊,對圖像隨機進(jìn)行裁剪以及平移,對圖像隨機旋轉(zhuǎn)。
(3)loss損失函數(shù)的調(diào)整。考慮到數(shù)據(jù)集手勢數(shù)據(jù)樣本不平衡的問題,在設(shè)計類別損失函數(shù)時,將原有的交叉熵?fù)p失替換為focal loss損失。
(4)學(xué)習(xí)率下降策略的調(diào)整。固定的學(xué)習(xí)率往往讓模型訓(xùn)練性能達(dá)不到最優(yōu)的效果,因此在設(shè)置學(xué)習(xí)時,采用等間隔調(diào)整學(xué)習(xí)率的策略,逐步減小學(xué)習(xí)率,提升訓(xùn)練模型性能。
采用跟蹤算法對手勢賦予一個ID號,以判別所做手勢的先后順序,從而確定誰的手做出的手勢先控制電視完成相應(yīng)的動作。考慮到移植到板端的速度,手勢跟蹤算法采用傳統(tǒng)的(sort)跟蹤算法。
上述手勢識別分為靜態(tài)手勢識別與動態(tài)手勢識別兩種,其中OK手勢、手槍手勢及拇指向上/下/左/右為靜態(tài)手勢識別,拳頭左滑、拳頭右滑為動態(tài)手勢識別。下面分別介紹兩種手勢識別的具體流程。
2.7.1 靜態(tài)手勢識別
靜態(tài)手勢主要是通過對一段手勢視頻序列進(jìn)行手勢類別識別,統(tǒng)計這段視頻序列中分?jǐn)?shù)最高的某種手勢,判定為這段視頻序列的最終手勢輸出。靜態(tài)手勢識別的具體流程如圖2所示。
圖2 靜態(tài)手勢識別流程圖
2.7.2 動態(tài)手勢識別
動態(tài)手勢識別主要通過檢測配合跟蹤的思想,通過前后幀的位置關(guān)系判斷上下左右方向,從而實現(xiàn)動態(tài)手勢識別,其流程如圖3所示。
圖3 動態(tài)手勢識別流程圖
本算法主要在HI3516DV300芯片上進(jìn)行速度指標(biāo)測試。預(yù)期結(jié)果是單人單任務(wù)速度不大于40 ms。實際檢測結(jié)果如表1所示。
表1 Yolov4-tiny算法在HI3516DV300芯片的測試結(jié)果
從表1的測試結(jié)果可以看出,板端推理速度滿足在40 ms內(nèi)的目標(biāo)。
本文介紹了一種視覺手勢識別算法的設(shè)計方案,目的是通過6個靜態(tài)手勢和2個動態(tài)手勢來實現(xiàn)確認(rèn)、返回、上下左右移動和增減音量等基本的電視交互操作。從測試結(jié)果看,手勢識別速度在目標(biāo)芯片上達(dá)到了設(shè)計目標(biāo),為視覺手勢操控在智能電視上的應(yīng)用提供了一種可行方案。