Faster R-CNN:使用RPN實時目標檢測

論文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks

0 背景

目標檢測網(wǎng)絡(luò)大多依靠區(qū)域生成(region proposal)算法來假設(shè)目標的位置帝美。R-CNN 是采用 Selective Search 算法來提取(propose)可能的 RoIs(regions of interest) 區(qū)域悬而,然后對每個提取區(qū)域采用標準 CNN 進行分類。選擇性搜索(Selective Search )方法就是在目標對象周圍設(shè)定2000個形狀大小位置不一的候選區(qū)域腾么,目標物體在候選區(qū)域的可能性還是比較大的略就。然后對這些區(qū)域卷積踩娘,找到目標物體擒贸,雖然大多數(shù)區(qū)域都是無用的联逻。與尋找?guī)缀鮽€區(qū)域比起來,這種方法要高效的多苹丸。

Fast R-CNN愤惰,不在原始圖像生成備選區(qū)域竹祷,而是先整張圖片通過卷積網(wǎng)絡(luò)得到特征圖,然后在特征圖上使用備選區(qū)域算法得到感興趣的區(qū)域在特征圖的映射羊苟,之后使用 Rol Pool將所有區(qū)域變成同樣尺寸,大大減少了這些目標檢測網(wǎng)絡(luò)的運行時間感憾,但是區(qū)域生成的計算成為整個檢測網(wǎng)絡(luò)的瓶頸蜡励。

Faster R-CNN引入了一個區(qū)域生成網(wǎng)絡(luò)(Region Proposal Network,RPN)阻桅,該網(wǎng)絡(luò)與檢測網(wǎng)絡(luò)共享輸入圖像的卷積特征凉倚,從而使接近零時間成本的區(qū)域生成成為可能。RPN是一個全卷積網(wǎng)絡(luò)嫂沉,可以同時在每個位置預(yù)測目標邊界和目標分數(shù)稽寒。RPN經(jīng)過端到端的訓(xùn)練,可以生成高質(zhì)量的區(qū)域候選框趟章,然后提供給Fast R-CNN用于檢測杏糙。

1 網(wǎng)絡(luò)結(jié)構(gòu)

Faster R-CNN 由兩個模塊組成:第一個模塊是區(qū)域生成的深度全卷積網(wǎng)絡(luò),第二個模塊是使用備選區(qū)域的Fast R-CNN檢測器蚓土。整個系統(tǒng)是一個單個的宏侍,統(tǒng)一的目標檢測網(wǎng)絡(luò)。使用最近流行的“注意力”機制的神經(jīng)網(wǎng)絡(luò)術(shù)語蜀漆,RPN模塊告訴Fast R-CNN模塊在哪里尋找目標谅河。

針對一張圖片,需要獲得的輸出有:

  • 邊界框(bounding-boxes) 列表确丢;
  • 每個邊界框的類別標簽绷耍;
  • 每個邊界框和類別標簽的概率

1.1 基礎(chǔ)網(wǎng)絡(luò)

Faster R-CNN 第一步是采用基于分類任務(wù)(如ImageNet)的 CNN 模型作為特征提取器。輸入圖片表示為 H × W × D 的形式鲜侥,經(jīng)過預(yù)訓(xùn)練 CNN 模型的處理褂始,得到卷積特征圖(conv feature map)。

Faster R-CNN 最早是采用在 ImageNet 訓(xùn)練的 ZFVGG描函,其后出現(xiàn)了很多其它權(quán)重不同的網(wǎng)絡(luò).病袄。如MobileNet 是一種小型效率高的網(wǎng)絡(luò)結(jié)構(gòu),僅有 3.3M 參數(shù)赘阀;而ResNet-152 的參數(shù)量達到了 60M益缠;新網(wǎng)絡(luò)結(jié)構(gòu),如 DenseNet 在提高了結(jié)果的同時基公,降低了參數(shù)數(shù)量幅慌。

以 VGG16 為例:

VGG16 網(wǎng)絡(luò)結(jié)構(gòu)

VGG16 圖片分類時,輸入為 224×224×3 的張量(即轰豆,一張 224×224 像素的 RGB 圖片)胰伍。網(wǎng)絡(luò)結(jié)構(gòu)最后采用 FC 層(而不是 Conv 層)得到固定長度的向量齿诞,以進行圖片分類.。對最后一個卷積層的輸出拉伸為1維的向量骂租,然后送入 FC 層祷杈。官方實現(xiàn)中是采用的卷積層 conv5/conv5_1 的輸出。

