蘇 靜,劉兆峰,王 嫄,馮柯翔,王曉薇
(天津科技大學(xué)人工智能學(xué)院,天津 300457)
計(jì)算機(jī)視覺(jué)技術(shù)正逐步進(jìn)入人們?nèi)粘I睿⑼苿?dòng)著人機(jī)交互領(lǐng)域的升級(jí)和進(jìn)化.基于手勢(shì)的人機(jī)交互中一個(gè)非常重要的環(huán)節(jié)是手勢(shì)識(shí)別.目前已實(shí)現(xiàn)的手勢(shì)識(shí)別算法包括基于模板匹配、基于數(shù)據(jù)手套以及基于隱馬爾科夫模型等.但是,這些算法存在工序復(fù)雜、設(shè)備昂貴、計(jì)算量大等問(wèn)題,導(dǎo)致訓(xùn)練模型的泛化能力差,因此很難達(dá)到實(shí)時(shí)檢測(cè)的目的.基于計(jì)算機(jī)視覺(jué)的手勢(shì)識(shí)別方法可以有效克服傳統(tǒng)方法的弊端,YOLO(you only look once)算法的出現(xiàn),在目標(biāo)檢測(cè)領(lǐng)域取得極佳的檢測(cè)效果[1].
目標(biāo)檢測(cè)是一個(gè)從深度學(xué)習(xí)快速發(fā)展中受益匪淺的領(lǐng)域,近年來(lái)人們實(shí)現(xiàn)了許多目標(biāo)檢測(cè)算法,包括Faster RCNN算法[2]、SSD算法[3]、Mask-RCNN算法[4]和RetinalNet算法等[5].YOLO算法是目標(biāo)檢測(cè)中one-stage的開(kāi)山之作,開(kāi)辟性地將物體檢測(cè)任務(wù)直接作為回歸問(wèn)題處理,直接將候選和檢測(cè)兩個(gè)階段合而為一,“只需要看一眼”就可以知道在每張圖片中有哪些物體以及物體的位置.相較于之前的物體檢測(cè)方法,YOLO算法在保證一定的檢測(cè)準(zhǔn)確率的前提下達(dá)到了實(shí)時(shí)檢測(cè)的速度.
在實(shí)驗(yàn)中將原始版本的YOLOv3算法[6]應(yīng)用于手勢(shì)實(shí)時(shí)識(shí)別領(lǐng)域,雖然可以取得較好的效果,平均準(zhǔn)確率(mAP)達(dá)到96.36%,準(zhǔn)確率為98.06%,但召回率僅為81.59%,在檢測(cè)的精度和速度上還有一定的提升空間,并且由于訓(xùn)練集數(shù)量和GPU顯存的限制,導(dǎo)致訓(xùn)練時(shí)間過(guò)長(zhǎng).
為了解決上述問(wèn)題,本文提出對(duì)YOLOv3算法進(jìn)行改進(jìn):首先,YOLOv3算法中的先驗(yàn)框是利用Kmeans[7]聚類算法在COCO數(shù)據(jù)集預(yù)計(jì)算定義,但由于目標(biāo)檢測(cè)結(jié)果往往需要縮放到原始尺寸,自定義數(shù)據(jù)集中目標(biāo)對(duì)象的尺寸與COCO數(shù)據(jù)集的并不完全相同,因此需通過(guò)對(duì)所有標(biāo)簽的邊界框進(jìn)行重新聚類計(jì)算先驗(yàn)框,提高模型識(shí)別的準(zhǔn)確率和召回率;之后,針對(duì)GPU顯存的限制,采用在輸入端進(jìn)行Mosaic數(shù)據(jù)增強(qiáng)[8]的方式解決,通過(guò)隨機(jī)選取4張圖片進(jìn)行隨機(jī)縮放、隨機(jī)裁減、隨機(jī)分布的方式進(jìn)行拼接,一次訓(xùn)練4張圖片可以大大提高訓(xùn)練效率,個(gè)人電腦單GPU就可以達(dá)到很好的效果,并且極大縮短了訓(xùn)練時(shí)間;最后,在輸出端調(diào)整損失函數(shù),結(jié)合IoU、GIoU、CIoU、DIoU[9]定義GCDIoU損失函數(shù),加快訓(xùn)練過(guò)程中的位置損失的下降速度,提高模型的訓(xùn)練效率.
YOLOv3是完全卷積網(wǎng)絡(luò)(fully convolutional networks for semantic segmentation,F(xiàn)CN)[10],有75個(gè)卷積層,還有跳躍連接層和上采樣層,沒(méi)有池化層,使用步長(zhǎng)為2的卷積層對(duì)特征圖進(jìn)行采樣.作為完全卷積網(wǎng)絡(luò),YOLOv3是可以處理各種輸入圖像的大小,但在實(shí)際實(shí)驗(yàn)中還要保持一個(gè)恒定的輸入大小,其中一個(gè)很大的問(wèn)題是,如果想進(jìn)行批處理圖像,那么就需要固定圖像的寬高,這是將多個(gè)圖像連接成一個(gè)大批處理所需要的.
網(wǎng)絡(luò)通過(guò)步長(zhǎng)因子對(duì)圖像進(jìn)行下采樣.例如,如果網(wǎng)絡(luò)的步長(zhǎng)是32,則大小為416×416的輸入圖像將產(chǎn)生大小為13×13的輸出圖像.一般來(lái)說(shuō),網(wǎng)絡(luò)中任何一層的步長(zhǎng)都等于該層的輸出小于網(wǎng)絡(luò)輸入圖像的因子.
在深度方面,特征圖中有 S× S( B × ( 5+ C))個(gè)元素,B表示每個(gè)單元格可以預(yù)測(cè)的邊界框的數(shù)量,每個(gè)邊界框都有5+C屬性,這些屬性描述每個(gè)邊界框的中心坐標(biāo)、尺寸、對(duì)象性得分和C類置信度.YOLOv3為每個(gè)單元格預(yù)測(cè)3個(gè)邊界框.
YOLOv3網(wǎng)絡(luò)對(duì)輸入圖像進(jìn)行下采樣直到第一檢測(cè)層,其中使用步長(zhǎng)為32的層的特征映射進(jìn)行檢測(cè),以因子2向上采樣,然后與具有相同特征圖大小的先前層的特征圖連接.另一個(gè)檢測(cè)層的步長(zhǎng)為16,重復(fù)相同的上采樣程序,并在步長(zhǎng)為8的層進(jìn)行最終檢測(cè).上采樣可以幫助網(wǎng)絡(luò)學(xué)習(xí)細(xì)粒度特征,這些特征有助于YOLOv3檢測(cè)小物體.
網(wǎng)絡(luò)在3個(gè)不同的尺度上進(jìn)行預(yù)測(cè),檢測(cè)層用于對(duì)3種不同尺寸(32、16、8)的特征圖進(jìn)行檢測(cè).也就是說(shuō),當(dāng)輸入是416×416的情況下,模型在13×13、26×26和52×52的尺度上進(jìn)行檢測(cè).
由于特定手勢(shì)控制數(shù)據(jù)集的稀缺,導(dǎo)致互聯(lián)網(wǎng)上暫時(shí)未有符合項(xiàng)目要求的公開(kāi)數(shù)據(jù)集,因此實(shí)驗(yàn)中采用眾包方式收集大量手勢(shì)錄像.對(duì)于通過(guò)使用攝像頭和計(jì)算機(jī)視覺(jué)技術(shù)捕獲的RGB手勢(shì)錄像,首先要將其按照10 幀/秒進(jìn)行切分,然后按照YOLO算法數(shù)據(jù)集的格式通過(guò)CVAT進(jìn)行人工標(biāo)記手勢(shì)區(qū)域,標(biāo)注內(nèi)容包括手勢(shì)的類別信息以及位置信息.
標(biāo)注工作完成后要對(duì)所有的標(biāo)簽進(jìn)行K-means聚類處理,結(jié)果如圖1所示.圖1中:(a)為選擇的5種手勢(shì)圖片數(shù)量,0—4分別代表鼠標(biāo)的單擊、雙擊、右鍵、上滑和下滑;(b)為通過(guò)K-means聚類算法得到的先驗(yàn)框,由于數(shù)據(jù)集中大部分都是手勢(shì)box,所以表現(xiàn)為豎直框;(c)為手勢(shì)位置在圖片中的分布,空白部分為面部和胸前位置;(d)為box的寬高所占圖像寬高比例分布,呈現(xiàn)線性相關(guān)性.

