李章維,胡安順,王曉飛
浙江工業大學 信息工程學院,杭州310023
目標檢測是計算機視覺的重要內容,是眾多計算機視覺任務的基礎。其應用范圍非常廣泛,如人臉檢測、無人駕駛、目標跟蹤、智能交通等。近年來,隨著大數據的出現以及計算機處理能力的提升,出現了一系列以卷積網絡為核心的檢測算法,目標檢測精度與檢測速度得到大幅提升,拓寬了計算機視覺應用范圍,帶來了更多應用價值。卷積神經網絡是目前檢測算法的主要研究路線。
目標檢測可分為基于手工特征(Feature-Based)和基于卷積神經網絡(CNN)兩種方法。本文介紹了三種手工特征和三種機器學習方法,分析了Feature-Based方法檢測效果差的原因,詳細描述了基于CNN 的多種目標檢測方法,梳理了每種方法的改進和不足之處,介紹了該方法的檢測效果,為了解、學習以及進一步發展目標檢測提供一些參考。
2012 年以前,目標檢測主要利用Haar、HOG(梯度直方圖)、LBP(局部二值模式)等手工特征和AdaBoost、SVM(Support Vector Machine)、DPM(Deformable Part Model)等機器學習方法(稱為Feature-Based 方法)。2012 年,Krizhevsky 等 對CNN(Convolutional Neural Networks)網絡做出改進,在CNN 的基礎上訓練了一個大的神經網絡DCNN(Deep Convolutional Neural Networks)。DCNN 以錯誤率比第二名低10%的巨大優勢獲得ILSVRC-2012 比賽冠軍,CNN 網絡得以再次被重視。同年,Uijlings 等用選擇性搜索(Selective Search),從整幅圖像中選出有用區域并提取特征進行檢測,為后續CNN衍生出的TWO-STATE方法奠定基礎。此后,目標檢測的速度和精度大幅提升,基于CNN 的檢測方法成為主流。
目標檢測效果受多種因素影響,例如光照條件、遮擋情況、應用場景、物體尺寸等,Feature-Based方法受手工特征設計質量高低和機器學習方法自身存在的缺陷影響,檢測效果差,在實際運用中受到多種限制。基于CNN 方法通過提取更深層次特征,大幅提升檢測速度與檢測精度,增強了目標檢測在實際應用中的效果。但是,基于CNN 方法仍有不足之處,例如,使用基于CNN方法時仍需要在檢測精度與檢測速度之間進行權衡。
圖1給出了三種手工特征模板。LBP特征(局部二值模式)如圖1(a)所示,模板中心周圍的像素值均與模板中心像素值比較,大于中心像素值為1,小于中心像素值為0。從模板左上角開始,順時針旋轉組成的二進制數對應的十進制數即為中心點像素值。Ojala 等人[1]對LBP特征做出改進,提出了具有灰度不變性和旋轉不變性LBP特征。LBP特征對光照具有很強的魯棒性,針對的是物體的紋理特征,當物體紋理與背景紋理相似時,會降低檢測效果。HOG 特征如圖1(b)所示,Block 在Window 內滑動,內部包含多個Cell。Block 內所有Cell的梯度直方圖串聯即為Block 的梯度直方圖(Block 的HOG 特征描述),為了獲得光照不變性和陰影不變性,需要對比度歸一化Window 內重疊的Block。Window內所有Block 的梯度直方圖串聯即為Window 的HOG特征描述,通過滑動窗口,收集整幅圖片的HOG 特征[2]。HOG特征提取的是物體邊緣特征,對圖像中的噪聲敏感;圖1(c)所示是四種基本Haar特征,每種特征特征值等于白色區域的像素和減去黑色區域的像素和。Haar特征利用灰度圖中物體表面明暗變化提取特征,因此Haar特征對光照魯棒性很差。

