摘要:這一切始于年的一篇論文,其使用了稱為的算法用來提取感興趣候選區(qū)域,并用一個(gè)標(biāo)準(zhǔn)的卷積神經(jīng)網(wǎng)絡(luò)去分類和調(diào)整這些區(qū)域。
本文詳細(xì)解釋了 Faster R-CNN 的網(wǎng)絡(luò)架構(gòu)和工作流,一步步帶領(lǐng)讀者理解目標(biāo)檢測的工作原理,作者本人也提供了 Luminoth 實(shí)現(xiàn),供大家參考。
Luminoth 實(shí)現(xiàn):https://github.com/tryolabs/luminoth/tree/master/luminoth/models/fasterrcnn
去年,我們決定深入了解 Faster R-CNN,閱讀原始論文以及其中引用到的其他論文,現(xiàn)在我們對其工作方式和實(shí)現(xiàn)方法有了清晰的理解。
我們最終在 Luminoth 中實(shí)現(xiàn)了 Faster R-CNN,Luminoth 是基于 TensorFlow 的計(jì)算機(jī)視覺工具包,易于訓(xùn)練和監(jiān)控,支持多種不同的模型。到目前為止,Luminoth 已經(jīng)吸引了很大的關(guān)注,我們在 ODSC Europe 和 ODSC West 的論壇中也介紹過這個(gè)項(xiàng)目。
(ODSC,Open Data Science Conference,專注于開源數(shù)據(jù)科學(xué)的會(huì)議)。
基于開發(fā) Luminoth 的工作和過去的報(bào)告,我們認(rèn)為把所有實(shí)現(xiàn) Faster RCNN 的細(xì)節(jié)和相關(guān)鏈接整合到一篇博客中是一個(gè)不錯(cuò)的點(diǎn)子,這對未來其他對此領(lǐng)域感興趣的人會(huì)很有意義。
背景
Faster R-CNN 最早在 2015 年的 NIPS 發(fā)布。其在發(fā)布后經(jīng)歷了幾次修改,這在之后博文中會(huì)有討論。Faster-RCNN 是 RCNN 系列論文的第三次迭代,這一系列論文的一作和聯(lián)合作者是 Ross Girshick。
這一切始于 2014 年的一篇論文「Rich feature hierarchies for accurate object detection and semantic segmentation」(R-CNN),其使用了稱為 Selective Search 的算法用來提取感興趣候選區(qū)域,并用一個(gè)標(biāo)準(zhǔn)的卷積神經(jīng)網(wǎng)絡(luò) (CNN) 去分類和調(diào)整這些區(qū)域。Fast R-CNN 從 R-CNN 演變優(yōu)化而來,F(xiàn)ast R-CNN 發(fā)布于 2015 年上半年,其中一種稱為感興趣區(qū)域池化的技術(shù),使得網(wǎng)絡(luò)可以共享計(jì)算結(jié)果,從而讓模型提速。這一系列算法最終被優(yōu)化為 Faster R-CNN,這是第一個(gè)完全可微分的模型。
框架
Faster R-CNN 的框架由幾個(gè)模塊部件組成,所以其框架有些復(fù)雜。我們將從高層次的概述開始,之后會(huì)介紹不同組成部分的具體細(xì)節(jié)。
從一張圖片開始,我們將會(huì)得到:
一個(gè)邊框列表
每個(gè)邊框會(huì)被分配一個(gè)標(biāo)簽
每對標(biāo)簽和邊框所對應(yīng)的概率
完整的 Faster R-CNN 框架
輸入的圖片以長×寬×高的張量形式表征,之后會(huì)被饋送入預(yù)訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò),在中間層得到特征圖。使用該特征圖作為特征提取器并用于下一流程。
上述方法在遷移學(xué)習(xí)中經(jīng)常使用,尤其在為小數(shù)據(jù)集訓(xùn)練分類器時(shí),其通常取用了在另一個(gè)較大數(shù)據(jù)集訓(xùn)練好的權(quán)重。我們在下一章節(jié)會(huì)深入了解這個(gè)部分。接著,我們會(huì)使用到區(qū)域建議網(wǎng)絡(luò)(Region Proposal Network,RPN)。使用 CNN 計(jì)算得到的特征,去尋找到預(yù)設(shè)好數(shù)量的可能包含目標(biāo)的區(qū)域 (邊框)。
使用深度學(xué)習(xí)進(jìn)行目標(biāo)檢測較大的困難可能是生成一個(gè)長度可變的邊框列表。使用深度神經(jīng)網(wǎng)絡(luò)建模時(shí),模型最后一部分通常是一個(gè)固定尺寸的張量輸出(除了循環(huán)神經(jīng)網(wǎng)絡(luò))。例如,在圖片分類中,輸出是 (N,) 形狀的張量,N 是類別的數(shù)量,其中在第 i 個(gè)位置標(biāo)量含有該圖片屬于類別 i 的概率。
RPN 中長度可變列表的問題可以使用錨點(diǎn)解決:使用固定尺寸的參考邊框在原始圖片上一致地定位。不是直接探測目標(biāo)在哪,而是把問題分兩個(gè)方面建模,對每個(gè)錨點(diǎn),我們考慮:
這個(gè)錨點(diǎn)包含相關(guān)目標(biāo)嗎?
如何調(diào)整錨點(diǎn)以更好的擬合到相關(guān)目標(biāo)?
可能會(huì)有點(diǎn)困擾,但是沒關(guān)系,下面會(huì)深入了解。
在取得一系列的相關(guān)目標(biāo)和其在原始圖片上的位置后,目標(biāo)探測問題就可以相對直觀地解決了。使用 CNN 提取到的特征和相關(guān)目標(biāo)的邊框,我們在相關(guān)目標(biāo)的特征圖上使用感興趣區(qū)域池化 (RoI Pooling),并將與目標(biāo)相關(guān)的特征信息存入一個(gè)新的張量。之后的流程與 R-CNN 模型一致,利用這些信息:
對邊框內(nèi)的內(nèi)容分類(或者舍棄它,并用「背景」標(biāo)記邊框內(nèi)容)
調(diào)整邊框的坐標(biāo)(使之更好地包含目標(biāo))
顯然,這樣做會(huì)遺失掉部分信息,但這正是 Faster-RCNN 如何進(jìn)行目標(biāo)探測的基本思想。下一步,我們會(huì)仔細(xì)討論框架、損失函數(shù)以及訓(xùn)練過程中各個(gè)組件的具體細(xì)節(jié)。
基礎(chǔ)網(wǎng)絡(luò)
之前提到過,F(xiàn)aster R-CNN 第一步要使用在圖片分類任務(wù) (例如,ImageNet) 上預(yù)訓(xùn)練好的卷積神經(jīng)網(wǎng)絡(luò),使用該網(wǎng)絡(luò)得到的中間層特征的輸出。這對有深度學(xué)習(xí)背景的人來說很簡單,但是理解如何使用和為什么這樣做才是關(guān)鍵,同時(shí),可視化中間層的特征輸出也很重要。沒有一致的意見表明哪個(gè)網(wǎng)絡(luò)框架是較好的。原始的 Faster R-CNN 使用的是在 ImageNet 上預(yù)訓(xùn)練的 ZF 和 VGG,但之后出現(xiàn)了很多不同的網(wǎng)絡(luò),且不同網(wǎng)絡(luò)的參數(shù)數(shù)量變化很大。例如,MobileNet,以速度優(yōu)先的一個(gè)小型的高效框架,大約有 330 萬個(gè)參數(shù),而 ResNet-152(152 層),曾經(jīng)的 ImageNet 圖片分類競賽優(yōu)勝者,大約有 6000 萬個(gè)參數(shù)。的網(wǎng)絡(luò)結(jié)構(gòu)如 DenseNet,可以在提高準(zhǔn)確度的同時(shí)縮減參數(shù)數(shù)量。
VGG
在討論網(wǎng)絡(luò)結(jié)構(gòu)孰優(yōu)孰劣之前,讓我們先以 VGG-16 為例來嘗試?yán)斫?Faster-RCNN 是如何工作的。
VGG 網(wǎng)絡(luò)結(jié)構(gòu)
VGG,其名字來自于在 ImageNet ILSVRC 2014 競賽中使用此網(wǎng)絡(luò)的小組組名,首次發(fā)布于論文」Very Deep Convolutional Networks for Large-Scale Image Recognition」, 作者是 Karen Simonyan 和 Andrew Zisserman。以今天的標(biāo)準(zhǔn)來看這個(gè)網(wǎng)絡(luò)談不上深度,但是在發(fā)布之際 VGG16 比當(dāng)時(shí)常用的網(wǎng)絡(luò)要多一倍的層數(shù),其推動(dòng)了「深度 → 更強(qiáng)大性能 → 更好結(jié)果」的浪潮(只要訓(xùn)練是可行的)。
當(dāng)使用 VGG 進(jìn)行分類任務(wù)時(shí),其輸入是 224×224×3 的張量 (表示一個(gè) 224×224 像素大小的 RGB 圖片)。在分類任務(wù)中輸入圖片的尺寸是固定的,因?yàn)榫W(wǎng)絡(luò)最后一部分的全連接層需要固定長度的輸入。在接入全連接層前,通常要將最后一層卷積的輸出展開成一維張量。
因?yàn)橐褂镁矸e網(wǎng)絡(luò)中間層的輸出,所以輸入圖片的尺寸不再有限制。至少,在這個(gè)模塊中不再是問題,因?yàn)橹挥芯矸e層參與計(jì)算。讓我們深入了解一下底層的細(xì)節(jié),看看具體要使用哪一層卷積網(wǎng)絡(luò)的輸出。Faster R-CNN 論文中沒有具體指定使用哪一層;但是在官方的實(shí)現(xiàn)中可以觀察到,作者使用的是 conv5/conv5_1 這一層 (caffe 代碼)。
每一層卷積網(wǎng)絡(luò)都在前一層的信息基礎(chǔ)上提取更加抽象的特征。第一層通常學(xué)習(xí)到簡單的邊緣,第二層尋找目標(biāo)邊緣的模式,以激活后續(xù)卷積網(wǎng)絡(luò)中更加復(fù)雜的形狀。最終,我們得到一個(gè)在空間維度上比原始圖片小很多,但表征更深的卷積特征圖。特征圖的長和寬會(huì)隨著卷積層間的池化而縮小,深度會(huì)隨著卷積層濾波器的數(shù)量而增加。
從圖片到卷積特征圖
卷積特征圖將圖片的所有信息編碼到深度的維度上,同時(shí)保留著原始圖片上目標(biāo)物體的相對位置信息。例如,如果圖片左上角有一個(gè)紅色矩形,經(jīng)過卷積層的激活,那么紅色矩形的位置信息仍然保留在卷積特征圖的左上角。
VGG vs ResNet
如今,ResNet 已經(jīng)取代大多數(shù) VGG 網(wǎng)絡(luò)作為提取特征的基礎(chǔ)框架。Faster-RCNN 的三位聯(lián)合作者 (Kaiming He, Shaoqing Ren 和 Jian Sun) 也是論文「Deep Residual Learning for Image (https://arxiv.org/abs/1512.03385) Recognition」的作者,這篇論文最初介紹了 ResNets 這一框架。
ResNet 對比 VGG 的優(yōu)勢在于它是一個(gè)更深層、大型的網(wǎng)絡(luò),因此有更大的容量去學(xué)習(xí)所需要的信息。這些結(jié)論在圖片分類任務(wù)中可行,在目標(biāo)探測的問題中也應(yīng)該同樣有效。
ResNet 在使用殘差連接和批歸一化的方法后更加易于訓(xùn)練,這些方法在 VGG 發(fā)布的時(shí)候還沒有出現(xiàn)。
錨點(diǎn)
現(xiàn)在,我們將使用處理過后的特征圖并建議目標(biāo)區(qū)域,也就是用于分類任務(wù)的感興趣區(qū)域。之前提到過錨點(diǎn)是解決長度可變問題的一種方法,現(xiàn)在將詳細(xì)介紹。
我們的目標(biāo)是尋找圖片中的邊框。這些邊框是不同尺寸、不同比例的矩形。設(shè)想我們在解決問題前已知圖片中有兩個(gè)目標(biāo)。那么首先想到的應(yīng)該是訓(xùn)練一個(gè)網(wǎng)絡(luò),這個(gè)網(wǎng)絡(luò)可以返回 8 個(gè)值:包含(xmin, ymin, xmax, ymax)的兩個(gè)元組,每個(gè)元組都用于定義一個(gè)目標(biāo)的邊框坐標(biāo)。這個(gè)方法有著根本問題,例如,圖片可能是不同尺寸和比例的,因此訓(xùn)練一個(gè)可以直接準(zhǔn)確預(yù)測原始坐標(biāo)的模型是很復(fù)雜的。另一個(gè)問題是無效預(yù)測:當(dāng)預(yù)測(xmin,xmax)和(ymin,ymax)時(shí),應(yīng)該強(qiáng)制設(shè)定 xmin 要小于 xmax,ymin 要小于 ymax。
另一種更加簡單的方法是去預(yù)測參考邊框的偏移量。使用參考邊框(xcenter, ycenter, width, height),學(xué)習(xí)預(yù)測偏移量(Δxcenter,Δycenter,Δwidth,Δheight),因此我們只得到一些小數(shù)值的預(yù)測結(jié)果并挪動(dòng)參考變量就可以達(dá)到更好的擬合結(jié)果。
錨點(diǎn)是用固定的邊框置于不同尺寸和比例的圖片上,并且在之后目標(biāo)位置的預(yù)測中用作參考邊框。
我們在處理的卷積特征圖的尺寸分別是 convwidth×convheight×convdepth,因此在卷積圖的 convwidth×convheight 上每一個(gè)點(diǎn)都生成一組錨點(diǎn)。很重要的一點(diǎn)是即使我們是在特征圖上生成的錨點(diǎn),這些錨點(diǎn)最終是要映射回原始圖片的尺寸。
因?yàn)槲覀冎挥玫搅司矸e和池化層,所以特征圖的最終維度與原始圖片是呈比例的。數(shù)學(xué)上,如果圖片的尺寸是 w×h,那么特征圖最終會(huì)縮小到尺寸為 w/r 和 h/r,其中 r 是次級采樣率。如果我們在特征圖上每個(gè)空間位置上都定義一個(gè)錨點(diǎn),那么最終圖片的錨點(diǎn)會(huì)相隔 r 個(gè)像素,在 VGG 中,r=16。
原始圖片的錨點(diǎn)中心
為了選擇一組合適錨點(diǎn),我們通常定義一組固定尺寸 (例如,64px、128px、256px,此處為邊框大小) 和比例 (例如,0.5、1、1.5,此處為邊框長寬比) 的邊框,使用這些變量的所有可能組合得到候選邊框 (這個(gè)例子中有 1 個(gè)錨點(diǎn)和 9 個(gè)邊框)。
左側(cè):錨點(diǎn)、中心:特征圖空間單一錨點(diǎn)在原圖中的表達(dá),右側(cè):所有錨點(diǎn)在原圖中的表達(dá)
區(qū)域建議網(wǎng)絡(luò)
RPN 采用卷積特征圖并在圖像上生成建議。
像我們之前提到的那樣,RPN 接受所有的參考框(錨點(diǎn))并為目標(biāo)輸出一套好的建議。它通過為每個(gè)錨點(diǎn)提供兩個(gè)不同的輸出來完成。
第一個(gè)輸出是錨點(diǎn)作為目標(biāo)的概率。如果你愿意,可以叫做「目標(biāo)性得分」。注意,RPN 不關(guān)心目標(biāo)的類別,只在意它實(shí)際上是不是一個(gè)目標(biāo)(而不是背景)。我們將用這個(gè)目標(biāo)性得分來過濾掉不好的預(yù)測,為第二階段做準(zhǔn)備。第二個(gè)輸出是邊框回歸,用于調(diào)整錨點(diǎn)以更好的擬合其預(yù)測的目標(biāo)。
RPN 是用完全卷積的方式高效實(shí)現(xiàn)的,用基礎(chǔ)網(wǎng)絡(luò)返回的卷積特征圖作為輸入。首先,我們使用一個(gè)有 512 個(gè)通道和 3x3 卷積核大小的卷積層,然后我們有兩個(gè)使用 1x1 卷積核的并行卷積層,其通道數(shù)量取決于每個(gè)點(diǎn)的錨點(diǎn)數(shù)量。
RPN 架構(gòu)的卷積實(shí)現(xiàn),其中 k 是錨點(diǎn)的數(shù)量。
對于分類層,我們對每個(gè)錨點(diǎn)輸出兩個(gè)預(yù)測值:它是背景(不是目標(biāo))的分?jǐn)?shù),和它是前景(實(shí)際的目標(biāo))的分?jǐn)?shù)。
對于回歸或邊框調(diào)整層,我們輸出四個(gè)預(yù)測值:Δxcenter、Δycenter、Δwidth、Δheight,我們將會(huì)把這些值用到錨點(diǎn)中來得到最終的建議。
使用最終的建議坐標(biāo)和它們的目標(biāo)性得分,然后可以得到一套很好的對于目標(biāo)的建議。
訓(xùn)練、目標(biāo)和損失函數(shù)
RPN 執(zhí)行兩種不同類型的預(yù)測:二進(jìn)制分類和邊框回歸調(diào)整。為了訓(xùn)練,我們把所有的錨點(diǎn)分成兩類。一類是「前景」,它與真實(shí)目標(biāo)重疊并且其 IoU(Intersection of Union)值大于 0.5;另一類是「背景」,它不與任何真實(shí)目標(biāo)重疊或與真實(shí)目標(biāo)的 IoU 值 小于 0.1。
然后,我們對這些錨點(diǎn)隨機(jī)采樣,構(gòu)成大小為 256 的 mini batch——維持前景錨點(diǎn)和背景錨點(diǎn)之間的平衡比例。
RPN 用所有以 mini batch 篩選出來的錨點(diǎn)和二進(jìn)制交叉熵(binary cross entropy)來計(jì)算分類損失。然后它只用那些標(biāo)記為前景的 mini batch 錨點(diǎn)來計(jì)算回歸損失。為了計(jì)算回歸的目標(biāo),我們使用前景錨點(diǎn)和最接近的真實(shí)目標(biāo),并計(jì)算將錨點(diǎn)轉(zhuǎn)化為目標(biāo)所需的正確 Δ。
論文中建議使用 Smooth L1 loss 來計(jì)算回歸誤差,而不是用簡單的 L1 或 L2 loss。Smooth L1 基本上就是 L1,但是當(dāng) L1 的誤差足夠小,由確定的 σ 定義時(shí),可以認(rèn)為誤差幾乎是正確的且損失以更快的速率減小。
使用 dynamic batches 是具有挑戰(zhàn)性的,這里的原因很多。即使我們試圖維持前景錨點(diǎn)和背景錨點(diǎn)之間的平衡比例,但這并不總是可能的。根據(jù)圖像上的真實(shí)目標(biāo)以及錨點(diǎn)的大小和比例,可能會(huì)得到零前景錨點(diǎn)。在這種情況下,我們轉(zhuǎn)而使用對于真實(shí)框具有較大 IoU 值的錨點(diǎn)。這遠(yuǎn)非理想情況,但是為了總是有前景樣本和目標(biāo)可以學(xué)習(xí),這還是挺實(shí)用的。
后處理
非極大抑制(Non-maximum suppression):由于錨點(diǎn)經(jīng)常重疊,因此建議最終也會(huì)在同一個(gè)目標(biāo)上重疊。為了解決重復(fù)建議的問題,我們使用一個(gè)簡單的算法,稱為非極大抑制(NMS)。NMS 獲取按照分?jǐn)?shù)排序的建議列表并對已排序的列表進(jìn)行迭代,丟棄那些 IoU 值大于某個(gè)預(yù)定義閾值的建議,并提出一個(gè)具有更高分?jǐn)?shù)的建議。
雖然這看起來很簡單,但對 IoU 的閾值設(shè)定一定要非常小心。太低,你可能會(huì)丟失對目標(biāo)的建議;太高,你可能會(huì)得到對同一個(gè)目標(biāo)的很多建議。常用值是 0.6。
建議選擇:應(yīng)用 NMS 后,我們保留評分較高的 N 個(gè)建議。論文中使用 N=2000,但是將這個(gè)數(shù)字降低到 50 仍然可以得到相當(dāng)好的結(jié)果。
獨(dú)立應(yīng)用程序
RPN 可以獨(dú)立使用,而不需要第二階段的模型。在只有一類對象的問題中,目標(biāo)性概率可以用作最終的類別概率。這是因?yàn)樵谶@種情況下,「前景」=「目標(biāo)類別」以及「背景」=「不是目標(biāo)類別」。
一些從獨(dú)立使用 RPN 中受益的機(jī)器學(xué)習(xí)問題的例子包括流行的(但仍然是具有挑戰(zhàn)性的)人臉檢測和文本檢測。
僅使用 RPN 的優(yōu)點(diǎn)之一是訓(xùn)練和預(yù)測的速度都有所提高。由于 RPN 是一個(gè)非常簡單的僅使用卷積層的網(wǎng)絡(luò),所以預(yù)測時(shí)間比使用分類基礎(chǔ)網(wǎng)絡(luò)更快。
興趣區(qū)域池化
在 RPN 步驟之后,我們有很多沒有分配類別的目標(biāo)建議。我們接下來要解決的問題就是如何將這些邊框分類到我們想要的類別中。
最簡單的方法是采用每個(gè)建議,裁剪出來,然后讓它通過預(yù)訓(xùn)練的基礎(chǔ)網(wǎng)絡(luò)。然后,我們可以用提取的特征作為基礎(chǔ)圖像分類器的輸入。這種方法的主要問題是運(yùn)行所有 2000 個(gè)建議的計(jì)算效率和速度都是非常低的。
Faster R-CNN 試圖通過復(fù)用現(xiàn)有的卷積特征圖來解決或至少緩解這個(gè)問題。這是通過用興趣區(qū)域池化為每個(gè)建議提取固定大小的特征圖實(shí)現(xiàn)的。R-CNN 需要固定大小的特征圖,以便將它們分類到固定數(shù)量的類別中。
興趣區(qū)域池化
一種更簡單的方法(被包括 Luminoth 版本的 Faster R-CNN 在內(nèi)的目標(biāo)檢測實(shí)現(xiàn)方法所廣泛使用),是用每個(gè)建議來裁剪卷積特征圖,然后用插值(通常是雙線性的)將每個(gè)裁剪調(diào)整為固定大?。?4×14×convdepth)。裁剪之后,用 2x2 核大小的較大池化來獲得每個(gè)建議最終的 7×7×convdepth 特征圖。
選擇這些確切形狀的原因與下一模塊(R-CNN)如何使用它有關(guān),這些設(shè)定是根據(jù)第二階段的用途得到的。
基于區(qū)域的卷積神經(jīng)網(wǎng)絡(luò)
基于區(qū)域的卷積神經(jīng)網(wǎng)絡(luò)(R-CNN)是 Faster R-CNN 工作流的最后一步。從圖像上獲得卷積特征圖之后,用它通過 RPN 來獲得目標(biāo)建議并最終為每個(gè)建議提取特征(通過 RoI Pooling),最后我們需要使用這些特征進(jìn)行分類。R-CNN 試圖模仿分類 CNNs 的最后階段,在這個(gè)階段用一個(gè)全連接層為每個(gè)可能的目標(biāo)類輸出一個(gè)分?jǐn)?shù)。
R-CNN 有兩個(gè)不同的目標(biāo):
1. 將建議分到一個(gè)類中,加上一個(gè)背景類(用于刪除不好的建議)。
2. 根據(jù)預(yù)測的類別更好地調(diào)整建議的邊框。
在最初的 Faster R-CNN 論文中,R-CNN 對每個(gè)建議采用特征圖,將它平坦化并使用兩個(gè)大小為 4096 的有 ReLU 激活函數(shù)的全連接層。
然后,它對每個(gè)不同的目標(biāo)使用兩種不同的全連接層:
一個(gè)有 N+1 個(gè)單元的全連接層,其中 N 是類的總數(shù),另外一個(gè)是背景類。
一個(gè)有 4N 個(gè)單元的全連接層。我們希望有一個(gè)回歸預(yù)測,因此對 N 個(gè)類別中的每一個(gè)可能的類別,我們都需要 Δcenterx、Δcentery、Δwidth、Δheight。
R-CNN 架構(gòu)
訓(xùn)練和目標(biāo)
R-CNN 的目標(biāo)與 RPN 的目標(biāo)的計(jì)算方法幾乎相同,但是考慮的是不同的可能類別。我們采用建議和真實(shí)邊框,并計(jì)算它們之間的 IoU。
那些有任何真實(shí)邊框的建議,只要其 IoU 大于 0.5,都被分配給那個(gè)真實(shí)數(shù)據(jù)。那些 IoU 在 0.1 和 0.5 之間的被標(biāo)記為背景。與我們在為 RPN 分配目標(biāo)時(shí)相反的是,我們忽略了沒有任何交集的建議。這是因?yàn)樵谶@個(gè)階段,我們假設(shè)已經(jīng)有好的建議并且我們對解決更困難的情況更有興趣。當(dāng)然,這些所有的值都是可以為了更好的擬合你想找的目標(biāo)類型而做調(diào)整的超參數(shù)。
邊框回歸的目標(biāo)是計(jì)算建議和與其對應(yīng)的真實(shí)框之間的偏移量,僅針對那些基于 IoU 閾值分配了類別的建議。
我們隨機(jī)抽樣了一個(gè)尺寸為 64 的 balanced mini batch,其中我們有高達(dá) 25% 的前景建議(有類別)和 75% 的背景。
按照我們對 RPN 損失所做的相同處理方式,現(xiàn)在的分類損失是一個(gè)多類別的交叉熵?fù)p失,使用所有選定的建議和用于與真實(shí)框匹配的 25% 建議的 Smooth L1 loss。由于 R-CNN 邊框回歸的全連接網(wǎng)絡(luò)的輸出對于每個(gè)類都有一個(gè)預(yù)測,所以當(dāng)我們得到這種損失時(shí)必須小心。在計(jì)算損失時(shí),我們只需要考慮正確的類。
后處理
與 RPN 相似,我們最終得到了很多已經(jīng)分配了類別的目標(biāo),在返回它們之前需要進(jìn)一步處理。
為了實(shí)施邊框調(diào)整,我們必須考慮哪個(gè)類別具有對該建議的較高概率。我們也需要忽略具有較高概率的背景類的建議。
在得到最終目標(biāo)和忽略被預(yù)測為背景的目標(biāo)之后,我們應(yīng)用基于類的 NMS。這通過按類進(jìn)行分組完成,通過概率對其排序,然后將 NMS 應(yīng)用于每個(gè)獨(dú)立的組。
對于我們最后的目標(biāo)列表,我們也可以設(shè)置一個(gè)概率閾值并且對每個(gè)類限制目標(biāo)的數(shù)量。
訓(xùn)練
在最初的論文中,F(xiàn)aster R-CNN 是用多步法訓(xùn)練的,獨(dú)立地訓(xùn)練各部分并且在應(yīng)用最終的全面訓(xùn)練方法之前合并訓(xùn)練的權(quán)重。之后,人們發(fā)現(xiàn)進(jìn)行端到端的聯(lián)合訓(xùn)練會(huì)帶來更好的結(jié)果。
把完整的模型放在一起后,我們得到 4 個(gè)不同的損失,兩個(gè)用于 RPN,另外兩個(gè)用于 R-CNN。我們在 RPN 和 R-CNN 中有可訓(xùn)練的層,我們也有可以訓(xùn)練(微調(diào))或不能訓(xùn)練的基礎(chǔ)網(wǎng)絡(luò)。
是否訓(xùn)練基礎(chǔ)網(wǎng)絡(luò)的決定取決于我們想要學(xué)習(xí)的目標(biāo)特性和可用的計(jì)算能力。如果我們想檢測與在原始數(shù)據(jù)集(用于訓(xùn)練基礎(chǔ)網(wǎng)絡(luò))上的數(shù)據(jù)相似的目標(biāo),那么除了嘗試壓縮我們能獲得的所有可能的性能外,其他做法都是沒有必要的。另一方面,為了擬合完整的梯度,訓(xùn)練基礎(chǔ)網(wǎng)絡(luò)在時(shí)間和必要的硬件上都是昂貴的。
用加權(quán)和將四種不同的損失組合起來。這是因?yàn)橄鄬τ诨貧w損失,我們可能希望給分類損失更大的權(quán)重,或者相比于 RPN 可能給 R-CNN 損失更大的權(quán)重。
除了常規(guī)的損失之外,我們也有正則化損失,為了簡潔起見,我們可以跳過這部分,但是它們在 RPN 和 R-CNN 中都可以定義。我們用 L2 正則化一些層。根據(jù)正在使用哪個(gè)基礎(chǔ)網(wǎng)絡(luò),以及如果它經(jīng)過訓(xùn)練,也有可能進(jìn)行正則化。
我們用隨機(jī)梯度下降的動(dòng)量算法訓(xùn)練,將動(dòng)量值設(shè)置為 0.9。你可以輕松的用其他任何優(yōu)化方法訓(xùn)練 Faster R-CNN,而不會(huì)遇到任何大問題。
學(xué)習(xí)率從 0.001 開始,然后在 50K 步后下降到 0.0001。這是通常最重要的超參數(shù)之一。當(dāng)用 Luminoth 訓(xùn)練時(shí),我們經(jīng)常從默認(rèn)值開始,并以此開始做調(diào)整。
評估
在一些特定的 IoU 閾值下,使用標(biāo)準(zhǔn)平均精度均值(mAP)來完成評估(例如,[email protected])。mAP 是源于信息檢索的度量標(biāo)準(zhǔn),并且常用于計(jì)算排序問題中的誤差和評估目標(biāo)檢測問題。
我們不會(huì)深入討論細(xì)節(jié),因?yàn)檫@些類型的度量標(biāo)準(zhǔn)值得用一篇完整博客來總結(jié),但重要的是,當(dāng)你錯(cuò)過了你應(yīng)該檢測到的框,以及當(dāng)你發(fā)現(xiàn)一些不存在的東西或多次檢測到相同的東西時(shí),mAP 會(huì)對此進(jìn)行懲罰。
結(jié)論
到目前為止,你應(yīng)該清楚 Faster R-CNN 的工作方式、設(shè)計(jì)目的以及如何針對特定的情況進(jìn)行調(diào)整。如果你想更深入的了解它的工作原理,你應(yīng)該看看 Luminoth 的實(shí)現(xiàn)。
Faster R-CNN 是被證明可以用相同的原理解決復(fù)雜的計(jì)算機(jī)視覺問題的模型之一,在這個(gè)新的深度學(xué)習(xí)革命剛開始的時(shí)候,它就展現(xiàn)出如此驚人的結(jié)果。
目前正在建立的新模型不僅用于目標(biāo)檢測,還用于基于這種原始模型的語義分割、3D 目標(biāo)檢測等等。有的借用 RPN,有的借用 R-CNN,還有的建立在兩者之上。因此,充分了解底層架構(gòu)非常重要,從而可以解決更加廣泛的和復(fù)雜的問題。
原文地址: https://tryolabs.com/blog/2018/01/18/faster-r-cnn-down-the-rabbit-hole-of-modern-object-detection/
歡迎加入本站公開興趣群商業(yè)智能與數(shù)據(jù)分析群
興趣范圍包括各種讓數(shù)據(jù)產(chǎn)生價(jià)值的辦法,實(shí)際應(yīng)用案例分享與討論,分析工具,ETL工具,數(shù)據(jù)倉庫,數(shù)據(jù)挖掘工具,報(bào)表系統(tǒng)等全方位知識
QQ群:81035754
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/4752.html
摘要:然而,幸運(yùn)的是,目前更為成功的目標(biāo)檢測方法是圖像分類模型的擴(kuò)展。幾個(gè)月前,發(fā)布了一個(gè)用于的新的目標(biāo)檢測。 隨著自動(dòng)駕駛汽車、智能視頻監(jiān)控、人臉檢測和各種人員計(jì)數(shù)應(yīng)用的興起,快速和準(zhǔn)確的目標(biāo)檢測系統(tǒng)也應(yīng)運(yùn)而生。這些系統(tǒng)不僅能夠?qū)D像中的每個(gè)目標(biāo)進(jìn)行識別和分類,而且通過在其周圍畫出適當(dāng)?shù)倪吔鐏韺ζ溥M(jìn)行局部化(localizing)。這使得目標(biāo)檢測相較于傳統(tǒng)的計(jì)算機(jī)視覺前身——圖像分類來說更加困難...
摘要:基于候選區(qū)域的目標(biāo)檢測器滑動(dòng)窗口檢測器自從獲得挑戰(zhàn)賽冠軍后,用進(jìn)行分類成為主流。一種用于目標(biāo)檢測的暴力方法是從左到右從上到下滑動(dòng)窗口,利用分類識別目標(biāo)。這些錨點(diǎn)是精心挑選的,因此它們是多樣的,且覆蓋具有不同比例和寬高比的現(xiàn)實(shí)目標(biāo)。 目標(biāo)檢測是很多計(jì)算機(jī)視覺任務(wù)的基礎(chǔ),不論我們需要實(shí)現(xiàn)圖像與文字的交互還是需要識別精細(xì)類別,它都提供了可靠的信息。本文對目標(biāo)檢測進(jìn)行了整體回顧,第一部分從RCNN...
摘要:自從和在年贏得了的冠軍,卷積神經(jīng)網(wǎng)絡(luò)就成為了分割圖像的黃金準(zhǔn)則。事實(shí)上,從那時(shí)起,卷積神經(jīng)網(wǎng)絡(luò)不斷獲得完善,并已在挑戰(zhàn)上超越人類。現(xiàn)在,卷積神經(jīng)網(wǎng)絡(luò)在的表現(xiàn)已超越人類。 卷積神經(jīng)網(wǎng)絡(luò)(CNN)的作用遠(yuǎn)不止分類那么簡單!在本文中,我們將看到卷積神經(jīng)網(wǎng)絡(luò)(CNN)如何在圖像實(shí)例分割任務(wù)中提升其結(jié)果。自從 Alex Krizhevsky、Geoff Hinton 和 Ilya Sutskever ...
摘要:我們可以通過在特征圖上滑動(dòng)窗口來檢測目標(biāo)。以前的滑動(dòng)窗口方法的致命錯(cuò)誤在于使用窗口作為最終的邊界框,這就需要非常多的形狀來覆蓋大部分目標(biāo)。更有效的方法是將窗口當(dāng)做初始猜想,這樣我們就得到了從當(dāng)前滑動(dòng)窗口同時(shí)預(yù)測類別和邊界框的檢測器。 單次檢測器Faster R-CNN 中,在分類器之后有一個(gè)專用的候選區(qū)域網(wǎng)絡(luò)。Faster R-CNN 工作流基于區(qū)域的檢測器是很準(zhǔn)確的,但需要付出代價(jià)。Fas...
閱讀 1784·2021-11-15 11:37
閱讀 3055·2021-11-04 16:05
閱讀 1922·2021-10-27 14:18
閱讀 2755·2021-08-12 13:30
閱讀 2498·2019-08-29 14:18
閱讀 2086·2019-08-29 13:07
閱讀 2023·2019-08-27 10:54
閱讀 2726·2019-08-26 12:15