在深度上渗饮,卷積特征圖對圖片的所有信息進行了編碼但汞,同時保持相對于原始圖片所編碼 “things” 的位置。例如互站,如果在圖片的左上角存在一個紅色正方形私蕾,而且卷積層有激活響應(yīng),那么該紅色正方形的信息被卷積層編碼后胡桃,仍在卷積特征圖的左上角踩叭。因此利用特征圖檢測目標所在的位置是可行的。

VGG vs ResNet

ResNet 結(jié)構(gòu)逐漸取代 VGG 作為基礎(chǔ)網(wǎng)絡(luò)翠胰,用于提取特征容贝。ResNet 相對于 VGG 的明顯優(yōu)勢是,網(wǎng)絡(luò)更大之景,因此具有更強的學(xué)習(xí)能力.嗤疯。這對于分類任務(wù)是重要的,在目標檢測中也應(yīng)該如此闺兢。另外茂缚,ResNet 采用殘差連接(residual connection) 和 BN (batch normalization) 使得深度模型的訓(xùn)練比較容易。

1.2 RPN

然后屋谭,RPN(Region Propose Network) 對提取的卷積特征圖進行處理脚囊,尋找可能包含 目標的預(yù)定義數(shù)量的區(qū)域(regions,邊界框)桐磁。為了生成候選區(qū)域悔耘,在最后的共享卷積層輸出的卷積特征圖上做 3x3 卷積,卷積核共有512個(VGG)我擂,后面是ReLU衬以,這樣每個 3x3 區(qū)域會得到一個512維的特征向量。然后這個特征向量被輸入到兩個全連接層——一個邊界框回歸層(reg)和一個邊界框分類層(cls)校摩。

下面解釋 k, 2k, 4k 的含義看峻。

1.2.1 錨點(anchor)

基于深度學(xué)習(xí)的目標檢測中,可能最難的問題就是生成長度不定(variable-length)的邊界框列表(bounding-boxes)衙吩,邊界框是具有不同尺寸(sizes)和長寬比(aspect ratios )的矩形互妓。在構(gòu)建深度神經(jīng)網(wǎng)絡(luò)時,最后的網(wǎng)絡(luò)輸出一般是固定尺寸的張量輸出(采用RNN的除外)。例如冯勉,在圖片分類中澈蚌,網(wǎng)絡(luò)輸出是 (C, ) 的張量,C是類別標簽數(shù)灼狰,張量的每個位置的標量值表示圖片是類別的概率值宛瞄。

在 RPN 中,通過采用 anchors(錨) 來解決邊界框列表長度不定的問題交胚,即在原始圖像中統(tǒng)一放置固定大小的參考邊界框份汗。上面說到RPN對特征圖做3x3的卷積,假設(shè)每一次卷積需要預(yù)測 k 個候選區(qū)域承绸,因此,reg層具有 4k 個輸出挣轨,編碼 k 個邊界框的坐標军熏,cls層輸出 2k 個分數(shù),估計每個區(qū)域是目標或是背景的概率卷扮。這 k 個區(qū)域就是 被 k 個參考邊界框初始化荡澎, k 個參考框就是 k 個錨點,作為第一次預(yù)測目標位置的參考 boxes晤锹。錨點的中心位于卷積核滑動窗口的中心摩幔。默認情況下每個滑動位置使用3個不同尺度(1282, 2562, 5122)3個不同長寬比(1:2, 1:1, 2:1)的錨點,k=9鞭铆。對于大小為W×H(通常約為2400)的卷積特征圖或衡,總共有 W×H×k 個錨點。對于RPN的最后兩個全連接層车遂,參數(shù)的個數(shù)為 512×(4+2)×k.

9個錨點

不同于直接檢測目標的位置封断,這里將問題轉(zhuǎn)化為兩部分。對每一個 anchor 而言:

  • anchor 是否包含相關(guān)的 object舶担?
  • 如何調(diào)整 anchor 以更好的擬合相關(guān)的 object坡疼?

有一種簡單的方法來預(yù)測目標的邊界框,即學(xué)習(xí)相對于參考邊界框的偏移量衣陶。假設(shè)參考 box:(x_{center}, y_{center}, height, width)柄瑰,待預(yù)測量:(\Delta x_{center}, \Delta y_{center}, \Delta height, \Delta width),一般都是很小的值剪况,以調(diào)整參考 box 更好的擬合所需要的教沾。

雖然 anchors 是基于卷積特征圖定義的,但最終的 anchos 是相對于原始圖片的.

