FasterRcnn RoiPooling(Pytorch版本)部分幾個問題的解析

FasterRcnn RoiPooling(Pytorch版本)部分幾個問題的解析:

(1)lib/model/roipooling文件夾中幾個子文件夾的內容:

          faster rcnn pytorch中的roi pooling簡介

          簡述:

              1)src文件夾下是C和CUDA版本的源碼,其中roi_pooling的操作的前向傳播有C和CUDA版本,反向傳播只有CUDA版本;

              2)ext文件夾下存儲src文件夾中C/CUDA代碼編譯後的文件的,編譯後的文件可以被Funcitons中的roi_pool.py調用;

              3)Functions文件夾下的roi_pool.py繼承了torch.autograd.Function類,實現了Roi Pooling層的foward()和backward()函數。

              4)Modules文件夾下的roi_pool.py繼承了torch.nn.Modules類,引用了Functions.roi_pool.py,實現了對Roi Pooling層的封裝,使Roi Pooling層可以和ReLU層等一樣被使用。

 

(2)RoiPooling和RoiAlign的區別:

          RoiPooling和RoiAlign的區別

          你真的學會Roi Pooling了嗎?

          簡述:

              在Roi Pooling中,當Proposals從原圖映射到特徵圖,又從特徵圖上映射到固定大小時,需要進行兩次下采樣,當除得的結果不爲整數時,Poi Pooling在兩次計算過程中,分別對計算結果中的浮點數進行了量化取整操作,最終對各個小區域進行最大池化。這樣計算造成的像素偏差勢必會對後層的迴歸定位產生影響。

              而Roi Align對這個過程進行了一些改進,在兩次計算過程中保留浮點數的計算結果,在最大池化前通過雙線性插值法計算計算各個小區域內每塊(如2*2塊)中心位置的像素值,再對各個小區域進行最大池化。

              當檢測大目標時兩種方法相差不大,但檢測小目標時,Roi Align更加精準一些。

 

(3)在roi_pooling.py中爲何用ctx代替常見的self,如下所示。

def __init__(ctx, pooled_height, pooled_width, spatial_scale):

          pytorch中self與ctx的區別

          簡述:

             ctx是context的縮寫, 翻譯成"上下文/ 環境",ctx專門用在靜態方法中;而self指的是實例對象;

             ctx用在靜態方法中, 調用時不需要實例化對象, 直接通過類名就可以調用, 所以self在靜態方法中沒有意義;

             自定義的forward()方法和backward()方法的第一個參數必須是ctx;,ctx可以保存forward()中的變量,以便在backward()中繼續使用;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章