一文帶你讀懂深度學習框架下的目標檢測

 2017-09-27 13:38:03.0

編譯:及子龍,張禮俊

余志文,錢天培


從簡單的圖像分類到3D位置估算,在機器視覺領域裡從來都不乏有趣的問題。其中我們最感興趣的問題之一就是目標檢測。


如同其他的機器視覺問題一樣,目標檢測目前為止還沒有公認最好的解決方法。在了解目標檢測之前,讓我們先快速地了解一下這個領域里普遍存在的一些問題。


目標檢測 vs 其他計算機視覺問題圖像分類

在計算機視覺領域中,最為人所知的問題便是圖像分類問題。


圖像分類是把一幅圖片分成多種類別中的一類。


ImageNet是在學術界使用的最受歡迎的數據集之一,它由數百萬個已分類圖像組成,部分數據用於ImageNet大規模視覺識別挑戰賽(ILSVRC)。最近幾年來,解決分類問題的模型已經有了超越人類的識別能力,所以分類問題實際上已經被解決了.


然而,圖像分類問題有許多挑戰,相伴隨著的是許多如何解決這些問題的文獻以及對還未被解決的問題的探討。


圖像分類實例


1目標定位

同圖像分類類似,目標定位要找到單個目標在圖像中的位置。


目標定位實例


目標定位在實際生活中的應用很廣泛,比如,智能剪切(通過定位目標所在的位置,識別需要圖片從哪裡剪切) ,或者進行常規的目標提取以便進一步處理。結合圖像分類技術,它不僅僅可以定位目標,還能對該物體分類。


2實例分割

從目標檢測更進一步,我們不僅僅要找到圖片中的對象,更是要發現該檢測對像對應的像素碼。我們把這個問題稱為實例分割,或者是對象分割。


3目標檢測

在迭代處理定位和圖片分類問題時,我們最終還是需要對多個目標進行同時檢測和分類。目標檢測是在圖片中對可變數量的目標進行查找和分類。其中重要的區別是“可變”這一部分。


和圖像分類問題不同的是,由於每一張圖片待檢測目標的數量不一,目標檢測的輸出長度是可變的。在這篇文章中,我們將詳細地介紹一些實際應用,討論目標檢測作為機器學習問題的主要困難,以及在過去的幾年裡如何應用深度學習處理目標檢測。


目標檢測實例


實際案例

在Tryolabs 中,我們專注於使用現有的機器學習方法解決商務問題,所以即使我們熱衷於機器學習的科研問題,但最終我們還是要回歸實際應用中。


雖然目標檢測從某種程度上在工業界還是一個很新的工具,但它已經有了很多實用和有趣的應用。


1人臉檢測

自20世紀中期以來,傻瓜相機開始通過更為高效的自動對焦來檢測人面。雖然這是一種比較淺顯的目標檢測應用,但是這種方法同樣適用於其他類型的目標檢測,我們稍後將會介紹。


2計數

計數是一個簡單但是經常被忽略的目標檢測問題。統計人,車,花甚至是微生物數量是現實世界的需求,在大部分基於圖像的系統中都要使用。近幾年伴隨著監控視頻設備的不斷湧現,使用機器視覺將原圖像轉化為結構化數據的需求也越來越多。


3視覺搜索引擎

最後,我們比較喜歡的一個實例是Pinterest(圖片社交平台)的視覺搜索引擎。


他們將目標檢測作為索引圖像內容的處理流程之一。比如,你可以在不同的背景下找到某個特定的錢包。這比Google Image的反向搜索引擎只是找到類似的圖像更強大。


圖1:相似查找:我們應用目標檢測方法定位包或鞋子這些產品。在這張圖片中, 用戶可以點擊圖片中的目標對象便可以查找類似的產品。

4空中影像分析

在這個廉價無人機和衛星興起的年代,我們能在空中獲取空前多的關於地球的數據。如今已經有越來越多的公司開始使用planet 或者descartes labs 公司提供的衛星圖片,應用目標檢測來計算汽車,樹,船的數量。這些舉措都為我們帶來了高質量的數據,這在從前是不可能實現的。


