目標檢測算法的歷史及分類
隨著人工智能的興起,目標檢測算法在各行業中起的作用越來越大,怎麽落地,這是一個非常嚴峻的話題。今天看到一位大牛的分享,學習了。
把該領域的算法和歷史做個梳理。方便後續研究。
按照時間分類,可以把該算法分成兩類:傳統算法和CCN算法。
傳統算法:
- 級聯分類器框架:Haar/LBP/積分HOG/ACF feature+Adaboost
級聯分類器最先由Paul Viola and Michael J. Jones在CVPR 2001中提出來。
其實這就是boosting由簡單弱分類拼裝強分類器的過程,現在看起來很low,但是這個算法第一次使目標檢測成為現實!
OpenCV有對級聯分類器的經典實現:https://docs.opencv.org/2.4.11/modules/objdetect/doc/cascade_classification.html?highlight=haar
至於使用的特征,Haar簡單也夠用了,LBP實在是沒必要去扒了。。。
至於HoG/ACF,下面說。
- HoG+SVM
Histograms of oriented gradients for human detection,2005,CVPR
由於原始的Haar特征太簡單,只適合做剛性物體檢測,無法檢測行人等非剛性目標,所以又提出了HOG+SVM結構。
在OpenCV中也有實現:https://docs.opencv.org/2.4.11/modules/gpu/doc/object_detection.html?highlight=hog
之後又有人魔改出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)
項目主頁:http://www.rossgirshick.info/latent/
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
代碼 https://github.com/dengdan/seglink
當然文字檢測算法也有傳統的,比如這個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
目標檢測算法的歷史及分類