Faster R-CNN改进篇(二): RFCN ● RON
版權(quán)聲明:本文為博主原創(chuàng)文章,未經(jīng)博主允許不得轉(zhuǎn)載。 https://blog.csdn.net/linolzhang/article/details/75137050
@改進(jìn)1:RFCN
? ? ? ?論文:R-FCN: Object Detection via Region-based Fully Convolutional Networks?? ?【點(diǎn)擊下載】
? ? ? ?MXNet代碼:【Github】
一. 背景介紹
? ? ? ?RCNN 在目標(biāo)檢測上取得了很大的成功,比如 SPPnet、Fast R-CNN、Faster R-CNN 等,這些方法的典型特征都是 一個(gè)二分網(wǎng)絡(luò),以 ROI Pooling 為界,前面子網(wǎng)絡(luò)用于特征提取,后面子網(wǎng)絡(luò)用于 目標(biāo)檢測(Per ROI),帶來的問題是?后面的子網(wǎng)絡(luò)需要對(duì)每一個(gè) ROI(Candidate)進(jìn)行重復(fù)計(jì)算。
? ? ? ?這種模式的形成是有原因的:Detection 來自于前期的分類網(wǎng)絡(luò)(如 AlexNet、VGG),最后一個(gè) Spatial Pooling 層直觀對(duì)應(yīng)到 RoI Pooling,這算是一個(gè)歷史問題。
? ? ? ?新提出的幾個(gè)網(wǎng)絡(luò)(ResNet、GoogLeNets)原生就是全卷積網(wǎng)絡(luò),因此也就將這種結(jié)構(gòu)天然的對(duì)應(yīng)到 Detection 問題上,想在?ResNet 上實(shí)現(xiàn)Detection,需要增加一個(gè) ROI Pooling 層,但插入的位置很關(guān)鍵(每個(gè) ROI 候選框?qū)?yīng)一次計(jì)算,對(duì)應(yīng)?后面子網(wǎng)的計(jì)算量 x N):
?
- 越靠近 Input - 對(duì)應(yīng) ROI-Wise 檢測子網(wǎng)越深,準(zhǔn)確度也就越高;
- 越靠近 Output - 對(duì)應(yīng) ROI-Wise 子網(wǎng)越淺,針對(duì)每個(gè) ROI 計(jì)算量就越小,效率提高;
?
? ? ? ?PS:減少 Proposal(ROI)的數(shù)量也是一個(gè)好辦法,這對(duì) Proposal 的要求會(huì)比較高(根據(jù)得分排序),先不討論這種思路。
? ? ? ??
? ? ? ?通過上面?可選的方案對(duì)比,可以看到 R-CNN 直接輸入 Proposal,因此整個(gè)網(wǎng)絡(luò)都用作檢測,Faster 保留了后面10層用于檢測,而作者新提出的方法則是 將 101 層全部用于共享,那么這種方案的可行性是怎么來保證的呢?
? ? ? ?
二. 提出框架
? ? ? ?作者首先分析了 分類/檢測 這兩類問題的區(qū)別:
● 分類問題 - 具有平移不變性(Translation Invariance);
● 檢測問題 - 在一定程度上具有平移敏感性 (Translation Variance);
? ? ? ?通過 RoI pooling 的插入,打破了原卷積網(wǎng)絡(luò)的平移不變性,但這種做法犧牲了訓(xùn)練和測試效率(Region-Wise)。
? ? ? ?針對(duì)上述問題,作者提出了?一種新的卷積層?-?Position Sensitive 的 Score Map,Score Map 包含了位置信息,如下圖所示:
? ? ? ??
? ? ? ?有兩個(gè)關(guān)鍵層:
1)包含多個(gè) Score Map 的卷積層;
? ? ??把目標(biāo)分割成了 k*k 個(gè)部分(比如3*3),每個(gè)部分映射到一張 Score Map 上,每個(gè) Score Map 對(duì)應(yīng)目標(biāo)的一部分(如上圖中的 top-left 左上角的 1/9)。
? ? ? 最終得到 k*k 個(gè)Score Map,每一個(gè) Map通道數(shù)為 分類個(gè)數(shù)?C+1。
2)一個(gè) ROI Pooling 層;
? ? ? 這個(gè) ROI 層僅針對(duì)上面的其中一個(gè) Score Map 執(zhí)行 Pooling 操作,重新排列成 k*k,通道數(shù)為 C+1。
? ? ? ROI Pooling 層通過 k*k 個(gè) Part 進(jìn)行投票,得到分類結(jié)果。
? ? ? ?Score Map 和 ROI Pooling 層的工作方式示意如下:
? ? ? ??
?
三. 網(wǎng)絡(luò)結(jié)構(gòu)
? ? ? ?R-FCN 沿用了 Faster RCNN 的網(wǎng)絡(luò)結(jié)構(gòu),通過 RPN 生成 Proposal,RPN 層與 Detection 共享前面的特征層:
? ? ? ??
? ? ? ?R-FCN 的基礎(chǔ)網(wǎng)絡(luò)部分是基于 ResNet101 的修改:
1)共享卷積子網(wǎng)
? ? ?去掉了最后的 average pooling 層和全連接層,并新增了一個(gè)卷積層進(jìn)行降維,共101個(gè)卷積層。
2)RPN 子網(wǎng)
? ? ?與 Faster 一致,沒有變化。
3)檢測分類子網(wǎng)
? ? ?1個(gè) Score Maps層 + 1個(gè) ROI Pooling層,上一節(jié)提到的兩個(gè)關(guān)鍵層,與 RPN 并聯(lián)。
? ? ? >?Scores Map & ROI 具體過程:
? ? ? ? Scores Maps 的組合是卷積層的關(guān)鍵部分,描述了目標(biāo)的 Score 信息,每一個(gè) Score Map 對(duì)應(yīng)目標(biāo)的一部分,比如 上圖中黃色 Map 始終表示左上角,其 C+1 維通道表示了 分類類別(C個(gè)類別+1個(gè)背景)。
? ? ? ?Pooling 過程:結(jié)合 ROI (W‘,H’)來看,bin(Pool之后得到的9個(gè)不同的顏色塊) 的尺寸描述為 (W‘/k,H’/k),對(duì)于上面的 3*3 的情況,每一個(gè) bin 用公式來描述:
? ? ? ??
? ? ? ?其中 i,j 取值為[0,k),理解為在 ROI 對(duì)應(yīng)的其中一個(gè) Map 上,采樣其中的 1/9,上圖中黃色 Map的采樣范圍始終為左上角,最右側(cè)淺藍(lán)色始終采樣右下角。
? ? ? ?投票過程是(每個(gè)類單獨(dú)計(jì)算)通過多個(gè) bin 求和得到 一個(gè)類的 Score,并通過 Softmax 進(jìn)行分類,Loss 函數(shù)定義為:
? ? ? ??
? ? ? ?分類 Loss 和 回歸 Loss 通過一個(gè)參數(shù)?λ 加權(quán)平均,Lreg 同樣采用 L1 Smooth。
?
四. 實(shí)驗(yàn)結(jié)果
? ? ? 在 VOC07,VOC12,MS COCO 上的測試對(duì)比結(jié)果,具體的配置和細(xì)節(jié)可以參考原文,R-FCN 與 Faster R-CNN 的對(duì)比,效果幾乎相同,但效率有了成倍的提升。
? ? ? ?
? ? ? ? ?
? ? ? ??
@改進(jìn)2:RON
? ? ? ?論文:RON: Reverse Connection with Objectness Prior Networks for Object Detection ? ?【點(diǎn)擊下載】
? ? ? ?Caffe代碼:【Github】
?
一. 背景介紹
? ? ? ?論文首先闡述了 Region-Based 方法在精確度上的優(yōu)點(diǎn),以及 Region-Free 方法在效果上的表現(xiàn),想結(jié)合這兩類方法,提出一種新的方法。
? ? ? ?該方法包括三個(gè)方面:
1)提出一種新的全卷積網(wǎng)絡(luò) RON;
? ? ? 第一,通過 Reverse Connection 為前一層 Feature 提供更多語義信息,第二,Objectness Prior 有效約束了目標(biāo)搜索區(qū)域,最后,通過多任務(wù) Loss 讓整個(gè)網(wǎng)絡(luò)實(shí)現(xiàn) end-to-end 訓(xùn)練。
2)引入 Negative example mining(副樣本挖掘) 和?data augmentation(數(shù)據(jù)增強(qiáng)),有效提高檢測效果;
3)有效節(jié)約 計(jì)算時(shí)間 和 計(jì)算資源,1.5G顯存+15fps,比 Faster R-CNN快3倍;
? ? ?另外,我們還拓展了更多的設(shè)計(jì)選擇,像不同層的合并,可選的Objectness Prior?,and so on。
? ? ? ?這里面只有 1)算是文章創(chuàng)新,也是本文的核心;
? ? ? ? ? ? ? ? ? ? ? ? ? 2)頂多算是引入了別人的 Trick,不用考慮;
? ? ? ? ? ? ? ? ? ? ? ? ? 3)把功能性能搞混了吧,搞學(xué)術(shù)的童鞋湊數(shù)的本領(lǐng)強(qiáng)!
?
二. 算法框架
? ? ? ?基礎(chǔ)框架為 VGG16,將其中的 FC6,FC7 替換為卷積層,并通過 2*2的卷積核(stride=2)將 FC7 的分辨率減半,FC8 未使用。
? ? ? ?特征圖尺寸(基于 input 的縮放比例)分別為:1/8 (conv 4_3), 1/16 (conv 5_3), 1/32 (conv 6) , 1/64 (conv 7)。
? ? ? ??
? ? ? ?Follow 論文組織結(jié)構(gòu)往下看:
1)Reverse Connection(反向連接)
? ? ? 與作者之前的 HyperNet 一樣,采用 反卷積(Deconv)將當(dāng)前層的語義信息反饋到上層,通過一個(gè)上采樣與之前層進(jìn)行 融合。
? ? ? 多尺度信息能夠?qū)π∧繕?biāo)有更好的檢測精度,這一點(diǎn)都有共識(shí)了,通過 conv4、5、6、7 各特征層分別進(jìn)行檢測。
2)Reference Boxes(參考框)
? ? ?參考框的提出與 Faster RCNN 里的 Anchor 類似,這里采用的是 2個(gè)尺度,5種長寬比 {1/3,1/2,1,2,3},對(duì)應(yīng) 10個(gè) Anchor。
? ? ?尺度公式描述為:
? ? ?
? ? ? Smin 取值為 Input 尺寸的 1/10,對(duì)于 1000*1000的 image,Smin = 100,對(duì)應(yīng)每個(gè)特征圖 k 得到:
k=1, ? S1 = (100,200)
k=2, ? S2 = (300,400)
k=3, ? S3 = (500,600)
k=4, ? S4 = (700,800)
3)Objectness Prior(目標(biāo)先驗(yàn))
? ? ? 對(duì)應(yīng)上一節(jié)提出的 參考框(default boxes),只有很少一部分框包含目標(biāo),其余大部分都是無效的背景,Region-Based 方法能夠通過預(yù)計(jì)算來解決這個(gè)問題,有效避免每個(gè) Region 帶來的重復(fù)計(jì)算。作者提出的方法與之不同:
? ? ??用一個(gè)3x3x2的卷積 加 一個(gè) Softmax 來表示每個(gè) Box 里面是否存在目標(biāo)。
? ? ? ? ? PS:與 RPN 的區(qū)別在于這里只有一個(gè) 2位的 Score(目標(biāo)Score,背景Score),沒有位置偏移。
? ? ? 下圖是 Prior 的一個(gè)可視化效果(很明顯地反映有無目標(biāo)):
? ? ? ??
? ? ? 圖中對(duì)10個(gè)目標(biāo)先驗(yàn)特征圖沿通道方向取了平均。
?
4)Detection and Bounding?Box Regression(檢測和邊框回歸)
? ? ?與 Objectness Prior 不同,這里要把目標(biāo)分為 K+1個(gè)類:對(duì)應(yīng) VOC(20+1) COCO(80+1)。
? ? ?這里引入了 inception 模塊,看圖說話:
? ? ? ???
5)Combining Objectness Prior with Detection(結(jié)合目標(biāo)先驗(yàn)和檢測)
? ? ?訓(xùn)練網(wǎng)絡(luò)時(shí),首先為每個(gè)候選區(qū)域指定一個(gè)二進(jìn)制 Label。如果候選區(qū)域包含目標(biāo),就再指定一個(gè) 特定類別 Label。
i)對(duì)每一個(gè) Ground Truth Box,找到和它重疊面積最大的候選區(qū)域;
ii)對(duì)每個(gè)候選區(qū)域,找到和它重疊面積大于0.5的 Ground Truth;
? ? 這種匹配策略保證每一個(gè) Ground Truth 至少有一個(gè)候選框與之關(guān)聯(lián),重疊比例小于0.3的作為負(fù)樣本。
? ? 這樣,每一個(gè) Box 有兩個(gè) Label,Objectness(是否為目標(biāo)) Label,Class Label。訓(xùn)練的時(shí)候網(wǎng)絡(luò)會(huì)根據(jù) Objectness Prior 動(dòng)態(tài)更新 Class Label。
? ? > 前向傳播時(shí),網(wǎng)絡(luò)首先產(chǎn)生目標(biāo)先驗(yàn),并進(jìn)行類別檢測。
? ? > 反向傳播時(shí),網(wǎng)絡(luò)首先會(huì)產(chǎn)生目標(biāo)先驗(yàn),然后對(duì)于檢測,只會(huì)在 Objectness 得分大于某個(gè)閾值的區(qū)域內(nèi)進(jìn)行目標(biāo)檢測,如下圖所示。
? ? ? ?額外的計(jì)算僅僅在于為反向傳播選擇訓(xùn)練樣本。當(dāng)選擇合適的閾值時(shí)(我們選擇閾值為0.03),樣本的數(shù)量減少了,這樣反向傳播的時(shí)間就縮短了。
? ? ? ??
?
?
三. 訓(xùn)練及測試結(jié)果
? ?● Loss函數(shù):
? ? ? ?先來看 Loss 函數(shù)定義:
? ? ? ??
? ? ? ?將 目標(biāo)檢測Loss、定位Loss、分類Loss?組成一個(gè)加權(quán) Loss 函數(shù),原文 3個(gè)項(xiàng)都為 1/3。
? ?●?訓(xùn)練過程:
a)對(duì)于 Objectness Prior,選擇全部的正樣本,隨機(jī)選取負(fù)樣本,保證正負(fù)樣本的比例為1:3;
b)對(duì)于 Detection,首先通過?Objectness Prior Score?減少樣本數(shù)量,然后選擇全部的正樣本,隨機(jī)選取負(fù)樣本,保證正負(fù)樣本的比例為1:3;
? ? ? ?Faster RCNN 和 RFCN 常常用 Multi Stage 訓(xùn)練 做聯(lián)合優(yōu)化,相比之下,我們這種端到端的訓(xùn)練方法更有效率。訓(xùn)練初期,目標(biāo)先驗(yàn)是一片吵雜。隨著訓(xùn)練的進(jìn)行,目標(biāo)先驗(yàn)圖越來越集中在目標(biāo)附近。(這一點(diǎn)確實(shí)不敢茍同,Multi Stage 的作用保證的是更快收斂)。
? ?● 數(shù)據(jù)增強(qiáng):
? ? ? 使用了如下策略:
1)使用 原始/翻轉(zhuǎn) 的Image 做 Input;
2)按照比例 { 0.4, 0.5, 0.6, 0.7, 0.8, 0.9 } 從原圖中 Crop Patch,保證每個(gè) Patch 中包含目標(biāo)中心;
? ? ? ?這些方法可以有效增加大目標(biāo)數(shù)量,對(duì)小目標(biāo)沒有幫助。
? ? ? ?針對(duì)小目標(biāo),通過 Scale 將某個(gè)尺度下的大目標(biāo)變成 較小的尺度下的小目標(biāo),這個(gè)訓(xùn)練策略可以避免對(duì)特定目標(biāo)尺寸的過擬合。
?
? ?● 預(yù)測:
? ? ? ?每個(gè) Box 的類置信度表示為:
? ? ? ??
? ? ? ?這個(gè)得分包含兩部分,一是 Objectness 的概率,二是目標(biāo)的類別概率。
? ? ? ?得到目標(biāo) Score之后,通過邊框回歸調(diào)整 Box位置,最后用 NMS 得到最終檢測結(jié)果。
? ?● 效果對(duì)比:
? ? ? ?作者分別在 VOC07,VOC12,COCO 數(shù)據(jù)集上給出了測試結(jié)果,我們只貼出來 VOC12 的效果對(duì)比:
? ? ? ??
? ? ? ? 其他數(shù)據(jù)集 測試結(jié)果都差不多,總體上效果還是不錯(cuò)的,大家可以跑代碼之后對(duì)比。
--------------------- 本文來自 linolzhang 的CSDN 博客 ,全文地址請(qǐng)點(diǎn)擊:https://blog.csdn.net/linolzhang/article/details/75137050?utm_source=copy
總結(jié)
以上是生活随笔為你收集整理的Faster R-CNN改进篇(二): RFCN ● RON的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Faster R-CNN改进篇(一):
- 下一篇: faster-rcnn中添加Mask中的