目标检测系列:faster rcnn

论文地址https://papers.nips.cc/paper/5638-faster-r-cnn-towards-real-time-object-detection-with-region-proposal-networks.pdf
faster rcnn是rcnn系列的第三部,提出了Region Proposal Network(RPN),将目标检测分为了两个阶段:

  1. 检测默认框是否有物体,注意只是检测是否有物体(也就是二分类),并不进行分类检测出有物体的默认框,并对坐标进行微调。
  2. 对1中的默认框再次进行回归和分类

在这里插入图片描述

1. 默认框的生成

RCNN采用的是selective search ,有个缺点速度太慢,于是作者借鉴了yolov1换个方式,更快的更全面的产生默认框,在论文中称作anchor,看上图的网络,输入图片是MxN,经过主干网络后得到特征图,假设此时的特征图高和宽分别为hxw,那么可以在每个像素点产生特征图,如下图,红色中心为一个像素点,那么在这个点会产生9个不同大小的特征框,其中有三个基准(128,256,512)大小的正方形,然后按照长宽比为 1 / 2 , 2 1/\sqrt2,\sqrt2 1/2 ,2 进行缩放,然后根据特征图一共产生hw9个anchor,也就是默认框,这足够装下各种大小的物体。

在这里插入图片描述

2.RPN

主干网络就不看了,这个可以用vgg16活着resnet,要知道的就是,经过主干网络,得到特征图的尺寸h,w=M//16,N//16,要理解RPN就要知道它是干什么的,相当于进行初步筛选,选择更有可能有物体的anchors,并进行微调,这部分分为上下两部分,上部分是用来分类的,在这里是个二分类任务,[1,0],认为有物体,[0,1]认为没有物体,因为要对每一个anchor都要进行预测,假设一共有 k = h ∗ w ∗ 9 k=h*w*9 k=hw9个anchors,那么最后上部分要预测的结果维度是2k,下面的网络当然是用来对anchor的xywh进行微调的,所以有9k个预测值。
在这里插入图片描述
这部分有个疑问哪些anchors是有物体,哪些没有呢?当然要用IOU进行判断,如果anchor和真实box的IOU大于0.7,那么认为有物体,而IOU<0.3则认为没有物体,如果IOU在二者之间,那么对损失函数没有影响,那么看一下这一部分的损失函数,整个faster rcnn有两个损失函数,RPN一个,后面的分类和回归有一个,但是训练的时候是在一块训练的
在这里插入图片描述
RPN的损失函数分为两部分,第一部分是分类损失,后者是坐标的损失,这里 N c l s = 256 N_{cls}=256 Ncls=256,是随机选出的,其中128个是正样本,128个负样本,也就是正负样例比1:1,这个操作是为了防止正负样例不均衡 L c l s L{cls} Lcls没啥可说的,就是softmax分类,而坐标损失,只计算有物体的anchor, λ \lambda λ是个平衡参数,在原文中是10,而 N r e g = 2400 N_{reg}=2400 Nreg=2400,假设输入的图片是1000x600,那么一共会有大约60x40x9=20k个anchors,如果设置阀值IOU=0.7,大于0.7的大约会有2000个左右,于是 N r e g N_{reg} Nregh和 N c l s N_{cls} Ncls会有这样的取值,这样2400/20=240和256差不多。还要注意个地方, L r e g ( t i , t i ∗ ) = s m o o t h ( t i , t i ∗ ) L_{reg}(t_i,t^*_i)=smooth(t_i,t^*_i) Lreg(ti,ti)=smooth(ti,ti),关于smooth的好处,当损失很大时,可以按照梯度为1进行下降,而当损失很小的时候按照梯度为x进行下降,不容易在波谷的地方波动,计算坐标损失的时候只计算正样本的位置。
在这里插入图片描述
s m o o t h ( x ) = { 1 2 x 2 , a b s ( x ) < 1 a b s ( x ) , a b s ( x ) > = 1 smooth(x)= \begin{cases} \frac{1}{2}x^2, abs(x)<1 \\ abs(x), abs(x)>=1 \end{cases} smooth(x)={21x2,abs(x)<1abs(x),abs(x)>=1
至于

3 fast rcnn

经过上面的rpn后,我们得到了大约2000个有物体的anchors,在这两千个anchors中选取正负样例,利用nms,选取计算这些anchors的得分,这个时候的阀值=0.5,大于的时候为正例,小于为负样例,这个过程结合rpn相当于难例挖掘的效果了,而在测试的时候,直接从其中选出nms的top300,这2000个左右的anchors的尺寸是对应原图M,N的,而要注意,在ROIPooling有两个输入,一个是RPN生成的大约2000个anchors,另一个是feature map,尺寸是mxn,因此我们需要将anchors对应到feature map上,映射规则很简单,(x,y,w,h)/16即可,然后进行roipling,这个就是把所有的anchors弄成同样大小的,因为图像的输入尺寸有很多可能,如果总是规范到同一个尺度,容易造成信息损失,在本文经过ROIPooling将每个anchor规范成7x7大小的特征图。
在这里插入图片描述
这一部分的损失函数和rpn几乎相同,只是在rpn中 N c l s = 256 N_{cls}=256 Ncls=256,而在fast rcnn为128
在这里插入图片描述

4.tensorflow训练源码结构

参考的faster rcnn源码:faster rcnn tf :https://github.com/endernewton/tf-faster-rcnn
源码解析:https://www.cnblogs.com/darkknightzh/p/10043864.html
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值