二階段目標(biāo)檢測算法(RCNN 家族)是目標(biāo)檢測中最經(jīng)典的算法之一,有 R-CNN -> Fast R-CNN -> Faster R-CNN,每一代的變化以及目的性都明確,也是目標(biāo)檢測領(lǐng)域二階段檢測必會的算法之一。
如果想對目標(biāo)檢測有粗略的了解請查看這兩篇文章:
目標(biāo)檢測綜述
目標(biāo)檢測快速入門(含YOLO V1原理詳解)
深度學(xué)習(xí)在目標(biāo)檢測應(yīng)用
R-CNN 算法在 2014 年提出,可以說是歷史性的算法,將深度學(xué)習(xí)應(yīng)用于目標(biāo)檢測領(lǐng)域,相較于之前的目標(biāo)檢測方法,提升多達(dá) 30% 以上,大大提高了目標(biāo)檢測效果,改變了目標(biāo)檢測領(lǐng)域的研究方向。
早在 2010 年,深度學(xué)習(xí)已經(jīng)初露鋒芒,為什么在 2014 年目標(biāo)檢測才可以說正式應(yīng)用深度學(xué)習(xí)技術(shù)呢?
這要從目標(biāo)檢測的場景以及目的上來分析。將問題簡化一下,假設(shè)現(xiàn)在在做貓和狗的檢測,要從圖片中找到貓和狗的位置并且知道是什么分類。對于人工智能問題,往下細(xì)分可以分到 2 個方向,分類問題和回歸問題。識別一張圖片是貓還是狗是比較容易的事情,也可以準(zhǔn)確的說是分類問題。
但是尋找到圖片中不確定是否含有以及不確定具體數(shù)量的貓和狗的具體位置,這樣的一個問題算作哪個類別呢?分類和回歸問題都不好往上面靠,下面再把問題拆分一下。
目標(biāo)檢測中的分類與回歸問題
假設(shè),現(xiàn)在已經(jīng)有框了,如圖 1 所示,根據(jù) 4 個檢測框內(nèi)是否包含狗做分類,包含待檢測目標(biāo)越完整、背景越少則概率越高,下圖中顯然藍(lán)色更加合適。
圖1 目標(biāo)檢測示意
用藍(lán)色的檢測框來代表檢測的物體還有個問題,就是這個框還有些許的偏差,離“完美”的檢測框還是有一些距離,下面可以對我們的檢測框進(jìn)行矯正回歸,如圖 2 所示。白色的框是“完美檢測框”,我們希望藍(lán)色的檢測框向白色的檢測框從形狀和位置上靠近,在某些特殊條件下,這種變換滿足線性的變化,將邊框的矯正問題轉(zhuǎn)變成一個回歸問題。
圖2 邊框矯正示意圖
現(xiàn)在目標(biāo)檢測問題得到了解決,前提是已經(jīng)存在可能存在待檢測物體的預(yù)選框,剩下的問題是如何產(chǎn)生這些預(yù)選框。
R-CNN 算法就是采用上面所述的解決思路,采用的是選擇性搜索 (Selective Search) 算法來選擇預(yù)選框。
選擇性搜索 (Selective Search) 提取候選區(qū)域
選擇性搜索 (Selective Search) 是對上文中的選擇區(qū)域過程進(jìn)行的一個優(yōu)化。Selective Search 算法在 13 年提出,這個算法其實(shí)是借鑒了層次聚類的思想,將層次聚類的思想應(yīng)用到區(qū)域的合并上面。
首先使用 Felzenszwalb 等人在其論文 “Efficient Graph-Based Image Segmentation ” 中描述的方法生成輸入圖像的初始子候選區(qū)域。
然后將較小的相似區(qū)域遞歸組合為較大的相似區(qū)域。這里使用貪婪算法將相似的區(qū)域組合成更大的區(qū)域。
所謂貪婪算法就是從一組區(qū)域中,選擇兩個最相似的區(qū)域,將它們合并為一個較大的區(qū)域,重復(fù)上述步驟進(jìn)行多次迭代,直至數(shù)量為我們想得到的候選區(qū)域數(shù)量。
選擇性搜索的思想是基于圖像中物體可能具有某些相似性或者連續(xù)性,因此采用子區(qū)域合并的方法進(jìn)行提取候選邊界框,合并過程根據(jù)子區(qū)域之間的顏色、紋理、體積等相似性進(jìn)行區(qū)域合并,最后合并成我們想要的數(shù)量,然后再對子區(qū)域做外切矩形,得到的矩形就是候選區(qū)域。
圖3 Selective Search示意圖
R-CNN:Region with CNN feature (Region proposals + CNN)
R-CNN 算法流程可以分為 4 步:
使用選擇性搜索 (Selective Search) 從圖像中提取 1k-2k 個區(qū)域,將其稱為候選區(qū)域。
將這 2000 個大小可能不同的候選區(qū)域處理成固定大小 (227,227),然后輸入到卷積神經(jīng)網(wǎng)絡(luò)中做圖像特征提取,生成 4096 維特征圖作為第二步輸出。
將特征圖輸入到一組 SVM 中,對候選區(qū)域是否存在要檢測的目標(biāo)進(jìn)行分類,每個 SVM 都是一個二分類器,負(fù)責(zé)判斷是否是存在某一個類 (yes/no),也就是說有多少個分類就有多少個SVM分類器。
除了預(yù)測候選區(qū)域內(nèi)是否包含檢測目標(biāo),該算法還預(yù)測四個值,這些值是偏移值,以提高邊界框的精度。
圖4 RCNN示意圖
統(tǒng)一候選區(qū)域尺寸
通過前面的內(nèi)容,可以在圖片中找出想得到的候選區(qū)域,這個候選區(qū)域不一定都是同樣的大小,如果進(jìn)行簡單的縮放到同一尺寸,會造成不同的拉扯程度,同一張圖片選出的候選框進(jìn)行了不同程度的變形會對結(jié)果造成影響。
選擇性搜索最終產(chǎn)出的是矩形,論文中對矩形的縮放嘗試了兩種方式:各向同性縮放、各向異性縮放。
圖5 RCNN-圖像尺寸統(tǒng)一處理示意圖
上圖 5 中 B 列,直接在原始圖片中,把邊界擴(kuò)展延伸成正方形,然后再進(jìn)行裁剪;如果已經(jīng)延伸到了原始圖片的外邊界,那么就用候選框中的顏色進(jìn)行填充;C 列,先沿邊框進(jìn)行剪裁,然后用固定顏色填充成正方形,這個固定顏色為候選框內(nèi)顏色均值;D 列方法很簡單,不管候選區(qū)域的寬高比,直接進(jìn)行縮放。
在此基礎(chǔ)上,作者還嘗試了加入 padding 處理,示意圖中第一、三行是使用了padding=0 的效果,第二、四行使用了 padding=16 的效果。經(jīng)過測試發(fā)現(xiàn),使用各向異性縮放結(jié)合 padding=16 的精度最高,使 mAp 提高了 3 到 5 個百分點(diǎn)。
在網(wǎng)絡(luò)結(jié)構(gòu)方面,R-CNN 對比現(xiàn)在流行的網(wǎng)絡(luò)顯得略微“單薄”。方案選擇上面有 2 個選擇:Alexnet 與 VGG16。從表現(xiàn)來說 VGG16 的表現(xiàn)效果會更好一些,VGG16 有較小的卷積核以及較小的步長,泛化能力更強(qiáng),但是計(jì)算量是 Alexnet 的 7 倍。
Fast R-CNN:Towards Real-Time Object Detection with Region Proposal Networks
站在現(xiàn)在的目標(biāo)檢測技術(shù)角度去看 R-CNN,可能會覺得這個模型表現(xiàn)的并不是很好,設(shè)計(jì)的也不夠合理,但是在當(dāng)時 R-CNN 將深度學(xué)習(xí)引入檢測領(lǐng)域,一舉將 PASCAL VOC 上的檢測率從 35.1% 提升到 53.7%。
R-CNN 也存在著非常大的問題,首先三個模型在訓(xùn)練的方面會是個比較大的挑戰(zhàn),其次也是最主要的就是效率問題,計(jì)算 Region Proposals 和 features 平均所花時間:13s/image on a GPU;53s/image on a CPU。最后 2000 個左右的候選區(qū)域都需要經(jīng)過網(wǎng)絡(luò)處理,這就加大了計(jì)算代價。
已經(jīng)定位了 R-CNN 的計(jì)算瓶頸,那么解決方法也就應(yīng)運(yùn)而生,R-CNN 的同一作者解決了R-CNN 的一些缺點(diǎn)并提出了新的算法,該算法稱為 Fast R-CNN。
Fast R-CNN 算法發(fā)表于 2015 年,在同樣使用 VGG16 網(wǎng)絡(luò)作為 Backbone 的情況下,與 R-CNN 相比訓(xùn)練速度快 9 倍,推理時間快了 200 多倍,在 Pascal VOC 數(shù)據(jù)集上準(zhǔn)確率也從 62% 提升到了66%。
整體思路類似于 R-CNN 算法,與之不同的是,不再用候選區(qū)域選出來再傳入網(wǎng)絡(luò)中,F(xiàn)ast R-CNN 將輸入圖像直接提供給 CNN 結(jié)構(gòu)來生成卷積特征圖,在原圖中使用 SS(Selective Search) 算法提取候選區(qū)域,映射到特征圖上形成特征矩陣,這樣看似簡單的調(diào)整順序,從需要對 1k-2k 張圖像提取特征轉(zhuǎn)變成只需要對一張圖像提取特征,極大的減少了執(zhí)行時間。
但是新的問題也出來了,對特征圖進(jìn)行預(yù)選區(qū)域選擇后產(chǎn)出的“小特征圖”大小不一,無法一下放入網(wǎng)絡(luò)中進(jìn)行處理與預(yù)測。Fast R-CNN 借鑒了 SPP Net 的設(shè)計(jì)來解決這個問題。
SPP:Spatial Pyramid Pooling(空間金字塔池化)
SPP-Net 是出自 2015 年發(fā)表在 IEEE 上的論文:《Spatial Pyramid Pooling in Deep ConvolutionalNetworks for Visual Recognition》,SPP 是其中核心的設(shè)計(jì)。
CNN 一般都有卷積部分和全連接部分,其中,卷積層不需要固定尺寸的圖像,而全連接層是需要固定大小的輸入。
所以當(dāng)全連接層面對各種尺寸的輸入數(shù)據(jù)時,就需要對輸入數(shù)據(jù)進(jìn)行 crop(crop 就是從一個大圖摳出網(wǎng)絡(luò)輸入大小的 patch,比如 227×227),或 warp(把一個邊界框 bounding box 的內(nèi)容 resize 成 227×227)等一系列操作以統(tǒng)一圖片的尺寸大小,比如 224×224(ImageNet)、32×32(LenNet)等。
在 R-CNN 中,因?yàn)槿〕龅膮^(qū)域大小各自不同,所以需要將每個 Region Proposal 縮放(warp)成統(tǒng)一的 227x227 的大小并輸入到 CNN。但 warp/crop 這種預(yù)處理,導(dǎo)致的問題要么被拉伸變形、要么物體不全,限制了識別精確度。如圖 6 所示,原本“瘦高”的燈塔,warp 之后體型“發(fā)?!绷?。
圖6 圖像伸縮示意圖
SPP Net 開拓了新的思路,原來的思路是在進(jìn)入 CNN 中之前,將圖像統(tǒng)一尺寸,而 CNN 本身可以適應(yīng)任何尺寸,那么何不嘗試在 CNN 結(jié)構(gòu)之后再加入某種結(jié)構(gòu)使后面的全連接層可以接收到固定的輸出呢?
下圖便是 R-CNN 與 SPP Net 檢測流程的對比:
圖7 R-CNN與SPP Net流程對比
在卷積結(jié)構(gòu)與 FC 層之間介入金字塔池化層,保證下一層全連接層的輸入固定。換句話說,在普通的 CNN 結(jié)構(gòu)中,輸入圖像的尺寸往往是固定的(比如 224×224 像素),輸出則是一個固定維數(shù)的向量。SPP Net 在普通的 CNN 結(jié)構(gòu)中加入了 ROI 池化層(ROI Pooling),使得網(wǎng)絡(luò)的輸入圖像可以是任意尺寸的,輸出則不變,同樣是一個固定維數(shù)的向量。
Fast R-CNN 中的 ROI Pooling
Fast R-CNN 使用 ROI Pooling 結(jié)構(gòu)將 CNN 結(jié)構(gòu)輸出統(tǒng)一成 7×7 的結(jié)構(gòu),這個過程并不復(fù)雜,如圖 8 所示,左面假設(shè)是特征圖(為了可視化使用圖像代替),將特征圖劃分成 7×7 的網(wǎng)格 ,對每一個網(wǎng)格用 Max Pooling 得到 7×7的 結(jié)構(gòu),圖中使用一個 channel 數(shù)據(jù)示例,實(shí)際計(jì)算中對每個 channel 做如下處理。
圖8 ROI Pooling示意圖
在訓(xùn)練過程中,并不是所有 SS 算法獲取的候選框都被使用,相對于選擇的 1k-2k 個候選框,只需要其中的一小部分, 從中選擇正樣本和負(fù)樣本,正樣本指包含需要檢測的目標(biāo),而負(fù)樣本不包含需要檢測的目標(biāo),也就是背景。
為什么要分正樣本與負(fù)樣本,對于選擇出的 1k-2k 個候選區(qū)域,絕大部分只會有很小的一部分里面包含需要檢測的物體,大部分都是背景,如果全部使用包含圖像的樣本進(jìn)行訓(xùn)練,會對網(wǎng)絡(luò)產(chǎn)生不好的影響。區(qū)分正負(fù)樣本的條件是與 GT 的 IOU 大于 0.5 的為正樣本,反之為負(fù)樣本。
Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks
Faster R-CNN 的設(shè)計(jì)思路
經(jīng)過前面兩個網(wǎng)絡(luò)的積累 (Fast R-CNN 與 R-CNN),Ross B.Girshick 在 2016 年提出了新的改進(jìn)版算法 Faster R-CNN,盡管 Fast R-CNN 已經(jīng)對 R-CNN 的速度進(jìn)行了大幅度的優(yōu)化,但是在其結(jié)構(gòu)中還是有明顯的瓶頸,F(xiàn)ast R-CNN 的整體結(jié)構(gòu)并不緊湊,先使用卷積神經(jīng)網(wǎng)絡(luò)結(jié)構(gòu)進(jìn)行特征提取,篩選候選區(qū)域再進(jìn)行預(yù)測。
在 Faster R-CNN 中,引入了 Region Proposal Network(RPN),RPN 網(wǎng)絡(luò)與檢測網(wǎng)絡(luò)共享完整的圖像卷積特征,從而大大降低了 region proposal 的代價。RPN 是一個 FCN 結(jié)構(gòu)的網(wǎng)絡(luò),可以同時預(yù)測每個位置上的對象范圍和對象得分。RPN 網(wǎng)絡(luò)不是單獨(dú)的網(wǎng)絡(luò)而是融合在整個網(wǎng)絡(luò)之中,這樣更容易訓(xùn)練出好的效果。
圖9 Faster R-CNN結(jié)構(gòu)圖
代碼結(jié)構(gòu)
除了 RPN 結(jié)構(gòu),F(xiàn)aster R-CNN 與 Fast R-CNN 結(jié)構(gòu)一致,這里不再過多的介紹基礎(chǔ),在前期對 Faster R-CNN 有初步的認(rèn)識即可,下面給出 Faster R-CNN 實(shí)現(xiàn)的代碼結(jié)構(gòu)圖。
圖10 Faster R-CNN代碼結(jié)構(gòu)
審核編輯:劉清
-
SVM
+關(guān)注
關(guān)注
0文章
154瀏覽量
32692 -
分類器
+關(guān)注
關(guān)注
0文章
152瀏覽量
13284 -
voc
+關(guān)注
關(guān)注
0文章
105瀏覽量
15768
原文標(biāo)題:通俗易懂詳解二階段目標(biāo)檢測
文章出處:【微信號:vision263com,微信公眾號:新機(jī)器視覺】歡迎添加關(guān)注!文章轉(zhuǎn)載請注明出處。
發(fā)布評論請先 登錄
相關(guān)推薦
AI模型部署邊緣設(shè)備的奇妙之旅:目標(biāo)檢測模型
GPU在深度學(xué)習(xí)中的應(yīng)用 GPUs在圖形設(shè)計(jì)中的作用
NPU在深度學(xué)習(xí)中的應(yīng)用
慧視小目標(biāo)識別算法 解決目標(biāo)檢測中的老大難問題

深度學(xué)習(xí)模型中的過擬合與正則化
深度學(xué)習(xí)中的時間序列分類方法
深度學(xué)習(xí)中的無監(jiān)督學(xué)習(xí)方法綜述
深度學(xué)習(xí)在工業(yè)機(jī)器視覺檢測中的應(yīng)用
基于AI深度學(xué)習(xí)的缺陷檢測系統(tǒng)
深度學(xué)習(xí)在視覺檢測中的應(yīng)用
基于深度學(xué)習(xí)的小目標(biāo)檢測
深度學(xué)習(xí)中的模型權(quán)重
深度學(xué)習(xí)在自動駕駛中的關(guān)鍵技術(shù)
深度解析深度學(xué)習(xí)下的語義SLAM

深度學(xué)習(xí)檢測小目標(biāo)常用方法

評論