目標(biāo)檢測101:一文帶你讀懂深度學(xué)習(xí)框架下的目標(biāo)檢測
編譯:及子龍,張禮俊,余志文,錢天培
從簡單的圖像分類到3D位置估算,在機(jī)器視覺領(lǐng)域里從來都不乏有趣的問題。其中我們最感興趣的問題之一就是目標(biāo)檢測。
如同其他的機(jī)器視覺問題一樣,目標(biāo)檢測目前為止還沒有公認(rèn)***的解決方法。在了解目標(biāo)檢測之前,讓我們先快速地了解一下這個領(lǐng)域里普遍存在的一些問題。
一、目標(biāo)檢測 vs 其他計算機(jī)視覺問題圖像分類
在計算機(jī)視覺領(lǐng)域中,最為人所知的問題便是圖像分類問題。
圖像分類是把一幅圖片分成多種類別中的一類。
ImageNet是在學(xué)術(shù)界使用的***的數(shù)據(jù)集之一,它由數(shù)百萬個已分類圖像組成,部分?jǐn)?shù)據(jù)用于ImageNet大規(guī)模視覺識別挑戰(zhàn)賽(ILSVRC)。 最近幾年來,解決分類問題的模型已經(jīng)有了超越人類的識別能力,所以分類問題實際上已經(jīng)被解決了.
然而,圖像分類問題有許多挑戰(zhàn),相伴隨著的是許多如何解決這些問題的文獻(xiàn)以及對還未被解決的問題的探討。
圖像分類實例
1. 目標(biāo)定位
同圖像分類類似,目標(biāo)定位要找到單個目標(biāo)在圖像中的位置。
目標(biāo)定位實例
目標(biāo)定位在實際生活中的應(yīng)用很廣泛,比如,智能剪切(通過定位目標(biāo)所在的位置,識別需要圖片從哪里剪切) ,或者進(jìn)行常規(guī)的目標(biāo)提取以便進(jìn)一步處理。結(jié)合圖像分類技術(shù),它不僅僅可以定位目標(biāo),還能對該物體分類。
2. 實例分割
從目標(biāo)檢測更進(jìn)一步,我們不僅僅要找到圖片中的對象,更是要發(fā)現(xiàn)該檢測對象對應(yīng)的像素碼。我們把這個問題稱為實例分割,或者是對象分割。
3. 目標(biāo)檢測
在迭代處理定位和圖片分類問題時,我們最終還是需要對多個目標(biāo)進(jìn)行同時檢測和分類。目標(biāo)檢測是在圖片中對可變數(shù)量的目標(biāo)進(jìn)行查找和分類。其中重要的區(qū)別是“可變”這一部分。
和圖像分類問題不同的是,由于每一張圖片待檢測目標(biāo)的數(shù)量不一,目標(biāo)檢測的輸出長度是可變的。在這篇文章中,我們將詳細(xì)地介紹一些實際應(yīng)用,討論目標(biāo)檢測作為機(jī)器學(xué)習(xí)問題的主要困難,以及在過去的幾年里如何應(yīng)用深度學(xué)習(xí)處理目標(biāo)檢測。
目標(biāo)檢測實例
二、實際案例
在Tryolabs 中,我們專注于使用現(xiàn)有的機(jī)器學(xué)習(xí)方法解決商務(wù)問題,所以即使我們熱衷于機(jī)器學(xué)習(xí)的科研問題,但最終我們還是要回歸實際應(yīng)用中。
雖然目標(biāo)檢測從某種程度上在工業(yè)界還是一個很新的工具,但它已經(jīng)有了很多實用和有趣的應(yīng)用。
1. 人臉檢測
自20世紀(jì)中期以來,傻瓜相機(jī)開始通過更為高效的自動對焦來檢測人面。 雖然這是一種比較淺顯的目標(biāo)檢測應(yīng)用,但是這種方法同樣適用于其他類型的目標(biāo)檢測,我們稍后將會介紹。
2. 計數(shù)
計數(shù)是一個簡單但是經(jīng)常被忽略的目標(biāo)檢測問題。統(tǒng)計人,車,花甚至是微生物數(shù)量是現(xiàn)實世界的需求,在大部分基于圖像的系統(tǒng)中都要使用。近幾年伴隨著監(jiān)控視頻設(shè)備的不斷涌現(xiàn),使用機(jī)器視覺將原圖像轉(zhuǎn)化為結(jié)構(gòu)化數(shù)據(jù)的需求也越來越多。
3. 視覺搜索引擎
***,我們比較喜歡的一個實例是Pinterest(圖片社交平臺)的視覺搜索引擎。
他們將目標(biāo)檢測作為索引圖像內(nèi)容的處理流程之一。比如,你可以在不同的背景下找到某個特定的錢包。 這比Google Image的反向搜索引擎只是找到類似的圖像更強大。
圖1
圖1:相似查找:我們應(yīng)用目標(biāo)檢測方法定位包或鞋子這些產(chǎn)品。在這張圖片中, 用戶可以點擊圖片中的目標(biāo)對象便可以查找類似的產(chǎn)品。
4. 空中影像分析
在這個廉價無人機(jī)和衛(wèi)星興起的年代,我們能在空中獲取***多的關(guān)于地球的數(shù)據(jù)。 如今已經(jīng)有越來越多的公司開始使用planet 或者descartes labs 公司提供的衛(wèi)星圖片,應(yīng)用目標(biāo)檢測來計算汽車,樹,船的數(shù)量。這些舉措都為我們帶來了高質(zhì)量的數(shù)據(jù),這在從前是不可能實現(xiàn)的。
一些公司正在應(yīng)用無人機(jī)攝像對人難以到達(dá)的地方進(jìn)行自動監(jiān)測(例如BetterView)或者使用物體檢測方法進(jìn)行整體分析(例如TensorFlight)。 除此之外,一些公司實現(xiàn)了不需人為干預(yù)下的場景自動檢測和位置識別。
使用TensorFlight實現(xiàn)汽車、樹和行人的識別
三、目標(biāo)檢測存在的問題和挑戰(zhàn)
現(xiàn)在,讓我們開始深入了解目標(biāo)檢測中的主要問題。
1. 對象數(shù)量不確定
我們在前面提到過對象數(shù)量可變,但是并沒有解釋為什么是個問題。當(dāng)訓(xùn)練機(jī)器學(xué)習(xí)模型的時候,你經(jīng)常需要把數(shù)據(jù)表示成固定長度的向量。如果在訓(xùn)練之前圖片中的對象數(shù)量是未知的,模型的輸出數(shù)量也就是未知的了。因此,一些增加模型復(fù)雜性的預(yù)處理是必要的。
在傳統(tǒng)的方法中,輸出的數(shù)量可以使用滑動窗函數(shù)來計算,給不同位置產(chǎn)生一個固定大小的特征窗。在做完了預(yù)測之后,有些預(yù)測會被丟棄,有些會被合并到最終結(jié)果里面。
滑動窗示例
2. 對象大小不同
另外一個挑戰(zhàn)是處理不同大小對象的問題。面對一個簡單的分類問題,你期望是盡可能將覆蓋圖片大部分面積的對象進(jìn)行分類。而在有些情境中,你想識別的對象可能只有幾十個像素點大小(或者說是原圖片中占比很小的一部分)。以往人們通過使用不同大小的滑動窗來解決這個問題,這種方法雖然簡單,卻效率低下。
3. 建模
第三個挑戰(zhàn)是同時解決目標(biāo)定位和圖像分類這兩個問題。 我們?nèi)绾螌⑦@兩種不同類型的需求組合到一個模型里呢?
在進(jìn)入深度學(xué)習(xí)和如何應(yīng)對這些挑戰(zhàn)之前,讓我們先快速了解一些經(jīng)典的檢測方法。
四、檢測方法
1. 傳統(tǒng)方法
在這里我們將集中介紹其中兩個***且目前依然被廣泛使用的模型。
***個是2001年由Paul Viola和Michael Jones在論文《Robust Real-time Object Detection》里提出 的Viola-Jones框架。這個方法快速且相對簡單,使得低處理能力的傻瓜相機(jī)得以進(jìn)行實時的面部識別。
我們不打算深入介紹它是如何工作和訓(xùn)練的,但是總體來說,該算法是通過使用哈爾特征(Haar features)生成許多(可能幾千個)簡單的二元分類器來實現(xiàn)的。這些分類器通過一個多尺度級聯(lián)滑動窗進(jìn)行評估,一旦遇到錯誤的分類結(jié)果則提前結(jié)束。
另一個傳統(tǒng)方法是使用方向梯度直方圖(HOG)特征和支持向量機(jī)來分類。這個方法依然需要一個多尺度滑動窗,盡管它比Viola-Jones表現(xiàn)優(yōu)異,但速度卻慢了很多。
2. 深度學(xué)習(xí)方法
在機(jī)器學(xué)習(xí)領(lǐng)域,深度學(xué)習(xí)一直是個大boss,尤其在計算機(jī)視覺方面。在圖像分類的任務(wù)上,深度學(xué)習(xí)已經(jīng)徹底擊敗了其他的傳統(tǒng)模型。同樣,在目標(biāo)檢測方面,深度學(xué)習(xí)也代表了目前的***進(jìn)水平。
讀到這里,你應(yīng)該對我們面臨的挑戰(zhàn)和對解決它們的辦法有了一定的了解,接下來我們將概述一下在過去的幾年深度學(xué)習(xí)方法的發(fā)展歷程。
2013年由NYU(紐約大學(xué)) 提出的OverFeat 是最早將深度學(xué)習(xí)用于目標(biāo)檢測的方法之一。他們提出了一個使用卷積神經(jīng)網(wǎng)絡(luò)(CNNs)來處理多尺度滑窗的算法。
(1) OverFeat
2013年由NYU(紐約大學(xué)) 提出的OverFeat 是最早將深度學(xué)習(xí)用于目標(biāo)檢測的方法之一。他們提出了一個使用卷積神經(jīng)網(wǎng)絡(luò)(CNNs)來處理多尺度滑窗的算法。
(2) R-CNN
OverFeat提出后不久,加州大學(xué)伯克利分校的Ross Girshick及其同事就發(fā)表了Regins with CNN features,簡稱R-CNN的方法,該方法在物體識別挑戰(zhàn)中有50%的效果提升。
他們提出了目標(biāo)檢測分三步走的方法:
- 使用候選區(qū)域方法(***的一個是’Selective Search’)提取可能的物體
- 使用CNN從每一個區(qū)域提取特征
- 使用支持向量機(jī)(SVM)分類每一個區(qū)域
R-CNN架構(gòu)
Girshick, Ross, et al. "Rich feature hierarchies for accurate object detection and semantic segmentation." 2014.
盡管R-CNN能達(dá)到很好的識別效果,但是它在訓(xùn)練中有很多的問題。
為了訓(xùn)練模型,你首先要對訓(xùn)練數(shù)據(jù)集產(chǎn)生候選區(qū)域,然后把CNN特征提取應(yīng)用于每一個區(qū)域(對于Pascal 2012數(shù)據(jù)集通常需要處理200GB的數(shù)據(jù)),***再訓(xùn)練支持向量機(jī)分類器。
(3) Fast R-CNN
R-CNN被提出不久后,它又延伸出了一個完全使用深度學(xué)習(xí)的版本——就在一年后,Ross Girshick(目前在微軟研究中心)發(fā)表了Fast R-CNN。
和R-CNN類似,F(xiàn)ast R-CNN依然采用Selective Search生成候選區(qū)域,但是和之前的分別提取出所有的候選區(qū)域然后使用支持向量機(jī)分類器不同,F(xiàn)ast R-CNN 在完整的圖片上使用CNN然后使用集中了特征映射的興趣區(qū)域(Region of Interest, RoI),以及前向傳播網(wǎng)絡(luò)進(jìn)行分類和回歸。這個方法不僅更快,而且有Rol集中層和全連接層,使得模型從頭到尾可求導(dǎo),更容易訓(xùn)練。
Fast R-CNN***的不足是,這個模型依然依賴Selective Search(或者其他的區(qū)域候選算法),當(dāng)用該方法進(jìn)行推論時,這塊就成了一個瓶頸。
Fast R-CNN
Girshick, Ross. "Fast R-CNN" 2015.
(4) YOLO
在Fast R-CNN被提出過后不久,Joseph Redmon(與Girshick等人合著)發(fā)表了You Only Look Once:Unified, Real-Time Object Detection(YOLO)這篇論文。
YOLO提出了一個兼具準(zhǔn)確性和速度性的簡單的卷積神經(jīng)網(wǎng)絡(luò),***實現(xiàn)了實時物體檢測。
YOLO架構(gòu)
Redmon, Joseph, et al. "You only look once: Unified, real-time object detection." 2016.
(5) Faster R-CNN
接著,Shaoqing Ren(依然與Girshick合著,目前在Fackbook研究中心)發(fā)表了Faster R-CNN,這是R-CNN的第三次迭代。
Faster R-CNN添加了候選區(qū)域網(wǎng)絡(luò)(Region Proposal Network, RPN),試圖取消對Selective Search 算法的依賴,這使得模型可以完全實現(xiàn)端到端訓(xùn)練。
我們暫時不會詳細(xì)深入地介紹RPNs的運行原理,但抽象地說,它基于一個叫“物體性”(objectness)的分?jǐn)?shù)輸出對象。這些物體被用在Rol集中層和全連接層,從而實現(xiàn)分類的目標(biāo)。
Faster R-CNN架構(gòu)
Ren, Shaoqing, et al. "Faster R-CNN: Towards real-time object detection with region proposal networks." 2015.
(6) SSD和R-FCN
***,還有兩篇論文不得不提:Single Shot Detector(SSD) 和 Region-based Fully Convolutional Networks(R-FCN)。 前者在YOLO的基礎(chǔ)上使用多尺寸的卷積特征圖使得在結(jié)果和速度上都有提升。后者基于Faster R-CNN的架構(gòu),但是只使用了卷積網(wǎng)絡(luò)。
五、數(shù)據(jù)集的重要性
在研究中,數(shù)據(jù)集扮演了十分重要的角色,其重要性經(jīng)常被低估。每一次新的數(shù)據(jù)集發(fā)布,都會有論文被發(fā)表,新的模型在此基礎(chǔ)上進(jìn)行比對和提升,把不可能變成可能。
很可惜,對于目標(biāo)檢測,我們還沒有足夠的數(shù)據(jù)集。數(shù)據(jù)很難產(chǎn)生,而且成本很高,具備優(yōu)秀數(shù)據(jù)庫的公司一般不愿意公開他們的數(shù)據(jù),而學(xué)校則無法接觸到優(yōu)質(zhì)的數(shù)據(jù)集。
話雖如此,我們還是有一些不錯的公開數(shù)據(jù)可以使用,下面的列表就是目前可用的主要數(shù)據(jù)集。
六、結(jié)論
***,在目標(biāo)檢測領(lǐng)域,還有很多未知的領(lǐng)域值得我們探索,不論是業(yè)界應(yīng)用還是新型算法。盡管這篇文章只對目標(biāo)檢測作了簡單的概述,我們依然希望它能幫助你初步了解目標(biāo)檢測這一領(lǐng)域,并為你更進(jìn)一步的學(xué)習(xí)打下基礎(chǔ)。
原文:https://tryolabs.com/blog/2017/08/30/object-detection-an-overview-in-the-age-of-deep-learning/
【本文是51CTO專欄機(jī)構(gòu)大數(shù)據(jù)文摘的原創(chuàng)譯文,微信公眾號“大數(shù)據(jù)文摘( id: BigDataDigest)”】