圖1 K-means聚類處理結(jié)果 Fig. 1 Clustering results of K-means
數(shù)據(jù)增強(qiáng)是由現(xiàn)有的、有限的訓(xùn)練數(shù)據(jù)通過(guò)變換創(chuàng)建新的訓(xùn)練樣本,通過(guò)調(diào)整圖像的參數(shù)推廣到其他情況,允許模型適應(yīng)更廣泛的情況.用于手勢(shì)識(shí)別的數(shù)據(jù)集并不大,因此采用了廣泛的數(shù)據(jù)增強(qiáng),包括幾何畸變、光照畸變、色彩空間調(diào)整和圖像遮擋等等.除此之外,在手勢(shì)識(shí)別的項(xiàng)目訓(xùn)練中,由于手勢(shì)大部分都是小目標(biāo),而YOLOv3針對(duì)小目標(biāo)的檢測(cè)效果并不理想,因此需要對(duì)數(shù)據(jù)進(jìn)行一些處理. Mosaic數(shù)據(jù)增強(qiáng)是參考CutMix數(shù)據(jù)增強(qiáng)[11]的方式,但CutMix數(shù)據(jù)增強(qiáng)只使用了2張圖片進(jìn)行拼接,而Mosaic數(shù)據(jù)增強(qiáng)則采用了4張圖片,實(shí)驗(yàn)在此基礎(chǔ)上又添加了色彩空間的調(diào)整(圖2),通過(guò)隨機(jī)縮放、隨機(jī)裁減、隨機(jī)分布的方式進(jìn)行拼接,并且隨機(jī)添加邊緣空白.

