換句話說,首先,我們給出一些建議區(qū)域,然后,從中提取出特征,之后,再根據(jù)這些特征來對(duì)這些區(qū)域進(jìn)行分類。本質(zhì)而言,我們將目標(biāo)檢測(cè)轉(zhuǎn)化成了圖像分類問題。R-CNN 模型雖然非常直觀,但是速度很慢。

Fast R-CNN

直接承接 R-CNN 的是 Fast R-CNN。Fast R-CNN 在很多方面與 R-CNN 類似,但是,憑借兩項(xiàng)主要的增強(qiáng)手段,其檢測(cè)速度較 R-CNN 有所提高:

  1. 在推薦區(qū)域之前,先對(duì)圖像執(zhí)行特征提取工作,通過這種辦法,后面只用對(duì)整個(gè)圖像使用一個(gè)?CNN(之前的?R-CNN?網(wǎng)絡(luò)需要在?2000?個(gè)重疊的區(qū)域上分別運(yùn)行?2000?個(gè)?CNN)。
  2. 將支持向量機(jī)替換成了一個(gè) softmax 層,這種變化并沒有創(chuàng)建新的模型,而是將神經(jīng)網(wǎng)絡(luò)進(jìn)行了擴(kuò)展以用于預(yù)測(cè)工作。

Fast?R-CNN?模型結(jié)構(gòu)示意圖:

如圖所見,現(xiàn)在我們基于網(wǎng)絡(luò)最后的特征圖(而非原始圖像)創(chuàng)建了 region proposals。因此,我們對(duì)整幅圖只用訓(xùn)練一個(gè) CNN 就可以了。

此外,我們使用了一個(gè) softmax 層來直接輸出類(class)的概率,而不是像之前一樣訓(xùn)練很多不同的 SVM 去對(duì)每個(gè)目標(biāo)類(object class)進(jìn)行分類。現(xiàn)在,我們只用訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò),而之前我們需要訓(xùn)練一個(gè)神經(jīng)網(wǎng)絡(luò)以及很多 SVM。

就速度而言,F(xiàn)ast R-CNN 提升了許多。

然而,存在一大未解決的瓶頸:用于生成 region proposal 的選擇搜索算法(selective search algorithm)。

FASTER R-CNN

到現(xiàn)在為止,我們完成了對(duì)?Faster?R-CNN?兩大早期模型的溯源。下面我們開始研究?Faster?R-CNN。Faster?R-CNN?的主要?jiǎng)?chuàng)新是,它用一個(gè)快速神經(jīng)網(wǎng)絡(luò)代替了之前慢速的選擇搜索算法(selective?search?algorithm)。具體而言,它引入了一個(gè)?region?proposal?網(wǎng)絡(luò)(RPN)。

RPN 工作原理:

換句話說,我們會(huì)觀察我們最后特征圖上的每個(gè)位置,然后關(guān)注圍繞它的?k?個(gè)不同的?anchor?box:一個(gè)高的框、一個(gè)寬的框、一個(gè)大的框等等。對(duì)于每個(gè)這些框,不管我們是否認(rèn)為它包含一個(gè)目標(biāo),以及不管這個(gè)框里的坐標(biāo)是什么,我們都會(huì)進(jìn)行輸出。下圖展示了在單個(gè)滑動(dòng)框位置上發(fā)生的操作:

圖中 2k 分?jǐn)?shù)代表了 k 中每一個(gè)邊界框正好覆蓋「目標(biāo)」的 softmax 概率。這里注意到,盡管 RPN 輸出了邊界框的坐標(biāo),然而它并不會(huì)去對(duì)任何可能的目標(biāo)進(jìn)行分類:它惟一的工作仍然是給出對(duì)象區(qū)域。如果一個(gè) anchor box 在特定閾值之上存在一個(gè)「objectness」分?jǐn)?shù),那么這個(gè)邊界框的坐標(biāo)就會(huì)作為一個(gè) region proposal 被向前傳遞。

一旦我們有了?region?proposal,我們就直接把他們輸入一個(gè)本質(zhì)上是?Fast?R-CNN?的模型。我們?cè)偬砑右粋€(gè)池化層、一些全連接層以及最后,一個(gè)?softmax?分類層和邊界框回歸器(bounding?box?regressor)。所以在某種意義上,F(xiàn)aster?R-CNN=RPN+Fast?R-CNN。

