譚 方,馮曉毅,馬玉鵬
(西北工業大學電子信息學院,西安710072)
RGB-D圖像數據包含更豐富的信息,目前已大量應用于機器人、安防、AR/VR等領域。人體目標檢測是人機交互的前提,也是機器視覺的重要任務,特別在智能機器人應用中意義重大。近年來,基于RGB-D的檢測方案[1-2]受到重視,因為深度圖(Depth)可以克服彩色圖(RGB)在黑暗、模糊環境下圖像質量差的問題,而彩色圖可以彌補深度圖噪聲大和遠距離精度差的短板,隨著CNN(卷積神經網絡)的快速發展,基于卷積神經網絡的目標檢測精度已經遠超傳統方法,然而這些方法運算量巨大,需要一種輕量級的CNN檢測網絡,能在滿足檢測精度的同時,減小計算量,降低消耗。
現有的CNN目標檢測算法可以分為基于錨框(anchor)和無錨框(anchor-free)的方法。基于錨框的方法如Faster-RCNN[3]、YOLOV3[4]等需要預設大量的錨框,錨框數量甚至可能達幾千到數十萬以上,無疑增加了整個算法的復雜度。文獻[5]是較早提出無錨框檢測算法的,隨后文獻[6]借鑒了該思想并應用在行人檢測上,文獻[7]將其應用在了人臉檢測任務中,這些方法都取得了業界領先的檢測準確率,而且該方法推理速度快,是很多嵌入式平臺下人臉檢測任務的首選。
除了檢測框架,學者們還提出了基于單深度圖的人體檢測算法[8-9]。這些方法一般分兩步,首先通過深度圖特征獲取候選的人體目標框,然后訓練分類器進一步篩選,最后保留真正的人體目標。單深度圖的檢測算法速度快、效率高,但由于現有商業深度相機的分辨率和精度較低,因此此類算法只適于簡單場景和近距離檢測。相比之下,基于RGB-D的檢測算法[10-11]更普遍。
為提高CNN網絡的運行效率,輕量級網絡框架受到人們的重視。研究人員提出了如MobileNetV3[12]的輕量級網絡框架,這些框架的設計主要是為了將深度學習應用于移動端和嵌入式設備,如小型機器人、家用安防機等。MobileNetV3作為最新的輕量級框架,網絡設計借助了神經網絡搜索(NAS),在效率上達到了領先水平。因此,本次改進也選擇在以MobilenetV3作為主干網絡的基礎上進行。
所設計檢測網絡的結構如圖1所示。網絡的輸入可以分別為彩色圖,深度圖或RGB-D,首先對輸入的圖像使用3×3的卷積網絡提取特征并相加(當輸入為RGB-D時),之后送入金字塔結構的網絡進行處理,最后輸出H/R×W/R×5的特征圖,其中H、W是輸入圖片的長和寬,此處統一將RGB-D縮放到長416寬320,R是縮放步長,取值為8。

圖1 改進的網絡結構
輸出的5個特征圖中的第一個是目標置信度,使用了sigmoid函數將結果歸一化到0到1之間,取值越接近1表示該點是人體目標的概率越大,越接近0表示是背景的概率越大,在實際應用中大于
0.25就認為該點是目標。第二和第三個特征圖是中心點偏移量,在圖像縮小時精度會有損失,偏移量是對該損失的補償。第四和第五個特征圖輸出目標框的長寬,這里由于目標長寬的值較大,為了防止網絡輸出跨度過大造成巨大誤差,對網絡輸出的長寬做了轉換,使用了log函數,即網絡輸出的長寬是目標原始長寬的對數。最終目標框的計算過程如下式:

式中,bx、by、bw、bh為最終的目標檢測框的中心點x、y坐標和長寬值,cx、cy為網絡輸出的目標置信度中值大于0.25的坐標值,px、py、pw、ph則是與該坐標對應的網絡偏移輸出和長寬輸出。
圖1中的block網絡模塊使用了逆殘差結構的線性瓶頸網絡(Inverted Residual and Linear Bottleneck,簡稱Bneck)和壓縮激勵激活函數(Squeeze and Excitation,簡稱SE)。圖中的1×1表示1×1卷積,上采樣統一使用最近鄰法將特征圖擴大2倍;C1到C7表示2維CNN卷積網絡,詳細的網絡結構參數情況如表1所示。