圖2 Mosaic數(shù)據(jù)增強(qiáng)和色彩空間調(diào)整 Fig. 2 Data enhancement and color space adjustment
隨機(jī)縮放增加了很多小目標(biāo),讓網(wǎng)絡(luò)檢測(cè)效果更好,對(duì)小目標(biāo)檢測(cè)的準(zhǔn)確率更高,并且通過(guò)Mosaic數(shù)據(jù)增強(qiáng)訓(xùn)練時(shí)可以直接計(jì)算4張圖片的數(shù)據(jù),使得小批次訓(xùn)練大小并不需要特別大,個(gè)人電腦的GPU就可以達(dá)到很好的效果.
IoU_Loss[12]由曠視科技提出,把4個(gè)點(diǎn)(x,y,w,h)構(gòu)成目標(biāo)的真實(shí)邊界框(box)看成整體進(jìn)行回歸,對(duì)兩個(gè)box計(jì)算其交并比,但I(xiàn)oU_Loss有兩個(gè)缺點(diǎn):第一,當(dāng)預(yù)測(cè)框和目標(biāo)框不相交時(shí),IoU=0,不能反映距離的遠(yuǎn)近,此時(shí)損失函數(shù)不可導(dǎo),因此無(wú)法優(yōu)化兩個(gè)box不相交的情況;第二,如果預(yù)測(cè)框和目標(biāo)框的大小確定,只要兩個(gè)box的相交值是確定的,其IoU值就是確定的,但并不能反映兩個(gè)box是如何相交的.
基于IoU存在的問(wèn)題,一個(gè)好的位置損失函數(shù)應(yīng)該考慮重疊面積、中心點(diǎn)距離、box寬高比這3個(gè)重要的幾何因素.
GIoU損失函數(shù)是通過(guò)IoU減去兩個(gè)邊界框閉包區(qū)域中不屬于兩個(gè)框的區(qū)域占閉包區(qū)域的比重表示.DIoU和CIoU損失函數(shù)是將目標(biāo)與先驗(yàn)框之間的距離、重疊率、尺度和box寬高比均考慮進(jìn)去,使得目標(biāo)框回歸變得更加穩(wěn)定,不會(huì)像IoU和GIoU一樣出現(xiàn)訓(xùn)練過(guò)程中發(fā)散等問(wèn)題.
綜合考慮各種IoU的計(jì)算優(yōu)劣勢(shì),定義GCDIoU_Loss為損失函數(shù) LGCDIoU_Loss進(jìn)行優(yōu)化.