由于只有卷積層和 pooling 層译断,特征圖的維度是與原始圖片的尺寸成比例關(guān)系的. 即详囤,數(shù)學(xué)地表述,如果圖片尺寸 w×h,特征圖的尺寸則是w/r×h/r. 其中藏姐,r 是下采樣率(subsampling ratio). 如果在卷積特征圖空間位置定義 anchor隆箩,則最終的圖片會是由 r 像素劃分的 anchors 集。在 VGG 中羔杨, r=16捌臊。

原始圖片上的 Anchor Center
左:Anchors;中:單個點的 Anchor兜材;右:全部Anchors.
1.2.2 RPN結(jié)構(gòu)
RPN 輸入是卷積特征圖理澎,輸出圖片生成的 proposals

RPN 利用所有的參考邊界框(anchors),輸出一系列目標的良好的 proposals曙寡。針對每個 anchor糠爬,都有兩個不同的輸出:

  • anchor 內(nèi)是某個 object 的概率。RPN 不關(guān)注于 anchor 是某個 object class举庶,只是確定其可能是一個 object (而不是背景background). 即: RPN 不關(guān)心 object 類別执隧,只確定是 object 還是 background。
  • anchor 邊界框回歸輸出户侥。邊界框的輸出用于調(diào)整 anchors 來更好的擬合預(yù)測的 object镀琉。

RPN是全卷積網(wǎng)絡(luò)。

對于分類層蕊唐,每個 anchor 輸出兩個預(yù)測值:anchor 是背景(background屋摔,非object)的 score 和 anchor 是前景(foreground,object) 的 score.

對于回歸層,也可以叫邊界框調(diào)整層,每個 anchor 輸出 4 個預(yù)測值:
(Δxcenter,Δycenter,Δwidth,Δheight)源武,用于 anchors 來得到最終的 proposals。根據(jù)最終的 proposal 坐標和其對應(yīng)的 objectness score亚侠,即可得到良好的 objects proposals.

1.2.3 損失函數(shù)和訓(xùn)練

RPN 有兩種類型的預(yù)測值輸出:二值分類和邊界框回歸調(diào)整。

為了訓(xùn)練RPN俗扇,我們?yōu)槊總€錨點分配一個二值類別標簽(是目標或不是目標)硝烂。我們給兩種錨點分配一個正標簽:(i)具有與實際邊界框的重疊最高交并比(IoU)的錨點,或者(ii)具有與實際邊界框的重疊超過0.7 IoU的錨點铜幽。注意滞谢,單個真實邊界框可以為多個錨點分配正標簽。通常第二個條件足以確定正樣本除抛;但我們?nèi)匀徊捎玫谝粋€條件狮杨,因為在一些極少數(shù)情況下,第二個條件可能找不到正樣本到忽。對于所有的真實邊界框橄教,如果一個錨點的IoU比率低于0.3清寇,我們給非正面的錨點分配一個負標簽。既不正面也不負面的錨點不會有助于訓(xùn)練目標函數(shù)护蝶。

然后华烟,隨機采樣 anchors 來生成batchsize=256 的 mini-batch,盡可能的保持 foreground 和 background anchors 的比例平衡持灰。

RPN 對 mini-batch 內(nèi)的所有 anchors 采用二分類交叉熵來計算分類 loss盔夜。然后,只對 mini-batch 內(nèi)標記為 foreground 的 anchros 計算回歸 loss堤魁。為了計算回歸的目標targets喂链,根據(jù) foreground anchor 和其最接近的 groundtruth object,計算將 anchor 變換到 object groundtruth 的偏移值 Δ妥泉。

Faster R-CNN沒有采用簡單的 L1 或 L2 loss 用于回歸誤差椭微,而是采用 Smooth L1 loss. Smooth L1 和 L1 基本相同,但是盲链,當(dāng) L1 誤差值非常小時蝇率,表示為一個確定值即認為是接近正確的,loss 就會以更快的速度消失.

非極大值抑制(Non-maximum suppression)

由于 Anchors 一般是有重疊匈仗,因此瓢剿,相同目標的候選區(qū)域也存在重疊逢慌。

為了解決重疊 proposals 問題悠轩,采用 NMS 算法處理,丟棄與一個 score 更高的 proposal 間 IoU 大于預(yù)設(shè)閾值的 proposals.

雖然 NMS 看起來比較簡單攻泼,但 IoU 閾值的預(yù)設(shè)需要謹慎處理. 如果 IoU 值太小火架,可能丟失 objetcs 的一些 proposals;如果 IoU 值過大忙菠,可能會導(dǎo)致 objects 出現(xiàn)很多 proposals何鸡。IoU 典型值為 0.7。

Proposal 選擇

