Simple-Faster-RCNN源碼學習筆記

Simple-Faster-RCNN 源碼學習

項目github地址: https://github.com/chenyuntc/simple-faster-rcnn-pytorch

源碼


源文件: model/utils/bbox_tools.py

方法: loc2bbox(src_bbox, loc)

參數含義:

  1. src_bbox描述的是bbox的座標.
  2. loc表示的偏移(offsets)和縮放尺度(scales).

給出邊界框的偏移及縮放尺寸,該函數將表示轉換爲2D的圖像座標.
即通過對原邊界框src_bbox附加上loc對應的變換,從而得到新的邊界框.

先將座標表示法src_bbox轉換成中心表示法px,py,pw,php_x,p_y,p_w,p_h
再結合loc數組中的偏移和縮放dx,dy,dw,dhd_x,d_y,d_w,d_h
根據如下公式,做轉換並得到gx,gy,gh,gwg_x,g_y,g_h,g_w:
gy=dyph+pyg_y = d_yp_h+p_y
gx=dxpw+pxg_x = d_xp_w+p_x
gh=dhexp(ph)g_h = d_hexp({p_h})
gw=dwexp(pw)g_w = d_wexp({p_w})
得到中心表示法gx,gy,gh,gwg_x,g_y,g_h,g_w,以後,再經過一步轉換得到座標表示法dst_bbox.
dstx1=gx0.5gwdst_{x1} = g_x-0.5g_w
dstx2=gx+0.5gwdst_{x2} = g_x+0.5g_w
dsty1=gy0.5ghdst_{y1} = g_y-0.5g_h
dsty2=gy+0.5ghdst_{y2} = g_y+0.5g_h

方法: bbox2loc(src_bbox, dst_bbox)

參數含義:

  1. src_bbox描述的是第一個bbox的座標.
  2. dst_bbox描述的是第二個bbox的座標.

返回值: 返回從src_bbox變換到dst_bbox所需要的偏移和縮放信息.

方法: bbox_iou(bbox_a, bbox_b)

計算二者的IoU的值,即Area(AB)Area(AB)\frac{Area(A∩B)}{Area(A∪B)}.
如果參數aa的維度是(N,4)(N,4),參數bb的維度是(K,4)(K,4),那麼返回值的維度就是(N,K)(N,K)

方法: generate_anchor_base(base_size=16, ratios=[0.5, 1, 2],anchor_scales=[8, 16, 32])

生成多種(樣例是3種)不同面積(面積即爲base_size*anchor_scales)的Anchor, 每一種Anchor又會生成多種(樣例中是3種)具有不同長寬比的Anchor.(樣例中總Anchors數目是9種)

最後將生成的Anchor全部都統一到圖像座標表示法返回.


源文件: model/region_proposal_network.py

方法: _enumerate_shifted_anchor(anchor_base, feat_stride, height, width)

用於生成所有的Anchors,傳入anchor_base,對於特徵圖的每一個像素點位置,都生成A個Anchors,總共就是KAK*A個Anchors,其中K是像素點的數量.

返回值的形狀是(KA,4)(K*A,4)

方法:RegionProposalNetwork.forward(self, x, img_size, scale=1.)

經過1層333*3的卷積層,做一下語義變換,從而得到hh作爲特徵響應圖.
在這裏插入圖片描述
再後面特徵響應圖hh經過2個分支,分別產生Anchor的前景得分以及中心表示法座標.
在這裏插入圖片描述
其中rpn_fg_scores即Anchor的前景得分,rpn_scores是同時包含前景背景的得分,rpn_locs表示的是Anchor的中心表示法的座標.
在這裏插入圖片描述
上述代碼的意思是:對於Batch中的每一個樣本,把用RPN預測的Anchor座標,前景得分,圖像大小,以及所有Anchor座標,圖片大小等信息傳入proposal_layer中去,可以得到一些Anchor.
最後,該方法返回:rpn_locs,rpn_scores,rois,roi_indices,anchor等信息.


源文件: creator_tool.py

類: ProposalCreator

該類是可調用的,它接收RPN預測的一些Anchor的座標,前景分數,以及特徵圖所生成的所有Anchor等信息,並且用於生成RoIs.
在這裏插入圖片描述
爲了生成Proposal,先將anchor的中心表示法轉換爲圖像座標表示法.
爲了防止生成的Proposal越界,我們需做一個clip操作,使得最小值爲0,最大值爲對應維度的最大值.
在這裏插入圖片描述
隨後將寬度和高度小於閾值的proposal丟掉.
在這裏插入圖片描述
對所有proposal,按照其前景分進行排序,並且只取前n_pre_nms個.
隨後再進行non_maximum_supression非最大值抑制,就是說交叉度大的幾個Anchors只保留前景分最大的.

類: ProposalTargetCreator

在這裏插入圖片描述
對於給定的RoIs,對於每一個RoI,將其與所有的GT(Ground Truth)進行比對,求其IoUIoU,隨後選擇最大的


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