圖1 三種特征模板
AdaBoost[3]通過選取多個最優弱分類器組成強分類器,多個強分類器級聯成最終分類器。AdaBoost 算法,訓練前期,選取最優弱分類器比較快速,后期最優弱分類器的選取越來越困難,需要大量的訓練樣本,訓練時間越來越長,而且容易出現過擬合。
SVM(Support Vector Machine)引入核函數的概念,在低維度計算高維數據。SVM 的分類效果與核函數選取以及核函數參數有關,核函數的參數是不定的(訓練得到),參數的選取與訓練過程中模型收斂速度和過擬合情況有關。
2008 年,Felzenszwalb 等人[4]提出DPM(Deformable Part Model)算法,利用圖像金字塔,提取同一圖像不同尺度的特征。DPM 使用的特征,本質是一種改進的HOG 特征,取消了HOG 特征的block,改變了Cell 梯度直方圖的歸一化方式,通過對圖像金字塔采集特征得到HOG 特征金字塔,特征金字塔頂部是粗略HOG 特征,底部是精細HOG 特征。DPM 設計了根濾波器(root filter)以及部件濾波器(parts filter),root filter匹配目標粗略HOG 特征,得到目標整體輪廓并得到匹配分數,parts filter 匹配目標精細HOG 特征,得到目標部分細節并得到匹配分數,最后綜合兩種濾波器匹配得分,確定檢測結果。DPM 連續三年獲得CVPR VOC 挑戰賽冠軍,設計者本人Felzenszwalb,在2010 年被VOC 授予“終身成就獎”,可見DPM的成功之處。DPM只對剛性物體和高度可變物體檢測效果好,其模型復雜,在模型訓練過程中,正樣本選取復雜,root filter 和parts filter的位置作為潛在變量(latent values)進行訓練,訓練難度大,檢測精度低。
Uijlings 等[5]提出選擇性搜索(Selective Search),通過先對圖像做分割,再對分割區域做相似性融合,得到整幅圖像中目標可能存在區域,提取可能區域HOG 特征,利用SVMs 分類,得到檢測結果。Selective Search結合了分割和枚舉搜索的優點,通過對可能區域提取HOG 特征,判斷可能區域是否有目標,不用對整張圖片提取特征再進行判斷,檢測精度有所提升。由于Selective Search 對剛性物體和非剛性物體都可以較好地提出可能區域,Selective Search成為提取目標可能存在區域的常用方法。
近年來,Feature-Based方法得到改進,馮等[6]利用增加新的Haar特征結合AdaBoost算法提升了人臉檢測的精度,但是訓練時間更長,抗干擾能力差,檢測速度慢;汪等[7]以及歐陽等[8]改進了AdaBoost選取最優弱分類器時權值更新的方法,降低過擬合對檢測結果的影響,提升了系統的檢測速度與檢測精度,但是仍未擺脫手工特征抗干擾能力差的束縛;呂等[9]將HOG特征與LBP結合用于藥材識別,通過檢測圖像紋理和邊緣特征,提升了藥材識別率,但是其抗干擾能力差,泛化能力弱;閆等[10]將AdaBoost 中的弱分類器與SVM 級聯構成最終的分類器用于車標識別;楊等[11]結合AdaBoost和SVM用于識別棉葉螨危害等級,比單獨使用AdaBoost 和SVM 取得更高識別正確率,其模型復雜,訓練困難,抗干擾能力差。
4.1.1 DCNN
Krizhevsky 等[12]在CNN 網絡基礎上設計了dropout層,用于減少卷積網絡訓練中學習到的參數,減少網絡訓練過程中的過擬合情況,并設計新的激活函數ReLUs(Rectified Linear Units)作為神經元的激活,加快網絡收斂速度。Krizhevsky用120萬張圖片訓練一個大的神經網絡DCNN(Deep Convolutional Neural Networks),在ILSVRC-2012比賽中DCNN的top-5錯誤率比第二名減少了10%。圖2 是DCNN 的網絡結構,圖片輸入DCNN網絡經過多次卷積、池化以及全連接最后輸出一個1 000 維的向量,對應可以檢測出1 000 個類別。DCNN檢測速度慢,檢測精度較低,訓練速度慢。
4.1.2 R-CNN
Girshick等人[13]提出R-CNN方法,先從圖片中選出候選區域(Region proposal),再利用CNN 網絡(Convolutional Neural Networks)進行檢測,得到候選區域的檢測結果,如圖3。R-CNN檢測步驟如下:
(1)用Selective Search 從圖片中提取約2 000 個候選區域(Region proposals)。
(2)將每個候選區域縮放(wrap)成固定尺寸(227×227)輸入到CNN網絡,得到一個4 096維的特征向量。
(3)用特定類別的SVM對特征向量打分。
(4)非極大值抑制確定類別。
R-CNN在PASCAL VOC 2010數據集上的類別平均檢測精度mAP(mean Average Precision)為53.7%,在VOC 2012數據集上的mAP為53.3%,比之前最好的檢測結果提高30%。精度的大幅度提高與R-CNN網絡訓練方式有關。R-CNN模型首先在ILSVRC 2012數據集上預訓練(pre-training),然后從VOC數據集中Selective Search 出大量候選區域,wrap 成固定大小(227×227)作為訓練樣本進行微調(fine-tuning),Girshick指出微調的過程提升8%的mAP。R-CNN也存在很多缺點:
(1)步驟繁瑣:Region proposals+wrap+pre-training+fine-tuning+訓練SVMs(每個類別都需要訓練出一個SVM)。
(2)模型訓練時間長。
(3)檢測速度慢,只是計算一張圖片的候選區域以及計算候選區域的特征,在GPU上用時13 s,在CPU上用時53 s。
(4)R-CNN的輸入圖片需要進行wrap操作,破壞原始圖像的信息,影響檢測精度。
4.1.3 SPP-net
2015年,He等[14]提出空間金字塔池化(SPP-net),取消了R-CNN將輸入圖片wrap成固定尺寸造成信息損失的約束。SPP-net檢測步驟如下:

圖2 DCNN網絡結構

圖3 R-CNN網絡結構
(1)在輸入圖片上select search出2 000個候選區域。
(2)resize 整個圖片大小,對圖片最小邊做變換:min(w,h)=s,s ∈S={480,576,688,864,1 200}。
(3)提取圖片resize 后的特征圖(feature maps,與S對應,5張特征圖)。
(4)每個候選區域最小邊做變換:min(w,h)=s,s ∈S={480,576,688,864,1 200},候選區域選取s 原則是使候選區域的像素值最接近224×224,找到候選區域的s 后在s 對應的特征圖(feature map)上找到候選窗口的位置,用SPP-net提取特征。
(5)提取的特征通過全連接層,輸入SVMs 得到檢測結果。
與R-CNN 相比,SPP-net 不用對每個候選區域(Region proposal)都進行卷積操作,候選區域最小邊變換后,直接映射到對應的feature map 上得到候選區域特征,檢測速度是R-CNN 的24~102 倍。SPP-net 訓練時,輸入圖片是可變尺寸,增強了網絡的尺度不變性,降低網絡訓練時,過擬合的可能性。SPP-net 的輸出采用SVMs作為分類器,模型訓練復雜,耗費時間長。
如圖4 所示是SPP-net 網絡結構,window 是Region proposal在特征圖上的映射位置,對window做空間金字塔,最大值池化(Max pooling)圖4 中每一個網格,每個網格均得到一個1×256 的向量(256 是最后一層卷積層的filter 數量),所有網格的向量拼接即為window 的特征向量,得到的特征向量經過全連接層,再送入SVMs得出分類結果。
4.1.4 Fast R-CNN
2015 年,Girshick 等提出Fast R-CNN[15],用ROI(Region Of Interest)池化層代替SPP-net 的空間金字塔池化,沒有采用SVMs 作為分類器,在全連接層(FC)后面增加兩個輸出層分別用于檢測類別和位置。Fast R-CNN檢測過程如下:
(1)從輸入圖片獲取感興趣區域(ROIs),對輸入圖片進行一系列卷積、池化得到feature map。
(2)ROIs映射到feature map上,得到每個ROI的特征圖。
(3)對ROI 特征圖做ROI 池化,得到固定長度的特征向量。

