來源 | AI專欄(ID: pursue-Y-future)
目標檢測是計算機視覺中的一個重要問題,近年來傳統檢測方法已難以滿足人們對目標檢測效果的要求,隨著深度學習在圖像分類任務上取得巨大進展,基於深度學習的目標檢測算法逐漸成為主流。
總體上站長我都做了summary,先上圖為敬:
目標檢測要幹什麼?
目標檢測是機器視覺中最常見的問題。是一種基於目標幾何和統計特徵的圖像分割,它將目標的分割和識別合二為一,其準確性和實時性是整個系統的一項重要能力,近年來,目標檢測在人工智慧,人臉識別,無人駕駛等領域都得到了廣泛的應用。然而,在目標檢測的過程中會受到各種各樣干擾,比如角度、遮擋、光線強度等因素,這些因素會導致目標發生畸變,為目標檢測增加了新的挑戰。
相比於圖像分類,目標檢測更具難度。目標檢測,就是將目標定位和目標分類結合起來,利用圖像處理技術、機器學習等多方向的知識,從圖像(視頻)中定位感興趣的對象。目標分類負責判斷輸入的圖像中是否包含所需物體,目標定位則負責表示目標物體的位置,並用外接矩形框定位。這需要計算機在準確判斷目標類別的同時,還要給出每個目標相對精確的位置。
目標檢測算法有哪些?
現有的目標檢測算法有傳統檢測算法和基於深度學習的檢測算法。傳統的目標檢測算法,多是基於滑動窗口的框架或是根據特徵點進行匹配。自2012年AlexNet在當年度ImageNet大規模視覺識別挑戰賽中一舉奪冠,且效果遠超傳統算法,將大眾的視野重新帶回到深度神經網絡。
傳統的檢測算法
如下圖所示,傳統檢測方法一般分三個步驟:
首先在給定圖像上採用不同大小的滑動窗口對整幅圖像進行遍歷選擇候選區域, 使用不同大小的滑動窗口框住待測圖像中的某一部分作為候選區域,然後提取該候選區域相關的視覺特徵;
特徵提取,如人檢測和普通目標檢測常用的HOG和SIFT 特徵等,然後對這些區域提取特徵;
分類器分類,即使用訓練完成的分類器進行分類,如常用的支持向量機,最後使用分類器進行分類。
雖然這種方法取得了不錯的結果,但是採用滑動窗口進行區域選擇時沒有針對性導致時間複雜度高且窗口冗餘,另外手工設計的特徵沒有很好的魯棒性。
基於深度學習的檢測算法
2014年R-CNN的提出,使得基於CNN的目標檢測算法逐漸成為主流。深度學習的應用,使檢測精度和檢測速度都獲得了改善。
自從AlexNet 在比賽中使用卷積神經網絡進而大幅度提高了圖像分類的準確率,便有學者嘗試將深度學習應用到目標類別檢測中。卷積神經網絡不僅能夠提取更高層、表達能力更好的特徵,還能在同一個模型中完成對於特徵的提取、選擇和分類。
在這方面,主要有兩種主流的算法:
一類是結合regionproposal、CNN網絡的,基於分類的R-CNN 系列目標檢測框架(two stage);
另一類則是將目標檢測轉換為回歸問題的算法(single stage)。
傳統的目標檢測算法
傳統的目標檢測算法大致可以分為 目標實例檢測與 傳統目標類別檢測兩類:
目標實例檢測問題通常利用模板和圖像穩定的特徵點,獲得模板與場景中對象的對應關係,檢測出目標實例。目標實例檢測關注的只是具體目標本身,圖像中的其餘對象都是無關量。
-
傳統目標類別檢測則通過使用AdaBoost算法,HOG特徵和支持向量機等方法,根據選定的特徵和分類器,檢測出有限的幾種類別。
基於SIFT系列算法
SIFT算法
Lowe提出的SIFT算法,通過查找不易受光照、噪聲、仿射變換影響的特徵點來匹配目標,是目前應用極為廣泛的關鍵點檢測和描述算法。
該算法通過使用高斯模糊實現尺度空間,高斯差分函數進行極值檢測,再通過對邊緣主曲率的判定,篩除邊緣響應的不穩定點,得到匹配穩定、抗噪能力強的關鍵點。最後利用方向直方圖統計關鍵點鄰域梯度和方向,獲得描述符。
SIFT 算法通過一系列方法,保證提取的特徵具有平移、縮放及旋轉不變等特性,對於光線、噪聲、少量視角改變也具有一定的魯棒性,針對部分遮擋也有不錯的識別率。但是,SIFT 算法存在複雜度高,檢測速度慢,對模糊圖像和光滑邊緣很難提取有效特徵點等問題。
PCA-SIFT算法
該算法在SIFT的基礎上,對其最後一步做出了改進。引入主成分分析(PCA)方法,使用PCA替代直方圖,來對描述子向量進行降維,以提高匹配效率。
相較SIFT,PCA-SIFT維數更少且靈活可變,檢測速度約為SIFT的3倍。但降維損失部分信息,導致只對具有代表性的圖像有較好效果,具有局限性。
SURF算法
SURF算法也是一種基於SIFT的改進算法,Hessian矩陣是該算法的核心。該算法利用高斯濾波保證尺度無關性,並用盒式(box)濾波器替代高斯濾波器,簡化計算。通過構建Hessian矩陣,獲取關鍵點定位。另外,在尺度空間中,不同於SIFT 構建不同尺度的圖像,SURF 保持圖像大小不變,只改變濾波器的大小,從減少了計算量。
簡單來說,SURF 算法利用近似的Hessian 矩陣減少降採樣過程,快速構建尺度金字塔,實現了目標檢測速度的提高。
比較
對於SIFT、PCA-SIFT 以及SURF這三種算法,站長作出如下總結:
PCA-SIFT與SURF算法分別對SIFT的匹配過程做出簡化,因此在特徵點匹配精度上必然有所下降。其中SIFT算法提取的特徵點最為豐富,在尺度、旋轉等情況下都具有最好的性能,但高複雜度導致檢測速度最慢,且對於模糊、光滑邊緣的提取效果並不理想;PCA-SIFT使用PCA方法進行降維,減少計算的同時,產生信息丟失,因此整體性能在三種算法中比較一般;SURF 合理利用積分圖減少運算,小波變換、Hessian 矩陣等方法基本不會降低精度,因此在獲得好檢測速度的同時,也保證了整體性能優於PCA-SIFT。
基於AdaBoost 系列算法
AdaBoost 算法
AdaBoost是一種是基於Boosting的機器學習算法。初始時,設訓練集中n個樣本具有相同的權重。在每次訓練後調整訓練集中數據權重,增加錯誤樣本的權重,使得下一個分類器能夠對錯誤樣本進行重點訓練。經過N輪訓練後,將N個弱分類器整合,根據各分類器的性能分配相應的權值,組成一個高準確率、低錯誤率的強分類器。
Viola-Jones 算法
Viola-Jones算法是第一種能實時處理且效果較好的人臉檢測算法,此算法的提出標誌著人臉檢測進入實際應用階段。
Viola-Jones 檢測算法(簡稱VJ 算法)使用Haar 特徵來描述窗口,反映局部區域的明暗變化,並利用積分圖的思路解決Haar特徵提取時計算量大、重複的缺點。同時,引入級聯的思想。如下圖所示,VJ根據分類器的複雜程度和計算代價排列,分類代價越高的分類器需要分類的圖像越少,減少分類工作量。
概括地說,VJ 算法利用Haar-like 特徵描述目標共有屬性,利用積分圖實現特徵快速計算,使用級聯分類器減少AdaBoost 的計算量,快速檢測出目標。
Summary
如下表所示,站長針對傳統算法做出對比總結。總的來說,這些算法的目的都是在保證提取豐富、準確特徵的前提下,快速地進行特徵計算及預測。但傳統算法提取的特徵基本都是低層次、人工選定的特徵,這些特徵相對更直觀、易理解,針對特定對象更有針對性,但不能很好地表達大量、多類目標。
LeNet-5
LeNet-5 於1998 年提出,主要用於手寫數字識別。該網絡
共有7層網絡,包括2 個卷積層、2 個池化層和3 個全連接層,其準確率很高,可由於當時計算機的計算能力及數據量的不足,該模型未能受到重視,從而沒有很好地發展起來。
AlexNet
直到2012年ILSVRC比賽中,AlexNet在算法準確率方面以超過使用傳統方法的第二名11%的情況獲得冠軍後,才使卷積神經網絡重回大眾視野並得到重視。該網絡是對LeNet-5的擴展,它將卷積神經網絡的思想應用到了更深更寬的網絡上,共有8 層網絡,包括5 個卷積層和3 個全連接層。
VGGNet
VGGNet 則充分代表了從2012 年到2014 年在卷積神經網絡結構上的一個進展。相比AlexNet 來說該網絡會更深一些,共有19 層網絡:16 個卷積層和3 個全連接層。該網絡在2014
年ILSVRC比賽中獲得了第二名,在目標檢測上獲得了第一名。
GoogleNet
GoogleNet 則是2014年ILSVRC比賽中獲得第一名的網絡。該網絡通過增加網絡的深度和廣度來獲取更好的結果,然而當網絡加深加寬到一定程度時,繼續加深加寬反倒不能再提高效果。因此,GoogleNet通過設計稀疏連接的Inception結構來解決這個問題。
ResNet
2015 年ILSVRC 比賽中ResNet 網絡獲得冠軍。同樣該網絡也是用於解決網絡加深到一定程度就不能提高效果的問題,從而使得網絡能夠繼續加深到更深的層次。
基於深度學習的檢測算法
基於分類的檢測算法
Region proposal(候選區域)是通過Selective Search等算法,根據圖像中紋理、邊緣、顏色等信息,檢測較少區域的同時保證了較高的召回率。
OverFeat 算法
OverFeat是最先將深度學習應用到目標檢測中的算法之一。
嚴格來說,OverFeat 並沒有使用region proposal,但其思路被後面的R-CNN系列沿用並改進。該算法通過多尺度的滑動窗口結合AlexNet 提取圖像特徵,完成檢測。在ILSVRC 2013 數據集上的平均準確率為24.3%,檢測效果較傳統算法有顯著改進,但依舊存在較高錯誤率。
R-CNN算法
在Overfeeat 提出後不久,Ross Girshick 等人提出了R-CNN模型,使目標檢測取得巨大突破。如下圖所示,R-CNN利用Selective Search獲得候選區域(約2000個)。隨即對候選區域大小進行歸一化,用作CNN網絡的標準輸入。再使用AlexNet獲得候選區域中的特徵,最後利用多個SVM進行分類以及線性回歸微調定位框。
R-CNN將檢測效果從OverFeat的24.3%大幅提升至31.4%(ILSVRC2013數據集),並在VOC2007數據集上獲得58.5%的準確率。但是,R-CNN對近2000個候選區域分別做特徵提取,而候選區域之間存在許多重複區域,導致大量且重複的運算,運行緩慢,平均每幅圖片的處理時間為34s。同時,對每一步的數據進行存儲,極為損耗存儲空間。另外,對候選區域進行歸一化操作,會對最終結果產生影響。
SPP-Net
如下圖所示,針對R-CNN對所有候選區域分別提取特徵的缺點,SPP-Net一次性對整張圖片作卷積操作提取特徵。使得特徵提取從R-CNN 的近2 000 次變為提取1次整張圖片特徵,大大減少了工作量。
另外,SPP-Net 在最後一個卷積層後、全連接層前添加空間金字塔池化層(SPP層),提取固定尺寸的特徵向量,避免對候選區域大小進行歸一化的複雜操作。
以上兩點改進使得SPP-Net 的檢測速度比R-CNN快38~102倍,並解決了候選區域歸一化問題。SPP-Net雖然更換了卷積網絡,但準確率相差無幾。同時,SPPNet依然沒有解決R-CNN存儲空間消耗的問題,確定候選區域、特徵提取、對象分類、定位修正這些步驟依然是分離的。
Fast-RCNN
Fast R-CNN算法在SPP-Net的基礎上,將SPP層簡化為ROI Pooling 層,並將全連接層的輸出作SVD分解,得到兩個輸出向量:softmax的分類得分以及Boundingbox外接矩形框的窗口回歸。這種改進將分類問題和邊框回歸問題進行了合併。用softmax代替SVM,將所有的特徵都存儲在顯存中,減少了磁碟空間的占用。SVD分解則在幾乎不影響精度的情況了,極大加快檢測速度。
Fast R-CNN使用VGG16代替AlexNet,平均準確率達到70.0%,且訓練速度較R-CNN提升9倍,檢測速度達到每幅圖片0.3 s(除去region proposal 階段)。Fast R-CNN 依然使用Selective Search 方法選取候選區域,這一步驟包含大量計算。在CPU上運行時,獲取每張圖片的候選區域平均需要2s。由此可見,改進Selective Search是Fast R-CNN速度提升的關鍵。
Faster-RCNN
SPP-Net 和Fast R-CNN從特徵提取的角度,減少了工作量,但依然沒有解決Selective Search 選擇候選區域速度慢的問題。Faster R-CNN使用RPN網絡替代Selective Search 算法,使目標識別實現真正端到端的計算。
如下圖所示,RPN 網絡通過在特徵圖上做劃窗操作,使用預設尺度的錨點框映射到原圖,得到候選區域。RPN網絡輸入的特徵圖和全連接層中的特徵圖共享計算。RPN的使用,使Faster R-CNN 能夠在一個網絡框架之內完成候選區域、特徵提取、分類、定位修正等操作。
RPN使得Faster R-CNN在region proposal階段只需10 ms,檢測速度達到5 f/s(包括所有步驟),並且檢測精度也得到提升,達到73.2%。但是,FasterR-CNN仍然使用ROI Pooling,導致之後的網絡特徵失去平移不變性,影響最終定位準確性,ROIPooling後每個區域經過多個全連接層,存在較多重複算,Faster R-CNN在特徵圖上使用錨點框對應原圖,而錨點框經過多次下採樣操作,對應原圖一塊較大的區域,導致Faster R-CNN檢測小目標的效果並不是很好。
R-FCN
目標檢測要包括兩個問題:分類問題和檢測定位問題。前者具有平移不變性,後者具有平移敏感性。R-FCN使用全卷積網絡ResNet代替VGG,提升特徵提取與分類的效果;針對全卷積網絡不適應平移敏感性的缺陷,該算法使用特定的卷積層生成包含目標空間位置信息的位置敏感分布圖,ROI Pooling 層後不再連接全連接層,避免重複計算。
R-FCN的準確率達到83.6%,測試每張圖片平均花費170 ms,比Faster-RCNN快了2.5~20倍。但是R-FCN在得到Score map 需要生成一個隨類別數線性增長的channel 數,這一過程雖然提升了目標檢測精度,但減慢了檢測速度,導致其難以滿足實時性要求。
Mask R-CNN
Mask R-CNN是一種在Faster R-CNN 基礎上加以改進的算法,增加了對實例分割的關注。該算法在分類和定位回歸以外,加入了關於實例分割的並行分支,並將三者的損失聯合訓練。
實例分割要求實例定位的精準度達到像素級,而Faster-R-CNN因為ROI Pooling層的等比例縮放過程中引入了誤差,導致空間量化較為粗糙,無法準確定位。Mask R-CNN 提出雙線性差值RoIAlign獲得更準確的像素信息,使得掩碼準確率提升10%到50%;Mask R-CNN 還使用ResNet 基礎網絡,在COCO數據集上的檢測速度為5f/s,檢測準確性從FastR-CNN的19.7%提升至39.8%。
Mask R-CNN在檢測精度、實例分割方面都達到目前最高的層次。其後一些算法在性能上有所提升,但基本維持在同一水平。但是該算法的檢測速度依舊難以滿足實時要求,並且實例分割目前也還面臨著標註代價過於昂貴的問題。
Summary
如下圖 所示,從R-CNN開始,研究者將目標檢測的問題關注點集中到分類上,採用「regionproposal+CNN feature+SVM」的思路,利用了CNN網絡,大大提高了檢測的精度;後面的SPP-Net、Fast-RCNN、Faster-RCNN等基本沿用了這一思路,在檢測效率上進行改進;但Faster-RCNN只能達到5f/s,就實時性而言略有不足。隨後的R-FCN 雖然有所提升,但效果依然無法令人滿意。對此,研究者提出了另一種新思路,直接將目標檢測轉化到回歸上,用一張圖片得到bounding box 以及類別。
YOLO基於回歸的檢測算法
從R-CNN到Faster-RCNN,目標檢測始終遵循「region proposal+分類」的思路,訓練兩個模型必然導致參數、訓練量的增加,影響訓練和檢測的速度。由此,YOLO提出了一種「single-stage」的思路。如下圖所示,YOLO將圖片劃分為S×S的網格(cell),各網格只負責檢測中心落在該網格的目標,每個網格需要預測兩個尺度的bounding box和類別信息,一次性預測所有區域所含目標的bounding box、目標置信度以及類別機率完成檢測。
YOLO採用以cell 為中心的多尺度區域取代region proposal,捨棄了一些精確度以換取檢測速度的大幅提升,檢測速度可以達到45f/s,足以滿足實時要求;檢測精度為63.4%,較Faster R-CNN的73.2%,差距較大。
YOLO在極大提高檢測速度的情況下,也存在以下問題:
因為每個網格值預測兩個boundingbox,且類別相同,因此對於中心同時落在一個網格總的物體以及小物體的檢測效果差,多物體環境下漏檢較多;
由於YOLO關於定位框的確定略顯粗糙,因此其目標位置定位準確度不如Fast-RCNN;
對於外型非常規的物體檢測效果不佳。
SSD
Faster-RCNN檢測檢測精度高但檢測速度慢,YOLO檢測精度不高但檢測速度快,SSD則結合兩者的優點,在YOLO的基礎上借鑑了RPN的思路,在保證高精度檢測的同時,兼顧檢測速度。
如下圖所示,因為不同層的特徵圖具有對應大小的感受野,特定層的特徵圖只需要訓練對應尺度的對象檢測。因此,SSD結合高層和底層的特徵圖,使用多尺度區域特徵進行回歸。
SSD300的mAP能達到73.2%,基本與Faster R-CNN持平,而檢測速度達到59f/s,比Faster R-CNN快6.6 倍。但是SSD具有以下問題:
小目標對應到特徵圖中很小的區域,無法得到充分訓練,因此SSD對於小目標的檢測效果依然不理想;
無候選區域時,區域回歸難度較大,容易出現難以收斂等問題;
SSD不同層的特徵圖都作為分類網絡的獨立輸入,導致同一個物體被不同大小的框同時檢測,重複運算。
YOLOv2 以及YOLO9000
YOLOv2通過在每一個卷積層後添加batch normalization
、多尺度訓練,加入K-mean 維度聚類等方式,使得檢測速度和精度的再次提升。該算法能夠在76.8%正確率的同時達到67 f/s 的檢測速度,78.6%的正確率時達到40 f/s。該算法性能基本代表目前業界的最先進水平。
同文還提出了YOLO9000,該算法採用wordTree 層次分類,混合檢測數據、識別數據集,在分類和檢測數據集上同時訓練,實現9418類的檢測。無論是YOLO系列還是SSD算法,都沿用R-CNN系列算法先在大數據集上進行分類預訓練,再在小數據集上fine-tune 的方法。但fine-tune 預訓練模型有以下問題:
預訓練模型,往往無法遷移到如醫療圖像等特定數據上;
預訓練模型結構基本固定,難以修改;
預訓練樣本和最終檢測目標有所區別,得到的模型未必是檢測目標的最佳模型。
Summary
針對預訓練模型的問題,DSOD算法提出一種從零訓練網絡的方法,達到媲美fine-tune模型的效果。DSOD基於SSD算法,在特徵融合部分引入DenseNet思想,減少了參數量;mAP 為77.7%,與SSD300 相當;檢測速度為17.4f/s,較SSD300 的46 f/s 尚有較大差距。
R-SSD算法則在SSD的基礎上,增加不同層之間特徵圖的關聯,避免同一物體重複框的問題;同時增加特徵金字塔中特徵圖的數量,改善小物體的檢測效果。該算法mAP為80.8%,略高於SSD。但是特徵圖的增加,導致計算量增加,檢測速度降低,僅為16.6 f/s。
目標檢測可參考創新點
基於深度學習的目標檢測在檢測精度以及檢測速度上,較傳統方法獲得了極大的提高,但依然面臨這一些問題:
對於小數據量
對於小數據量,目前的框架可能無法得到好的結果。目前的算法,大多使用了遷移學習,也就是現在現有的大數據集中進行訓練,再將訓練好的「半成品」做fine-tune操作。若目標數據不在ImageNet 等數據集中,訓練效果要視目標與大數據集相關程度而定。DSOD算法雖然設計了一種從零開始訓練的網絡,也取得了不錯的效果,但是其檢測速度尚有待提升。
深度學習解釋性差
特別是在更深的層次上,很多時候只能依靠測試和經驗來猜測其有效或無效的原因,對於中間的過程缺少明確的解釋,更像是一個黑盒。
計算強度大
GPU的使用,提升了計算機的運算能力,但是很多操作依然過於龐大。如何簡化、復用計算的同時,儘可能保證準確率,可能會是一個可以創新的點。
信息的損失
對於場景信息、語義信息等視頻中原有信息的利用不充分,造成一些有效信息的損失。
小目標檢測問題
無論是R-CNN系列還是SSD等算法,始終無法在小目標檢測問題上獲得令人滿意的效果。就目前算法而言,為保證檢測速度,通常減少特徵金字塔的圖像,以減少計算量,但這必然導致小目標在特徵圖上得不到充分訓練;如R-SSD增加特徵圖數量,損失了檢測速度。
總結
目前已有眾多基於深度學習的目標檢測算法,且其相關研究仍在不斷進行,幾乎每年都有最新成果出現。即便如此,當前這些方法的檢測效果仍處於一個較低的水平,從而導致不能廣泛應用於實際通用的檢測任務當中。此外,儘管當前基於深度學習的檢測算法成為發展的主流,但傳統的檢測方法仍在使用,並未完全被拋棄,或許將傳統方法有效應用於深度學習方法中會對檢測效果的提高有所幫助。
從最初的人為尋找特徵到最近的基於深度學習的目標檢測算法,可以看出對於目標檢測的要求始終是快速、精準以及適用範圍廣。就目前來說,傳統的目標檢測方法仍在使用,且在一段時間內仍會有一定市場。傳統的目標檢測技術對數據量要求少,在針對數據來源不夠豐富的項目時,可能會取得比深度學習更好的效果。但是將深度學習應用到目標檢測中是可以預見的主流趨勢。特別是隨著硬體設備性能的提升,一定範圍內的運算量處理將不會再成為實時檢測的掣肘。
如何利用上下文關聯信息、場景信息和語義信息,將會是接下來目標檢測的一個重要研究方向。假使平行視覺的思路切實可行,那麼數據集標註困難、數據量不足的問題,將獲得較好的解決。另外,如何更好解決與訓練集關聯性不大的小數據集檢測問題,也是一個比較重要的研究方向。Hinton 的capsule 能否獲得比傳統CNN更好的效果,也需要進行進一步的研究。
巨人的肩膀
[1] Krizhevsky A,Sutskever I,Hinton G E.ImageNet classification with deep cnn[J].Communications of the ACM,2012,60(2)
[2] Huang G,Liu Z,Maaten L V D,et al.Densely connected cnn[C]//Proceedings of CVPR 2016.
[3] Jeong J,Park H,Kwak N.Enhancement of SSD by concatenating feature maps for object detection[C]//Proceedings of CVPR 2017.
[4]萬聖賢,蘭艷艷,郭嘉豐,等. 基於弱監督預訓練深度模型的微博情感分析[J]. 中文信息學報,2017,31(3):191-197.
[5]周俊宇,趙艷明. 卷積神經網絡在圖像分類和目標檢測應用綜述[J]. 計算機工程與應用,2017,53(13):34-41.
[6]張慧,王坤峰,王飛躍. 深度學習在目標視覺檢測中的應用進展與展望[J]. 自動化學報,2017,43(8):1289-1305.
[7]王坤峰,苟超,王飛躍. 平行視覺:基於ACP的智能視覺計算方法[J]. 自動化學報,2016,42(10):1490-1500.
[8] 高紅紅,曹建榮,李振宇,等. 基於背景分類的運動目標檢測算法[J]. 計算機工程與應用,2017,53(21):179-184.
文章來源: https://twgreatdaily.com/zh/71ARhHIBiuFnsJQVbA0P.html