總體而言,F(xiàn)aster?R-CNN?較?Fast?R-CNN?在速度上有了大幅提升,而且其精確性也達(dá)到了最尖端的水平。值得一提的是,盡管未來的模型能夠在檢測(cè)速度上有所提升,但是幾乎沒有模型的表現(xiàn)能顯著超越?Faster?R-CNN。換句話說,F(xiàn)aster?R-CNN?也許不是目標(biāo)檢測(cè)最簡(jiǎn)單、最快的方法,但是其表現(xiàn)還是目前最佳的。例如,Tensorflow?應(yīng)用?Inception?ResNet?打造的?Faster?R-CNN?就是他們速度最慢,但卻最精準(zhǔn)的模型。

也許 Faster R-CNN 看起來可能會(huì)非常復(fù)雜,但是它的核心設(shè)計(jì)還是與最初的 R-CNN 一致:先假設(shè)對(duì)象區(qū)域,然后對(duì)其進(jìn)行分類。目前,這是很多目標(biāo)檢測(cè)模型使用的主要思路,包括我們接下來將要提到的這個(gè)模型。

R-FCN

還記得?Fast?R-CNN?是如何通過在所有?region?proposal?上共享同一個(gè)?CNN,來改善檢測(cè)速度的嗎?這也是設(shè)計(jì)?R-FCN?的一個(gè)動(dòng)機(jī):通過最大化共享計(jì)算來提升速度。

R-FCN,或稱 Region-based Fully Convolutional Net(基于區(qū)域的全卷積網(wǎng)絡(luò)),可以在每個(gè)輸出之間完全共享計(jì)算。作為全卷積網(wǎng)絡(luò),它在模型設(shè)計(jì)過程中遇到了一個(gè)特殊的問題。

一方面,當(dāng)對(duì)一個(gè)目標(biāo)進(jìn)行分類任務(wù)時(shí),我們希望學(xué)到模型中的位置不變性(location invariance):無論這只貓出現(xiàn)在圖中的哪個(gè)位置,我們都想將它分類成一只貓。另一方面,當(dāng)進(jìn)行目標(biāo)檢測(cè)任務(wù)時(shí),我們希望學(xué)習(xí)到位置可變性(location variance):如果這只貓?jiān)谧笊辖牵敲次覀兿M趫D像左上角這個(gè)位置畫一個(gè)框。所以,問題出現(xiàn)了,如果想在網(wǎng)絡(luò)中 100% 共享卷積計(jì)算的話,我們應(yīng)該如何在位置不變性(location invariance)和位置可變性(location variance)之間做出權(quán)衡呢?

R-FCN 的解決方案:位置敏感分?jǐn)?shù)圖

每個(gè)位置敏感分?jǐn)?shù)圖都代表了一個(gè)目標(biāo)類(object class)的一個(gè)相關(guān)位置。例如,只要是在圖像右上角檢測(cè)到一只貓,就會(huì)激活一個(gè)分?jǐn)?shù)圖(score map)。而當(dāng)系統(tǒng)看見左下角出現(xiàn)一輛車時(shí),另一個(gè)分?jǐn)?shù)圖也將會(huì)被激活。本質(zhì)上來講,這些分?jǐn)?shù)圖都是卷積特征圖,它們被訓(xùn)練來識(shí)別每個(gè)目標(biāo)的特定部位。

以下是 R-FCN 的工作方式:

  1. 在輸入圖像上運(yùn)行一個(gè) CNN(本例中使用的是 ResNet)。
  2. 添加一個(gè)全卷積層,以生成位置敏感分?jǐn)?shù)圖的 score bank。這里應(yīng)該有 k2(C+1) 個(gè)分?jǐn)?shù)圖,其中,k2代表切分一個(gè)目標(biāo)的相關(guān)位置的數(shù)量(比如,32代表一個(gè) 3×3 的空間網(wǎng)格),C+1 代表 C 個(gè)類外加一個(gè)背景。
  3. 運(yùn)行一個(gè)全卷積 region proposal 網(wǎng)絡(luò)(RPN),以生成感興趣區(qū)域(regions of interest,RoI)。
  4. 對(duì)于每個(gè) RoI,我們都將其切分成同樣的 k2個(gè)子區(qū)域,然后將這些子區(qū)域作為分?jǐn)?shù)圖。
  5. 對(duì)每個(gè)子區(qū)域,我們檢查其 score bank,以判斷這個(gè)子區(qū)域是否匹配具體目標(biāo)的對(duì)應(yīng)位置。比如,如果我們處在「上-左」子區(qū)域,那我們就會(huì)獲取與這個(gè)目標(biāo)「上-左」子區(qū)域?qū)?yīng)的分?jǐn)?shù)圖,并且在感興趣區(qū)域(RoI region)里對(duì)那些值取平均。對(duì)每個(gè)類我們都要進(jìn)行這個(gè)過程。
  6. 一旦每個(gè) k2子區(qū)域都具備每個(gè)類的「目標(biāo)匹配」值,那么我們就可以對(duì)這些子區(qū)域求平均值,得到每個(gè)類的分?jǐn)?shù)。
  7. 通過對(duì)剩下 C+1 個(gè)維度向量進(jìn)行 softmax 回歸,來對(duì) RoI 進(jìn)行分類。