圖4 SPP-net網絡結構
(4)特征向量經過FC 層,由輸出層,得到分類結果和目標位置。感興趣區域ROIs是從輸入圖像上選擇性搜索出的多個目標區域(object proposals)。
如圖5 所示是ROI 池化層結構。 w×h 的ROI 區域,被拆分成W×H 個網格,每個網格的大小為w/W×h/H ,池化每個網格,均得到一個向量,所得向量拼接即為ROI區域的特征向量。ROI池化是SPP-net的一種特殊情況,只用金字塔的一層圖像。

圖5 ROI池化
Fast R-CNN 利用端到端的思想,用兩層輸出層代替SPP-net 的SVMs 分類器,不用為每個類別分別訓練出一個SVM,簡化訓練步驟。但是ROIs區域是在圖片輸入到CNN 網絡前獲得,因此,Fast R-CNN 并不是真正意義上的端到端。不包括ROIs的獲取時間,Fast R-CNN網絡檢測一張圖片耗時0.3 s。ROIs 的獲取限制了Fast R-CNN的檢測速度,導致其不能滿足實時檢測要求。
4.1.5 Faster R-CNN
針對Fast R-CNN 在CNN 網絡外獲取ROIs 的不足,Ren等[16]提出Faster R-CNN方法,在Fast R-CNN網絡的基礎上設計了RPN(Region Proposal Networks)網絡,在整個網絡內部獲取Region proposals,實現真正意義上的端到端。圖6是RPN網絡的結構。proposal的提取耗時10 ms)。

圖6 RPN網絡結構
圖7是Faster R-CNN的檢測過程。檢測步驟如下:
(1)圖片經過卷積網絡得到Feature maps。
(2)RPN網絡從Feature maps獲取Region proposals。
(3)proposals 和Feature maps 分別進行ROI 池化得到各自特征向量。
(4)根據proposals特征向量檢測其類別、位置。
(5)根據Feature maps的特征向量對結果進行調整。
Faster R-CNN 是端到端的模型,為減少整個網絡的計算時間,RPN網絡與Fast R-CNN網絡共享卷積層,整個網絡處理一張圖片耗時198 ms,接近實時檢測的速度,仍不能實現實時檢測。

