Faster RCNN 算法_面試版

參考鏈接:

Faster RCNN 學(xué)習(xí)筆記:https://www.cnblogs.com/wangyong/p/8513563.html

總結(jié)faster r-cnn可能會問到的面試問題:https://blog.csdn.net/qq_43477550/article/details/105584364

快速理解RPN:https://zhuanlan.zhihu.com/p/138515680

RoIPooling和ROI Align以及雙線性插值法:https://blog.csdn.net/ifreewolf_csdn/article/details/101352352


參考書本:

深度學(xué)習(xí)之pytorch物體檢測實(shí)戰(zhàn),第二篇:物體檢測經(jīng)典框架,第四章:兩階經(jīng)典檢測器: Faster RCNN

1、Faster RCNN 是什么

Faster RCNN?是在?Fast?RCNN?的基礎(chǔ)上,引入了?RPN?網(wǎng)絡(luò)來代替?Fast?RCNN?中的選擇性搜索算法來生成候選區(qū)域,使得目標(biāo)檢測速度大大提高。Faster?RCNN?的網(wǎng)絡(luò)結(jié)構(gòu)是使用?VGG16 卷積階段的網(wǎng)絡(luò)層來提取特征,然后分別傳入到?RoI?池化層和?RPN?網(wǎng)絡(luò)中,RPN?網(wǎng)絡(luò)得到?RoI?后跟特征圖一起傳入到?RoI?池化層,獲得固定尺寸大小的輸出,最后再傳入到多層全連接層中,同時得到分類得分和邊框坐標(biāo)偏移量回歸的預(yù)測結(jié)果


2、Faster RCNN 的網(wǎng)絡(luò)結(jié)構(gòu)圖


3、Faster RCNN 的算法步驟

第一步:將原圖除以縮放因子來變換圖片的尺寸,圖像短邊不超過600,圖像長邊不超過1000。然后輸入到?VGG16 卷積階段的網(wǎng)絡(luò)層來提取特征,生成特征圖

第二步:將特征圖分別輸入到?RPN?網(wǎng)絡(luò)中以及?RoI?池化層中,RPN?的過程

1、在特征圖上滑動使用 3*3?卷積,通過融合周邊特征,加強(qiáng)特征的魯棒性,獲得新的特征圖

2、由于特征圖上的每一個特征點(diǎn)都對應(yīng)了 9?個?anchors ,所以可以使用 1*1?卷積來代替全連接層,預(yù)測每一個?anchor?的分類得分以及坐標(biāo)偏移量

3、在訓(xùn)練?RPN?網(wǎng)絡(luò)階段,首先按照規(guī)則生成全部 anchors ,然后將超過圖像邊界的?anchors 剔除掉,然后計(jì)算 anchors?跟所有真值的?IoU,對于每個真值跟其有最大 IoU?的?anchor?標(biāo)記為正樣本,IoU > 0.7?的也標(biāo)記為正樣本, IoU < 0.3?的標(biāo)記為負(fù)樣本,然后從中隨機(jī)抽取正負(fù)樣本比例為 1:1,總數(shù)為 256?個?anchors?作為訓(xùn)練樣本,而其余的?anchor?則不參與訓(xùn)練。然后將每個 anchor 跟它有最大?IoU?的真值標(biāo)記為它的真值。然后計(jì)算 anchors?跟真值的坐標(biāo)偏移量,然后用來訓(xùn)練?RPN?網(wǎng)絡(luò)

4、在訓(xùn)練?Faster?RCNN?網(wǎng)絡(luò)階段,首先按照規(guī)則生成全部?anchors,然后利用 2?中預(yù)測的坐標(biāo)偏移量來校正 anchors?的坐標(biāo),然后將超過圖像邊界的?anchors 坐標(biāo)修整到圖像邊界。然后按?anchors?的分類得分來進(jìn)行降序排序,保留分類得分的前 12000?個?anchors,然后使用非極大值抑制。然后選取分類得分前 2000 個?anchors?作為候選框。然后計(jì)算所有的候選框跟真值的?IoU,對于任意一個候選框,如果它跟所有的真值的最大?IoU?大于等于 0.5,則標(biāo)記為正樣本,否則標(biāo)記為負(fù)樣本。然后從中隨機(jī)抽取正負(fù)樣本比例為 1:3,總數(shù)為 256?的?RoI 作為訓(xùn)練樣本。然后將每個 RoI?跟它有最大?IoU的真值標(biāo)記為它的真值,然后計(jì)算?RoI?跟真值的坐標(biāo)偏移量。

