1. 程式人生 > >目標檢測算法的歷史及分類

目標檢測算法的歷史及分類

part dpm rpn 加速 air height 嵌入式 一點 tps

  隨著人工智能的興起,目標檢測算法在各行業中起的作用越來越大,怎麽落地,這是一個非常嚴峻的話題。今天看到一位大牛的分享,學習了。

把該領域的算法和歷史做個梳理。方便後續研究。

  按照時間分類,可以把該算法分成兩類:傳統算法和CCN算法。

傳統算法:

  • 級聯分類器框架:Haar/LBP/積分HOG/ACF feature+Adaboost

級聯分類器最先由Paul Viola and Michael J. Jones在CVPR 2001中提出來。

其實這就是boosting由簡單弱分類拼裝強分類器的過程,現在看起來很low,但是這個算法第一次使目標檢測成為現實!

技術分享圖片

OpenCV有對級聯分類器的經典實現:

至於使用的特征,Haar簡單也夠用了,LBP實在是沒必要去扒了。。。

至於HoG/ACF,下面說。

  • HoG+SVM

Histograms of oriented gradients for human detection,2005,CVPR

由於原始的Haar特征太簡單,只適合做剛性物體檢測,無法檢測行人等非剛性目標,所以又提出了HOG+SVM結構。

在OpenCV中也有實現:

技術分享圖片

之後又有人魔改出LoG/DoG/RoG等一系列特征,沒啥意思就不多說了。

值得一提的是,有人把SVM中的HoG改為Integral HoG,用於級聯分類器。這也就是目前OpenCV級聯分類器的積分HOG的原型:

Integral Histogram: A Fast Way to Extract Histograms in Cartesian Spaces

後續又有人發展出了Aggregate Channel Feature(ACF)等特征,論文主要是下面2個:

Aggregate Channel Features for Multi-view Face Detection,2014,IJCB

Fast Feature Pyramids for Object Detection,2014,PAMI

亮點就是這個Fast,加速了Integral HoG的計算,效果好而且快,依然活躍在嵌入式領域。

  • Discriminatively trained deformable part models(DPM)

項目主頁:

技術分享圖片

DPM是使用彈簧模型進行目標檢測,如下圖。即進行了多尺度+多部位檢測,底層圖像特征抽取采用的是fHoG。反正也是轟動一時了。

後續又有DPM+/DPM++,沒啥意思不提也罷。

技術分享圖片

  • 模版匹配:就是在一幅圖像中尋找另一幅模板圖像最匹配(也就是最相似)的部分的技術。相關的實現參考:https://www.cnblogs.com/skyfsm/p/6884253.html
作者:知乎用戶
鏈接:https://www.zhihu.com/question/53438706/answer/148973444
來源:知乎
著作權歸作者所有。商業轉載請聯系作者獲得授權,非商業轉載請註明出處。

CNN方法:

  • 基於region proposal(two stage):R-CNN家族,包括Faster R-CNN/Mask R-CNN/RFCN

然而DPM火了沒到2年,R-CNN家族出現了,終於不再用各種魔改版HoG特征搞檢測了!

其中R-CNN家族最有代表性的就是Faster R-CNN。Faster R-CNN由RPN網絡先產生region proposal,再對region proposals進行classification,就是所謂的two stage。

技術分享圖片

Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

Mask R-CNN

其實R-CNN系列檢測關註他:Kaiming He - FAIR,完全足夠了。

  • 基於回歸(one-shot):YOLO/YOLO2/SSD/DSSD

YOLO和SSD都是產生proposal的同時進行classification+regression,一次性完成,即所謂的one-shot。相比two stage速度占優,Precision/Recall略低。

技術分享圖片

SSD:SSD: Single Shot MultiBox Detector

至於YOLO,目前有YOLO v1,YOLO 9000(v2),YOLO v3

YOLO項目主頁(含Paper)

另外我覺得,後續版本DSSD和YOLO v2/v3之間真的沒啥差距了,感覺都一樣。

這也說明檢測已經趨於瓶頸,沒有算法突破很難像以前,一下提高幾十個點。

  • 特殊的文字序列檢測:CTPN(LSTM + R-CNN)/Seglink(SSD魔改)

除了一般意義上的檢測,還有一類文字檢測,用於OCR前的文字定位。這類檢測和一般的檢測還有一點點不一樣。目前效果比較好的2種:CTPN和Seglink

技術分享圖片

Faster R-CNN的繼承:CTPN水平or豎直文字檢測

Detecting Text in Natural Image with Connectionist Text Proposal Network, ECCV, 2016.

代碼 tianzhi0549/CTPN

SSD的繼承:Seglink傾斜文字檢測

Detecting Oriented Text in Natural Images by Linking Segments,CVPR,2017

代碼

當然文字檢測算法也有傳統的,比如這個OpenCV自帶:

Real-Time Scene Text Localization and Recognition, CVPR 2012

不過不建議去折騰了,沒必要。

  總結:

  傳統方法的優勢就是速度快,即使在嵌入式平臺也可以做到高速實時;缺點就是Precision/Recall都不是很理想,簡單說就是效果差;

CNN方法優勢就是Precision/Recall都好很多;缺點對應的,速度慢。

目前在嵌入式中,傳統算法還有一些空間,但是被Mobilenet等輕量化網絡擠壓;在服務器端,完全是深度網絡的天下了。

參考文檔:

1 https://www.zhihu.com/question/53438706

2 https://zhuanlan.zhihu.com/ML-Algorithm

目標檢測算法的歷史及分類