NMS 處理后牛欢,根據(jù) sore 對topN 個 proposals 排序. 在 Faster R-CNN 論文中 N=2000骡男,其值也可以小一點,如 50傍睹,仍然能的高好的結(jié)果.

1.3 RoI Pooling

當(dāng)獲得了可能的相關(guān)目標和其在原始圖像中的對應(yīng)位置之后隔盛,問題就更加直接了,采用 CNN 提取的特征和包含相關(guān)目標的邊界框拾稳,采用 RoI Pooling 處理吮炕,并提取相關(guān)目標的特征,得到一個新的向量访得。

RPN 處理后龙亲,可以得到一堆沒有分類得分的目標 proposals。待處理問題為,如何利用這些邊界框并分類鳄炉。

一種最簡單的方法是杜耙,對每個 porposal,裁剪迎膜,并送入pre-trained base 網(wǎng)絡(luò)泥技,提取特征;然后磕仅,將提取特征來訓(xùn)練分類器. 但這就需要對所有的 2000 個 proposals 進行計算珊豹,效率低,速度慢榕订。Faster R-CNN通過重用卷積特征圖來加快計算效率店茶,即采用 RoI(region of interest) Pooling 對每個 proposal 提取固定尺寸的特征圖。然后 R-CNN 對固定尺寸的特征圖分類劫恒。

RoI Pooling

目標檢測中贩幻,包括 Faster R-CNN,常用一種更簡單的方法两嘴,即:采用每個 proposal 來對卷積特征圖裁剪crop丛楚,然后利用插值算法(一般為雙線性插值 bilinear)將每個 crop resize 到固定尺寸14×14×ConvDepth. 裁剪后,利用 2×2 kernel 的 Max Pooling 得到每個 proposal 的最終7×7×ConvDepth 特征圖.

之所以選擇該精確形狀憔辫,與其在下面的模塊(R-CNN)中的應(yīng)用有關(guān)趣些。

1.4 R-CNN(Region-based CNN)

R-CNN利用RoI Pooling提取的特征進行分類,采用全連接層來輸出每個可能的 目標類別的分類得分贰您,是Faster R-CNN框架中的最后一個步驟坏平。

R-CNN 有兩個不同的輸出:

  • 對每個 proposal 分類,其中類別包括一個 background 類(用于去除不良 proposals)锦亦;
  • 根據(jù)預(yù)測的類別class舶替,更好的調(diào)整 proposal 邊界框.

R-CNN 對每個 proposal 的特征圖,拉平后采用 ReLU 和兩個大小為 4096 維的全連接層進行處理杠园。然后顾瞪,對每個不同目標采用兩個不同的全連接層處理:一個全連接層有 N+1 個神經(jīng)單元,其中 N 是類別 class 的總數(shù)抛蚁,包括 background class陈醒;一個全連接層有 4N 個神經(jīng)單元,是回歸預(yù)測輸出篮绿,得到 N 個可能的類別分別預(yù)測 Δcenterx,Δcentery,Δwidth,Δheight孵延。

訓(xùn)練和目標

R-CNN 的目標基本上是與 RPN 目標的計算是一致的,但需要考慮不同的可能的 object 類別 classes.

根據(jù) proposals 和 ground-truth boxes亲配,計算其 IoU尘应。與任何一個 ground-truth box 的 IoU 大于 0.5 的 proposals 被設(shè)為正確的 boxes惶凝。IoU 在 0.1 到 0.5 之間時設(shè)為 background。這里忽略沒有任何交叉的 proposals犬钢。這是因為苍鲜,在此階段,假設(shè)已經(jīng)獲得良好的 proposals玷犹。當(dāng)然混滔,所有的這些超參數(shù)都是可以用于調(diào)整以更好的擬合 objects。

邊界框回歸的目標計算的是 proposal 與其對應(yīng)的 ground-truth間的偏移量歹颓,只對基于 IoU 閾值設(shè)定類別后的 proposals 進行計算坯屿。隨機采用一個平衡化的 mini-batch=64,其中巍扛,25% 的 foreground proposals(具有類別class) 和 75% 的background proposals.

類似于 RPNs 的 losses领跛,對于選定的 proposals,分類 loss 采用 multiclass entropy loss撤奸;對于 25% 的 foreground proposals 采用 SmoothL1 loss 計算其與 groundtruth box 的匹配吠昭。

由于 R-CNN全連接網(wǎng)絡(luò)對每個類別僅輸出一個預(yù)測值,當(dāng)計算邊框回歸loss 時需謹慎胧瓜,只需考慮正確的類別矢棚。

后處理

類似于 RPN,R-CNN 最終輸出一堆帶有類別分類的objects府喳,在返回結(jié)果前蒲肋,再進一步進行處理。