第三步:RoI?池化層的過程:

1、將?RoI 跟特征圖輸入到?RoI?池化層中

2、將?RoI 的坐標(biāo)除以?VGG16?網(wǎng)絡(luò)的下采樣率 16 ,并向下取整,得到它在特征圖中的坐標(biāo)

3、將?RoI 劃分為 7*7?大小的網(wǎng)格,每個網(wǎng)格的寬和高分別由?RoI?區(qū)域的寬和高除以 7?并向下取整來得到

4、在每個網(wǎng)格里使用最大值池化,輸出 7*7?大小的特征圖

第四步:RoI?池化層后接多層全連接層,然后再接兩個并行的預(yù)測分支,分別預(yù)測分類得分和邊框坐標(biāo)偏移量


4、Faster RCNN 的優(yōu)點(diǎn)

1、相對于?Fast?RCNN,F(xiàn)aster?RCNN 使用?RPN?網(wǎng)絡(luò)來取代了選擇性搜索算法來生成候選區(qū)域,在訓(xùn)練和測試階段的速度都大大地提高了,也節(jié)省了存儲空間

2、相對于?Fast?RCNN?不是端到端的形式,F(xiàn)aster?RCNN 將生成候選區(qū)域階段也融入到了神經(jīng)網(wǎng)絡(luò)中,使得?Faster?RCNN 變成了端到端的形式

3、Faster?RCNN 通過兩階段網(wǎng)絡(luò)與?RPN,實(shí)現(xiàn)了精度較高的物體檢測性能

4、Faster?RCNN?是兩階段網(wǎng)絡(luò),相對于其他一階段網(wǎng)絡(luò),兩階段網(wǎng)絡(luò)更加精準(zhǔn),尤其是針對高精度、多尺度以及小物體問題上,兩階段網(wǎng)絡(luò)的優(yōu)勢更明顯


5、Faster RCNN 的缺點(diǎn)

1、卷積網(wǎng)絡(luò):卷積網(wǎng)絡(luò)提取到的特征圖是最后一個卷積階段的特征,并沒有融合多個階段的特征,而且分辨率通常也較小,這些都不利于小物體及多尺度的物體檢測

2、非極大值抑制:非極大值抑制本身的過濾對于遮擋物體不是特別友好,本身屬于兩個物體的候選框有可能因?yàn)榉菢O大值抑制而被過濾為 1?個,造成漏檢

3、RoI?池化層:RoI?池化層有兩次對坐標(biāo)進(jìn)行向下取整的操作,會導(dǎo)致?RoI 的坐標(biāo)跟在原圖中的坐標(biāo)產(chǎn)生偏差,使得網(wǎng)絡(luò)回歸的效果變差,特別是對于小物體檢測的時候,影響更大。而且第二次的向下取整操作,會導(dǎo)致只提取了?RoI 部分區(qū)域的特征,會影響網(wǎng)絡(luò)的學(xué)習(xí)效果

4、全連接網(wǎng)絡(luò):原始的?Faster?RCNN?最后使用全連接網(wǎng)絡(luò),這部分全連接網(wǎng)絡(luò)占據(jù)了網(wǎng)絡(luò)的大部分參數(shù),并且?RoI?池化層后每一個?RoI?都要經(jīng)過一遍全連接網(wǎng)絡(luò),沒有共享計(jì)算

5、正負(fù)樣本數(shù)量:在?RPN?及?RCNN?部分,都是通過超參數(shù)來限制正負(fù)樣本的數(shù)量,以保證正負(fù)樣本的均衡。而對于不同任務(wù)與數(shù)據(jù),這種正負(fù)樣本均衡方法不一定是最有效的

