論文: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)練的 ZF 和 VGG描函,其后出現(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 圖片分類時,輸入為 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.
不同于直接檢測目標的位置封断,這里將問題轉(zhuǎn)化為兩部分。對每一個 anchor 而言:
- anchor 是否包含相關(guān)的 object舶担?
- 如何調(diào)整 anchor 以更好的擬合相關(guān)的 object坡疼?
有一種簡單的方法來預(yù)測目標的邊界框,即學(xué)習(xí)相對于參考邊界框的偏移量衣陶。假設(shè)參考 box:()柄瑰,待預(yù)測量:(),一般都是很小的值剪况,以調(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捌臊。
1.2.2 RPN結(jié)構(gòu)
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 對固定尺寸的特征圖分類劫恒。
目標檢測中贩幻,包括 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è)置。