表1 改進檢測網絡詳細結構
表1中名稱列的內容與圖1相對應,內容一列中的Conv2表示2D卷積,Bneck表示瓶頸網絡,逗號后的數字1、3和5表示卷積核大小。NL表示激活函數,其中RE為ReLU線性激活函數式,HS表示hswish激活函數式,具體公式為:本網絡沒有使用池化層進行降采樣,而是直接使用步長代替。


該算法中使用的損失函數有3個部分,第一是置信度損失Lc,使用焦點損失函數(Focal Loss),如下式:式中,yij表示目標的類別值,如果該點是人體目標的中心點則值為1,如果是其他則為0;pij表示網絡輸出的置信度值,通過sigmoid函數將值激活到0到1之間。γ是焦點損失的參數,取值2。焦點損失函數更適合樣本不均衡的分類問題,它降低了簡單樣本在損失中所占的比重,轉而更多關注困難的、錯誤分類的樣本。
另外兩個部分為長寬損失Lwh和中心點補償損失Lcen,都用平滑絕對誤差損失函數(Smooth L1 Loss)計算網絡預測值與真實值的誤差,具體公式為:

最終的損失是這三項的累加,如式(10)所示,其中的λ用來調節各個損失所占的比重,最終設置:λc=1,λoff=10,λwh=10。
輕量級檢測網絡在訓練時,優化器采用隨機梯度優化算法(Adaptivemomentestimation,簡稱Adam),網絡訓練150個周期(epoch),初始學習率為0.0025,在第100和130周期時學習率分別衰減0.1倍,批大小(Batch Size)設置為64。
為了提高網絡的泛化能力,采用不同方法對數據進行擴充。主要為仿射變換法:對圖像隨機旋轉-5°到5°,隨機0.9到1.1的縮放變換,隨機-10%到10%的平移變換和隨機-3°到3°的剪切變換,此外還包括水平鏡像,對RGB圖隨機加減亮度和對比度。對深度圖,在圖像的任意區域隨機將5%的深度值設為0,以照顧到實際應用中深度圖對距離、材質、光照等較為敏感,往往會有缺失和空洞的存在,從而在訓練時隨機生成一些缺失和空洞。
在多尺度訓練中,網絡的輸入為416×320,為了提高網絡的魯棒性,每個周期隨機在多個尺度中選擇一個進行訓練,如(448×352),(416×352),(384×320)等。
此外還考慮到深度圖和彩色圖的對齊問題。各個深度相機廠家都會提供RGB與深度圖的對齊接口,但由于RGB和深度圖所使用的鏡頭區別很大,因此很難做到絕對對齊。訓練時,在RGB和深度圖之間加入一些隨機的差別有利于實際使用中的穩定性。例如深度圖不變對RGB進行10個像素的平移,或者對RGB進行3°的旋轉等手段。
深度圖不同于RGB圖像,它只有一個通道,圖像上的每個像素代表目標到鏡頭的距離,一般以毫米表示。現有的大部分商用深度相機都有適用范圍,此處使用的奧比中光Astra Pro設備的深度范圍為500~8000mm。在實際應用中大部分文獻都將深度圖轉為灰度圖然后輸入到網絡中。考慮到深度圖像含有大量的噪聲,需要對深度圖做去噪處理。首先進行窗口半徑值為5的中值濾波,將深度值小于500和大于8000(取決于深度相機的最近和最遠有效距離)的像素值設為0,如下式:

式中Dt表示經過閾值篩選后的深度圖。最后,將深度圖轉為灰度圖,如下式:

為了驗證網絡的檢測效果,選擇2組網上公開的RGB-D數據集IODoor和EPFL[13],并使用Astra Pro設備自采集了194張包含人體目標的圖片,共包含588個人體目標;每張圖最多包含7個人。該數據集采集的是室內門口區域的畫面。
為客觀評價所提出的改進檢測方法的效果,選擇查準率P(Precision)、查全率R(Recall)、平均精度Pave(Average precision)和平衡F1得分(F1 score)這4個指標作為檢測精度的評判標準,具體公式為:

式中,TP、FN、FP和TN分別表示真正例(True Positive)、假反例(False Negative)、假正例(False Positive)和真反例(True Negative)。
網絡效率評估選用每秒浮點運算次數(Floatingpoint operations per second,簡稱FLOPS)和CPU下的運行時間作為評價標準。
首先在IODoor數據集上進行測試,該數據是將Kinect V2搭載到機器人設備上,采集室內和室外多個場景下的RGB-D數據,并提供訓練集和測試集。
實驗過程與文獻[10]保持一致,設置IOU閾值為0.6,訓練時不加入額外數據,但會進行數據增強。表2列出了改進方法與參考方法的對比結果。

表2 IODoor數據集下檢測結果對比單位:%
由表2可以看出,在輸入為RGB的檢測結果中,文獻[11]的效果最好,原因是它使用了兩步檢測法Faster-RCNN,其檢測精度高,但速度非常慢,網絡模型龐大。所提改進方法的檢測效果排第二。此處還在實驗中加入YOLOV3-tiny的檢測結果,它是YOLOV3的輕量級版本,結果表明改進方法的檢測效果優于YOLOV3-tiny。
其次,在EPFL數據集下進行測試。同樣由Kinect V2采集,包含兩個室內場景下的RGB-D數據:
場景1:實驗室(EPFL-LAB),包括950幀RGB-D數據和最多4個人;
場景2:走廊(EPFL-CORRIDOR),包括超過3000幀的數據和最多8個人。
文獻[14]對該數據集重新標注,以解決嚴重遮擋的目標被漏掉的問題,在此也使用該標注信息計算結果。檢測結果如表3所示,可見本方法的檢測效果為三種方法當中最優。

表3 EPFL數據集下的檢測結果單位:%
不同方法在各個驗證數據集下的實際檢測效果如圖2所示。

圖2 檢測結果
從圖2可以看出,只使用RGB進行檢測時,對遮擋和重疊度比較高的人體檢測效果差(圖2(a)、圖2(d)、圖2(g)),加入深度信息后遮擋情況下的檢測有了很大的改善(其余各圖)。
在CPU平臺下驗證網絡運行時間。實驗使用的CPU配置為Core i5-7200,主頻2.5GHz。最終的檢測網絡,使用EPFL和IODoor數據集進行訓練,使用Astra數據集進行測試。該網絡在Pytorch框架下實現,推斷時將其轉換為ONNX格式,然后在Win10操作系統下使用C++運行推斷部分并統計時間。CPU測試結果如表4所示。

表4 各方法在CPU下的運行效率
表中列出了各方法的運行時間,包括預處理、網絡推斷和后處理總共的用時。其中,文獻[8-9]使用傳統方法進行檢測,因此沒有FLOPs指標,其FPS結果摘自原文。由表中數據可見所提改進網絡的FLOPS遠低于其他方法,運行時間也高于其它方法,不同輸入下的幀率都超過了30f/s,輸入為Depth的檢測速度僅需18.1ms,這是因為深度圖中包含很多零值,因此計算速度更快。
所提出的基于輕量級CNN網絡的RGB-D人體目標檢測算法,在兼顧檢測效果的同時保證了檢測速度,因此在眾多實際應用場景中都有極高的適用性。但由于RGB-D數據采集和標注困難,研究使用的數據集多樣性仍然不夠豐富,更多的是針對站立的人體目標,而像醫院、室內等環境下,人體姿態多種多樣,包括坐姿,躺姿等。在后續研究中,將面向更多的場景進行數據采集和網絡測試,以擴展改方法對人體目標檢測的適應范圍。