Roi Pooling層caffe原始碼解讀

2021-08-11 14:42:05 字數 1874 閱讀 3358

在看fasterrcnn以及和maskrcnn的時候,發現自己對fasterrcnn的roi_pooling層的原理還是不是很明白,之前只是知道roi_pooling是將rpn輸出的乙個roi的區域對映成乙個固定大小的map,再送入後面的分類層進行分類。最近看了下roi_pooling層的原始碼,頓悟了。

根據看caffe原始碼的原則,先看該成在caffe.proto檔案中的定義:

// message that stores parameters used by roipoolinglayer

message roipoolingparameter

從這裡可以看出,在網路定義檔案中定義roi_pooling層需要設定3個引數,分別是pooled_h 、pooled_w 以及spatial_scale 的值。前2個值分別為pool後的map的寬度和高度,比如在fasterrcnn中即為6*6,後面這個值

spatial_scale 為從原圖到pool前的feature map的比例的大小,因為rpn輸出的roi的座標是基於原圖的,轉換到feature map,是有乙個比例的。

再來看看在fasterrcnn中,roi_pooling層的定義:

#*****==== rcnn **********==

layer

}

相關的引數設定和caffe.proto中定義的一致。

在這裡,主要是關注其前向傳播的函式。

namespace caffe 

template

void roipoolinglayer::reshape(const

vector

*>& bottom,

const

vector

*>& top)

template

void roipoolinglayer::forward_cpu(const

vector

*>& bottom,

const

vector

*>& top)

// 求最大值

for (int h = hstart; h < hend; ++h) }}

}}

//feature map 的乙個channel遍歷完後,batch_data指標feature map的下乙個channel

batch_data += bottom[0]->offset(0, 1);

//feature map 的乙個channel遍歷完後,top_data指標自身的下乙個channel

top_data += top[0]->offset(0, 1);

//argmax_data 同上

argmax_data += max_idx_.offset(0, 1);

}// increment roi data pointer,轉到下乙個roi區域

// 轉到下乙個roi的位置

bottom_rois += bottom[1]->offset(1);

}}

需要注意以下幾點:

1、輸入roi_pool前的feature map是乙個batch_size 的。

2、輸出的top的blob的形狀引數如下: num * c* h * w,其中num與roi區域的個數是一致的。c的值和輸入feature map的通道數是一致的, h和w分別是設定的值。

3、注意3個函式,celi函式向上取整,round函式四捨五入取整,floor函式向下取整。比如資料2.7,三個函式的取值分別為: 3、 3、 2。

4、實際在執行maxpool的時候,是對feature map上的每個通道分別執行max的操作的,最後輸出的top的通道和輸入feature map的c通道數是一致的。

ROI Pooling層簡單理解

目標檢測typical architecture 通常可以分為兩個階段 1 region proposal 給定一張輸入image找出objects可能存在的所有位置。這一階段的輸出應該是一系列object可能位置的bounding box。這些通常稱之為region proposals或者 reg...

ROIPooling和ROIAlign的特點和區別

一 roipooling 這個可以在faster rcnn中使用以便使生成的候選框region proposal對映產生固定大小的feature map 先貼出一張圖,接著通過這 釋roipooling的工作原理 針對上圖 1 conv layers使用的是vgg16,feat stride 32 ...

RoIPooling與RoIAlign的區別

通過對faster rcnn的學習我媽了解的rolpooling可以使生成的候選框region proposal對映產生固定大小的feature map 先貼出一張圖,接著通過這 釋roipooling的工作原理 針對上圖 1 conv layers使用的是vgg16,feat stride 32 ...