目標檢測系列——開山之作RCNN原理詳解

語言: CN / TW / HK

theme: channing-cyan

持續創作,加速成長!這是我參與「掘金日新計劃 · 6 月更文挑戰」的第23天,點擊查看活動詳情

RCNN原理

寫在前面

RCNN是目標檢測領域的開山之作,作者是Ross Girshick ,我們稱之為RGB大神🥗🥗🥗 可以在google學術中看看這位大牛都寫了哪些文章,看看這引用次數,只能驚呼🐂🍺!!!

image-20220616182932642

接下來將詳細介紹介紹RCNN的原理,先來看看論文中這張經典的圖片。這張圖片展示了RCNN的實現過程,其主要有四步,下面分別對每步進行講解。

image-20220616214629372

候選區域生成

候選區域生成在RCNN中採用的是selective search 【簡稱SS算法】,這個算法的原理大致是通過顏色、大小、形狀等一些特徵對圖像進行聚類,算法的結果是在一張圖片中生成一系列的候選框,RCNN中讓每張圖像都生成2000個候選框。這些候選框有着大量的重疊部分,因此我們後面需要將這些重疊的候選框去除,得到相對準確的候選框。【注:這裏不對SS算法做詳細的講解,感興趣的可以自己查閲瞭解🍍🍍🍍】下圖展示了SS算法得到的大致結果,可見一個目標會有多個候選框生成。 【注:RCNN中SS算法每幅圖像生成的候選框個數為2000🥝🥝🥝】

image-20220616214600021

神經網絡提取特徵

上一步我們由SS算法從一張圖片中得到了2000個候選框,接下來需要對這些候選框進行特徵提取,即分別將2000個候選框區域喂入ALexNet網絡進行訓練,提取特徵。【注:有關ALexNet的網絡結構我前文有介紹,不清楚的點擊瞭解詳情🌱🌱🌱】為方便大家閲讀,我把ALexNet的網絡結構也貼出供大家參考,如下圖所示:

需要注意的是,在RCNN中,我們不需要最後的softmax層,只需要經過最後兩次全連接層,利用其提取到的特徵即可。此外由於全連接層的存在,需要對輸出圖片的尺寸進行限制,即需要圖片分辨率為227*227。論文中所採用的方法為無論候選區域的大小或縱橫比如何,先將其周圍擴展16個鄰近像素,然後將所有像素強制縮放至227*227尺寸。 【注:可見此方案會使原圖像發生畸變,如人物變矮變胖等】 相關縮放方案如下圖所示:

image-20220616222633371

                圖片來源B站同濟子豪兄

SVM分類器分類

上一步我們已經通過ALexNet網絡提取到特徵,每一個候選框區域都會生成4096維的特徵向量,如下圖所示:

image-20220617094808987

              圖片來源B站霹靂吧啦Wz

上圖展示的是一個候選框提取到的特徵,我們採用SS算法會從一幅圖片中生成2000個候選框,將所有候選框輸入網絡,就會得到2000*4096維的特徵矩陣。將2000*4096維的特徵矩陣與20個SVM組成的權值矩陣4096*20相乘,會得到2000*20維的概率矩陣,其中每一行代表一個候選框屬於各個目標類別的概率。 【注意:若採用的是VOC數據集,那麼類別是應該有21類,包括一個背景類】

image-20220617100136537

                圖片來源B站霹靂吧啦Wz

為讓大家更容易理解,對於上圖的結構①做更詳細的解釋,如下圖所示:

image-20220617100242991

從上圖可以看出,200020維矩陣的每一列表示2000個候選框分別對某一類的預測概率,如第一列則表示2000個候選框分別對狗的預測概率。我們對每一列即每一類進行非極大值抑制(NMS)用於剔除重疊候選框,得到該列中得分最高的的建議框。* 具體NMS過程如下:

image-20220617101827955

                圖片來源B站霹靂吧啦Wz

關於這一部分開始可能會有點迷惑,為什麼要刪除IOU大的目標呢?我之前也產生過這個疑問,其實這還是我們對這個流程不是很清楚。首先我們會在某一列中找出得分最高的目標,然後會計算其它目標和這個得分最高目標的IOU【注意不是計算與Ground Truth的IOU】,這個IOU大表示什麼含義呢?這個值越大表示這兩個候選框重疊的部分越多,則表示這兩個候選框很可能表示的是同一個物體,那麼刪除得分低的候選框就很容易理解了。 下圖展示了相關過程:

image-20220617102646414

                圖片來源B站霹靂吧啦Wz

迴歸器修正候選框位置

上一步驟中我們剔除了許多候選框,接下來我們需要對剩餘的候選框進一步篩選,即分別用20個迴歸器對上述20個類別中剩餘的候選框進行迴歸操作,最終得到每個類別修正後的得分最高的bounding box。

那麼我們怎麼由候選框得到最後的預測框呢?我們依舊會由ALexNet輸出的特徵向量來得到迴歸器的預測結果,其結果為 $(d_x(P),d_y(P),d_w(P),d_h(P))$ ,其表示中心點座標偏移和寬度和候選框高度偏移的縮放因子。其預測的結果${\mathop {\rm{G_i}}\limits^ \wedge}$的表達式如下所示:

image-20220617104327448

                圖片來源B站同濟子豪兄

我們由上式反解出 $(d_x(P),d_y(P),d_w(P),d_h(P))$ 的表達式,現用$(t_x,t_y,t_w,t_h)$ 表示,因為標註框參數和候選框參數都是給定的,因此$(t_x,t_y,t_w,t_h)$ 也是可直接計算得到的,為真實值。

image-20220617105213156

​                 圖片來源B站同濟子豪兄

接下來就用$(d_x(P),d_y(P),d_w(P),d_h(P))$值去擬合$(t_x,t_y,t_w,t_h)$值,使損失函數最小,損失函數如下:

小結

RCNN的原理部分就介紹到這裏了,希望可以對大家有所幫助。🍀🍀🍀後續會持續更新fast_RCNN和Faster_RCNN的內容以及相關代碼講解,一起加油吧!!!

參考鏈接

RCNN理論合集🍁🍁🍁

RCNN論文精讀🍁🍁🍁