6、兩階段網(wǎng)絡(luò):RPN?與?RCNN?兩個階段分工明確,帶來了精度的提升,但速度相對較慢,實(shí)際實(shí)現(xiàn)上還沒有達(dá)到實(shí)時


6、Faster RCNN 的損失函數(shù)

Faster?RCNN?的損失分別由?RPN?的分類得分損失、RPN?的坐標(biāo)偏移量回歸、 RCNN?的分類得分損失和?RCNN?的邊框回歸損失,總共四部分組成,其中?RPN?的分類得分損失函數(shù)和?RCNN?的分類得分損失函數(shù)使用交叉熵,而?RPN?的坐標(biāo)偏移量回歸損失函數(shù)和?RCNN?的邊框回歸損失則使用 smooth_L1?

具體表達(dá)式為:

假設(shè)?rpn_{cls}, rpn_{bbox}, rcnn_{cls}, rcnn_{bbox}?為其預(yù)測值,帶 *?號的則是其真值,\lambda_1、\lambda_2?則是多任務(wù)平衡系數(shù),[u\geq 1]?表示只選取?u?大于 1?的部分,因此

L(rpn_{cls}, rpn_{bbox}, rcnn_{cls}, rcnn_{bbox}) =

-\frac{1}{N_{rpn\_cls}} \sum\nolimits rpn_{cls}^{*} log(rpn_{cls}) +

\frac{\lambda_1}{N_{rpn\_bbox}}[u\geq 1]{\sum_{i\in\{x, y, h, w\}}{smooth_{L1}}}(rpn_{bbox\_i}, rpn_{bbox\_i}^{*})  +

-\frac{1}{N_{rcnn\_cls}}* \sum\nolimits rcnn_{cls}^{*} log(rcnn_{cls}) +

\frac{\lambda_2}{N_{rcnn\_bbox}}{[u\geq 1]}{\sum_{i\in\{x, y, h, w\}}smooth_{L1}(rcnn_{bbox\_i}, rcnn_{bbox\_i}^{*}) }

注:RPN?中是二分類,而?RCNN?中則是類別數(shù) + 1

RPN?回歸中的正樣本數(shù)量為 128,而?RCNN?中的正樣本數(shù)量為 64


7、RPN 的步驟(面試重點(diǎn))

RPN?是一個全卷積網(wǎng)絡(luò),可以輸入任意尺寸的圖像,然后生成候選區(qū)域,它的具體過程是:

1、在特征圖上使用 3*3?卷積,通過融合周邊特征,加強(qiáng)特征的魯棒性,獲得新的特征圖

2、由于特征圖上的每一個特征點(diǎn)都對應(yīng)了 9?個?anchors ,所以可以使用 1*1?卷積來預(yù)測每一個?anchor?的分類得分以及坐標(biāo)偏移量

3、首先按照規(guī)則生成全部 anchors ,然后將超過圖像邊界的?anchor?剔除掉,然后計(jì)算保留下來的?anchors?跟所有真值的?IoU,對于每個真值跟其有最大的?IoU?的?anchor?標(biāo)記為正樣本,IoU > 0.7?的也標(biāo)記為正樣本, IoU < 0.3?的標(biāo)記為負(fù)樣本,然后從中隨機(jī)抽取正負(fù)樣本比例為 1:1,總數(shù)為 256?個?anchors?作為訓(xùn)練樣本,而其余的?anchor?則不參與訓(xùn)練。然后計(jì)算作為訓(xùn)練樣本的?anchors?跟真值的坐標(biāo)偏移量

4、首先按照規(guī)則生成全部?anchors,然后利用 2?中預(yù)測的坐標(biāo)偏移量來更新?anchors?的坐標(biāo),然后將超過圖像邊界的?anchors 坐標(biāo)修整到圖像邊界,得到最初的候選框。然后按?anchors?的分類概率來進(jìn)行降序排序,保留概率大的前 12000?個?anchors,然后使用非極大值抑制。然后選取前 2000 個?anchors?作為候選框

