毛騰飛,趙曙光
(東華大學(xué)信息科學(xué)與技術(shù)學(xué)院,上海 201600)
人類在發(fā)展歷程中逐漸賦予手各種各樣的手勢(shì)含義,如聾啞人士手語(yǔ)交流等領(lǐng)域。人手檢測(cè)是目標(biāo)檢測(cè)的一個(gè)領(lǐng)域,其準(zhǔn)確性和實(shí)時(shí)性決定了手勢(shì)識(shí)別的質(zhì)量。隨著深度學(xué)習(xí)的發(fā)展,基于神經(jīng)網(wǎng)絡(luò)的目標(biāo)檢測(cè)算法逐漸取代傳統(tǒng)目標(biāo)檢測(cè)。目前主流檢測(cè)網(wǎng)絡(luò)有兩類:雙步(Two-Stage)目標(biāo)檢測(cè)算法和單步(One-Stage)目標(biāo)檢測(cè)算法??傮w而言,由于算法原理不同,相同時(shí)期,雙步法檢測(cè)精度高,但是速度慢;單步法檢測(cè)速度更快,實(shí)時(shí)性強(qiáng),但檢測(cè)準(zhǔn)確率相對(duì)低。常見(jiàn)單步目標(biāo)檢測(cè)算法有SSD(single shot Multibox detector)[1]相關(guān)算法、YOLO(You Only Look Once)[2]系列算法。目前YOLO 算法的第三代版本YOLOv3[3]均衡了速度和準(zhǔn)確率兩方面指標(biāo),也是本文的算法基礎(chǔ)。
雖然YOLOv3 算法綜合表現(xiàn)好,但在人手檢測(cè)領(lǐng)域仍待提高。主要原因有:一、YOLOv3 算法是在COCO 和VOC 數(shù)據(jù)集上進(jìn)行實(shí)驗(yàn)的,算法中的錨(anchor)不具有普適性,需要調(diào)整。二、YOLOv3 的檢測(cè)精度特別是小目標(biāo)的檢測(cè)精度不高,有待進(jìn)一步改善。三、手勢(shì)數(shù)據(jù)本身的復(fù)雜性。因此,本文基于YOLOv3,以O(shè)xford Hand[4]數(shù)據(jù)集中的手作為目標(biāo),提出了一種改進(jìn)算法。改進(jìn)方面有:一、多尺度檢測(cè)改進(jìn),增加檢測(cè)層,并結(jié)合FPN(Feature Pyramid Networks)[5]進(jìn)行特征拼接,可以得到更多特征圖(Feature Map);通過(guò)K-means 聚類算法得到預(yù)設(shè)錨。結(jié)合這兩種方式,可以主動(dòng)學(xué)習(xí)人手特征,實(shí)現(xiàn)自動(dòng)、高速、精準(zhǔn)化人手檢測(cè)。
YOLOv3 使用ResNet[6]的殘差思想和多尺度預(yù)測(cè)使其在一定程度上可以進(jìn)行小目標(biāo)識(shí)別。原始圖片在預(yù)處理階段被填充縮放至416×416 的大小,作為網(wǎng)絡(luò)輸入。YOLOv3 的特征提取網(wǎng)絡(luò)結(jié)構(gòu)DarkNet53,輸入圖片經(jīng)過(guò)DarkNet53 降采樣5 次,每次都會(huì)產(chǎn)生不同尺度的特征圖。
目標(biāo)檢測(cè)階段采用多尺度融合的方式在最后3 個(gè)尺度(13×13、26×26、52×52)的特征圖上分別檢測(cè)。每個(gè)尺度上有3 個(gè)錨點(diǎn)框(anchor boxes)用于檢測(cè)不同規(guī)格的目標(biāo)。算法按照特征圖的大小(S×S)將416×416的圖片劃分為S×S 個(gè)等大柵格(grid cell),每個(gè)柵格根據(jù)錨點(diǎn)框進(jìn)行預(yù)測(cè)3 個(gè)邊界框(bounding boxes)。每個(gè)邊界框返回兩類參數(shù):一、目標(biāo)框信息,即目標(biāo)框的中心位置與目標(biāo)框的寬和高;二、是否存在目標(biāo)的置信度,取值范圍為[0,1]。具體檢測(cè)方法是先對(duì)13×13 的特征圖進(jìn)行卷積預(yù)測(cè),得到第1 個(gè)尺度下的檢測(cè)結(jié)果;然后將13×13 的特征圖上采樣得到26×26 特征圖,與網(wǎng)絡(luò)降采樣生成的26×26 特征圖特征融合后進(jìn)行卷積預(yù)測(cè),得到第2 個(gè)尺度下的結(jié)果;同理得到第3 個(gè)尺度下的結(jié)果。將3 次檢測(cè)結(jié)果進(jìn)行非極大值抑制(Non-Maximum Suppression,NMS)得到最終結(jié)果。
手相對(duì)于整張圖片來(lái)說(shuō)是中小目標(biāo),為了提高手的檢測(cè)精度,需要對(duì)原有網(wǎng)絡(luò)層級(jí)結(jié)構(gòu)修改。此外為匹配改進(jìn)后的網(wǎng)絡(luò)結(jié)構(gòu)并獲取人手目標(biāo)專用錨點(diǎn)框,需要對(duì)原始標(biāo)注數(shù)據(jù)進(jìn)行聚類獲取錨點(diǎn)框,從而提高網(wǎng)絡(luò)訓(xùn)練時(shí)的收斂速度和檢測(cè)準(zhǔn)確度。
YOLOv3 引入FPN 檢測(cè)網(wǎng)絡(luò)進(jìn)行淺層和深層特征融合。針對(duì)人手的遠(yuǎn)近導(dǎo)致在圖像中呈現(xiàn)的大小不一,難以檢測(cè)的問(wèn)題,本文結(jié)合FPN 和特征融合對(duì)YO?LOv3 模型檢測(cè)結(jié)構(gòu)進(jìn)行改進(jìn),將多尺度檢測(cè)的尺度數(shù)從3 個(gè)尺度擴(kuò)展到4 個(gè),以改善小目標(biāo)人手的檢測(cè),改進(jìn)后結(jié)構(gòu)如圖1 所示。
圖1 改進(jìn)的YOLOv3模型
YOLOv3 算法對(duì)目標(biāo)進(jìn)行檢測(cè)時(shí),錨點(diǎn)框個(gè)數(shù)以及大小會(huì)影響收斂速度和檢測(cè)精度,所以要針對(duì)要數(shù)據(jù)集的標(biāo)注框的寬和高聚類。本文采用的K-means 聚類時(shí)的距離公式如式(1)所示。
d(box,centroid)=1-IoU(box,centroid) (1)
式(1)中,box 表示數(shù)據(jù)集中標(biāo)注真值;centriod 表示聚類后的簇中心;IoU(Intersection over Union)表示真值和聚類中心的交并比,越大越準(zhǔn)確。選擇適合的IoU分?jǐn)?shù)及聚類的數(shù)量可以均衡模型的復(fù)雜度和檢測(cè)的準(zhǔn)確率。
本文采用Oxford Hand 數(shù)據(jù)集,數(shù)據(jù)制作方式參照Lam1360[7],其中訓(xùn)練集共計(jì)4807 張,測(cè)試集821 張。該數(shù)據(jù)集在收集數(shù)據(jù)時(shí),未對(duì)人手的姿勢(shì)或可見(jiàn)性和環(huán)境施加任何限制。標(biāo)注的人手都是可以清晰辨認(rèn)的。
為了加快模型收斂和檢測(cè)的準(zhǔn)確度,首先對(duì)數(shù)據(jù)集進(jìn)行聚類。當(dāng)聚12 類時(shí),Mean IoU 值為0.8038,相比9 類的Mean IoU 值0.7811 提升了0.0227。重聚9 類的中心為({9,11),(17,17),(22,25),(31,28),(36,39),(50,46),(63,65),(93,91),(158,156)},總體比原始YOLO 網(wǎng)絡(luò)在COCO 數(shù)據(jù)集和VOC 數(shù)據(jù)集上聚類得到的中心尺寸小,聚類中心得到改善。聚12 類時(shí)的中心為{(8,10),(14,16),(17,27),(29,26),(21,20),(25,35),(36,36),(48,41),(50,57),(72,66),(94,97),(160,156)}。根據(jù)聚類得到的anchor 值,在DarkNet53 結(jié)構(gòu)對(duì)應(yīng)尺度進(jìn)行分配,平均每個(gè)尺度分配3 個(gè)anchor。更改配置文件重新訓(xùn)練可得人手檢測(cè)專用模型。
本實(shí)驗(yàn)在windows 系統(tǒng)進(jìn)行,GPU 采用NVIDIA的 1070 獨(dú) 立 顯 卡,CUDA10.0、cudnn7.5 以 及OpenCV3.4。設(shè)計(jì)語(yǔ)言Python 3.7.2,IDE 為Pycharm,框架為Darknet53。
訓(xùn)練所用的參數(shù)分別為:學(xué)習(xí)代數(shù)epochs=100,初始學(xué)習(xí)率learning_rate=0.001,批數(shù)量batch=8,沖量momentum=0.9,權(quán)重衰減decay=0.0005。改進(jìn)YOLOv3重聚12 類訓(xùn)練過(guò)程中損失值(train_loss)變化曲線如圖2 所示。經(jīng)過(guò)15000 次迭代后,loss 收斂至0.1附近。
圖2 改進(jìn)YOLOv3 重聚12 類訓(xùn)練曲線
圖3 YOLOv3(4scale)的mAP 曲線
(1)評(píng)價(jià)指標(biāo)
本文采用目標(biāo)檢測(cè)領(lǐng)域常用性能評(píng)價(jià)指標(biāo)平均檢測(cè)準(zhǔn)確率(mean Average Precision,mAP)和檢測(cè)速度(Frames Per Second,F(xiàn)PS)。mAP 值越大準(zhǔn)確率越高。FPS 指每秒檢測(cè)的幀數(shù),值越大檢測(cè)速度越快。
(2)多尺度檢測(cè)模型驗(yàn)證結(jié)果對(duì)比
本文改進(jìn)了YOLOv3 的多尺度檢測(cè)模塊,從3 個(gè)尺度擴(kuò)展至4 個(gè),在Oxford Hand 數(shù)據(jù)集進(jìn)行測(cè)試,在曲線光滑度0.6 的情況下,改進(jìn)YOLOv3 模型的驗(yàn)證集的mAP 指標(biāo)曲線分別如圖3 所示。曲線最終穩(wěn)定在0.59 左右,在13 代取得峰值0.6248。由于在訓(xùn)練時(shí)每5 代保存一次模型,為獲得更高的檢測(cè)率,采用mAP 取得最大值時(shí)的臨近代第15 代保存的模型進(jìn)行測(cè)試。
(3)測(cè)試集測(cè)試結(jié)果對(duì)比
為了驗(yàn)證模型的泛化性,在Oxford Hand 數(shù)據(jù)集的測(cè)試集上進(jìn)行測(cè)試,首先在mAP 評(píng)價(jià)指標(biāo)下,選擇原YOLOv3 和改進(jìn)的YOLOv3 取得最大值時(shí)的模型,其中設(shè)置相關(guān)參數(shù)IoU 閾值為0.5、置信度閾值為0.5、NMS閾值為0.5,在測(cè)試集上的實(shí)驗(yàn)結(jié)果如表1 所示。
從表1 的結(jié)果可以看出,在檢測(cè)速度方面,由于改進(jìn)的YOLOv3 檢測(cè)尺度增加,模型更加復(fù)雜,檢測(cè)速度達(dá)到23.8FPS,稍微下降但是仍滿足實(shí)時(shí)性需求。在檢測(cè)準(zhǔn)確率方面,改進(jìn)的模型在測(cè)試集的準(zhǔn)確率提升3.36 個(gè)百分點(diǎn)。說(shuō)明改進(jìn)的YOLOv3 檢測(cè)精度優(yōu)于原YOLOv3。
表1 YOLOv3 與本文改進(jìn)的YOLOv3 實(shí)驗(yàn)對(duì)比
(4)確定NMS 最優(yōu)閾值
在多尺度檢測(cè)時(shí),YOLOv3 在每個(gè)尺度進(jìn)行3 個(gè)bounding box 的預(yù)測(cè),可能會(huì)導(dǎo)致同一目標(biāo)被重復(fù)檢測(cè)輸出,影響檢測(cè)結(jié)果,因此需要對(duì)輸出結(jié)果冗余窗口進(jìn)行抑制。mAP 評(píng)價(jià)指標(biāo)下最好的YOLOv3 和改進(jìn)YO?LOv3 模型,選擇不同的非極大值閾值(NMS Thresh?old),在測(cè)試集上進(jìn)行測(cè)試,從而確定模型最終的非極大值抑制參數(shù)。部分NMS 閾值實(shí)驗(yàn)結(jié)果如表2 所示。
表2 不同模型的NMS 閾值檢測(cè)的準(zhǔn)確度
從表2 可以看出,總體上改進(jìn)YOLOv3 的mAP 高于原YOLOv3。原YOLOv3 在NMS 閾值為0.35 時(shí)準(zhǔn)確率取得最大值54.03%,改進(jìn)YOLOv3 在NMS 閾值為0.35 時(shí)準(zhǔn)確率取得最大值57.61%,相比原YOLOv3 提升了3.58 個(gè)百分點(diǎn)。綜上說(shuō)明改進(jìn)YOLOv3 檢測(cè)更加準(zhǔn)確,此外將改進(jìn)YOLOv3 模型參數(shù)NMS 閾值設(shè)置為0.35 時(shí),檢測(cè)效果最好,從而找到模型最優(yōu)NMS 閾值參數(shù)值。
(5)實(shí)際檢測(cè)結(jié)果展示
采用注重檢測(cè)率(mAP)的YOLOv3 模型(NMS 閾值為0.35)和改進(jìn)模型(NMS 閾值為0.35)在測(cè)試集上進(jìn)行測(cè)試,其中復(fù)雜背景圖片VOC2007_117 檢測(cè)效果如圖4 所示。
其中圖4(a)是重聚類的原YOLOv3 檢測(cè)效果圖,圖4(b)改進(jìn)YOLOv3 檢測(cè)效果圖??梢钥闯?,在餐桌遠(yuǎn)端的人的手在原始YOLOv3 中未被檢測(cè)到,而在改進(jìn)后YOLOv3 被正確檢出,說(shuō)明改進(jìn)后的YOLOv3 算法對(duì)小目標(biāo)的檢測(cè)效果更好,達(dá)到預(yù)期效果。
圖4 測(cè)試結(jié)果圖展示
本文提出了一種基于YOLOv3 算法進(jìn)行改進(jìn)的實(shí)時(shí)人手檢測(cè)算法。首先YOLOv3 的模型結(jié)構(gòu)進(jìn)行改進(jìn),結(jié)合FPN 網(wǎng)絡(luò)和特征融合算法,將三尺度輸出擴(kuò)展為四尺度輸出。其次針對(duì)改進(jìn)后的模型結(jié)構(gòu)進(jìn)行Kmeans 聚類獲得多尺度檢測(cè)的錨點(diǎn)框。相關(guān)實(shí)驗(yàn)結(jié)果表明改進(jìn)的YOLOv3 算法檢測(cè)準(zhǔn)確率高于原YOLOv3,且實(shí)時(shí)性較好。最后確定模型檢測(cè)效果最優(yōu)情況下的NMS 參數(shù)值。最后的實(shí)際檢測(cè)效果展示表明改進(jìn)的YOLOv3 的檢測(cè)效果在小目標(biāo)人手檢測(cè)上效果更好。人手目標(biāo)的準(zhǔn)確、實(shí)時(shí)檢測(cè),是實(shí)時(shí)手勢(shì)識(shí)別的重要基礎(chǔ)。未來(lái)可以根據(jù)改進(jìn)YOLOv3 的人手檢測(cè)算法和確定參數(shù)后的模型做進(jìn)一步工作,如手勢(shì)識(shí)別和人機(jī)交互開(kāi)發(fā)應(yīng)用開(kāi)發(fā)等研究。