0 前言
?? 優(yōu)質(zhì)競賽項(xiàng)目系列,今天要分享的是
?? 機(jī)器視覺 opencv 深度學(xué)習(xí)目標(biāo)檢測
該項(xiàng)目較為新穎,適合作為競賽課題方向,學(xué)長非常推薦!
??學(xué)長這里給一個題目綜合評分(每項(xiàng)滿分5分)
- 難度系數(shù):3分
- 工作量:3分
- 創(chuàng)新點(diǎn):4分
?? 更多資料, 項(xiàng)目分享:文章來源:http://www.zghlxwxcb.cn/news/detail-732575.html
https://gitee.com/dancheng-senior/postgraduate文章來源地址http://www.zghlxwxcb.cn/news/detail-732575.html
2 目標(biāo)檢測概念
普通的深度學(xué)習(xí)監(jiān)督算法主要是用來做分類,如圖1所示,分類的目標(biāo)是要識別出圖中所示是一只貓。
在ILSVRC(ImageNet Large Scale Visual Recognition
Challenge)競賽以及實(shí)際的應(yīng)用中,還包括目標(biāo)定位和目標(biāo)檢測等任務(wù)。
其中目標(biāo)定位是不僅僅要識別出來是什么物體(即分類),而且還要預(yù)測物體的位置,位置一般用邊框(bounding box)標(biāo)記,如圖2所示。
而目標(biāo)檢測實(shí)質(zhì)是多目標(biāo)的定位,即要在圖片中定位多個目標(biāo)物體,包括分類和定位。
比如對圖3進(jìn)行目標(biāo)檢測,得到的結(jié)果是好幾只不同動物,他們的位置如圖3中不同顏色的框所示。
3 目標(biāo)分類、定位、檢測示例
簡單來說,分類、定位和檢測的區(qū)別如下:
-
分類:是什么?
-
定位:在哪里?是什么?(單個目標(biāo))
-
檢測:在哪里?分別是什么?(多個目標(biāo))
目標(biāo)檢測對于人類來說并不困難,通過對圖片中不同顏色模塊的感知很容易定位并分類出其中目標(biāo)物體,但對于計算機(jī)來說,面對的是RGB像素矩陣,很難從圖像中直接得到狗和貓這樣的抽象概念并定位其位置,再加上有時候多個物體和雜亂的背景混雜在一起,目標(biāo)檢測更加困難。
但這難不倒科學(xué)家們,在傳統(tǒng)視覺領(lǐng)域,目標(biāo)檢測就是一個非常熱門的研究方向,一些特定目標(biāo)的檢測,比如人臉檢測和行人檢測已經(jīng)有非常成熟的技術(shù)了。普通的目標(biāo)檢測也有過很多的嘗試,但是效果總是差強(qiáng)人意。
4 傳統(tǒng)目標(biāo)檢測
傳統(tǒng)的目標(biāo)檢測一般使用滑動窗口的框架,主要包括三個步驟:
1 利用不同尺寸的滑動窗口框住圖中的某一部分作為候選區(qū)域;
2 提取候選區(qū)域相關(guān)的視覺特征。比如人臉檢測常用的Harr特征;行人檢測和普通目標(biāo)檢測常用的HOG特征等;
3 利用分類器進(jìn)行識別,比如常用的SVM模型。
傳統(tǒng)的目標(biāo)檢測中,多尺度形變部件模型DPM(Deformable Part Model是出類拔萃的,連續(xù)獲得VOC(Visual Object
Class)2007到2009的檢測冠軍,2010年其作者Felzenszwalb
Pedro被VOC授予”終身成就獎”。DPM把物體看成了多個組成的部件(比如人臉的鼻子、嘴巴等),用部件間的關(guān)系來描述物體,這個特性非常符合自然界很多物體的非剛體特征。DPM可以看做是HOG+SVM的擴(kuò)展,很好的繼承了兩者的優(yōu)點(diǎn),在人臉檢測、行人檢測等任務(wù)上取得了不錯的效果,但是DPM相對復(fù)雜,檢測速度也較慢,從而也出現(xiàn)了很多改進(jìn)的方法。正當(dāng)大家熱火朝天改進(jìn)DPM性能的時候,基于深度學(xué)習(xí)的目標(biāo)檢測橫空出世,迅速蓋過了DPM的風(fēng)頭,很多之前研究傳統(tǒng)目標(biāo)檢測算法的研究者也開始轉(zhuǎn)向深度學(xué)習(xí)。
基于深度學(xué)習(xí)的目標(biāo)檢測發(fā)展起來后,其實(shí)效果也一直難以突破。比如文獻(xiàn)[6]中的算法在VOC
2007測試集合上的mAP只能30%多一點(diǎn),文獻(xiàn)[7]中的OverFeat在ILSVRC 2013測試集上的mAP只能達(dá)到24.3%。2013年R-
CNN誕生了,VOC 2007測試集的mAP被提升至48%,2014年時通過修改網(wǎng)絡(luò)結(jié)構(gòu)又飆升到了66%,同時ILSVRC
2013測試集的mAP也被提升至31.4%。
R-CNN是Region-based Convolutional Neural
Networks的縮寫,中文翻譯是基于區(qū)域的卷積神經(jīng)網(wǎng)絡(luò),是一種結(jié)合區(qū)域提名(Region
Proposal)和卷積神經(jīng)網(wǎng)絡(luò)(CNN)的目標(biāo)檢測方法。Ross Girshick在2013年的開山之作《Rich Feature Hierarchies
for Accurate Object Detection and Semantic
Segmentation》[1]奠定了這個子領(lǐng)域的基礎(chǔ),這篇論文后續(xù)版本發(fā)表在CVPR 2014[2],期刊版本發(fā)表在PAMI 2015[3]。
其實(shí)在R-CNN之前已經(jīng)有很多研究者嘗試用Deep Learning的方法來做目標(biāo)檢測了,包括OverFeat[7],但R-
CNN是第一個真正可以工業(yè)級應(yīng)用的解決方案,這也和深度學(xué)習(xí)本身的發(fā)展類似,神經(jīng)網(wǎng)絡(luò)、卷積網(wǎng)絡(luò)都不是什么新概念,但在本世紀(jì)突然真正變得可行,而一旦可行之后再迅猛發(fā)展也不足為奇了。
R-CNN這個領(lǐng)域目前研究非?;钴S,先后出現(xiàn)了R-CNN[1,2,3,18]、SPP-net[4,19]、Fast R-CNN[14, 20]
、Faster R-CNN[5,21]、R-FCN[16,24]、YOLO[15,22]、SSD[17,23]等研究。Ross
Girshick作為這個領(lǐng)域的開山鼻祖總是神一樣的存在,R-CNN、Fast R-CNN、Faster
R-CNN、YOLO都和他有關(guān)。這些創(chuàng)新的工作其實(shí)很多時候是把一些傳統(tǒng)視覺領(lǐng)域的方法和深度學(xué)習(xí)結(jié)合起來了,比如選擇性搜索(Selective
Search)和圖像金字塔(Pyramid)等。
5 兩類目標(biāo)檢測算法
深度學(xué)習(xí)相關(guān)的目標(biāo)檢測方法也可以大致分為兩派:
基于區(qū)域提名的,如R-CNN、SPP-net、Fast R-CNN、Faster R-CNN、R-FCN;
端到端(End-to-End),無需區(qū)域提名的,如YOLO、SSD。
目前來說,基于區(qū)域提名的方法依然占據(jù)上風(fēng),但端到端的方法速度上優(yōu)勢明顯,后續(xù)的發(fā)展拭目以待。
5.1 相關(guān)研究
5.1.1 選擇性搜索
目標(biāo)檢測的第一步是要做區(qū)域提名(Region Proposal),也就是找出可能的感興趣區(qū)域(Region Of Interest,
ROI)。區(qū)域提名類似于光學(xué)字符識別(OCR)領(lǐng)域的切分,OCR切分常用過切分方法,簡單說就是盡量切碎到小的連通域(比如小的筆畫之類),然后再根據(jù)相鄰塊的一些形態(tài)學(xué)特征進(jìn)行合并。但目標(biāo)檢測的對象相比OCR領(lǐng)域千差萬別,而且圖形不規(guī)則,大小不一,所以一定程度上可以說區(qū)域提名是比OCR切分更難的一個問題。
區(qū)域提名可能的方法有:
一、滑動窗口。滑動窗口本質(zhì)上就是窮舉法,利用不同的尺度和長寬比把所有可能的大大小小的塊都窮舉出來,然后送去識別,識別出來概率大的就留下來。很明顯,這樣的方法復(fù)雜度太高,產(chǎn)生了很多的冗余候選區(qū)域,在現(xiàn)實(shí)當(dāng)中不可行。
二、規(guī)則塊。在窮舉法的基礎(chǔ)上進(jìn)行了一些剪枝,只選用固定的大小和長寬比。這在一些特定的應(yīng)用場景是很有效的,比如拍照搜題APP小猿搜題中的漢字檢測,因?yàn)闈h字方方正正,長寬比大多比較一致,因此用規(guī)則塊做區(qū)域提名是一種比較合適的選擇。但是對于普通的目標(biāo)檢測來說,規(guī)則塊依然需要訪問很多的位置,復(fù)雜度高。
三、選擇性搜索。從機(jī)器學(xué)習(xí)的角度來說,前面的方法召回是不錯了,但是精度差強(qiáng)人意,所以問題的核心在于如何有效地去除冗余候選區(qū)域。其實(shí)冗余候選區(qū)域大多是發(fā)生了重疊,選擇性搜索利用這一點(diǎn),自底向上合并相鄰的重疊區(qū)域,從而減少冗余。
區(qū)域提名并不只有以上所說的三種方法,實(shí)際上這塊是非常靈活的,因此變種也很多,有興趣的讀者不妨參考一下文獻(xiàn)[12]。
選擇性搜索的具體算法細(xì)節(jié)[8]如算法1所示。總體上選擇性搜索是自底向上不斷合并候選區(qū)域的迭代過程。
?
輸入: 一張圖片
輸出:候選的目標(biāo)位置集合L
算法:
1: 利用過切分方法得到候選的區(qū)域集合R = {r1,r2,…,rn}
2: 初始化相似集合S = ?
3: foreach 鄰居區(qū)域?qū)?ri,rj) do
4: 計算相似度s(ri,rj)
5: S = S ∪ s(ri,rj)
6: while S not=? do
7: 得到最大的相似度s(ri,rj)=max(S)
8: 合并對應(yīng)的區(qū)域rt = ri ∪ rj
9: 移除ri對應(yīng)的所有相似度:S = S\s(ri,r*)
10: 移除rj對應(yīng)的所有相似度:S = S\s(r*,rj)
11: 計算rt對應(yīng)的相似度集合St
12: S = S ∪ St
13: R = R ∪ rt
14: L = R中所有區(qū)域?qū)?yīng)的邊框
算法1 選擇性搜索算法
從算法不難看出,R中的區(qū)域都是合并后的,因此減少了不少冗余,相當(dāng)于準(zhǔn)確率提升了,但是別忘了我們還需要繼續(xù)保證召回率,因此算法1中的相似度計算策略就顯得非常關(guān)鍵了。如果簡單采用一種策略很容易錯誤合并不相似的區(qū)域,比如只考慮輪廓時,不同顏色的區(qū)域很容易被誤合并。選擇性搜索采用多樣性策略來增加候選區(qū)域以保證召回,比如顏色空間考慮RGB、灰度、HSV及其變種等,相似度計算時既考慮顏色相似度,又考慮紋理、大小、重疊情況等。
總體上,選擇性搜索是一種比較樸素的區(qū)域提名方法,被早期的基于深度學(xué)習(xí)的目標(biāo)檢測方法(包括Overfeat和R-CNN等)廣泛利用,但被當(dāng)前的新方法棄用了。
5.1.2 OverFeat
OverFeat是用CNN統(tǒng)一來做分類、定位和檢測的經(jīng)典之作,作者是深度學(xué)習(xí)大神之一Yann Lecun在紐約大學(xué)的團(tuán)隊。OverFeat也是ILSVRC
2013任務(wù)3(分類+定位)的冠軍得主。
OverFeat的核心思想有三點(diǎn):
1 區(qū)域提名:結(jié)合滑動窗口和規(guī)則塊,即多尺度(multi-scale)的滑動窗口;
2
分類和定位:統(tǒng)一用CNN來做分類和預(yù)測邊框位置,模型與AlexNet[12]類似,其中1-5層為特征抽取層,即將圖片轉(zhuǎn)換為固定維度的特征向量,6-9層為分類層(分類任務(wù)專用),不同的任務(wù)(分類、定位、檢測)公用特征抽取層(1-5層),只替換6-9層;
3
累積:因?yàn)橛昧嘶瑒哟翱?,同一個目標(biāo)對象會有多個位置,也就是多個視角;因?yàn)橛昧硕喑叨龋粋€目標(biāo)對象又會有多個大小不一的塊。這些不同位置和不同大小塊上的分類置信度會進(jìn)行累加,從而使得判定更為準(zhǔn)確。
OverFeat的關(guān)鍵步驟有四步:
1
利用滑動窗口進(jìn)行不同尺度的區(qū)域提名,然后使用CNN模型對每個區(qū)域進(jìn)行分類,得到類別和置信度。從圖中可以看出,不同縮放比例時,檢測出來的目標(biāo)對象數(shù)量和種類存在較大差異;
2 利用多尺度滑動窗口來增加檢測數(shù)量,提升分類效果,如圖3所示;
3 用回歸模型預(yù)測每個對象的位置,從圖4中來看,放大比例較大的圖片,邊框數(shù)量也較多;
4 邊框合并。
Overfeat是CNN用來做目標(biāo)檢測的早期工作,主要思想是采用了多尺度滑動窗口來做分類、定位和檢測,雖然是多個任務(wù)但重用了模型前面幾層,這種模型重用的思路也是后來R-
CNN系列不斷沿用和改進(jìn)的經(jīng)典做法。
當(dāng)然Overfeat也是有不少缺點(diǎn)的,至少速度和效果都有很大改進(jìn)空間,后面的R-CNN系列在這兩方面做了很多提升。
5.2 基于區(qū)域提名的方法
主要介紹基于區(qū)域提名的方法,包括R-CNN、SPP-net、Fast R-CNN、Faster R-CNN、R-FCN。
5.2.1 R-CNN
如前面所述,早期的目標(biāo)檢測,大都使用滑動窗口的方式進(jìn)行窗口提名,這種方式本質(zhì)是窮舉法,R-CNN采用的是Selective Search。
以下是R-CNN的主要步驟:
區(qū)域提名:通過Selective Search從原始圖片提取2000個左右區(qū)域候選框;
區(qū)域大小歸一化:把所有侯選框縮放成固定大?。ㄔ牟捎?27×227);
特征提?。和ㄟ^CNN網(wǎng)絡(luò),提取特征;
分類與回歸:在特征層的基礎(chǔ)上添加兩個全連接層,再用SVM分類來做識別,用線性回歸來微調(diào)邊框位置與大小,其中每個類別單獨(dú)訓(xùn)練一個邊框回歸器。
其中目標(biāo)檢測系統(tǒng)的結(jié)構(gòu)如圖6所示,注意,圖中的第2步對應(yīng)步驟中的1、2步,即包括區(qū)域提名和區(qū)域大小歸一化。
Overfeat可以看做是R-CNN的一個特殊情況,只需要把Selective
Search換成多尺度的滑動窗口,每個類別的邊框回歸器換成統(tǒng)一的邊框回歸器,SVM換為多層網(wǎng)絡(luò)即可。但是Overfeat實(shí)際比R-
CNN快9倍,這主要得益于卷積相關(guān)的共享計算。
事實(shí)上,R-CNN有很多缺點(diǎn):
重復(fù)計算:R-CNN雖然不再是窮舉,但依然有兩千個左右的候選框,這些候選框都需要進(jìn)行CNN操作,計算量依然很大,其中有不少其實(shí)是重復(fù)計算;
SVM模型:而且還是線性模型,在標(biāo)注數(shù)據(jù)不缺的時候顯然不是最好的選擇;
訓(xùn)練測試分為多步:區(qū)域提名、特征提取、分類、回歸都是斷開的訓(xùn)練的過程,中間數(shù)據(jù)還需要單獨(dú)保存;
訓(xùn)練的空間和時間代價很高:卷積出來的特征需要先存在硬盤上,這些特征需要幾百G的存儲空間;
慢:前面的缺點(diǎn)最終導(dǎo)致R-CNN出奇的慢,GPU上處理一張圖片需要13秒,CPU上則需要53秒[2]。
當(dāng)然,R-CNN這次是沖著效果來的,其中ILSVRC 2013數(shù)據(jù)集上的mAP由Overfeat的24.3%提升到了31.4%,第一次有了質(zhì)的改變。
5.2.2 SPP-net
SPP-net是MSRA何愷明等人提出的,其主要思想是去掉了原始圖像上的crop/warp等操作,換成了在卷積特征上的空間金字塔池化層(Spatial
Pyramid Pooling,SPP),如圖7所示。為何要引入SPP層
,主要原因是CNN的全連接層要求輸入圖片是大小一致的,而實(shí)際中的輸入圖片往往大小不一,如果直接縮放到同一尺寸,很可能有的物體會充滿整個圖片,而有的物體可能只能占到圖片的一角。傳統(tǒng)的解決方案是進(jìn)行不同位置的裁剪,但是這些裁剪技術(shù)都可能會導(dǎo)致一些問題出現(xiàn),比如圖7中的crop會導(dǎo)致物體不全,warp導(dǎo)致物體被拉伸后形變嚴(yán)重,SPP就是為了解決這種問題的。SPP對整圖提取固定維度的特征,再把圖片均分成4份,每份提取相同維度的特征,再把圖片均分為16份,以此類推??梢钥闯觯瑹o論圖片大小如何,提取出來的維度數(shù)據(jù)都是一致的,這樣就可以統(tǒng)一送至全連接層了。SPP思想在后來的R-
CNN模型中也被廣泛用到。
SPP-net的網(wǎng)絡(luò)結(jié)構(gòu)如圖8所示,實(shí)質(zhì)是最后一層卷積層后加了一個SPP層,將維度不一的卷積特征轉(zhuǎn)換為維度一致的全連接輸入。
SPP-net做目標(biāo)檢測的主要步驟為:
1 區(qū)域提名:用Selective Search從原圖中生成2000個左右的候選窗口;
2 區(qū)域大小縮放:SPP-net不再做區(qū)域大小歸一化,而是縮放到min(w,
h)=s,即統(tǒng)一長寬的最短邊長度,s選自{480,576,688,864,1200}中的一個,選擇的標(biāo)準(zhǔn)是使得縮放后的候選框大小與224×224最接近;
3 特征提?。豪肧PP-net網(wǎng)絡(luò)結(jié)構(gòu)提取特征;
4 分類與回歸:類似R-CNN,利用SVM基于上面的特征訓(xùn)練分類器模型,用邊框回歸來微調(diào)候選框的位置。
SPP-net解決了R-CNN區(qū)域提名時crop/warp帶來的偏差問題,提出了SPP層,使得輸入的候選框可大可小,但其他方面依然和R-
CNN一樣,因而依然存在不少問題,這就有了后面的Fast R-CNN。
5.2.3 Fast R-CNN
Fast R-CNN是要解決R-CNN和SPP-net兩千個左右候選框帶來的重復(fù)計算問題,其主要思想為:
1 使用一個簡化的SPP層 —— RoI(Region of Interesting) Pooling層,操作與SPP類似;
2 訓(xùn)練和測試是不再分多步:不再需要額外的硬盤來存儲中間層的特征,梯度能夠通過RoI Pooling層直接傳播;此外,分類和回歸用Multi-
task的方式一起進(jìn)行;
3 SVD:使用SVD分解全連接層的參數(shù)矩陣,壓縮為兩個規(guī)模小很多的全連接層。
Fast R-CNN的主要步驟如下:
1 特征提取:以整張圖片為輸入利用CNN得到圖片的特征層;
2 區(qū)域提名:通過Selective Search等方法從原始圖片提取區(qū)域候選框,并把這些候選框一一投影到最后的特征層;
3 區(qū)域歸一化:針對特征層上的每個區(qū)域候選框進(jìn)行RoI Pooling操作,得到固定大小的特征表示;
4 分類與回歸:然后再通過兩個全連接層,分別用softmax多分類做目標(biāo)識別,用回歸模型進(jìn)行邊框位置與大小微調(diào)。
Fast R-CNN比R-CNN的訓(xùn)練速度(大模型L)快8.8倍,測試時間快213倍,比SPP-net訓(xùn)練速度快2.6倍,測試速度快10倍左右。
5.3 端到端的方法
介紹端到端(End-to-End)的目標(biāo)檢測方法,這些方法無需區(qū)域提名,包括YOLO和SSD。
YOLO
YOLO的全拼是You Only Look Once,顧名思義就是只看一次,進(jìn)一步把目標(biāo)判定和目標(biāo)識別合二為一,所以識
網(wǎng)絡(luò)的整體結(jié)構(gòu)如圖所示,針對一張圖片,YOLO的處理步驟為:
把輸入圖片縮放到448×448大小;
運(yùn)行卷積網(wǎng)絡(luò);
對模型置信度卡閾值,得到目標(biāo)位置與類別。
網(wǎng)絡(luò)的模型如圖15所示,將448×448大小的圖切成S×S的網(wǎng)格,目標(biāo)中心點(diǎn)所在的格子負(fù)責(zé)該目標(biāo)的相關(guān)檢測,每個網(wǎng)格預(yù)測B個邊框及其置信度,以及C種類別的概率。YOLO中S=7,B=2,C取決于數(shù)據(jù)集中物體類別數(shù)量,比如VOC數(shù)據(jù)集就是C=20。對VOC數(shù)據(jù)集來說,YOLO就是把圖片統(tǒng)一縮放到448×448,然后每張圖平均劃分為7×7=49個小格子,每個格子預(yù)測2個矩形框及其置信度,以及20種類別的概率。
YOLO簡化了整個目標(biāo)檢測流程,速度的提升也很大,但是YOLO還是有不少可以改進(jìn)的地方,比如S×S的網(wǎng)格就是一個比較啟發(fā)式的策略,如果兩個小目標(biāo)同時落入一個格子中,模型也只能預(yù)測一個;另一個問題是Loss函數(shù)對不同大小的bbox未做區(qū)分。
SSD
SSD[17,23]的全拼是Single Shot MultiBox
Detector,沖著YOLO的缺點(diǎn)來的。SSD的框架如圖16所示,圖16(a)表示帶有兩個Ground
Truth邊框的輸入圖片,圖16(b)和?分別表示8×8網(wǎng)格和4×4網(wǎng)格,顯然前者適合檢測小的目標(biāo),比如圖片中的貓,后者適合檢測大的目標(biāo),比如圖片中的狗。在每個格子上有一系列固定大小的Box(有點(diǎn)類似前面提到的Anchor
Box),這些在SSD稱為Default Box,用來框定目標(biāo)物體的位置,在訓(xùn)練的時候Ground
Truth會賦予給某個固定的Box,比如圖16(b)中的藍(lán)框和圖16?中的紅框
SSD的網(wǎng)絡(luò)分為兩部分,前面的是用于圖像分類的標(biāo)準(zhǔn)網(wǎng)絡(luò)(去掉了分類相關(guān)的層),后面的網(wǎng)絡(luò)是用于檢測的多尺度特征映射層,從而達(dá)到檢測不同大小的目標(biāo)。SSD和YOLO的網(wǎng)絡(luò)結(jié)構(gòu)對比如圖17所示。
SSD在保持YOLO高速的同時效果也提升很多,主要是借鑒了Faster
R-CNN中的Anchor機(jī)制,同時使用了多尺度。但是從原理依然可以看出,Default
Box的形狀以及網(wǎng)格大小是事先固定的,那么對特定的圖片小目標(biāo)的提取會不夠好。
6 人體檢測結(jié)果
7 最后
?? 更多資料, 項(xiàng)目分享:
https://gitee.com/dancheng-senior/postgraduate
到了這里,關(guān)于計算機(jī)競賽 機(jī)器視覺目標(biāo)檢測 - opencv 深度學(xué)習(xí)的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!