5、篩選候選框得到?RoI,首先計(jì)算所有的候選框跟真值的?IoU,對于任意一個候選框,如果它跟所有的真值的最大?IoU?大于等于 0.5,則標(biāo)記為正樣本,否則標(biāo)記為負(fù)樣本。然后從中隨機(jī)抽取正負(fù)樣本比例為 1:3,總數(shù)為 256?的?RoI 作為訓(xùn)練樣本。同時計(jì)算每個?RoI?所對應(yīng)的類別,以及真值的偏移量。


8、RoI 池化是什么(面試重點(diǎn))

RoI?池化是輸入任意尺寸的圖像,然后得到固定尺寸大小的輸出。它的具體過程是:

1、將?RoI 跟特征圖輸入到?RoI?池化層中

2、將?RoI 的坐標(biāo)除以?VGG16?網(wǎng)絡(luò)的下采樣率 16 ,并向下取整,得到它在特征圖中的坐標(biāo)

3、將?RoI 劃分為 7*7?大小的網(wǎng)格,每個網(wǎng)格的寬和高分別由?RoI?區(qū)域的寬和高除以 7?并向下取整來得到

4、在每個網(wǎng)格里使用最大值池化

5、輸出 7*7?大小的特征圖


9、ROI Align 是什么(面試重點(diǎn))

RoI?Align?是對?ROI?池化的改進(jìn),主要是在于取消了計(jì)算坐標(biāo)時的向下取整操作,以及避免了只對?ROI?部分區(qū)域選取特征的缺點(diǎn),它的具體過程是:

1、將?RoI 跟特征圖輸入到?RoI?池化層中

2、將?RoI 的坐標(biāo)除以?VGG16?網(wǎng)絡(luò)的下采樣率 16 ,但是不進(jìn)行向下取整的操作,得到它在特征圖中的坐標(biāo)

3、將?RoI 劃分為 7*7?大小的網(wǎng)格,每個網(wǎng)格的寬和高分別由?RoI?區(qū)域的寬和高除以 7?得到,但是不進(jìn)行向下取整的操作

4:將每個網(wǎng)格劃分為大小相同的 4?個小方格,每個小方格內(nèi)各取一個點(diǎn),該點(diǎn)的坐標(biāo)則為小方格的中心點(diǎn),而該點(diǎn)的像素點(diǎn),則由特征圖上相鄰的 4?個特征點(diǎn)使用雙線性插值來得到。然后對每個網(wǎng)格都使用最大值池化

5:輸出尺寸大小為 7*7?的特征圖


10、1*1?卷積的作用

1*1?卷積的作用是按特征圖的跨通道來融合特征,同時保持特征圖的平面結(jié)構(gòu),以及可以改變通道數(shù),實(shí)現(xiàn)升維和降維。而且它還可以輸入任意尺寸的特征圖,所以也可以用來取代全連接層,保持特征圖的平面結(jié)構(gòu)。


11、坐標(biāo)偏移量的計(jì)算公式

假設(shè)真值的坐標(biāo)中心點(diǎn)為?x^{*}, y^{*},寬和高分別為?w^{*}, h^{*},而?anchor?的坐標(biāo)中心點(diǎn)為?x_a, y_a,寬和高分別為?w_a, h_a

s_x = (x^* - x_a) / w_a

s_y = (y^* - y_a) / h_a

s_w = log(w^*/w_a)

s_h = log(h^*/h_a)

其中?除以?w_a、h_a?的目的是為了進(jìn)一步限制偏移量的范圍,便于預(yù)測


12、Faster?RCNN?的優(yōu)化點(diǎn)


13、非極大值抑制(NMS)的具體過程

非極大值抑制是將標(biāo)記為同一個類別的候選框中,只保留概率大的候選框

第一步:對于同一個類別的候選框,取概率最大的候選框?yàn)?A

第二步:計(jì)算?A?跟其他候選框之間的?IoU,如果?IoU?超過閾值則剔除掉,反之則保留

第三步:在保留下來的候選框中選擇概率最大的候選框?yàn)?B,重復(fù)第二步

第四步:重復(fù)第三步,直到所有的候選框都不可再被剔除


14、SoftNMS?的具體過程

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容