Faster R-CNN改进篇(一): ION ● HyperNet ● MS CNN
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/linolzhang/article/details/74159463
一. 源起于Faster
? ? ? ?深度學(xué)習(xí)于目標(biāo)檢測的里程碑成果,來自于這篇論文:
? ? ? ?Ren, Shaoqing, et al. “Faster R-CNN: Towards real-time object detection with region proposal networks.” Advances in Neural Information Processing Systems. 2015.
? ? ? ?也可以參考:【論文翻譯】
? ? ? ?雖然該文章前面已經(jīng)講過,但只給出了很小的篇幅,并沒有作為獨立的一篇展開,這里我們詳細(xì)展開并討論其 網(wǎng)絡(luò)結(jié)構(gòu)、應(yīng)用領(lǐng)域 及 后續(xù)改進(jìn)。
? ? ? ?前面文章參考:【目標(biāo)檢測-RCNN系列】
?
二. 網(wǎng)絡(luò)結(jié)構(gòu)
? ? ? ?Faster RCNN的網(wǎng)絡(luò)結(jié)構(gòu)圖如下:
? ? ? ??
? ? ? ?用的還是之前的圖,其實對于這張圖只需要記住一點:RPN網(wǎng)絡(luò),這是本文的核心貢獻(xiàn),RPN通過深度網(wǎng)絡(luò)實現(xiàn)了 Proposal 功能,相較于之前的 SS(Selective Search)方法 和 EdgeBoxes 方法有很大提升。
? ? ? ?RPN 我們來看原論文的圖:
? ? ? ??
? ? ? ?這張圖雖然經(jīng)典,但描述的并不太清楚,有些人可能看不明白,有幾個關(guān)鍵點需要說明:
1)RPN 連接在 Conv5 之后
? ? ?參考網(wǎng)絡(luò)結(jié)構(gòu)圖,先理解 Conv5,Conv5是前面經(jīng)過4次conv和pooling。
? ? ?對于原圖800*600的輸入,Feature尺寸?變?yōu)閇800/16,600/16] = [50,37.5],
? ? ?Conv5的輸出維度為 256,Feature維度?為 256。
2)Anchor 生成與排序
? ? ?特征圖采用滑窗方式遍歷,每個特征像素點 對應(yīng)K個 Anchor(即不同的Scale和Size),上述input對應(yīng)的Anchor Count為 50*38*k(9) = 17100。
? ? ?對應(yīng)如此多的 Anchor,需要通過置信度剔除大多數(shù)Candidate,通常保留100-300個就足夠了。
? ? ?訓(xùn)練過程中通過IOU進(jìn)行正負(fù)樣本的選擇,測試過程中置信度較低的被丟棄。
3)RPN 輸出
? ? ?如上圖所示,輸出分為兩部分,2K Scores + 4K Reg,基于 256d 的 intermediate 層,通過兩個網(wǎng)絡(luò),同時進(jìn)行 分類 + 回歸,Scores提供了作為前景、背景目標(biāo)的概率(2位),Reg提供了4個坐標(biāo)值,標(biāo)識Box位置。
? ? ?參考如下Caffe結(jié)構(gòu)圖,先通過3*3 的卷積核進(jìn)行處理,然后1*1的卷積核進(jìn)行降維,在?k=9 的情況下,每個像素對應(yīng)生成 2*k?= 18個 Scores 參數(shù) 和 4*k = 36個 Reg參數(shù)。
? ? ?整體上 1*1 卷積生成的特征是 ? ?分類W*H*18 ? &? ?回歸W*H*36,其中 ReShape 是方便 Softmax 用的,可以忽略掉。
? ? ?Proposal層 根據(jù) Softmax 輸出(丟棄背景),結(jié)合對應(yīng)?Anchor和Stride進(jìn)行映射,將Box映射到原圖,作為下一步 ROI Pooling 的輸入。
? ? ? ??
4)RPN 結(jié)合方式
? ? ?RPN 網(wǎng)絡(luò)相對獨立于卷積層,原文中通過 ImageNet 數(shù)據(jù)集進(jìn)行預(yù)訓(xùn)練。
? ? ?微調(diào)時,分別固定 RPN參數(shù) 和 卷積網(wǎng)絡(luò)參數(shù),對另外的網(wǎng)絡(luò)部分進(jìn)行微調(diào),也就是說,雖然 Faster實現(xiàn)了端到端的處理,但并未實現(xiàn)全局的 Fine Turning。
?
5)ROI Pooling
? ? ?提取到的 Proposal 作為輸入送到 ROI Pooling 層,與 Conv5 特征圖結(jié)合,即在特征圖上標(biāo)識出了 Proposal 的位置。
? ? > Smooth L1 Loss
? ? ? ? 針對邊框回歸,可以描述為一種映射,即通過 變換函數(shù) f,將原 Box?A=(Ax, Ay, Aw, Ah) 變換為:
? ? ? ? ? ? ? ?f(Ax, Ay, Aw, Ah) = (G'x, G'y, G'w, G'h) ,如下圖所示:
? ? ? ? ? ? ? ??
? ? ? ? t 表示與Ground Truth之間的差異系數(shù)(ln 是為了減少w,h的誤差比),公式描述為(其中紅色框內(nèi) σ 為一般形式,=1 時與 Fast 一致):
? ? ? ?
? ? ? ?ωin 和?ωout 作為開關(guān)控制當(dāng)前項是否起作用。
?
三. 應(yīng)用領(lǐng)域
? ? ? ?對于目標(biāo)檢測的研究分為兩個方向,精度和效率,一方面以 Faster R-CNN為代表的RPN的方法在精度上不斷刷新 mAP;另一方面,以SSD 和 YOLO v2 為代表的回歸方法則是強調(diào)效率(或者說性價比),這兩個方向在領(lǐng)域內(nèi)都有著很大的應(yīng)用場景。
? ? ? ?Faster RCNN的代表特征是Region Proposal,通過 RPN 將檢測分成兩步,提供 Proposal 和 Location+Class,Proposal 越準(zhǔn)確,后面的復(fù)合Loss里 Class所占比例就越大,分類自然就更加準(zhǔn)確。而回歸方法沒有 Proposal過程,通過 Location+Class直接回歸+分類,反向傳播誤差在Location上面大范圍回歸,降低了分類占比,因此分類準(zhǔn)確度不好保證,特別是對于小目標(biāo),檢測精度比較差。
? ? ? ?檢測精度是算法最核心的價值,即使是以效率為主的 回歸方法 也會強調(diào)準(zhǔn)確性,Faster 方法目前所實現(xiàn)的效率通常是 每秒3-5幀(GPU版本),這在非實時系統(tǒng)里面實際上也是足夠使用的,比如在 農(nóng)業(yè)上對于病蟲害的檢測,在醫(yī)療領(lǐng)域?qū)τ趫D像的后處理等等。
? ? ? ?實時系統(tǒng)的應(yīng)用是更為廣闊的市場,這也是為什么說目前有相當(dāng)多的人持續(xù)投入研究,比如 ADAS、機器人、無人機等,這些領(lǐng)域?qū)τ?實時性、準(zhǔn)確性、成本控制的要求 帶來了不斷刷新紀(jì)錄的研究成果。
? ? ??
四. 后續(xù)改進(jìn)
? ? ? ?關(guān)于 Faster RCNN 的改進(jìn)比較多,我們將隨時關(guān)注,保持更新。
? ? ? ?可以參考數(shù)據(jù)集排名:【KITTI】?【PASCAL VOC 2012】【COCO】
? ? ? ?Faster R-CNN 的三個組成部分思路包括:
1)基礎(chǔ)特征提取網(wǎng)絡(luò)
? ? ? ResNet,IncRes V2,ResNeXt 都是顯著超越 VGG 的特征網(wǎng)絡(luò),當(dāng)然網(wǎng)絡(luò)的改進(jìn)帶來的是計算量的增加。
2)RPN
? ? ? 通過更準(zhǔn)確地 ?RPN 方法,減少 Proposal 個數(shù),提高準(zhǔn)確度。
3)改進(jìn)分類回歸層
? ? ? 分類回歸層的改進(jìn),包括 通過多層來提取特征 和 判別。
?
?
@改進(jìn)1:ION
? ? ? ?論文:Inside outside net: Detecting objects in context with skip pooling and recurrent neural networks?? 【點擊下載】
? ? ? ?提出了兩個方面的貢獻(xiàn):
1)Inside Net
? ? ? 所謂 Inside 是指在 ROI 區(qū)域之內(nèi),通過連接不同?Scale 下的 Feature Map,實現(xiàn)多尺度特征融合。
? ? ? 這里采用的是 Skip-Pooling,從 conv3-4-5-context 分別提取特征,后面會講到。
? ? ? 多尺度特征 能夠提升對小目標(biāo)的檢測精度。
2)Outside Net
? ? ? 所謂 Outside 是指 ROI 區(qū)域之外,也就是目標(biāo)周圍的 上下文(Contextual)信息。
? ? ? 作者通過添加了兩個 RNN 層(修改后的 IRNN)實現(xiàn)上下文特征提取。
? ? ? 上下文信息 對于目標(biāo)遮擋有比較好的適應(yīng)。
? ? ? ?來看結(jié)構(gòu)圖:
? ? ? ??
? > 多尺度特征
? ? ? ?本文不考慮?Region Proposal 的環(huán)節(jié),只在 ROI 之后,從上圖可以看到,分別從 3、4、5 層提取特征,然后再和 context得到的特征做一個連接(concat),這樣做的依據(jù)是什么呢?作者給出了實驗驗證結(jié)果:
? ? ? ??
? ? ? ?可以看到 Conv2 是用不到的,和我們理解的一致(尺度太大),而特征提取是 通過 L2 Norm + Scale + 1x1 Conv 得到,因為不同 Feature 之間的尺度不一致,Norm 是必須的,通過 歸一化 和 Scale 進(jìn)行特征提取后,送到 FC全連接層進(jìn)行 分類和回歸,如上圖所示。
? > Contextual 上下文
? ? ? ?和前面的多尺度的思路一樣,上下文也不是一個新的概念,生成上下文信息有很多種方法,來看下對比示意:
? ? ? ??
? ? ? ?文中用的是 多維的概念,上圖(d)(4-dir),如下圖所示:
? ? ? ??
? ? ? ?與傳統(tǒng)的雙向 RNN 不同,文中 通過上下左右四個方向,并且通過兩次 IRNN 來增加非線性,更加有效的結(jié)合全局信息,看實驗效果:
? ? ? ??
?
@改進(jìn)2:多尺度之 HyperNet
? ? ? ?論文:Hypernet: Towards accurate region proposal generation and joint object detection ? 【點擊下載】
? ? ? ?基于 Region Proposal 的方法,通過多尺度的特征提取來提高對小目標(biāo)的檢測能力,來看網(wǎng)絡(luò)框圖:
? ??
? ? ? ?分為?三個主要特征?來介紹(對應(yīng)上面網(wǎng)絡(luò)拓?fù)鋱D的 三個紅色框):
1)Hyper Feature Extraction (特征提取)
? ? ? 多尺度特征提取是本文的核心點,作者的方法稍微有所不同,他是以中間的 Feature 尺度為參考,前面的層通過 Max Pooling 到對應(yīng)大小,后面的層則是通過 反卷積(Deconv)進(jìn)行放大。
? ? ? 多尺度 Feature ConCat 的時候,作者使用了 LRN進(jìn)行歸一化(類似于 ION 的 L2 Norm)。
? ? ? 拋開具體方法不表,對小目標(biāo)檢測來講,這種多尺度的特征提取已經(jīng)算是標(biāo)配,下圖證明采用 1、3、5 的效果要更優(yōu)(層間隔大,關(guān)聯(lián)性小)。
? ? ??
2)Region Proposal Generation(建議框生成)
? ? ? 作者設(shè)計了一個輕量級的 ConvNet,與 RPN 的區(qū)別不大(為寫論文強創(chuàng)新^_^)。
? ? ? ?一個 ROI Pooling層,一個 Conv 層,還有一個 FC 層。每個 Position 通過 ROI Pooling 得到一個 13*13 的 bin,通過 Conv(3*3*4)層得到一個?13*13*4 的 Cube,再通過 FC 層得到一個 256d 的向量。
? ? ? 后面的 Score+ BBox_Reg 與 Faster并無區(qū)別,用于目標(biāo)得分 和 Location OffSet。
? ? ? 考慮到建議框的 Overlap,作者用了?Greedy NMS 去重,文中將 IOU參考設(shè)為 0.7,每個 Image 保留 1k?個 Region,并選擇其中 Top-200 做 Detetcion。
? ? ? 通過對比,要優(yōu)于基于 Edge Box 重排序的 Deep Box,從多尺度上考慮比 Deep Proposal 效果更好。
3)Object Detection(目標(biāo)檢測)
? ? ? 與 Fast RCNN基本一致,在原來的檢測網(wǎng)絡(luò)基礎(chǔ)上做了兩點改進(jìn):
? ? ? ?a)在 FC 層之前添加了一個 卷積層(3*3*63),對特征有效降維;
? ? ? ?b)將 DropOut 從 0.5 降到 0.25;
? ? ? 另外,與 Proposal一樣采用了 NMS 進(jìn)行 Box抑制,但由于之前已經(jīng)做了,這一步的意義不大。
?
?
? > 訓(xùn)練過程
? ? ? ?采用了 聯(lián)合訓(xùn)練(joint training)的方法,首先對 Proposal 和 Detection 分別訓(xùn)練,固定一個訓(xùn)練另一個,然后 joint 訓(xùn)練,即共享前面的卷積層訓(xùn)練一遍,具體可以參考原文給出的訓(xùn)練流程(這里不再贅述)。
? > 效率改進(jìn)
? ? ? ?算法整體上和 Faster 運行效率相當(dāng),因為加入了多尺度的過程,理論上要比 Faster要慢,作者提出了提高效率的改進(jìn)方法,將 Conv 層放在 ROI Pooling 層之前,如下圖所示:
? ? ? ??
?
? > 實驗效果對比
? ? ? ?通過對比可以看到 mAP 比 Faster 提高了 1%,主要是多尺度的功勞,其他可以忽略,這一點需要正視。
? ? ? ??
?
@改進(jìn)3:多尺度之 MSCNN
? ? ? ?論文:A Unified Multi-scale Deep Convolutional Neural Network for Fast Object Detection ? ?【點擊下載】
? ? ? ?Caffe代碼:【Github】
? ? ? ?論文首先給出了不同的多尺度方法(參考下圖講解):
? ? ? ??
a)原圖縮放,多個Scale的原圖對應(yīng)不同Scale的Feature;
? ? ? 該方法計算多次Scale,每個Scale提取一次Feature,計算量巨大。
b)一幅輸入圖像對應(yīng)多個分類器;
? ? ? 不需要重復(fù)提取特征圖,但對分類器要求很高,一般很難得到理想的結(jié)果。
c)原圖縮放,少量Scale原圖->少量特征圖->多個Model模板;
? ? ? 相當(dāng)于對 a)和 b)的 Trade-Off。
d)原圖縮放,少量Scale原圖->少量特征圖->特征圖插值->1個Model;
e)RCNN方法,Proposal直接給到CNN;
? ? ? 和 a)全圖計算不同,只針對Patch計算。
f)RPN方法,特征圖是通過CNN卷積層得到;
? ? ? 和 b)類似,不過采用的是同尺度的不同模板,容易導(dǎo)致尺度不一致問題。
g)上套路,提出我們自己的方法,多尺度特征圖;
? ? ? 每個尺度特征圖對應(yīng)一個 輸出模板,每個尺度cover一個目標(biāo)尺寸范圍。
? > 拓?fù)鋱D
? ? ? ?套路先拋到一邊,原理很簡單,結(jié)合拓?fù)鋱D(基于VGG的網(wǎng)絡(luò))來看:
? ? ? ??
? ? ? ?上面是提供 多尺度 Proposal 的子圖,黑色 Cube 是網(wǎng)絡(luò)輸出,其中 h*w 表示 filter尺寸,c是分類類別,b是Box坐標(biāo)。
? ? ? ?通過在不同的 Conv Layer 進(jìn)行輸出(conv4-3,conv5-3,conv6),對應(yīng)不同尺度的 det 檢測器,得到4個Branch Output。
? ? ? ? ? ?PS:作者提到,conv4-3 Branch比價靠近Bottom,梯度影響會比后面的 Branch要大,因此多加入了一個緩沖層。
? > Loss函數(shù)
? ? ? ?再來看 Loss 函數(shù),對于 訓(xùn)練樣本 Si =(Xi,Yi),其中 Xi 表示輸入圖像,Yi={yi,bi}表示 類別標(biāo)簽+Box位置,M代表不同的Branch,訓(xùn)練樣本S按照尺度劃分到不同的Brach,每個Branch權(quán)值不同,用a來表示。
? ? ? ?來看下面的公式:
? ? ? ??
? ? ? ? ??
? ? ? ? ?
? ? ? ?后面兩個公式為最上面公式 子項的展開,公式2 中l(wèi)(X,Y|W) 對應(yīng) 分類Loss 和 Loc Loss的加權(quán)求和,公式3 Loc Loss 同樣采用 Smooth L1 Loss,與Faster方法大致上沒什么區(qū)別,此處不再展開。
? > Sampling
? ? ? ?樣本的選擇對于訓(xùn)練結(jié)果非常重要,本文采用多尺度訓(xùn)練,樣本先劃分到對應(yīng) Layer m,在對應(yīng)Layer上 根據(jù) IOU?劃分為正負(fù)樣本,S = {S+,S-},公式:
? ? ? ?
? ? ? ?對應(yīng)每個Ground Truth (S gt),計算與每個 Anchor Box 的 IOU,結(jié)果 o*>0.5?表示正樣本,o*<0.2 歸類為負(fù)樣本,其余丟棄。為了保證正負(fù)樣本的比例,作者提出三種方法 對負(fù)樣本進(jìn)行篩選:1)隨機采樣; ?2)按Score排序,保留 Top n個強負(fù)樣本(Hard Negative); ?3)一般隨機采樣,另一半Score排序;
? ? ? ?同樣由于每個 Scale單獨訓(xùn)練,可能會出現(xiàn)某個特定的 Scale 正樣本不足,無法滿足比例條件,即?S-/S+?>> λ,作者采用如下方法處理:
? ? ? ??
? ? ? ?通過一個加權(quán)的 Cross Entropy 來進(jìn)行比例調(diào)節(jié),思路比較好理解。
? > Training
? ? ? ?作者 Argue?了多尺度訓(xùn)練的必要性,強調(diào)針對 KITTI 這種 Scale 差異比較大的數(shù)據(jù)集,有比較大的意義。引入了一個 Two-Stage 的訓(xùn)練過程,通過不同的參數(shù)來達(dá)到好的訓(xùn)練效果(具體參數(shù)和迭代次數(shù)可以參考原文章)。
? > 檢測網(wǎng)絡(luò)
? ? ? ?與 RPN 網(wǎng)絡(luò)對應(yīng)的是檢測網(wǎng)絡(luò),檢測網(wǎng)絡(luò)與上面的 RPN網(wǎng)絡(luò)共享一個 主干網(wǎng)絡(luò)(trunk CNN layers),如下圖所示:
? ? ? ??
? ? ? ?這上面有兩點要說明:
1)通過在 conv4-3 后面添加一個 反卷積(Deconvolution),增加特征圖的分辨率,提高了對小目標(biāo)的檢測精度;
2)加入 Object 的上下文(context)描述,對應(yīng)上圖的 藍(lán)色 Cube,是對應(yīng)Object(綠色cube)尺寸的1.5倍大小;
? ? ? ?特征圖 通過全連接層后,輸出為一個分類(class probability)加一個位置(bounding box)。
? > 結(jié)果評估
? ? ? ?不同尺度上對目標(biāo) Recall 的影響:
? ? ? ??
? ? ? ?Input size 對 Proposal Recall 的影響:
? ? ? ??
? ? ? ?比較 state-of-the-art 的 Detection 結(jié)果(看來是不錯):
? ? ? ??
--------------------- 本文來自 linolzhang 的CSDN 博客 ,全文地址請點擊:https://blog.csdn.net/linolzhang/article/details/74159463?utm_source=copy
總結(jié)
以上是生活随笔為你收集整理的Faster R-CNN改进篇(一): ION ● HyperNet ● MS CNN的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Faster R-CNN论文及源码解读
- 下一篇: Faster R-CNN改进篇(二):