深度学习时代的目标检测算法综述
目標檢測VS其他計算機視覺問題
分類問題
這或許是計算機視覺領域內最著名的問題。它主要指將一張圖像歸為某種類別。學術界最流行的一類數據集是ImageNet,由數以百萬計已分好類的圖像組成,(部分)用于年度ImageNet大規模視覺識別挑戰比賽(ILSVRC)。近年來,分類模型已經超過了人類的表現,因此該問題基本算是一個已經解決的問題。圖像分類領域有許多挑戰,但是也有許多文章介紹已經解決了的,以及未解決的挑戰。
圖?分類樣例
目標定位
與分類類似,定位問題是找到圖像中單一物體的位置。
圖?目標定位示例
目標定位在實際生活中是很有用的。例如,智能裁剪(根據目標所在位置來裁剪圖像),甚至對規則目標進行提取,以使用不同技術對其進行進一步處理。它可以與分類相結合,不僅可以定位對象,還可以將其進行分類。
實例分割
從目標檢測再進一步,我們不僅想在圖像中找到目標,而且要找到每一個被檢測目標的像素級掩膜。我們將此問題稱為實例或目標分割。
目標檢測
將定位以及分類問題結合起來,最終我們需要同時檢測和分類多個目標。目標檢測是在圖像上定位和分類數量可變的對象的問題。重要的區別是“變量”部分。與分類問題相比,目標檢測的輸出數量是可變的,因為對于每幅圖來說,檢測到的目標數目可能是不同的。在本文中,我們將介紹目標檢測實際應用的細節,以及它作為一個機器學習問題,存在的主要問題是什么,過去幾年中,解決該問題的方式是如何一步步變成深度學習的。
圖3 目標檢測示例
實際應用
在Tryolabs,我們專門從事應用最先進的機器學習技術來解決商業問題,所以即使我們熱愛所有瘋狂的機器學習研究問題,但是最后我們更多是在考慮實際應用問題。
盡管目標檢測在工業界仍然是一個新工具,但已經有許多使用目標檢測技術的實用而有趣的應用了。
人臉檢測
自2000年年中,一些傻瓜相機已經開始自帶人臉檢測功能,能夠進行更有效地自動對焦。雖然這只是目標檢測的一種狹義類型,但它所使用的方法也適用于其他類型的目標,我們將在后面詳述。
計數
目標檢測的一個很簡單但常常被忽視的用途是計數。統計人、汽車、花卉甚至微生物數量的能力是各種圖像信息系統應該要具備的。最近,隨著視頻監控設備的激增,其中蘊藏著前所未有的使用計算機視覺方法將原始信息轉化為結構化數據的機會。
視覺搜索引擎
我們都很喜歡Pinterest視覺搜索引擎。他們使用目標檢測技術作為系統的一部分,用于索引圖像中的不同部分。這樣,當你搜索某個特定的提包時,你能搜到你想要的手提袋在不同場景下的圖像。這個功能比谷歌圖像的反向搜索引擎要強大得多。
相似圖像:我們應用目標檢測技術來定位包或者鞋子這類產品。在這個例子中,用戶可以點擊自動標注好的物體去查看相似的產品。(Pinterest論文中的例子)
Jing,Yushi。 《Pinterest的視覺搜索》(Visual Search at Pinterest.)
航拍圖像分析
在擁有廉價的無人機和(幾乎)負擔得起的衛星發射服務之前,從未有過如此多的地球俯瞰圖。已經有公司開始使用來自Planet和Descartes Labs公司的衛星圖像,應用目標檢測技術進行車輛、樹木和船只的數量統計。它帶來了高質量的圖像,這在以前是不可能的(或非常昂貴的),現在使用它的人已經越來越多了。
一些公司用無人機來自動勘察人類難以進入的區域(例如Betterview),或使用目標檢測技術進行一般性的分析(如TensorFlight)。除此之外,一些公司在沒有人工干預的情況下使用這種技術進行自動檢測和定位問題。
圖?TensorFlight
目標檢測的問題與挑戰
讓我們開始深入研究目標檢測的主要問題。
目標的可變數量問題
我們前面已經提到關于圖片中目標數量可變的問題,但我們忽視了為什么它會成為一個問題。訓練機器學習模型時,通常需要將數據表示成固定大小的向量。由于事先不知道圖像中目標的數量,所以我們不知道正確的輸出數量。正因為如此,我們需要一些后續處理,這也增加了模型的復雜度。
這種輸出數量不定的問題已經使用基于滑動窗口的方法得到了解決,在圖片的不同位置得到滑窗的固定大小特征。在得到所有的預測值之后,一些滑窗被丟棄,一些被合并,從而得到最終輸出。
大小
另一個大挑戰是目標的大小不一致問題。當進行簡單分類時,我們希望能對占圖像比例最大的目標進行分類。另一方面,想要找到的目標可能只有幾個像素大小(或只占原始圖像的很小一部分)。傳統方法使用不同大小的滑動窗口解決了這一問題,這種方法雖然簡單但是效率很低。
模型
第三個挑戰是同時解決兩個問題。我們如何將定位和分類這兩種不同類型的問題最理想地結合進一個單一模型?
在接著介紹深度學習和如何應對這些挑戰之前,讓我們快速地回顧一下經典方法。
經典方法
盡管近年來已經有很多不同類型的方法,我們主要介紹兩個最流行的(現在依然廣泛使用)。
第一個是2001年Paul Viola和Michael Jones在論文《魯棒實時目標檢測》中提出的Viola Jones框架。該方法快速并且相對簡單,因此傻瓜相機的人臉檢測就是使用這個算法,它能做到實時檢測,并且運算量很小。
我們不會介紹它運作的底層細節以及如何訓練它,但會介紹它的高層算法。它的工作原理是使用Haar特征產生多種(可能有數千個)簡單的二進制分類器。這些分類器由級聯的多尺度滑動窗口進行評估,并且在出現消極分類情況的早期及時丟棄錯誤分類。
另一個類似的經典方法是采用梯度方向直方圖(Histogram of Oriented Gradients,HOG)作為特征,以及支持向量機(SVM)作為分類器。它仍然依賴多尺度滑動窗口,盡管它的效果比Viola Jones要好很多,但是速度也慢很多。
深度學習的方法
深度學習作為機器學習,尤其是計算機視覺中真正的“變革者”,已經是眾人皆知了。與深度學習模型在圖像分類任務上完全碾壓其他經典模型類似,深度學習模型在目標檢測領域也是最好的方法。
現在,你已經對目標檢測的挑戰是什么有了更直觀的了解,也知道了如何解決這些問題,下面我們會對過去幾年深度學習方法在目標檢測領域的演變過程做一個綜述介紹。
OverFeat
第一個使用深度學習進行目標檢測并取得很大進展的方法是紐約大學在2013年提出的Overfeat。他們提出了一個使用卷積神經網絡(CNN)的多尺度滑動窗口算法。
R-CNN
在Overfeat提出不久,來自加州大學伯克利分校的Ross Girshick等人發表了基于卷積神經網絡特征的區域方法(Regions with CNN features,R-CNN),它在目標檢測比賽上相比其他方法取得了50%的性能提升。他們提出了一個三階段的方法:
- 使用區域候選算法提取包含可能目標的區域(最流行的選擇性搜索算法)
- 使用CNN在每個區域上提取特征。
- 使用支持向量機對區域進行分類。
圖?Girshick, Ross, et al. "Rich feature hierarchies for accurate object detection and semantic segmentation." 2014.
雖然該方法取得了很好的結果,但是訓練階段有很多問題。要訓練網絡,首先要生成訓練數據集的候選區域,然后對每一個區域使用CNN提取特征(對于Pascal 2012訓練數據集來說,通常需要生成大于200GB的中間文件),最后訓練SVM分類器。
Fast R-CNN
一年以后,Ross Girshick(微軟亞洲研究院)發表了Fast R-CNN,這個方法迅速演化成一個純深度學習的方法。與R-CNN相似,它也使用選擇性搜索來生成候選區域,但與R-CNN不同的是,Fast R-CNN在整張圖上使用CNN來提取特征,然后在特征圖上使用區域興趣池化(Region of Interest,ROI),并且最后用前饋神經網絡來進行分類和回歸。這個方法不僅快,而且由于RoI池化層和全連接層的存在,該模型可以進行端到端的求導,并且訓練也更容易。最大的不足是該模型仍舊依賴選擇性搜索(或者其他的區域候選算法),這也成為了模型推理階段的一個瓶頸。
圖?Girshick, Ross. "Fast R-CNN" 2015.
YOLO
不久之后,Joseph Redmon(Girshick也是共同作者之一)發表了一篇名為《你只用看一遍:統一框架的實時目標檢測》(You Only Look Once: Unified, Real-Time Object Detection(YOLO))的論文。YOLO提出了一個簡單的卷積神經網絡方法,它取得了很好的結果,并且速度也非常快,第一次實現了實時的目標檢測。
圖?Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." 2016.
Faster R-CNN
隨后,任少卿(Girshick也作為共同作者,現在Facebook研究院)發表了Faster R-CNN,這是R-CNN系列的第三代。Faster R-CNN增加了一個所謂的“區域候選網絡(Regio Proosal Network,RPN)”,試圖擺脫搜索選擇算法,從而讓模型實現完全端到端的訓練。我們不會詳細介紹RPN的原理,不過簡單地說,它的作用是根據“屬于目標”的分數來輸出可能目標。RoI池化層和全連接層使用這些目標進行分類。我們會在后續的博客中詳細介紹該結構的細節。
圖?Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal networks." 2015.
SSD 和 R-FCN
最后,有兩篇著名的論文,《單幀檢測器》(Single Shot Detector,SSD),它在YOLO的基礎上進行改良,通過使用多尺度的卷積特征圖以達到更好的結果和速度,以及《基于區域的全卷積網絡》(Region-based Fully Convolutional Networks,R-FCN),它使用了Faster RCNN的架構,但是只含有卷積網絡。
數據集的重要性
在研究中,數據集起到非常重要的作用(有時被低估了)。每當一個新的數據集發布以后,新的論文接踵而至,新的模型被互相比較,不斷進步,把可能性推向極致。
不幸的是,目標檢測的數據集不是太多。數據比較難(也很昂貴)獲得,公司可能不愿意免費發布他們投資的產品,而大學又沒有足夠的資源。
不過現在依然有一些很好的數據集,下面是一些主要的公開數據集:
| 數據集名稱 | 圖像數量(訓練驗證) | 種類 | 最后一次更新 |
| ImageNet | 450K | 200 | 2015 |
| COCO | 120K | 80 | 2014 |
| Pascal VOC | 12K | 20 | 2012 |
| Oxford-IIIT Pet | 7K | 37 | 2012 |
| KITTI Vision | 7K | 3 | 2014 |
結論
總而言之,目標檢測領域現在有很多機會,不管是在未知的應用還是在提出新方法推進領域內最先進的效果上。盡管這只是一個目標檢測的概述,我希望它能讓你們對目標檢測有一個基本了解,從而引導你們了解深度知識。
后面幾周,我們會做關于目標檢測框架實現的細節、評估標準以及訓練模型方法的系列文章。我們也會嘗試將過去的目標檢測算法應用到其他問題上。
想了解更多內容,歡迎訂閱我們的新聞推送。
查看英文原文:Object detection: an overview in the age of Deep Learning
感謝薛命燈對本文的審校。
總結
以上是生活随笔為你收集整理的深度学习时代的目标检测算法综述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: RDMA技术
- 下一篇: ubuntu 16.04 usb转串口