余瀟智 楊靜 李興超 馬文紋
(1.西安理工大學 自動化與信息工程學院 陜西省西安市 710048)
(2.國網(wǎng)思極飛天(蘭州)云數(shù)科技有限公司 甘肅省蘭州市 730000)
(3.國網(wǎng)甘肅省電力公司超高壓公司 甘肅省蘭州市 730070)
(4.國網(wǎng)甘肅省電力公司酒泉供電公司 甘肅省酒泉市 735000)
目標檢測是計算機視覺領域的一個重要分支,其任務是找出圖像中若干特定的目標,并給出它們的類別和位置。近年來,目標檢測算法一直是計算機視覺和圖像處理領域的研究熱門,一方面在于它是圖像語義分割[1]、實例分割[2]等更復雜視覺任務處理的基礎,另一方面是因為它在機器人導航、智能監(jiān)控以及工業(yè)檢測等諸多領域的巨大應用前景。
目標檢測的發(fā)展可分為兩個階段,分別是基于人工提取特征的傳統(tǒng)階段和基于深度學習方法的新階段。傳統(tǒng)目標檢測多采用滑動窗口結(jié)合手工提取特征的方法,最后結(jié)合專門的分類器進行分類。典型的算法有ViolaJones[3]、HOG[4]、DPM[5]等。其中,DPM 達到了傳統(tǒng)檢測算法的巔峰,連續(xù)獲得Pascal VOC(The Pascal Visual Object Classes Challenge)挑戰(zhàn)賽2007~2009年三年的檢測冠軍。它采用了將整體拆分檢測的思想,并用到了包圍框回歸和上下文信息集成等方法,對目標檢測領域的后續(xù)發(fā)展產(chǎn)生了深遠的影響。但是,人工設計特征不僅工作量大、算法魯棒性差,而且性能提升也遇到了瓶頸,在DPM 之后一直沒有大的突破。直到2014年,R.Girshick 等人將CNN(Convolutional Neural Networks)[6]應用到目標檢測當中,嘗試使用卷積神經(jīng)網(wǎng)絡來提取特征,較傳統(tǒng)方法一下將檢測的平均精度提升了約30%,給檢測效果帶來了質(zhì)的飛躍。這就是在目標檢測領域有著里程碑意義的R-CNN[7],自此,目標檢測與深度學習結(jié)合了起來,進入了新的發(fā)展階段。自R-CNN 之后,又相繼出現(xiàn)了SPP-Net[8]、Fast R-CNN[9]、Faster R-CNN[10]、R-FCN[11]以及YOLO[12]、SSD[13]等速度更快、效果更好的檢測算法。本文將重點介紹基于卷積神經(jīng)網(wǎng)絡的目標檢測算法。
卷積神經(jīng)網(wǎng)絡(Convolutional Neural Networks,CNN)是一類包含卷積計算且具有深度結(jié)構(gòu)的前饋神經(jīng)網(wǎng)絡[14]。因卷積操作對特征提取的獨特優(yōu)勢,使得它比傳統(tǒng)的神經(jīng)網(wǎng)絡具有更好的學習能力。目前,卷積神經(jīng)網(wǎng)絡已成為深度學習的主流框架,并已被廣泛應用于圖像處理、自然語言處理和醫(yī)療診斷等多個領域。
卷積神經(jīng)網(wǎng)絡其整體架構(gòu)分為輸入層、卷積層、池化層和全連接層。網(wǎng)絡通過這些單元完成特征提取、非線性映射、下采樣、轉(zhuǎn)化輸出以及最終構(gòu)造目標函數(shù)并優(yōu)化的基本過程。
卷積神經(jīng)網(wǎng)絡采用了三個基本概念:局部鏈接,共享權(quán)值和池化。局部連接和共享權(quán)值大大減少了參與卷積網(wǎng)絡的參數(shù),同時,它們能夠有針對性的提取圖像的空間特征,適應圖像的平移不變性。而池化操作,一般跟在卷積層之后,用來簡化從卷積層輸出的信息,它也減少了神經(jīng)元的個數(shù)。因此,相比于傳統(tǒng)神經(jīng)網(wǎng)絡,卷積神經(jīng)網(wǎng)絡能夠更好的提取圖像的空間視覺特征,并且使用更少的連接和參數(shù)。這將使得模型得到更快的訓練并有助于建立更深度的網(wǎng)絡。
1998年,Yann LeCun 提出LeNet[15]網(wǎng)絡,用于解決手寫數(shù)字識別的視覺任務,為卷積神經(jīng)網(wǎng)絡的發(fā)展奠定了基礎。LeNet 在雖然在Mnist 數(shù)據(jù)集上表現(xiàn)的很好,但是在更大的真實場景的數(shù)據(jù)集上就力不從心了。直到2012年,Hinton和他的學生Alex Krizhevsky 提出了AlexNet[16],它比LeNet具有更深層的網(wǎng)絡結(jié)
構(gòu)并且有效的抑制了過擬合問題,此算法在當年ImageNet 大賽中以壓倒性的優(yōu)勢戰(zhàn)勝其它傳統(tǒng)機器學習方法,拿到冠軍,為卷積神經(jīng)網(wǎng)絡的發(fā)展確立了新的里程碑。2014年,VGGNet[17]網(wǎng)絡在ILSVRC 比賽中獲得定位項目冠軍和分類項目亞軍。VGGNet 是由牛津大學計算機視覺組合和Google DeepMind 公司研究員一起研發(fā)的深度卷積神經(jīng)網(wǎng)絡,它的最大特點在于使用多個小卷積核串聯(lián),增加了網(wǎng)絡深度。同樣在2014年的ILSVRC 比賽中,獲得分類項目冠軍的網(wǎng)絡是GoogLeNet[18],它通過引入Inception 模塊來增加網(wǎng)絡寬度,同時通過引入1*1 的卷積層來壓縮通道數(shù)量,降低計算量,從而進一步增加網(wǎng)絡深度。2015年,微軟研究院的Kaiming He 等人提出殘差網(wǎng)絡ResNet[19],并獲得當年ILSVRC 比賽的冠軍。ResNet 使用短路連接的方式緩解了深層網(wǎng)絡梯度消失的困擾,并阻止了網(wǎng)絡的失真與退化,因此將網(wǎng)絡深度大幅的提高到152 層,這對于神經(jīng)網(wǎng)絡的發(fā)展可以說是革命性的。在這之后,人們又提出了殘差網(wǎng)絡的改進版本ResNetXt[20]、DenseNet[21]以及SENet[22]等更多的算法模型。
傳統(tǒng)的目標檢測方法主要包括區(qū)域搜索、提取特征和目標分類三個部分。其中,區(qū)域搜索主要有滑動窗口和區(qū)域聚合兩種方式,特征提取基于人工完成,目標分類則多用傳統(tǒng)機器學習的方法完成。后來,隨著深度學習逐漸嶄露頭角,卷積神經(jīng)網(wǎng)絡被引入到目標檢測領域。與傳統(tǒng)方法相比,它具有自動學習特征的能力,并且具有更強的特征表達能力和泛化性,因此逐步代替了基于人工的特征提取方式。
目前,基于卷積神經(jīng)網(wǎng)絡的目標檢測分為兩種方式,即兩段檢測方法和一段檢測方法。兩段檢測是先給出預選區(qū)域,然后再針對區(qū)域進行分類與回歸。而一段檢測是在特征提取后直接進行分類與回歸。下面分別介紹目標檢測中的常用概念和兩種檢測方法中的若干經(jīng)典算法。
2.1.1 IOU 交并比
IOU(Intersection over Union)即交并比,就是兩個框相交的面積除以兩框相并的面積,計算方法如圖1所示。在物體檢測中,通過比較真實框和預測框的重疊面積可以判斷檢測精度。因此,IOU 作為在目標檢測中對目標物體定位精度的標準。
圖1:交并比
2.1.2 精確率與召回率
其中,TP(True Positive)為正樣本被預測正確的數(shù)量,F(xiàn)P(False Positive)為負樣本被預測為正樣本的數(shù)量。
其中,F(xiàn)N(False Negative)為正樣本被錯誤預測為負樣本的數(shù)量。
2.1.3 AP 與mAP 值
AP 與mAP(mean Average Precision)是目標檢測算法中常用的評價指標,AP 是單個類別的平均精度,而mAP 是AP 值在所有類別下的均值。
AP 即為PR 曲線與坐標軸形成的面積,其中,r 代表著不同IoU 閾值下的召回率。
平均精確率均值(Mean Average Precision,mAP):
其中,N 為物體類別的數(shù)量,APn為第n 個類別的平均精確率。
2.2.1 R-CNN 算法
R-CNN[7]是目標檢測領域的里程碑,它的最大突破在于引入CNN 提取圖像特征,將CNN 在分類任務上的優(yōu)異表現(xiàn)遷移到檢測任務上來,而在此之前,特征提取主要依賴人們的手工設計來完成。R-CNN 在VOC2012 上的mAP 值達到了53.3%,較傳統(tǒng)模型提升了30%以上。算法首先使用Selective Search[23]對輸入圖像提取約2000 個候選框,再將候選框中的圖像縮放至標準尺寸后送入CNN 進行特征提取,并得到特征向量,然后送入SVM[24]進行分類,最后線性回歸得到目標位置并用非極大值抑制算法去掉多余檢測框,流程如圖2。R-CNN 的不足之處首先在于圖像在進入卷積之前進行了截取或拉伸,破壞了圖像的原本形態(tài),影響識別效果,其次是對每個候選框的特征提取進行了大量重復的卷積運算,最后它的分類器訓練和位置回歸是獨立進行的,從而導致它資源開銷大且訓練時間很長。
圖2:R-CNN 流程
2.2.2 SPP-Net 算法
SPP-Net[8]解決了輸入全連接層圖像必須固定尺寸的問題。它引入了空間金字塔池化層 (Spatial pyramid pooling layer,SPP layer)[8]對特征圖進行采樣,SPP 層是對不同大小的區(qū)域劃分成固定個數(shù)的單元格進行池化,這樣無論輸入圖像的尺寸如何,經(jīng)過SPP 層后,都能生成固定維度的特征向量,如圖3所示。
圖3:空間金字塔池化
算法首先通過Selective Search 方法生成約2000 個候選框,并對整張圖片送入CNN 卷積,提取出特征圖。然后在特征圖上對應找到每個候選框區(qū)域,再對各個候選框采用金字塔空間池化,提取出固定長度的特征向量,最后進行分類和回歸,流程如圖4。SPP 池化有效增強了尺寸魯棒性,另一方面,算法只用CNN 處理一次,速度提升很大。在Pascal VOC 2007 數(shù)據(jù)集上,在準確度相當或更好的情況下,其處理測試圖像的速度比R-CNN 快24 至102 倍。但是,它的分類和回歸訓練仍是獨立的,并且也沒有解決R-CNN 需要存儲大量特征的問題。
圖4:SPP-Net 流程
2.2.3 Fast R-CNN 算法
Fast R-CNN[9]借鑒SPP-Net 模型,引入了ROI 池化層[9],將圖像劃分為均勻的網(wǎng)格,從而保證處理后的特征圖具有相同的尺寸。它首先對圖像進行卷積運算,然后將Selective Search 生成的候選框映射到卷積后的特征圖上,基于此特征圖的候選區(qū)域進行ROI 池化,生成固定尺寸的新特征圖和特征向量,最后送入全連接層進行并行的分類與位置回歸,流程如圖5所示。Fast R-CNN 較前述網(wǎng)絡最大的改變就是引入多任務損失函數(shù)(Multi-task loss),將分類與位置回歸合并在一個階段進行訓練。另一方面,在網(wǎng)絡訓練時ROI 操作同樣是共享了同一張圖片的卷積特征。這使得網(wǎng)絡訓練和測試的速度都得到了顯著的提高。用深度網(wǎng)絡VGG-16[17]時,它比R-CNN 訓練階段快9 倍,測試階段快213 倍,比于SPP-Net 訓練階段快3 倍,測試階段快10 倍。但是,Selective Search 候選框的生成還是獨立計算的,還不是完整的端到端系統(tǒng)。
圖5:Fast R-CNN 流程
2.2.4 Faster R-CNN 算法
Faster R-CNN[10]引入了RPN(Region Proposal Network)[10]網(wǎng)絡來取代之前獨立的候選框生成算法,形成了真正意義上的端到端的神經(jīng)網(wǎng)絡模型。RPN 是區(qū)域推薦網(wǎng)絡,它通過對特征圖上生成的錨框進行預測,判斷錨框是前景還是背景,同時,根據(jù)錨框和真實框的位置回歸給出錨框的預測位置。Faster R-CNN 首先對輸入圖像進行卷積操作生成特征圖,然后通過RPN 網(wǎng)絡給出一系列候選區(qū)域,接著進入ROI 池化,最后進入全連接層進行物體分類和精確的位置回歸,流程如圖6所示。但是,F(xiàn)aster R-CNN 對于每個Rol 區(qū)域的分類和回歸是單獨計算的,并且子網(wǎng)絡中的全連接層含有大量的參數(shù),計算量也是很大的。另一方面,ROI 池化沒有位置信息,也影響了定位精度。
圖6:Faster R-CNN 流程
2.2.5 R-FCN 算法
R-FCN(Region-based Fully Convolutional Networks)[11]是基于區(qū)域的全卷積網(wǎng)絡。它通過引入位置敏感得分圖(position-sensitive score maps),向RoI 池化中加入了位置信息,較好的平衡了分類網(wǎng)絡“平移不變性(translation invariance)” 和檢測網(wǎng)絡的“ 平移可變性(translation variance)”[25]之間的矛盾。同時,它去掉了全連接層,使用全卷積的網(wǎng)絡結(jié)構(gòu),實現(xiàn)網(wǎng)絡層的計算共享,從而大大減少了網(wǎng)絡參數(shù),提升了檢測速度。簡單來說,算法是在RPN 網(wǎng)絡給出Rol 區(qū)域后,將每一個Rol 劃分為K*K 的網(wǎng)格,然后分別對應到位置敏感得分圖上進行池化,最終得到K*K*(C+1)維度(C+1 指C 個類別+1 個背景)的特征圖用于分類。類似的,設計與分類并行的位置回歸子網(wǎng)絡,同樣采用位置敏感得分池化的操作,得到K*K*4 維度(4 指4個位置值)的特征圖,進行位置回歸,流程如圖7。R-FCN處理每張圖的耗時為170ms,比Faster R-CNN 快2.5 ~20 倍。
圖7:R-FCN 流程
2.3.1 YOLO v1
YOLO(You Only Look Once) v1[12]是重要的單階段檢測算法,它將整張圖片作為輸入,用卷積神經(jīng)網(wǎng)絡提取特征后直接進行分類與回歸。算法首先通過卷積神經(jīng)網(wǎng)絡提取圖像特征,再經(jīng)過兩個全連接層,然后輸出7*7*30 尺度的特征圖。在特征圖中,7*7 是因為YOLO v1 將輸入圖像劃分為7*7 個網(wǎng)格,每個網(wǎng)格對應特征圖中的一個點。其中,每個網(wǎng)格對應的特征向量包括20 個對象的概率 + 2 個邊框 * 4 個坐標 + 2 個邊框的置信度。最終,算法根據(jù)這些參數(shù)分類與位置回歸,其流程如圖8。與兩段算法相比,YOLO v1 的顯著特點就是速度快。其次,由于YOLO 直接處理整張圖像,因此,與提出候選區(qū)域算法相比,它的背景誤檢率更低。但是,由于YOLO v1 的一個子圖像塊中只能包含一個目標,因此,不適合小目標檢測。而且,它的精度也比R-CNN系列算法低。
2.3.2 YOLO v2~v3
YOLO v2[26]針對v1 做了若干改進。首先就是使用了錨,YOLO v2 通過k-means 算法,在訓練集中對錨的位置和形狀進行聚類,以便更加符合對象中的樣本尺寸。在YOLO v2中,預測框增加了,因此召回率也提高了。同時,由于每個錨都分別回歸各自框的坐標和分類概率,它對密集小目標的檢測能力也提升了。此外,YOLO v2 還增加了批次歸一化、引入Darknet-19 的特征提取網(wǎng)絡等做法。YOLO v3[27]主要加入了多尺度特征圖的融合和殘差網(wǎng)絡結(jié)構(gòu),從而進一步提升了檢測精度。
2.3.3 SSD 算法
SSD(Single Shot Multibox Detector)[13]是另一種重要的一段檢測算法,它在VGGNet 的基礎上增加了4 個小尺寸的卷積層,然后在6 個不同的特征圖的每個位置上預設默認框(default box),類似于Faster R-CNN 的錨。算法利用小尺寸的卷積網(wǎng)絡在特征圖上滑窗,對于每個位置的每個錨,分別進行分類和邊框回歸,流程如圖9。SSD 的優(yōu)勢在于采用多尺度特征圖進行檢測,不但提高了分類正確率,而且有效提升了對不同尺度目標的檢測能力,尤其是對小目標檢測的能力比YOLO 有了一定的提升。
圖9:SSD 流程
2.3.4 RetinaNet
YOLO,SSD 等一段檢測算法雖然明顯提高了檢測速度,但由于沒有第一步預選框的初篩,導致真正的樣本框占比極小,正負樣本類別很不均衡。這也是一段檢測算法精度普遍低于兩段檢測算法的一個重要原因。對此,Lin 等人提出了RetinaNet[28],算法的重點在于Focal Loss 函數(shù),即在類別不平衡較大時,通過增加調(diào)節(jié)因子讓損失函數(shù)更加關注難分樣本,從而給予難分樣本更多的優(yōu)化。基于此,RetinaNet 框架被提出,用來驗證Focal Loss 的效果。經(jīng)驗證,RetinaNet在COCO 數(shù)據(jù)集上的AP 值達到40.8%,其精度可以與兩段檢測方法媲美。但速度較YOLO 和SSD 有明顯下降。
評判算法優(yōu)劣的一個重要方法就是在公開的數(shù)據(jù)集上進行評測,下面介紹目標檢測領域比較有影響力的幾個數(shù)據(jù)集以及各算法在部分數(shù)據(jù)集上的性能表現(xiàn)。
3.1.1 PASCAL VOC
PASCAL VOC(Visual Object Classes)挑戰(zhàn)賽是計算機視覺領域早期的重要比賽之一,包括圖像分類、目標檢測、場景分割、事件檢測等任務。目標檢測常用的是VOC2007和VOC2012 數(shù)據(jù)集。其中,VOC2007 包括5000 張訓練圖像和1.2萬個標注目標,VOC2012包括1.1萬張訓練圖像和2.7萬個標注目標。
3.1.2 ImageNet Imagenet 是一個大規(guī)模的帶標簽圖像數(shù)據(jù)集。數(shù)據(jù)集有超過1400 萬張圖片和約2.2 萬個類別。其中有超過百萬張的圖片有明確的類別標注和圖像中物體位置的標注,也是適合的目標檢測數(shù)據(jù)集。
3.1.3 MS-COCO
MS-COCO 數(shù)據(jù)集是微軟團隊發(fā)布的一個可以用來進行圖像識別、分割和注釋的數(shù)據(jù)集,其包括91 類目標和328,000 個圖像。它的特點是圖片大多數(shù)來源于生活中,背景更復雜,且含有的小目標更多,另一方面,它除了標注每個目標邊框外,還標注了每個實例的分割信息。因此,COCO 逐漸成為目標檢測的一個主流測評集。
3.1.4 Open Images
Open Images 來自于Google 團隊,它包括900 萬張圖像和6000 多個分類。數(shù)據(jù)集的對象更加多樣化,通常包含多個對象的復雜場景。同時,還提供了可視化的關系注釋。較之前的數(shù)據(jù)集有更加豐富的信息。
本文介紹的主要目標檢測算法的性能對比如表1所示,表中的前5 行為兩段檢測算法,后6 行為一段檢測算法。首先,這些算法推出的時間跨度較大,用于檢測的數(shù)據(jù)集和測試環(huán)境不完全相同,文中所列文獻數(shù)據(jù)盡量保證數(shù)據(jù)集和測試環(huán)境的統(tǒng)一,以減小硬件和外部環(huán)境帶來的差異。通過表格可以看出,一是兩段檢測算法的檢測速度明顯慢于一段檢測算法。二是就兩類方法本身而言,隨著算法的逐步改進和結(jié)構(gòu)的不斷優(yōu)化,檢測的效率和精準度總體趨勢都在上升。第三,可以看到數(shù)據(jù)集對檢測結(jié)果的巨大影響,例如YOLO v2 到v3,其mAP 值下降明顯,正是因為COCO 數(shù)據(jù)集較PASCAL VOC 更加復雜,小目標更多。也可以看出復雜背景及小目標檢測仍是目標檢測所面臨的挑戰(zhàn)。
表1:主要目標檢測算法性能對比
基于卷積神經(jīng)網(wǎng)絡的目標檢測方法分為一段檢測和兩段檢測。兩段檢測方法有預篩選的過程,精確度普遍較高,但檢測速度較慢。一段檢測將圖像檢測直接轉(zhuǎn)化為回歸問題,檢測速度大大提升,但存在正負樣本分布不均衡的問題,檢測精度受到影響。不過,隨著框架的演進,其精度也在不斷提高。并且相較于兩段檢測應用范圍更廣,尤其是對于實時檢測任務。
目前,基于深度學習的目標檢測方法已是當前主流,各類算法層出不窮。一方面,用于特征提取的CNN 迅速發(fā)展,網(wǎng)絡深度更深、準確度更高;另一方面,支撐模型訓練的硬件設備性能更加強悍,這些都為目標檢測的發(fā)展帶來了很大的支撐。就目標檢測本身而言,從一開始的多階段訓練,到最后融合為整個端到端的網(wǎng)絡,從單一的特征提取到加入多特征融合,再到對圖像全局和局部特征更好的融合處理,以及訓練方式的不斷優(yōu)化等等,在多方面均取得了很大的進步,總體朝著檢測速度更快,同時精度更高的方向不斷演進。但是,目前對于復雜背景下的多尺度目標檢測,密集小目標檢測等仍有不足。同時,隨著應用場景越來越復雜,如何在復雜環(huán)境下快速準確的判別目標,以及如何利用場景的語境信息和物體相互關系等,均是目標檢測領域未來的研究方向。