一些公司正在應用無人機攝像對人難以到達的地方進行自動監測(例如BetterView)或者使用物體檢測方法進行整體分析(例如TensorFlight)。除此之外,一些公司實現了不需人為乾預下的場景自動檢測和位置識別。

使用TensorFlight實現汽車、樹和行人的識別

目標檢測存在的問題和挑戰

現在,讓我們開始深入了解目標檢測中的主要問題。


1對像數量不確定

我們在前面提到過對像數量可變,但是並沒有解釋為什麼是個問題。當訓練機器學習模型的時候,你經常需要把數據表示成固定長度的向量。如果在訓練之前圖片中的對像數量是未知的,模型的輸出數量也就是未知的了。因此,一些增加模型複雜性的預處理是必要的。


在傳統的方法中,輸出的數量可以使用滑動窗函數來計算,給不同位置產生一個固定大小的特徵窗。在做完了預測之後,有些預測會被丟棄,有些會被合併到最終結果裡面。


滑動窗示例


2對像大小不同


另外一個挑戰是處理不同大小對象的問題。面對一個簡單的分類問題,你期望是盡可能將覆蓋圖片大部分面積的對象進行分類。而在有些情境中,你想識別的對象可能只有幾十個像素點大小(或者說是原圖片中佔比很小的一部分)。以往人們通過使用不同大小的滑動窗來解決這個問題,這種方法雖然簡單,卻效率低下。


3建模

第三個挑戰是同時解決目標定位和圖像分類這兩個問題。我們如何將這兩種不同類型的需求組合到一個模型裡呢?


在進入深度學習和如何應對這些挑戰之前,讓我們先快速了解一些經典的檢測方法。


檢測方法

1傳統方法


在這裡我們將集中介紹其中兩個最流行且目前依然被廣泛使用的模型。


第一個是2001年由Paul Viola和Michael Jones在論文《Robust Real-time Object Detection》裡提出 的Viola-Jones框架。這個方法快速且相對簡單,使得低處理能力的傻瓜相機得以進行實時的面部識別。


我們不打算深入介紹它是如何工作和訓練的,但是總體來說,該算法是通過使用哈爾特徵(Haar features)生成許多(可能幾千個)簡單的二元分類器來實現的。這些分類器通過一個多尺度級聯滑動窗進行評估,一旦遇到錯誤的分類結果則提前結束。


另一個傳統方法是使用方向梯度直方圖(HOG)特徵和支持向量機來分類。這個方法依然需要一個多尺度滑動窗,儘管它比Viola-Jones表現優異,但速度卻慢了很多。


2深度學習方法

在機器學習領域,深度學習一直是個大boss,尤其在計算機視覺方面。在圖像分類的任務上,深度學習已經徹底擊敗了其他的傳統模型。同樣,在目標檢測方面,深度學習也代表了目前的最先進水平。


讀到這裡,你應該對我們面臨的挑戰和對解決它們的辦法有了一定的了解,接下來我們將概述一下在過去的幾年深度學習方法的發展歷程。


2013年由NYU(紐約大學) 提出的OverFeat 是最早將深度學習用於目標檢測的方法之一。他們提出了一個使用卷積神經網絡(CNNs)來處理多尺度滑窗的算法。


1OverFeat

2013年由NYU(紐約大學) 提出的OverFeat 是最早將深度學習用於目標檢測的方法之一。他們提出了一個使用卷積神經網絡(CNNs)來處理多尺度滑窗的算法。


2R-CNN

OverFeat提出後不久,加州大學伯克利分校的Ross Girshick及其同事就發表了Regins with CNN features,簡稱R-CNN的方法,該方法在物體識別挑戰中有50%的效果提升。



他們提出了目標檢測分三步走的方法:


•使用候選區域方法(最流行的一個是’Selective Search’)提取可能的物體


•使用CNN從每一個區域提取特徵