下面是?R-FCN?的示意圖,用?RPN?生成?RoI:

當(dāng)然,即便有上述文字以及圖片的解釋,你可能仍然不太明白這個(gè)模型的工作方式。老實(shí)說,當(dāng)你可以實(shí)際看到?R-FCN?的工作過程時(shí),你會(huì)發(fā)現(xiàn)理解起來會(huì)更加簡(jiǎn)單。下面就是一個(gè)在實(shí)踐中應(yīng)用的?R-FCN,它正在從圖中檢測(cè)一個(gè)嬰兒:

我們只用簡(jiǎn)單地讓 R-FCN 去處理每個(gè) region proposal,然后將其切分成子區(qū)域,在子區(qū)域上反復(fù)詢問系統(tǒng):「這看起來像是嬰兒的『上-左』部分嗎?」,「這看起來像是嬰兒的『上-中』部分嗎?」,「這看起來像是嬰兒的『上-右』部分嗎?」等等。系統(tǒng)會(huì)對(duì)所有類重復(fù)這個(gè)過程。如果有足夠的子區(qū)域表示「是的,我的確匹配嬰兒的這個(gè)部分!」那么 RoI 就會(huì)通過對(duì)所有類進(jìn)行 softmax 回歸的方式被分類成一個(gè)嬰兒。」

借助這種設(shè)置,R-FCN 便能同時(shí)處理位置可變性(location variance)與位置不變性(location invariance)。它給出不同的目標(biāo)區(qū)域來處理位置可變性,讓每個(gè) region proposal 都參考同一個(gè)分?jǐn)?shù)圖 score bank 來處理位置不變形。這些分?jǐn)?shù)圖應(yīng)該去學(xué)習(xí)將一只貓分類成貓,而不用管這只貓?jiān)谠谀莻€(gè)位置。最好的是,由于它是全卷積的,所以這意味著網(wǎng)絡(luò)中所有的計(jì)算都是共享的。

因此,R-FCN 比 Faster R-CNN 快了好幾倍,并且可以達(dá)到類似的準(zhǔn)確率。

SSD

我們最后一個(gè)模型是?SSD,即?Single-Shot?Detector。和?R-FCN?一樣,它的速度比?Faster?R-CNN?要快很多,但其工作方式卻和?R-FCN?存在顯著不同。

我們前兩個(gè)模型分兩個(gè)步驟執(zhí)行 region proposal 和 region classification。首先,它們使用一個(gè) region proposal 網(wǎng)絡(luò)來生成感興趣區(qū)域(region of interest);然后,它們既可以用全連接層也可以用位置敏感卷積層來對(duì)那些區(qū)域進(jìn)行分類。然而,SSD 可以在單個(gè)步驟中完成上述兩個(gè)步驟,并且在處理圖像的同時(shí)預(yù)測(cè)邊界框和類。

具體而言,給定一個(gè)輸入圖像以及一系列真值標(biāo)簽,SSD 就會(huì)進(jìn)行如下操作:

  1. 在一系列卷積層中傳遞這個(gè)圖像,產(chǎn)生一系列大小不同的特征圖(比如 10×10、6×6、3×3 等等。)
  2. 對(duì)每個(gè)這些特征圖中的每個(gè)位置而言,都使用一個(gè) 3×3 的卷積濾波器(convolutional filter)來評(píng)估一小部分默認(rèn)的邊界框。這些默認(rèn)邊的界框本質(zhì)上等價(jià)于 Faster R-CNN 的 anchor box。
  3. 對(duì)每個(gè)邊界框都同時(shí)執(zhí)行預(yù)測(cè): a)邊界框的偏移;b)分類的概率。
  4. 在訓(xùn)練期間,用這些基于 IoU(Intersection over Union,也被稱為 Jaccard 相似系數(shù))系數(shù)的預(yù)測(cè)邊界框來匹配正確的邊界框。被最佳預(yù)測(cè)的邊界框?qū)⒈粯?biāo)簽為「正」,并且其它邊界框的 IoU 大于 0.5。

