東輝,解振寧,孫浩,陳炳興,姚立綱
(福州大學(xué)機(jī)械工程及自動化學(xué)院,福建 福州 350108)
目標(biāo)識別與檢測是機(jī)器視覺領(lǐng)域的核心任務(wù)之一,被廣泛應(yīng)用在故障診斷[1]、電力巡檢[2]等方面.起初,目標(biāo)識別與檢測主要以2D視覺作為主要研究對象,具體可分為基于傳統(tǒng)機(jī)器視覺的方法和基于深度學(xué)習(xí)的方法.其中,基于傳統(tǒng)機(jī)器視覺的方法主要通過手工設(shè)計(jì)并結(jié)合特征分類器來進(jìn)行識別與檢測,該類方法在速度和精度上都不理想.基于深度學(xué)習(xí)的方法主要分為雙階段和單階段兩大類.雙階段方法首先產(chǎn)生感興趣區(qū)域的推薦框,再對推薦框進(jìn)行分類和回歸,代表算法有Faster R-CNN[3]、TridentNet[4]等.單階段方法則直接在圖片的多個(gè)位置進(jìn)行分類和回歸;代表算法有YOLO(you only look once)[5]、SSD(single shot multibox detector)[6]等.兩類方法各有優(yōu)劣,前者精度更高,后者速度更快.作為單階段目標(biāo)檢測算法的代表,SSD在檢測速度和精度上達(dá)到了較好的平衡.但SSD算法對低級特征提取不充分,容易造成對小目標(biāo)的漏檢.針對上述問題,Zhang等[7]提出一種基于多尺度特征圖跳躍連接的改進(jìn)SSD算法,有效融合高層和低層特征,但也造成了更多的信息丟失.劉濤等[8]通過引用空洞卷積和卷積核金字塔增加網(wǎng)絡(luò)的特征提取能力,同時(shí)引入特征融合模塊,提升對小目標(biāo)的檢測能力,但也增加了模型的計(jì)算復(fù)雜度.
目前,基于2D視覺的目標(biāo)識別與檢測技術(shù)已經(jīng)趨于成熟.然而,由于缺乏深度信息,僅使用二維信息來表征三維物體,會不可避免地造成信息損失.為了解決此類問題,人們把目光投向3D視覺領(lǐng)域.其中,點(diǎn)云是一種典型的3D數(shù)據(jù)表示方法,具有獲取簡單、幾何信息豐富等優(yōu)勢.基于點(diǎn)云的研究也有了長足的發(fā)展,其中,點(diǎn)云庫 (point cloud library,PCL)是在吸收前人點(diǎn)云相關(guān)研究基礎(chǔ)上建立起來的大型跨平臺開源C++編程庫[9],它實(shí)現(xiàn)了大量點(diǎn)云相關(guān)的通用算法和高效數(shù)據(jù)結(jié)構(gòu),被廣泛應(yīng)用在機(jī)器視覺、逆向工程、無人駕駛等領(lǐng)域.
利用點(diǎn)云的性質(zhì)可以解決上述問題,但PCL中傳統(tǒng)點(diǎn)云識別的方法一般包括點(diǎn)云預(yù)處理、關(guān)鍵點(diǎn)選取、特征描述、特征匹配等步驟,較為繁瑣,識別周期較長;而基于深度學(xué)習(xí)的點(diǎn)云識別方法又面臨著點(diǎn)云數(shù)據(jù)集制作難度較大的問題.事實(shí)上,目標(biāo)識別與檢測任務(wù)只要求從某一場景中提取出所需要的物體信息,其余信息并無太大價(jià)值.若僅采用三維點(diǎn)云來完成目標(biāo)識別,會延長計(jì)算周期,不利于效率的提升.為此,本研究提出一種基于2D先驗(yàn)的3D目標(biāo)判定算法.選擇SSD作為2D目標(biāo)檢測算法,并將其主干網(wǎng)絡(luò)VGG-16替換為輕量級網(wǎng)絡(luò)MobileNet[10],通過深度相機(jī)結(jié)合改進(jìn)的MobileNet-SSD網(wǎng)絡(luò)模型找到目標(biāo)物體的所在區(qū)域,即感興趣區(qū)域(region of interest,ROI),然后利用透視變換將二維ROI轉(zhuǎn)換成ROI點(diǎn)云,利用點(diǎn)云相關(guān)算法做進(jìn)一步的處理.
提出一種基于2D先驗(yàn)的3D目標(biāo)判定算法,其整體框架如圖1所示.首先通過深度相機(jī)獲取輸入場景的彩色圖及深度圖,并利用改進(jìn)的MobileNet-SSD算法對彩色圖像中的物體進(jìn)行目標(biāo)檢測,獲取目標(biāo)物體所在的ROI區(qū)域;然后利用彩色圖和深度圖像素一一對應(yīng)的關(guān)系,通過透視變換將深度圖ROI內(nèi)的數(shù)據(jù)轉(zhuǎn)換為點(diǎn)云數(shù)據(jù);接著通過直通濾波算法對ROI點(diǎn)云數(shù)據(jù)進(jìn)行濾波處理,并通過計(jì)算直通濾波前后的點(diǎn)云數(shù)目比來判定目標(biāo)物體是否為真實(shí)場景物體.
圖1 算法整體框架Fig.1 Overall framework of algorithm
SSD算法結(jié)合YOLO的回歸思想和Fast R-CNN的錨框機(jī)制,采用VGG-16作為主干網(wǎng)絡(luò),并增加一組輔助卷積層,用于在多個(gè)尺度上進(jìn)行特征提取,通過卷積來預(yù)測從不同層提取特征信息的類別和位置,并使用非極大值抑制(non-maximum suppression,NMS )來獲得最終的預(yù)測結(jié)果.SSD算法較好地解決了平移不變性與平移可變性之間的矛盾,達(dá)到較好的檢測速度和精度,但VGG-16網(wǎng)絡(luò)參數(shù)較多,體量較大.
MobileNet是由Howard等提出的一種輕量級網(wǎng)絡(luò)模型,具有延遲性低、體量小的特點(diǎn).其核心是使用深度可分離卷積替代標(biāo)準(zhǔn)卷積.深度可分離卷積包括深度卷積和逐點(diǎn)卷積,其中深度卷積作用于每個(gè)通道,而逐點(diǎn)卷積用來組合各個(gè)通道輸出.MobileNet通過巧妙地分解卷積核,既實(shí)現(xiàn)了標(biāo)準(zhǔn)卷積的效果,又減少了卷積核的冗余表達(dá)、模型參數(shù)量和計(jì)算量,提高了模型的運(yùn)算速度.
針對原SSD算法中對低級特征提取不充分,容易造成對小目標(biāo)漏檢的問題,做出如下兩方面的改進(jìn).
2.1.1基礎(chǔ)網(wǎng)絡(luò)結(jié)構(gòu)的改進(jìn)
首先給出小目標(biāo)的定義,即當(dāng)目標(biāo)像素與輸入圖像像素之比不大于12%時(shí),稱該目標(biāo)為小目標(biāo)[11];SSD的輸入圖像大小為300 px×300 px,因此,小目標(biāo)的大小應(yīng)不大于36 px×36 px.此外,對于深度學(xué)習(xí)目標(biāo)檢測模型來說,網(wǎng)絡(luò)層越深,其提取圖像特征的能力越好.在MobileNet-SSD的基礎(chǔ)上,額外選擇Conv3、Conv5兩個(gè)卷積層作為新的預(yù)測特征層.Conv3和Conv5預(yù)測特征層大小分別為75×75、38×38,能夠在提取圖像特征能力與保留盡可能多的小目標(biāo)信息之間達(dá)到較好的平衡,增加對小目標(biāo)的檢測能力.改進(jìn)后的MobileNet-SSD網(wǎng)絡(luò)結(jié)構(gòu)如圖2所示.
圖2 改進(jìn)后的MobileNet-SSD網(wǎng)絡(luò)結(jié)構(gòu)Fig.2 Improved MobileNet-SSD network structure
MobileNet-SSD網(wǎng)絡(luò)模型的先驗(yàn)框計(jì)算公式為
(1)
式中:B為先驗(yàn)框的總數(shù)量;i表示第i個(gè)預(yù)測特征層;N為預(yù)測特征層的總數(shù);wi、hi分別表示第i個(gè)預(yù)測特征層的寬和高;ki表示第i個(gè)預(yù)測特征層的先驗(yàn)框的形狀種類.
由式(1)可計(jì)算出原MobileNet-SSD網(wǎng)絡(luò)模型的先驗(yàn)框總數(shù)量為1 917,而改進(jìn)后的MobileNet-SSD網(wǎng)絡(luò)模型的先驗(yàn)框總數(shù)量為27 456,增加了約14.3倍.因此,改進(jìn)后的MobileNet-SSD網(wǎng)絡(luò)模型可以更大范圍地獲取目標(biāo)物體的候選區(qū)域,提高物體檢出的可能性,為后續(xù)工作打好基礎(chǔ).
2.1.2損失函數(shù)的改進(jìn)
在SSD算法中,輸入圖像中真實(shí)標(biāo)記框的數(shù)目要遠(yuǎn)遠(yuǎn)少于先驗(yàn)框的數(shù)目,導(dǎo)致正負(fù)樣本失衡.為了解決該問題,SSD采用難樣本挖掘的方法,使得正負(fù)樣本比例保持在1∶3左右,保證模型正常訓(xùn)練,但這樣會導(dǎo)致訓(xùn)練被大量的易分樣本主導(dǎo),限制了算法精度的進(jìn)一步提高.
本研究采用Focal Loss函數(shù)替代SSD原有損失函數(shù)中的置信度損失函數(shù),通過調(diào)節(jié)輸入網(wǎng)絡(luò)中的正負(fù)樣本比例參數(shù),使得模型更加容易訓(xùn)練,進(jìn)一步增強(qiáng)檢測效果.
Focal Loss損失函數(shù)的計(jì)算公式為
Lfoc(pt)=-αt(1-pt)γlnpt
(2)
式中:pt為不同類別的分類概率;αt為正負(fù)樣本平衡因子;γ為聚焦因子,用于調(diào)節(jié)易分和難分樣本的權(quán)重.
由式(2)可知,對于易分樣本,pt會比較大,權(quán)重(1-pt)自然就比較小;對于難分樣本,pt較小,此時(shí)權(quán)重(1-pt)較大.這樣可以減小易分樣本損失的權(quán)重,使得網(wǎng)絡(luò)模型更加關(guān)注難分樣本,有利于模型準(zhǔn)確地進(jìn)行分類.
改進(jìn)后的總的損失函數(shù)由置信度損失函數(shù)和定位損失函數(shù)組成,計(jì)算公式為
(3)
式中:Lfoc表示Focal Loss函數(shù);Lloc(x,l,g)表示定位損失函數(shù);N為匹配到的正樣本的個(gè)數(shù);α為定位損失函數(shù)的權(quán)重;x為先驗(yàn)框與真實(shí)框的匹配結(jié)果,若匹配x=1,否則x=0;l為正樣本的回歸參數(shù);g為正樣本匹配的真實(shí)框的回歸參數(shù).
圖3給出了部分在2D視覺中有效,但在3D視覺中無效的場景.由圖3可知,由于缺乏深度信息,導(dǎo)致2D目標(biāo)檢測無法區(qū)分非真實(shí)場景物體與真實(shí)場景物體.為此,提出一種基于點(diǎn)云的目標(biāo)3D特征判定方法,利用ROI點(diǎn)云特性來解決圖3中的問題及類似問題.
圖3 2D目標(biāo)檢測部分不足Fig.3 2D object detection partial drawbacks
2.2.1ROI點(diǎn)云的獲取
首先,通過深度相機(jī)獲取輸入場景的彩色圖及深度圖;接著,利用改進(jìn)的MobileNet-SSD算法對彩色圖像中的物體進(jìn)行目標(biāo)檢測,獲取目標(biāo)物體所在的ROI區(qū)域;然后利用彩色圖和深度圖像素一一對應(yīng)的關(guān)系,通過透視變換將深度圖ROI內(nèi)的數(shù)據(jù)轉(zhuǎn)換為點(diǎn)云數(shù)據(jù),完成ROI點(diǎn)云的獲取.
通過上述方法,既省去了傳統(tǒng)點(diǎn)云識別的諸多步驟又避免了點(diǎn)云深度學(xué)習(xí)中三維數(shù)據(jù)集制作難度較大的問題,取得了較好的效果,其檢測示例如圖4所示.
圖4 算法檢測示例Fig.4 Algorithm detection example
2.2.2基于點(diǎn)云直通濾波的3D特征判定方法
由圖4可知,本研究提出的方法在二維檢測階段就得出檢測類別結(jié)果,并沒有判定是否出現(xiàn)圖3中的問題及類似問題的能力.因此,為了解決該問題,本研究提出如下判定方法.
圖5(a)展示了在2D視覺中有效、但在3D視覺中無效的場景示例,其對應(yīng)的ROI點(diǎn)云如圖5(b)所示,對應(yīng)真實(shí)目標(biāo)物體的點(diǎn)云如圖5(c)所示.由圖5(b)可知,當(dāng)發(fā)生失效現(xiàn)象時(shí),對應(yīng)目標(biāo)物體的ROI點(diǎn)云應(yīng)為一個(gè)平面,其Z軸方向理論最大距離差應(yīng)為0,但由于受到相機(jī)采集精度等因素的影響,經(jīng)實(shí)測得到其Z軸真實(shí)最大距離差約為8 mm,而對應(yīng)真實(shí)目標(biāo)物體點(diǎn)云明顯不是平面,其最大距離差要大于8 mm.因此,可以通過判斷ROI點(diǎn)云是否為平面來完成相關(guān)判定工作.
圖5 失效場景示例Fig.5 Example of failure situation
選擇利用直通濾波來完成判斷ROI點(diǎn)云是否為平面的工作,所謂直通濾波即對指定坐標(biāo)范圍進(jìn)行裁剪.直通濾波示例如圖6所示,其濾波軸為Z軸,濾波范圍為8 mm.由圖6可知,ROI平面點(diǎn)云濾波后的點(diǎn)云數(shù)與濾波前的點(diǎn)云數(shù)相比減少了約77 %,而對應(yīng)真實(shí)目標(biāo)物體濾波后的點(diǎn)云數(shù)比濾波前的點(diǎn)云數(shù)減少了約18%,存在較大差異.
圖6 直通濾波示例Fig.6 PassThrough filter examples
進(jìn)一步地,為了提高算法魯棒性,提出如下判定方法: 利用直通濾波,將Z軸設(shè)置為濾波軸,將濾波范圍設(shè)置為6 mm,統(tǒng)計(jì)濾波前后的點(diǎn)云數(shù)量,若濾波后的點(diǎn)云數(shù)量不大于濾波前的30%,則判定ROI點(diǎn)云為平面,即出現(xiàn)在2D視覺中有效,但在3D視覺中無效的現(xiàn)象,否則判定ROI點(diǎn)云為真實(shí)目標(biāo)物體,即檢測有效.
本次實(shí)驗(yàn)采用的訓(xùn)練和部署環(huán)境所采用的操作系統(tǒng)為Ubuntu 18.04,CPU為Intel(R) Core (TM) i7-8700,GPU為NVIDIA GeForce RTX 1070,內(nèi)存為16 GB,GPU加速庫為CUDA9.0+CUDNN7.0,深度學(xué)習(xí)框架為Caffe,PCL版本為1.9.0,深度相機(jī)型號為Intel RealSense D435i.小目標(biāo)推薦檢測范圍為0.5~2.0 m.
3.2.1實(shí)驗(yàn)數(shù)據(jù)集
考慮到本研究所提出的算法需將二維ROI轉(zhuǎn)換為ROI點(diǎn)云,并沒有合適的公共數(shù)據(jù)集.因此選擇生活中常見的5類物品作為檢測對象來制作數(shù)據(jù)集,其分別為保溫杯、蘋果、碗、馬克杯、眼鏡盒.首先通過實(shí)際拍攝、網(wǎng)上搜集等方式獲取原始圖片3 500張,接著利用隨機(jī)旋轉(zhuǎn)、隨機(jī)顏色等方式進(jìn)行數(shù)據(jù)增強(qiáng),數(shù)據(jù)增強(qiáng)后,最終數(shù)據(jù)集中包含10 000張圖像.將數(shù)據(jù)增強(qiáng)后的數(shù)據(jù)集按照PASCAL VOC[12]的格式進(jìn)行標(biāo)注.通過分離驗(yàn)證的方法,將訓(xùn)練集和測試集圖片數(shù)量比例設(shè)置為5∶1,再以9∶1的比例將訓(xùn)練集細(xì)分為測試集和驗(yàn)證集.
3.2.2訓(xùn)練方法及參數(shù)設(shè)置
采用遷移學(xué)習(xí)的方法先對PASCAL VOC數(shù)據(jù)集進(jìn)行預(yù)訓(xùn)練,然后對數(shù)據(jù)集的參數(shù)進(jìn)行微調(diào).初始學(xué)習(xí)率設(shè)置為0.000 5,采用RMSProp算法及動量優(yōu)化算法優(yōu)化參數(shù),動量因子設(shè)置為0.9,訓(xùn)練權(quán)重衰減項(xiàng)設(shè)置為0.000 1,批量大小為24,最大迭代次數(shù)設(shè)置為53 000,IoU閾值設(shè)置為0.5,αt為0.3、γ為1.9.
3.2.3評估指標(biāo)
選擇采用平均精度(mean average precision,mAP)、召回率(recall,R)、準(zhǔn)確率(precision,P)、模型大小(Mbyte,MB)作為目標(biāo)檢測算法的評估指標(biāo),計(jì)算公式為
(4)
式中:TP表示被正確預(yù)測為正樣本的數(shù)量;FP表示負(fù)樣本被預(yù)測為正樣本的數(shù)量;FN表示正樣本被預(yù)測為負(fù)樣本的數(shù)量;C為檢測類別數(shù)目;N為圖像中當(dāng)前類的目標(biāo)數(shù)量.
3.2.4實(shí)驗(yàn)結(jié)果分析與比較
在訓(xùn)練過程中,通過記錄損失值變化以及準(zhǔn)確率變化來觀察訓(xùn)練的動態(tài)過程,其對應(yīng)的損失值變化曲線以及精度值變化曲線如圖7所示.
圖7 模型變化曲線Fig.7 Model change curves
為了顯示改進(jìn)算法的優(yōu)越性,在上述自制訓(xùn)練數(shù)據(jù)集樣本上充分訓(xùn)練Faster R-CNN、YOLOv3、MobileNet-SSD及本文算法,并在同一測試集樣本上對以上算法進(jìn)行檢測性能對比實(shí)驗(yàn),各模型具體檢測性能如表1所示.
表1 不同算法檢測性能對比
表2 消融實(shí)驗(yàn)結(jié)果
為了進(jìn)一步驗(yàn)證對MobileNet-SSD算法改進(jìn)的有效性,在相同訓(xùn)練和測試數(shù)據(jù)集上對本研究算法和MobileNet-SSD算法進(jìn)行對比和消融實(shí)驗(yàn),消融實(shí)驗(yàn)結(jié)果見表2.由表2可知,在分別引入改進(jìn)網(wǎng)絡(luò)結(jié)構(gòu)和改進(jìn)損失函數(shù)后,檢測模型mAP值分別提高了6.3%、5.5%,表明在同時(shí)引入改進(jìn)網(wǎng)絡(luò)結(jié)構(gòu)及改進(jìn)損失函數(shù)后,檢測模型mAP值提高了8.2%.表明在原MobileNet-SSD算法上的各項(xiàng)改進(jìn)均能有效提高算法檢測精度.
3種網(wǎng)絡(luò)模型對小目標(biāo)物體的檢測實(shí)例如圖8所示,由圖8可以看出,改進(jìn)后的MobileNet-SSD檢測精度有著明顯提升.
圖8 網(wǎng)絡(luò)模型檢測對比Fig.8 Network model detection comparison
為了驗(yàn)證提出的判定算法能否分辨2D目標(biāo)和3D目標(biāo),在相同的實(shí)驗(yàn)平臺下,結(jié)合控制變量法的思想,通過有序調(diào)整目標(biāo)距離、選擇不同的檢測目標(biāo)等方式,分別用PCL中傳統(tǒng)點(diǎn)云識別的方法及點(diǎn)云深度學(xué)習(xí)的方法和本文算法做對比實(shí)驗(yàn),對比試驗(yàn)示例如圖9所示.
圖9 對比試驗(yàn)示例Fig.9 Comparative examples
參照上述示例,共做了200組對比試驗(yàn),為進(jìn)一步說明算法的有效性,將平均檢測時(shí)間、檢測正確率作為評估指標(biāo),對比實(shí)驗(yàn)結(jié)果如表3所示.
表3 對比實(shí)驗(yàn)結(jié)果
由表3可知,本研究提出的算法與傳統(tǒng)點(diǎn)云識別方法相比,檢測速度分別提高了10.14倍和9.68倍,而檢測準(zhǔn)確率僅降低了約1%,在保證檢測準(zhǔn)確率基本不變的前提下,大幅提高了檢測速度.此外,將本研究算法與點(diǎn)云深度學(xué)習(xí)的方法相比,其檢測速度分別降低了0.37倍和0.51倍,檢測準(zhǔn)確率降低了2%,雖然檢測速度與檢測精度都略有降低,但是避免了三維數(shù)據(jù)集制作難度較大的問題,從目標(biāo)檢測的整體流程來看,縮短了工作周期.
針對2D目標(biāo)檢測無法區(qū)分非真實(shí)場景物體與真實(shí)場景物體,以及直接采用3D識別工作周期較長的問題,提出了一種基于2D先驗(yàn)的3D目標(biāo)判定算法.用輕量級MobileNet網(wǎng)絡(luò)替換經(jīng)典SSD的VGG-16網(wǎng)絡(luò),降低了模型大小,并在此基礎(chǔ)上額外增加兩個(gè)預(yù)測特征層,提高模型對小目標(biāo)的檢測能力.通過引入Focal Loss函數(shù)替代SSD原有損失函數(shù)中的置信度損失函數(shù),解決了MobileNet-SSD中正負(fù)樣本不均衡和易分樣本占比較高的問題.通過改進(jìn)MobileNet-SSD算法獲取ROI,利用深度相機(jī)將二維ROI轉(zhuǎn)換為ROI點(diǎn)云,利用直通濾波來判斷是否出現(xiàn)在2D視覺中有效但在真實(shí)三維空間中無效的現(xiàn)象,既省去了傳統(tǒng)點(diǎn)云識別的諸多步驟,又避免了三維數(shù)據(jù)集制作難度較大的問題.在今后的研究工作中,將致力于進(jìn)一步提高算法的泛化性能和魯棒性.