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