式中:b和 bgt分別為預(yù)測(cè)框B和預(yù)測(cè)框Bgt的中心點(diǎn),ρ(·)為歐式距離,c為預(yù)測(cè)框B和預(yù)測(cè)框Bgt的最小外接矩形的對(duì)角線距離,v用來(lái)度量寬高比的相似性.

訓(xùn)練的模型可以通過(guò)調(diào)用電腦的默認(rèn)攝像頭獲取圖像,并返回屏幕中識(shí)別的手勢(shì)位置和標(biāo)簽,然后通過(guò)pynput庫(kù)進(jìn)行人機(jī)交互.
pynput庫(kù)是一個(gè)可以控制和監(jiān)聽(tīng)輸入設(shè)備,通過(guò)pynput.mouse包含用于控制和監(jiān)聽(tīng)鼠標(biāo)或觸控板的類,通過(guò)pynput.keyboard包含用于控制和監(jiān)聽(tīng)鍵盤的類,并且可以通過(guò)設(shè)置環(huán)境變量將其值作用于適合當(dāng)前平臺(tái)的鍵盤或鼠標(biāo)后端.
為了確保在Windows上監(jiān)聽(tīng)器和控制器之間的坐標(biāo)一致,當(dāng)系統(tǒng)縮放比例增加到100%以上時(shí),最新版本的Windows支持運(yùn)行舊版本的應(yīng)用程序,這使舊的應(yīng)用程序可以縮放,盡管比較模糊,但這種縮放導(dǎo)致鼠標(biāo)監(jiān)聽(tīng)器和控制器的坐標(biāo)信息不一致,監(jiān)聽(tīng)器接收物理空間坐標(biāo),但是通過(guò)控制器設(shè)計(jì)必須使用縮放的坐標(biāo).要解決以上問(wèn)題,需要設(shè)置Windows應(yīng)用支持定位精度DPI,并且這是一個(gè)全局設(shè)置,因此需要通過(guò)ctypes模塊啟用DPI感知.
pynput方法參考:click(button,count=1)表示在當(dāng)前位置發(fā)出按鈕單擊事件,move(dx,dy)表示將鼠標(biāo)指針從其當(dāng)前位置移出多個(gè)像素,position表示返回鼠標(biāo)指針的當(dāng)前位置,press(button)表示在當(dāng)前位置發(fā)出按鈕按下事件,release(button)表示在當(dāng)前位置發(fā)出按鈕釋放事件,scroll(dx,dy)表示發(fā)送滾動(dòng) 事件.
實(shí)驗(yàn)環(huán)境:Window 10、Intel(R)Core(TM)i7-7700HQ CPU@2.80GHz、NVIDIA GeForce GTX 1060 with Max-Q Design、Python 3.8、PyTorch 1.7.1、CUDA 10.2、cudnn 7.0個(gè)人電腦.
實(shí)驗(yàn)結(jié)果如圖3所示.由圖3可以發(fā)現(xiàn),實(shí)驗(yàn)中所采用的方法得到了預(yù)期的效果.GCDIoU由于增加了包含預(yù)測(cè)框和真實(shí)框的最小矩形框,計(jì)算每個(gè)預(yù)測(cè)框之間的歐氏距離,并且綜合考慮重疊率和寬高比,讓模型加速收斂.迭代次數(shù)為100時(shí),位置損失低于0.03,置信度損失低于0.01,分類損失低于0.01.最終檢測(cè)的準(zhǔn)確率為98.87%,接近100%.由于Mosaic數(shù)據(jù)增強(qiáng)人為制造了大量的小目標(biāo),提升了對(duì)手勢(shì)檢測(cè)的召回率,在迭代次數(shù)為100時(shí),就已經(jīng)穩(wěn)定在99.98%.

