faster rcnn中rpn层关于前景背景的处理方式

在经过4个下采样层获得feature map之后,这个featuremap会分别做两次卷积,一个卷积用于做前景背景的分类,另一个用于做boungding box的回归。前者的outfeature 数量为一个像素点对应anchor的数量,后者为前者数量*4(xywh)。
本文分析前者。

define bg/fg classifcation score layer

    self.nc_score_out = len(self.anchor_scales) * len(self.anchor_ratios) * 2 # 2(bg/fg) * 9 (anchors)
    self.RPN_cls_score = nn.Conv2d(512, self.nc_score_out, 1, 1, 0)

在forward函数中

return feature map after convrelu layer

    rpn_conv1 = F.relu(self.RPN_Conv(base_feat), inplace=True)

get rpn classification score

    rpn_cls_score = self.RPN_cls_score(rpn_conv1)

下面重点来了
rpn_keep = Variable(rpn_label.view(-1).ne(-1).nonzero().view(-1))
首先获得label中不是-1的索引。
rpn_cls_score = torch.index_select(rpn_cls_score.view(-1,2), 0, rpn_keep)
这里把rpn_cls_score reshape成n*2的矩阵再按索引去查找。这个2就是指前景和背景的概率。说是binary_cross_entropy实际上下面用的函数是
self.rpn_loss_cls = F.cross_entropy(rpn_cls_score, rpn_label)
所以对于二分类要获得两个类的值。
永远记住不管是用nn.linear还是用torch.view方法,输出的元素个数都是tensor.shape[-1]

对于torchvision中的faster rcnn。用的是binary_cross_entropy_with_logits,处理方式是将rpn_cls_score flatten成1维的,然后按索引去做loss。

评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值