為了調(diào)整邊界框劫拢,需要考慮概率最大的類別的 proposals. 忽略概率最大值為 background class 的proposals.

當(dāng)?shù)玫阶罱K的 objects 時肉津,并忽略被預(yù)測為 background 的結(jié)果强胰,采用 class-based NMS. 主要是通過對 objects 根據(jù)類別class 分組舱沧,然后根據(jù)概率排序,并對每個獨立的分組采用 NMS 處理偶洋,最后再放在一起.

最終得到的 objects 列表熟吏,仍可繼續(xù)通過設(shè)定概率閾值的方式,來限制每個類的 objects 數(shù)量.

2 Faster R-CNN 訓(xùn)練

Faster R-CNN在論文中是采用分步方法玄窝,對每個模塊分別訓(xùn)練再合并訓(xùn)練的權(quán)重. 自此牵寺,End-to-end 的聯(lián)合訓(xùn)練被發(fā)現(xiàn)能夠得到更好的結(jié)果.

當(dāng)將完整的模型合并后,得到 4 個不同的 losses恩脂,2 個用于 RPN帽氓,2 個用于 R-CNN。4 種不同的 losses 以加權(quán)和的形式組織. 可以根據(jù)需要對分類 loss 和回歸 loss 設(shè)置權(quán)重俩块,或者對 R-CNN 和 RPNs 設(shè)置不同權(quán)重.

采用 SGD 訓(xùn)練黎休,momentum=0.9. 學(xué)習(xí)率初始值為 0.001浓领,50K 次迭代后衰減為 0.0001. 這是一組常用參數(shù)設(shè)置。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末势腮,一起剝皮案震驚了整個濱河市联贩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌捎拯,老刑警劉巖泪幌,帶你破解...
    沈念sama閱讀 210,978評論 6 490
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異署照,居然都是意外死亡祸泪,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 89,954評論 2 384
  • 文/潘曉璐 我一進店門建芙,熙熙樓的掌柜王于貴愁眉苦臉地迎上來浴滴,“玉大人,你說我怎么就攤上這事岁钓∩裕” “怎么了?”我有些...
    開封第一講書人閱讀 156,623評論 0 345
  • 文/不壞的土叔 我叫張陵屡限,是天一觀的道長品嚣。 經(jīng)常有香客問我,道長钧大,這世上最難降的妖魔是什么翰撑? 我笑而不...
    開封第一講書人閱讀 56,324評論 1 282
  • 正文 為了忘掉前任,我火速辦了婚禮啊央,結(jié)果婚禮上眶诈,老公的妹妹穿的比我還像新娘。我一直安慰自己瓜饥,他們只是感情好逝撬,可當(dāng)我...
    茶點故事閱讀 65,390評論 5 384
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著乓土,像睡著了一般宪潮。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上趣苏,一...
    開封第一講書人閱讀 49,741評論 1 289
  • 那天狡相,我揣著相機與錄音,去河邊找鬼食磕。 笑死尽棕,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的彬伦。 我是一名探鬼主播滔悉,決...
    沈念sama閱讀 38,892評論 3 405
  • 文/蒼蘭香墨 我猛地睜開眼蟀悦,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了氧敢?” 一聲冷哼從身側(cè)響起日戈,我...
    開封第一講書人閱讀 37,655評論 0 266
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎孙乖,沒想到半個月后浙炼,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,104評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡唯袄,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,451評論 2 325
  • 正文 我和宋清朗相戀三年弯屈,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片恋拷。...
    茶點故事閱讀 38,569評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡资厉,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出蔬顾,到底是詐尸還是另有隱情宴偿,我是刑警寧澤,帶...
    沈念sama閱讀 34,254評論 4 328
  • 正文 年R本政府宣布诀豁,位于F島的核電站窄刘,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏舷胜。R本人自食惡果不足惜娩践,卻給世界環(huán)境...
    茶點故事閱讀 39,834評論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望烹骨。 院中可真熱鬧翻伺,春花似錦、人聲如沸沮焕。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,725評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽遇汞。三九已至未妹,卻和暖如春簿废,著一層夾襖步出監(jiān)牢的瞬間空入,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,950評論 1 264
  • 我被黑心中介騙來泰國打工族檬, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留歪赢,地道東北人。 一個月前我還...
    沈念sama閱讀 46,260評論 2 360
  • 正文 我出身青樓单料,卻偏偏與公主長得像埋凯,于是被迫代替她去往敵國和親点楼。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 43,446評論 2 348

推薦閱讀更多精彩內(nèi)容