圖3 訓(xùn)練集實(shí)驗(yàn)結(jié)果 Fig. 3 Experimental results of training sets
對(duì)于深度學(xué)習(xí)的神經(jīng)網(wǎng)絡(luò)模型來(lái)說(shuō),損失函數(shù)的設(shè)計(jì)尤為重要,對(duì)比YOLO-V1和YOLOv3中的定位損失,采用的是平方和的損失計(jì)算方法,雖然可以考慮不同尺度對(duì)回歸損失的影響,但沒(méi)有考慮到位置坐標(biāo)的相關(guān)性,并不能很好地反映預(yù)測(cè)框與真實(shí)框的重合程度.
通過(guò)結(jié)合IoU、GIoU、CIoU、DIoU定義的GCDIoU損失函數(shù),充分考慮了預(yù)測(cè)框和真實(shí)框的重疊面積、中心點(diǎn)距離、寬高比,在訓(xùn)練過(guò)程中加快了位置損失的下降速度,以此提高模型的訓(xùn)練效率.如圖4所示,GCDIoU的損失值相比于其他4種基本處于較低水平.

圖4 不同IoU損失值下降對(duì)比 Fig. 4 Comparison of different IOU loss values
為檢測(cè)模型改進(jìn)效果,實(shí)驗(yàn)中對(duì)比改進(jìn)前與改進(jìn)后模型在測(cè)試集的mAP值對(duì)比(圖5),結(jié)果表明改進(jìn)效果較好.

圖5 模型改進(jìn)前后測(cè)試集mAP值對(duì)比 Fig. 5 Comparison of mAP value of test sets before and after model improvement
本文提出了一種基于改進(jìn)的YOLOv3實(shí)現(xiàn)的手勢(shì)實(shí)時(shí)識(shí)別人機(jī)交互方法.?dāng)?shù)據(jù)集通過(guò)對(duì)錄像按照10 幀/秒進(jìn)行切分獲得圖片,借助CVAT標(biāo)注工具進(jìn)行標(biāo)注.底層特征提取器采用遷移Darknet-53模型,通過(guò)K-means聚類算法對(duì)先驗(yàn)框進(jìn)行優(yōu)化,訓(xùn)練時(shí)通過(guò)Mosaic數(shù)據(jù)增強(qiáng)提高手勢(shì)檢測(cè)準(zhǔn)確率,最后通過(guò)訓(xùn)練出的模型結(jié)合pynput模塊實(shí)現(xiàn)手勢(shì)識(shí)別控制鼠標(biāo)達(dá)成人機(jī)交互.改進(jìn)后的人機(jī)交互方法在識(shí)別準(zhǔn)確率、召回率和速度上都取得了很好的效果,可用于基于視覺(jué)手勢(shì)交互場(chǎng)景的實(shí)時(shí)識(shí)別,對(duì)視頻中的多目標(biāo)手勢(shì)進(jìn)行快速、準(zhǔn)確的識(shí)別.
人機(jī)交互方式的改進(jìn)可以帶來(lái)工作效率的提升,本文提出的手勢(shì)識(shí)別與人機(jī)交互方法只是針對(duì)靜態(tài)手勢(shì)進(jìn)行識(shí)別,對(duì)于視頻中幀與幀之間的時(shí)序信息沒(méi)有加以利用,未來(lái)改進(jìn)的方向是識(shí)別和理解連續(xù)的、動(dòng)態(tài)的手勢(shì).