1. 程式人生 > >faster rcnn 原理解析

faster rcnn 原理解析

faster rcnn 網路結構圖

        Faster cnn 大概思路就是,首先是輸入一張影象,然後將影象固定最小邊為600的大小,保證了影象不發生形變,然後經過一個訓練好的網路,比如vgg或者是其他的,得到特徵圖,然後有兩條路,一個是輸入RNP網路,經過一個3*3的卷積,RPN網路也有兩條路,一條是直接經過一個1*1的卷積,啟用函式使用linear,用於迴歸,因為框有4個座標,(dx,dy,dw,dh),其實這裡迴歸的是一種變換,我們假設總共有N種候選框,那麼輸入的卷積通道數就是4A,另外一條是二分了網路,用於區分每個anchor是含有目標還是不含有目標,如果是bg(背景)那麼輸入就是

0,否則就是1,當然sigmoid輸入的是概率值。然後經過proposal,這個網路坐的事情,首先是將我們迴歸得到的變換用於我們的特徵圖上每個點的候選框,這裡其實需要注意的是,我們的框是一直都在的,就是在每個特徵圖上的每個點,我們用這個點作為矩陣框的中點,然後根據不同的事先給定的框的長和寬,所以proposal就是講迴歸得到的框的變換用在候選框上,因為這樣會有很對框,比如我們最後特徵圖大小是M*N,總共有九種候選框,那麼最後的框就是M*N*9個,這樣其實裡面就有很多事沒用的,我們將經過迴歸變換後的框和我們真實的框進行非極大值抑制,最終只選擇256個框,他的具體做法就是,給定一個閾值,然後我們把求其他框和概率最大的的一個交併比,選擇大於閾值的,這樣,最後選到
256個框,然後我們把這些框和我們真實的框,也就是GT,去求一個交併比,刪除那些交併比小於最小的閾值的,比如小於0.3的捨去,0.3-0.7直接為bg,大於0.7的就是正例(pos),然後在經過roi poling,這個層的作用主要是首先提取框裡面的影象,就是把我們anchor裡面的影象提取出來,因為不同框大小不一樣,而我們知道,全連線層要求我們的大小輸入時一致的,為了統一大小,roi pooling是這樣做的,它是將任意一張影象切分為7*7的小塊,每一個小塊使用max pooling,那麼最後輸出大小就是7*7,這樣就統一了輸入大小不一致得問題,然後從到分類的網路,用分類的網路來分類和迴歸。

Anchor的生成

    Anchor是這樣的,我麼實現給定不同尺度的框,比如scale ==[128,256,512]長寬比[1;1,1:2,2:1],那麼長寬和長寬比就可以11兩兩組合生成九種框,然後是在特徵圖上沒一個點,把這個點當做是矩形框的中心,生成這九種長寬不同的框。


上圖左邊就是一個特徵圖上的點方法了的anchor,右邊就是特徵圖上一個點。

Faster rcnn 的損失函式



其實他的變換思想就是,現將我們的框的中心點平移到目標框的中心(這裡的目標框其實就是gt,或者是預測框),然後再將我們的長和寬進行伸縮變換,所以前面的叫做平移變換,後面的是伸縮變換。然後我們也可以看出來,我們的迴歸是這樣迴歸的,是讓我們預測的框和anchor直接的變換與真實框與anchor直接的變換的損失最小,損失函式就是smooth函式。

分類函式的損失就是softmax損失,也叫互熵損失,對於RPN的分類是二分類問題,而對於分類層是一個多分類問題。