faster rcnn fpn_FPN+RetinaNet

FPN:Feature Puramid Networks for Object Detection

11.18

在学习RetinaNet的过程中也涉及到FPN部分,虽然现在其作用已经厘清,但是还是想把原文看看,大概两周没有看论文了,要么撸代码,要么做一些比较细碎的工作去了,今天看半天,总是不能静下心来,不过今天熬,我也得熬完这篇文章,因为拖到第二题我会更不可能好好学习了。

11.19

说话不负责任真好,我反正昨天没熬下来把文章给看了。

仔细思考了一下,为什么检测小目标一直都是比较难得,比如一个32x32大小的目标,在经过ResNet的5个stage之后,可能就只有1x1的大小了,这对识别小目标而言,难度就增大了。那你就会说,我们不经过5个stage嘛,我们在第二个stage就可以进行检测了,这种说法没毛病,但是此时学到的特征可能又是一些比较表层的,比如颜色啦,线条啦,更深的语义信息又没有学到,此时不说是小物体了,可能大物体的检测都是有问题的。那作者就会比较聪明了嘛,他就会想我如果把浅层的信息和深层结合起来,是否就能够增强对目标的检测了呢。然后就有了FPN辣。它的长相就是下面这个样子:

341d12625413596d60de0bf367082fc1.png
FPN的简单架构

其实看它的长相也不复杂嘛,左边就是平常的网络架构啊(Bottom-up pathway),右边就是FPN嘛(Top-down pathway),而且如果仔细想想,右边这个架构其实很融合和别的网络架构进行融合的。

Bottom-up Pathway: 其实就是网络中的骨干网络,比如ResNet有5个stage,每个stage最后的输出就是金字塔的一层,记作{C2,C3,C4,C5},每一层所对应的stride=[4,,8,16,32]。

Top-down Pathway:higher layer层经过上采样,会和lower layer层进行相加,相加的这个操作就将低层信息和高层信息进行了一次融合。但是在融合之前,要先经过1x1的卷积将通道变为256,然后进行相加,之后再进行一次3x3的卷积操作,这里用3x3再 进行卷积一次,可以减少错误识别。(我仔细思考了一下,两张图直接进行相加这个操作,得到的结果感觉会有些生硬叭,3x3卷积说到底就是个平滑的过程,会将相加的结果再润色处理一下啥的,结果会更好)

lateral connections: 侧边相连,就是将higher layer 上采样和lower layer进行相加的操作。

因为我最终还是没有将FPN在Faster RCNN的应用看完,但是,我会补充RetinaNet,它里面就有FPN辣,而且框架的代码我还手撕过,写起来我会开心点。just for fun~~~

RetinaNet:Focal Loss Dense Object Detection

理论:

作者认为one-stage之所以精度上次于two-stage,很大的原因是因为类别不平衡。

本来嘛,一张图中的目标可能就是远远少于背景信息的,当输入图片经过一系列卷积得到feature map之后,我们在每一个cell里面都产生9个anchor,但是大多数的anchor所包含的信息都是背景信息,但是这些包含背景信息的anchor会加入到loss权重之中,导致loss学习的时候就出现了误差。

作者认为RCNN精度高,是因为它在处理的过程中的操作使得正负样本尽量平衡了。第一阶段:Faster-RCNN是由RPN来产生anchor的,然后会将negative和IOU<0.3的negative都丢弃掉,这一步大大减少了易分的负样本;第二阶段:分类回归阶段又固定了正负样本比例,采用抽样的办法控制前景:背景=1:3的比例。然后在一定程度上又丢掉很多的难分负样本。

作者就在思考,有没有什么办法,即让网络是one-stage的,但是精度可以和RCNN比拟呢。然后facebook作者大大就对loss下手了。

先来看看原始交叉熵:(binary cross entropy)(用在分类层唷)

0987a02eadc7587d9b4d90d911cc3ddb.png
原始交叉熵

看上面这个式子,y=1就是目标,otherwise就是背景,y是真实标签,P是预测值;当y=1时,p就是估计类别是1时的概率,此时P越高,交叉熵越小,loss越小。当y=otherwise时,P是估计背景的概率,此时P越高,交叉熵越大,loss越大。这也就说明,对于易分类的negative class也会对loss占比大,而且易分类的negative class本身样本数就大,会很容易导致loss被易分类的negative class主导,从而学习不到太有用的信息。

然后作者就加了一个α去控制交叉熵的权重:

593c3c57615c0b08676089424cbfdd8b.png

α∈[0,1]之间,当Pt是negative class的估计概率,乘以小数之后,就会降低易分类的negative class对CEloss的占比,在交叉熵的基础上乘以一个小数,使得loss变小,α一定程度上平衡了正负样本之比。

最后一个阶段作者认为易分类样本在loss的占比太多而且主导了梯度下降的方向,没有去学习那些难分的样本,然后作者就提出Focal Loss:

37b5b9379fc0454e0aaffaa649f9e4ad.png
focal loss

γ∈[0.5, 5],当γ=2时,如果这个样本是易分负样本,那么Pt=1-P=0.9,那么(1-Pt)=0.1,最后的negative在loss上的权重就缩小了100倍;或样本是易分正样本Pt = P =0.9,(1-Pt)=0.1,权重也降低了100倍。反而对于那些难分样本来说,权重降得不是那么厉害,所以loss会被引导去学习难分的样本。

网络架构:

eb595614459c749e38fd935655dc96e1.png
RetinaNet

既然是要证明one-stage的AP也会达到two-stage的AP,整个架构使用的是ResNet+FPN,ResNet-50或ResNet-101都有5个stage,将第2~5个stage的最后输出作为特征金字塔的一层,写作{C2, C3, C4, C5},经过1x1卷积将通道数变为256后,还要通过3x3卷积来处理相加后的结果。大概过程如下图所示:

d8bdb13f50f0907df2fc5649f9ae23b1.png
FPN过程
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值