•使用支持向量機(SVM)分類每一個區域


R-CNN架構

Girshick, Ross, et al. "Rich feature hierarchies for accurate object detection and semantic segmentation." 2014.


儘管R-CNN能達到很好的識別效果,但是它在訓練中有很多的問題。


為了訓練模型,你首先要對訓練數據集產生候選區域,然後把CNN特徵提取應用於每一個區域(對於Pascal 2012數據集通常需要處理200GB的數據),最後再訓練支持向量機分類器。


3Fast R-CNN

R-CNN被提出不久後,它又延伸出了一個完全使用深度學習的版本——就在一年後,Ross Girshick(目前在微軟研究中心)發表了Fast R-CNN。


和R-CNN類似,Fast R-CNN依然採用Selective Search生成候選區域,但是和之前的分別提取出所有的候選區域然後使用支持向量機分類器不同,Fast R-CNN 在完整的圖片上使用CNN然後使用集中了特徵映射的興趣區域(Region of Interest, RoI),以及前向傳播網絡進行分類和回歸。這個方法不僅更快,而且有Rol集中層和全連接層,使得模型從頭到尾可求導,更容易訓練。


Fast R-CNN最大的不足是,這個模型依然依賴Selective Search(或者其他的區域候選算法),當用該方法進行推論時,這塊就成了一個瓶頸。

Fast R-CNN

Girshick, Ross. "Fast R-CNN" 2015.


4YOLO

在Fast R-CNN被提出過後不久,Joseph Redmon(與Girshick等人合著)發表了You Only Look Once:Unified, Real-Time Object Detection(YOLO)這篇論文。


YOLO提出了一個兼具準確性和速度性的簡單的捲積神經網絡,首次實現了實時物體檢測。


YOLO架構


Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." 2016.


5Faster R-CNN

接著,Shaoqing Ren(依然與Girshick合著,目前在Fackbook研究中心)發表了Faster R-CNN,這是R-CNN的第三次迭代。


Faster R-CNN添加了候選區域網絡(Region Proposal Network, RPN),試圖取消對Selective Search 算法的依賴,這使得模型可以完全實現端到端訓練。


我們暫時不會詳細深入地介紹RPNs的運行原理,但抽像地說,它基於一個叫“物體性”(objectness)的分數輸出對象。這些物體被用在Rol集中層和全連接層,從而實現分類的目標。


Faster R-CNN架構


Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal networks." 2015.


6SSD和R-FCN

最後,還有兩篇論文不得不提:Single Shot Detector(SSD) 和 Region-based Fully Convolutional Networks(R-FCN)。前者在YOLO的基礎上使用多尺寸的捲積特徵圖使得在結果和速度上都有提升。後者基於Faster R-CNN的架構,但是只使用了卷積網絡。


數據集的重要性

在研究中,數據集扮演了十分重要的角色,其重要性經常被低估。每一次新的數據集發布,都會有論文被發表,新的模型在此基礎上進行比對和提升,把不可能變成可能。


很可惜,對於目標檢測,我們還沒有足夠的數據集。數據很難產生,而且成本很高,具備優秀數據庫的公司一般不願意公開他們的數據,而學校則無法接觸到優質的數據集。


話雖如此,我們還是有一些不錯的公開數據可以使用,下面的列表就是目前可用的主要數據集。

 Name  # Images (trainval)  # Classes  Last updated
 ImageNet  450k  200  2015
 COCO  120K  80  2014
 Pascal VOC  12k  20  2012
 Oxford-IIIT Pet  7K  37  2012
 KITTI Vision  7K  3  2014


結論

最後,在目標檢測領域,還有很多未知的領域值得我們探索,不論是業界應用還是新型算法。儘管這篇文章只對目標檢測作了簡單的概述,我們依然希望它能幫助你初步了解目標檢測這一領域,並為你更進一步的學習打下基礎。


原文鏈接: https://tryolabs.com/blog/2017/08/30/object-detection-an-overview-in-the-age-of-deep-learning/

文章來源:大數據文摘