faster rcnn源码解析Word格式文档下载.docx
- 文档编号:14721681
- 上传时间:2022-10-24
- 格式:DOCX
- 页数:7
- 大小:23KB
faster rcnn源码解析Word格式文档下载.docx
《faster rcnn源码解析Word格式文档下载.docx》由会员分享,可在线阅读,更多相关《faster rcnn源码解析Word格式文档下载.docx(7页珍藏版)》请在冰豆网上搜索。
#factory.py
fromdatasets.mydatasetimportmydataset
fordatasetin['
xxdataset'
]:
forsplitin['
train'
'
val'
test'
name='
{}_{}'
.format(dataset,split)
__sets[name]=(lambdasplit=split,dataset=dataset:
mydataset(split,dataset))
RPN
anchors生成
经过featureextraction后,featuremap的大小是(W/16,H/16),记为(w,h),然后每个featuremap每个点生成k个anchor,论文中设置了3中ratio,3种scale共产生了w*h*9个anchors
##array([[-83.,-39.,100.,56.],
#[-175.,-87.,192.,104.],
#[-359.,-183.,376.,200.],
#[-55.,-55.,72.,72.],
#[-119.,-119.,136.,136.],
#[-247.,-247.,264.,264.],
#[-35.,-79.,52.,96.],
#[-79.,-167.,96.,184.],
#[-167.,-343.,184.,360.]])
#先以左上角(0,0)为例生成9个anchor,然后在向右向下移动,生成整个featuremap所有点对应的anchor
anchors前背景和坐标预测
正如整体框架上画的那样,featuremap后先跟了一个3*3的卷积,然后分别用2个1*1的卷积,预测featuremap上每个点对应的9个anchor属于前背景的概率(9*2)和4个回归的坐标(9*4)
#rpn
self.rpn_net=nn.Conv2d(self._net_conv_channels,cfg.RPN_CHANNELS,[3,3],padding=1)
self.rpn_cls_score_net=nn.Conv2d(cfg.RPN_CHANNELS,self._num_anchors*2,[1,1])
self.rpn_bbox_pred_net=nn.Conv2d(cfg.RPN_CHANNELS,self._num_anchors*4,[1,1])
rpn=F.relu(self.rpn_net(net_conv))
rpn_cls_score=self.rpn_cls_score_net(rpn)#batch*(num_anchors*2)*h*w
rpn_bbox_pred=self.rpn_bbox_pred_net(rpn)#batch*(num_anchors*4)*h*w
∙
anchortarget
对上一步产生的anchor分配targetlabel,1前景or0背景or-1忽略,以便训练rpn(只有分配了label的才能计算loss,即参与训练)
无NMS
1.对于每个gtbox,找到与他iou最大的anchor然后设为正样本
2.对于每个anchor只要它与任意一个gtboxiou>
0.7即设为正样本
3.对于每个anchor它与任意一个gtboxiou都<
0.3即设为负样本
4.不是正也不是负的anchor被忽略
注意
正样本的数量由num_fg=int(cfg.TRAIN.RPN_FG_FRACTION*cfg.TRAIN.RPN_BATCHSIZE)控制,默认是256*0.5=128,即最多有128个正样本参与rpn的训练.假如正样本有1234个,则随机抽1234-128个正样本将其label设置为-1,即忽略掉,当然正样本也有可能不足128个,那就都保留下来.
负样本的数量由num_bg=cfg.TRAIN.RPN_BATCHSIZE-np.sum(labels==1),同理如果超额也为多余的忽略.
TRAIN.RPN_FG_FRACTION控制参与rpn训练的正样本的数量
注意在RPN阶段需要的配置参数都有RPN前缀,与后面的fastrcnn的参数区别开
#Maxnumberofforegroundexamples
#__C.TRAIN.RPN_FG_FRACTION=0.5
#Totalnumberofexamples
#__C.TRAIN.RPN_BATCHSIZE=256
#subsamplepositivelabelsifwehavetoomany
num_fg=int(cfg.TRAIN.RPN_FG_FRACTION*cfg.TRAIN.RPN_BATCHSIZE)
fg_inds=np.where(labels==1)[0]
iflen(fg_inds)>
num_fg:
disable_inds=npr.choice(
fg_inds,size=(len(fg_inds)-num_fg),replace=False)
labels[disable_inds]=-1
#subsamplenegativelabelsifwehavetoomany
num_bg=cfg.TRAIN.RPN_BATCHSIZE-np.sum(labels==1)
bg_inds=np.where(labels==0)[0]
iflen(bg_inds)>
num_bg:
bg_inds,size=(len(bg_inds)-num_bg),replace=False)
∙1
∙20
FastRCNN
proposal
对RPNchase的anchor进行处理,有NMS
1.首先利用4个坐标回归值对默认的w*h*9个anchor进行坐标变换生成proposal
2.然后利用前景概率对这些proposal进行降序排列,然后留下RPN_PRE_NMS_TOP_N个proposal训练是留下12000,测试是留下6000
3.对剩下的proposal进行NMS处理,阈值是0.7
4.对于剩下的proposal,只留下RPN_POST_NMS_TOP_N,训练是2000,测试是300
最终剩下的proposal即为rois了
proposaltarget
对留下的proposal(train:
2000,test没有这个阶段,因为测试不知道gt无法分配)分配targetlabel,属于具体哪一个类别,以便训练后面的分类器,下面以train阶段的某个图片为例即该张图片有2000个proposal,gt中含有15个类别的box(不含背景)(全库有20个类别)
#Minibatchsize(numberofregionsofinterest[ROIs])
#__C.TRAIN.BATCH_SIZE=128
#Fractionofminibatchthatislabeledforeground(i.e.class>
0)
#__C.TRAIN.FG_FRACTION=0.25控制fastrcnn中rois的正负样本比例为1:
3
num_images=1
rois_per_image=cfg.TRAIN.BATCH_SIZE/num_images#默认为128
fg_rois_per_image=int(round(cfg.TRAIN.FG_FRACTION*rois_per_image))#0.25*128
1.计算每个roi(proposal)与15个gtbox做iou,得到overlaps(2000,15),然后选择最大的iou作为这个roi的gtlabel(坑点:
gtbox的顺序不一定和label对应,一定要取gtbox的第4个维度作为label,因为可能包含15个gtbox,但是全库是有20中label的)
2.然后记roi与其targetlabel的ovlap>
TRAIN.FG_THRESH(0.5)的为fg,0.1
iffg_inds.numel()>
0andbg_inds.numel()>
0:
fg_rois_per_image=min(fg_rois_per_image,fg_inds.numel())
fg_inds=fg_inds[torch.from_numpy(npr.choice(np.arange(0,fg_inds.numel()),size=int(fg_rois_per_image),replace=False)).long().cuda()]
#......
#主要解读npr.choice(np.arange(0,fg_inds.numel()),size=int(fg_rois_per_image),replace=False)
#在np.arange(0,fg_inds.numel())随机取int(fg_rois_per_image)个数,replace=False不允许重复
roipooling
上一步得到了很多大小不一的roi,对应到featuremap上也是大小不一的,但是fc是需要fixedsize的,于是根据SPPNet论文笔记和caffe实现说明,出来了roipooling(spppoolingfroze前面的卷积只更新后面的fc,why见fastrcnn的2.3段解释的)
我主要参考了这篇博客Regionofinterestpoolingexplained,但是我感觉它的示意图是有问题的,应该有overlap的
1.
我们首先根据featuremap和原图的比例,把roi在原图上的坐标映射到featuremap上,然后扣出roi对应部分的feature(蓝色框为实际位置,浮点坐标(1.2,0.8)(7.2,9.7),四舍五入量化到红色框(1,1)(7,10))
i
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- faster rcnn源码解析 rcnn 源码 解析