圖7 Faster R-CNN檢測過程
圖6 中的Feature map 是RPN 網絡和CNN 網絡共享的最后一個卷積層特征圖。Feature map上設置一個中心設置錨點(anchor)的n×n 滑動窗口,每個錨點代表k 個錨盒,k 決定每個窗口得到的候選區域(Region proposal)數目。Ren 令n=3,設置3 種不同尺度、不同縱橫比的錨盒(anchor box),每個滑動窗口提取9 個Region proposal。利用RPN 提取的Region proposals不僅包含的有用信息多,提取速度也快(每張圖片Region
4.2.1 YOLO
2016 年,Redmon 等[17]提出YOLO(You Only Look Once)算法,將目標檢測視為包含類別信息的空間位置回歸問題,開辟了目標檢測新思路。YOLO是端到端的設計,和Faster R-CNN 相比YOLO 只包含一個卷積網絡,結構更簡單。YOLO的網絡結構如圖8所示。經過多次卷積、池化以及全連接后,YOLO輸出一個7×7×30的張量。

圖8 YOLO網絡結構
圖9為YOLO的檢測過程示意,檢測過程如下:
(1)整張圖片劃分為S×S(Redmon 設計為7×7)的網格。
(2)圖片輸入CNN網絡,輸出一個7×7×30的張量。
(3)非極大值抑制得到檢測結果。
由檢測過程可知每個網格會得到一個1×1×30的張量,目標檢測的結果由每個網格的張量信息確定,圖10表示每個網格的張量信息。

圖9 YOLO檢測過程

圖10 單個網格信息
YOLO只包含一個卷積網絡,直接對整幅圖片做卷積,利用圖片全局信息,一次預測出圖像中所有目標位置及類別。YOLO結構簡單,泛化能力強、檢測速度快,在GPU 上為45 f/s(Frame Per Second),可用于實時檢測。YOLO網絡訓練使用224×224像素的圖片,檢測時使用448×448 像素的圖片,其檢測精度比Fast R-CNN和Faster R-CNN低,目標位置定位不準確,對小目標檢測效果差。即使在理想情況下,YOLO一次最多檢測49個目標。
4.2.2 YOLO9000
Redmon 等[18]對YOLO 進行改進,提出YOLO9000(YOLOv2)。其步驟復雜,實現難度大。
(1)結構改進:YOLOv2 在YOLO 結構基礎上對每個卷積層都進行批歸一化處理(batch normalization),提升了2%的mAP。批歸一化使得模型不用考慮過擬合問題,因此YOLOv2移除YOLO網絡中dropout層,加快了模型收斂速度[17]。YOLOv2 采用錨盒(anchor boxes)預測包圍盒(bounding boxes),取消了YOLO 網絡中全連接層,考慮到錨盒尺寸對檢測精度影響,Redmon等采用K-MEANS 算法,利用訓練集的包圍盒,得到較好的先驗尺寸。
(2)訓練數據改進:因為YOLOv2 網絡中沒有全連接層,所以輸入網絡的圖片可以是任意大小,Redmon對訓練數據32 倍下采樣,實現同一個網絡對不同分辨率圖像檢測;在訓練時將檢測數據集和分類數據集混合訓練,可以檢測更多類別。
(3)模型訓練方法改進:采用TWO-STATE 模型的訓練思想,先用224×224 分辨率樣本預訓練,再用448×448的高分辨率樣本微調,提升檢測精度。
4.2.3 SSD
在YOLO 的影響下Liu 等[19],在VGG-16 模型的基礎上,取消全連接層,增加多個卷積層(Liu 稱其為卷積特征層,convolutional feature layers)提取特征,SSD 結構如圖11。Covn4_3和卷積特征層輸出的特征圖中,每個位置均設置尺度不同、縱橫比不同的默認盒(default boxes),同一張特征圖中,每個位置default boxes 相同,default boxes尺度隨特征圖尺度變化,特征圖隨卷積深入尺寸越來越小,最后為一個1×1×256 的張量。Liu 在Classifier1 對應的特征圖中每個位置設置4 個default boxes,Classifier2 對應的特征圖中每個位置設置6 個default boxes。每個default box中包含對應位置的類別信息和位置信息,根據所有的default boxes信息最后利用非極大值,得到最終檢測結果。Classifier1為Covn:3×3×(4×(Classes+4)),Classifier2為Covn:3×3×(6×(Classes+4))。
表1 是SSD 結構中獲得每個卷積特征圖的卷積操作。
SSD是一種端到端模型,利用YOLO的回歸思想和Faster R-CNN 中的anchor 機制,檢測速度比YOLO 快,檢測精度可以達到Faster R-CNN水平。SSD對中小目標檢測效果差,陳等[20]利用多尺度卷積的特點對SSD做出改進,實現對中小目標也有較好的檢測效果:對小占比目標,利用反卷積和區域映射,在高分辨率特征圖上提取小占比目標的特征;對中等目標,增加網絡深度提取更抽象的語義信息;該方法在提升檢測精度的同時增加了網絡的復雜度,降低了檢測速度。

圖11 SSD網絡結構

表1 獲取每個卷積特征圖的操作
常用的數據庫有PASCALVOC、ImageNet、MS-COCO等。表2 為CNN 方法檢測PASCAL VOC2007 數據集(20個類別),得到的所有類別平均精度mAP(mean Average Precision)。方法名后面的數字為輸入圖片的像素值(如YOLOv2 228 表示輸入的圖片像素值為228×228),V16表示用VGG16模型,RN表示用ResNet模型,*Faster R-CNN 表示此種方法的RPN 網絡沒有和卷積網絡共享卷積層。

表2 不同算法在VOC2007測試集上的mAP
表3為FAST R-CNN結合不同Region proposals方法,檢測VOC2007 測試集的mAP 比較,FAST R-CNN的訓練集為VOC2007。

表3 三種Region proposals結合Fast R-CNN的mAP
表4 為CNN 方法檢測PASCAL VOC2012 數據集(20 個類別),得到的所有類別平均精度mAP。方法名后面的數字為輸入圖片的像素值(如YOLOv2 544 表示輸入的圖片像素值為544×544),V16 表示用VGG16模型。

表4 不同算法在VOC2012測試集上的mAP
表5為不同方法提取候選區域(Region proposals),召回率和提取速度對比信息。

表5 不同方法獲取Region proposals的比較
表6 為CNN 方法檢測速度比較,其中Fast R-CNN的檢測時間不包括感興趣區域ROIs(Regions Of Interest)獲取時間,SPP-net*表示不包括候選區域(Region proposal)獲取時間。

表6 CNN方法的檢測的速度
(1)Feature-Based檢測方法,應用局限性大,檢測效果與手工設計特征質量高低有關,手工設計特征往往具有針對性,對背景、光照、噪聲等魯棒性很差,泛化能力也弱。Feature-Based檢測效果可以通過融合多種特征,以及結合多種機器學習方法得到提升,也可以通過設計新的手工特征以及根據目的,選擇合適的機器學習方法得到提升[27-30]。
(2)TWO-STATE 和ONE-STATE 檢測方法,是后續目標檢測方法研究的基礎,TWO-STATE 方法檢測精度高、魯棒性好,但是檢測速度較慢。ONE-STATE方法與TWO-STATE方法相比,結構簡單、檢測速度快,但是檢測精度較低,抗干擾能力差。基于CNN 的檢測方法抗干擾能力比Feature-Based 方法強,如慕[31]利用HOG 特征結合SVM 的方法,改善了HAAR 特征結合AdaBoost算法檢測人臉時,對側臉不敏感的問題,Yang 等[32]利用CNN網絡檢測人體五官并根據五官的位置結構確定人臉,對光照影響下的人臉、側臉以及部分臉都有很好的檢測效果。
目前,目標檢測仍然是計算機視覺中的重點,人們對檢測精度與檢測速度有更高期望。隨著CNN網絡以及大數據的發展,用于檢測的數據集會越來越豐富,幾種典型CNN 框架可以進一步被優化,或者可以相互結合使用。基于CNN 的檢測方法有很強的數據依賴性,訓練網絡需要大量樣本,耗費大量計算資源,模型訓練時間代價大。如何利用較少的樣本,讓網絡學習到好的檢測特征,加快網絡學習速度,值得進一步研究。
基于CNN的檢測方法,錨盒(anchor box)是其中的一個重要部分,錨盒方法需要手動設定大量的錨盒,確保目標真實包圍框能被錨盒覆蓋,只有與目標真實包圍框有重疊的錨盒,用于確定目標位置,錨盒利用率不高,阻礙訓練速度。在擺脫錨盒方法的基礎上,確定目標位置,值得進一步研究,例如,Law 等[33]提出的角點網絡(CornerNet),通過檢測目標左上角和右下角確定目標位置,得到了較好的檢測結果。CornerNet在MS COCO測試集上平均檢測精度為42.2%,比目前的ONE-STATE方法檢測精度都高,網絡結構更簡單。CornerNet 的檢測瓶頸是角點檢測,提升角點檢測正確率,網絡檢測精度會大幅度提高。
CNN 網絡的框架是以人的先驗知識為基礎搭建的,網絡中的參數均是人為設定的,人為設定的參數不見得為最優,每一層的網絡參數(如步長、卷積核數目),可以通過學習數據集,得到最優值,這種方法需要很強的計算能力支持,利用較少的計算,得到網絡參數的最優值是重要的研究方向。通過學習數據集,網絡自行選擇或者搭建檢測效果更好的框架也有很重要的研究意義。
端到端的模式仍然是后續研究重點。相對而言TWOSTATE方法,結構復雜,優化困難,因此,ONE-STATE方法是后續研究的重要內容。