SSD 的工作方式聽上去很直接,但是訓(xùn)練它卻會(huì)面臨一個(gè)不一般的挑戰(zhàn)。在之前那兩個(gè)模型那里,region proposal 網(wǎng)絡(luò)可以確保每個(gè)我們嘗試進(jìn)行分類的對(duì)象都會(huì)有一個(gè)作為「目標(biāo)」的最小概率值。然而,在 SSD 這里,我們跳過了這個(gè)篩選步驟。我們從圖像中每個(gè)單一位置那里進(jìn)行分類并畫出形狀、大小不同的邊界框。通過這種辦法,我們可以生成比別的模型更多的邊界框,但是它們基本上全是負(fù)面樣本。

為了解決這個(gè)問題,SSD 進(jìn)行了兩項(xiàng)處理。首先,它使用非極大值抑制(non maximum suppression,NMS)技術(shù)來將高度重疊的邊界框整合成一個(gè)。換句話說,如果有 4 個(gè)形狀、尺寸等類似的邊界框中有同一只狗,那么 NMS 就會(huì)保留信度最高的那個(gè)邊界框而拋棄掉其它的。第二,SSD 模型使用了一種被稱為 hard negative mining 的技術(shù)以在訓(xùn)練過程中讓類保持平衡。在 hard negative mining 中,只有那些有最高訓(xùn)練損失(training loss)的負(fù)面樣本(negative example)子集才會(huì)在每次訓(xùn)練迭代中被使用。SSD 的「正負(fù)」比一直保持在 1:3。

下圖是?SSD?的架構(gòu)示意圖:

如上所述,最終有可縮小尺寸的「額外特征層」。這些尺寸變化的特征圖有助于捕捉不同大小的目標(biāo)。例如,下面是一個(gè)正在執(zhí)行的?SSD。

在更小的特征圖中(比如 4×4),每一單元覆蓋圖像的一個(gè)更大區(qū)域,使其探測(cè)更大的目標(biāo)。region proposal 與分類同時(shí)被執(zhí)行:假設(shè) p 為目標(biāo)類別,每個(gè)邊界框與一個(gè) (4+p)-維度向量相連接,其輸出 4 個(gè)框偏移坐標(biāo)和 p 分類概率。在最后一步中,softmax 又一次被用來分類目標(biāo)。

最終,SSD 與最初的兩個(gè)模型并無不同。它簡(jiǎn)單跳過「region proposal」這一步,而不是同時(shí)考慮圖像每個(gè)位置的每個(gè)邊界及其分類。由于 SSD 一次性完成所有,它是三個(gè)模型中最快的,且相對(duì)而言依然表現(xiàn)出色。

結(jié)論

Faster?R-CNN、R-FCN?和?SSD?是三種目前最優(yōu)且應(yīng)用最廣泛的目標(biāo)檢測(cè)模型。其他流行的模型通常與這三者類似,都依賴于深度?CNN(如?ResNet、Inception?等)來進(jìn)行網(wǎng)絡(luò)初始化,且大部分遵循同樣的?proposal/分類?pipeline。

但是,使用這些模型需要了解?Tensorflow?的?API。Tensorflow?有一份使用這些模型的初學(xué)者教程。

文章轉(zhuǎn)自微信公眾號(hào)@機(jī)器之心

上一篇:

Keras:深度學(xué)習(xí)的高級(jí)接口,讓模型訓(xùn)練更快捷!

下一篇:

RAG全鏈路的關(guān)鍵模塊解析
#你可能也喜歡這些API文章!

我們有何不同?

API服務(wù)商零注冊(cè)

多API并行試用

數(shù)據(jù)驅(qū)動(dòng)選型,提升決策效率

查看全部API→
??

熱門場(chǎng)景實(shí)測(cè),選對(duì)API

#AI文本生成大模型API

對(duì)比大模型API的內(nèi)容創(chuàng)意新穎性、情感共鳴力、商業(yè)轉(zhuǎn)化潛力

25個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)

#AI深度推理大模型API

對(duì)比大模型API的邏輯推理準(zhǔn)確性、分析深度、可視化建議合理性

10個(gè)渠道
一鍵對(duì)比試用API 限時(shí)免費(fèi)