【目标检测】Fast R-CNN

前言

原论文地址:Fast R-CNN

Faster R-CNN合集:

  1. 【目标检测】R-CNN
  2. 【目标检测】Fast R-CNN
  3. 【目标检测】Faster R-CNN

总体架构

在这里插入图片描述

算法流程

  1. 一张图像生成1K~2K个候选区域(使用Selective Search方法)
  2. 将图像输入网络得到相应的特征图,将SS(Selective Search)算法生成的候选框投影到特征图上获得相应的特征矩阵
  3. 将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果
    (ROI:Region of Interest 感兴趣区域)

与R-CNN的不同

  在R-CNN中,我们分别训练了SVM分类器(预测目标所属的类别)和BBox回归器(调整候选区域边界框)。而在Fast R-CNN中,将这两种功能结合到一个网络当中,这就不用单独训练分类器和回归器了。

  R-CNN依次将每个候选框区域输入到卷积神经网络中得到特征(如下图),这就是需要2000次正向传播,但这2000个候选框中有大量冗余,很多区域都重叠了,计算一次就可以的事情R-CNN一直在重复地做。

R-CNN

  Fast R-CNN将整张图像送入网络,紧接着从特征图像上提取相应的候选区域(参考SPP Net)。这些候选区域的特征不需要再重复计算

Fast R-CNN

训练数据的采样

通过SS算法可以得到2000个候选框,但在训练时只使用一小部分就可以了。且数据分为正样本和负样本,正样本就是候选框中确实存在我们需要检测的目标,负样本就是候选框没有我们要检测的目标(可以理解成背景)。

  • 为什么需要分正负样本?
  • 假如我想要判别猫和狗,若全是正样本,数据集样本不平衡,猫的样本数量远大于狗,那么训练出来的网络在预测时就更偏向于判定为猫,这样肯定是不对的。放到目标检测中,若全是正样本,即便候选框中是一个背景,网络也会强行把它认为成一个我们检测的一个类别中。

在原论文中,作者提出对于每张图片,从2000个候选框中采集64个候选区域。对于每个候选区域,它与真实框(ground-truth)的 IoU 大于0.5,那么就把他划分成正样本,把与每个真实框的 IoU 的最大的值在0.1~0.5的认定为负样本。

RoI pooling

在这里插入图片描述
有了候选区域样本之后,使用RoI pooling将每个样本缩放成统一的尺寸。

如下图,将图片划分成7×7等分,对于每一小块区域执行最大池化(max pooling)操作,这样就得到了一个7×7的特征矩阵。无论候选区域的尺寸是多大的,都将缩放成7×7矩阵,这就不限制输入图像的尺寸(与R-CNN不同,R-CNN要求输入图像尺寸为227×227)。

在这里插入图片描述

分类器

在这里插入图片描述
输出 N+1 个类别的概率(N为检测目标的种类,1为背景)共 N+1 个结点。分类器即上图中蓝色框部分,全连接层(FC)即需要 N+1 个结点。

边界框回归器

在这里插入图片描述
输出对应 N+1 个类别的候选边界框回归参数 ( d x , d y , d w , d h ) (d_x,d_y,d_w,d_h) (dx,dy,dw,dh),共 (N+1)×4 个结点。

那么怎么用回归参数来预测的呢?

\quad\quad\quad

其中, P x , P y , P w , P h P_x,P_y,P_w,P_h Px,Py,Pw,Ph分别为候选框的中心 x , y x,y x,y坐标以及宽高
G x ^ , G y ^ , G w ^ , G h ^ \hat{G_x},\hat{G_y},\hat{G_w},\hat{G_h} Gx^,Gy^,Gw^,Gh^分别为最终预测的边界框中心 x , y x,y x,y坐标以及宽高

根据上面的公式可以看出 d x , d y d_x,d_y dx,dy就是用来调整边界框中心位置的, d w , d h d_w,d_h dw,dh用来调整宽高,从而把黄色区域调整到红色区域。

Multi-task loss

在这里插入图片描述
p p p是分类器预测的 softmax 概率分布 p = ( p 0 , . . . , p k ) p=(p_0, ..., p_k) p=(p0,...,pk) p 0 p_0 p0即是预测为背景的概率,以此类推
u u u对应目标真实类别标签
t u t^u tu对应边界框回归器预测的对应类别 u u u的回归参数 ( t x u , t y u , t w u , t h u ) (t_x^u,t_y^u,t_w^u,t_h^u) (txu,tyu,twu,thu)
v v v对应真实目标的边界框回归参数 ( v x , v y , v w , v h ) (v_x,v_y,v_w,v_h) (vx,vy,vw,vh)


分类损失:

在这里插入图片描述
使用交叉熵损失,原文使用如下公式:
在这里插入图片描述
p p p是分类器预测的 softmax 概率分布 p = ( p 0 , . . . , p k ) p=(p_0, ..., p_k) p=(p0,...,pk) p 0 p_0 p0即是预测为背景的概率,以此类推
u u u对应目标真实类别标签


交叉熵损失:
在这里插入图片描述
假设真实标签的one-hot编码是[0,0,…,1,…,0],预测的softmax概率为[0.1,0.3,…,0.4,…,0.1],那么 L o s s = − log ⁡ ( 0.4 ) Loss=-\log(0.4) Loss=log(0.4)


边界框回归损失:

在这里插入图片描述
u u u对应目标真实类别标签
t u t^u tu对应边界框回归器预测的对应类别 u u u的回归参数 ( t x u , t y u , t w u , t h u ) (t_x^u,t_y^u,t_w^u,t_h^u) (txu,tyu,twu,thu)
v v v对应真实目标的边界框回归参数 ( v x , v y , v w , v h ) (v_x,v_y,v_w,v_h) (vx,vy,vw,vh)

其中, [ u ≥ 1 ] [u\geq1] [u1]是艾佛森括号,当 u ≥ 1 u\geq1 u1时,这个值为1, u < 1 u<1 u<1时即为0。 u ≥ 1 u\geq1 u1时,说明这是检测目标中的一个类别,这就是正样本; u < 1 u<1 u<1时(即 u = 0 u=0 u=0),就说明是负样本,那么损失函数中就没有边界框回归损失这一项。

至于 ( v x , v y , v w , v h ) (v_x,v_y,v_w,v_h) (vx,vy,vw,vh)是如何计算的,同样使用到了下图。
\quad\quad\quad
v x = ( G x − P x ) / P w v_x=(G_x-P_x)/P_w vx=(GxPx)/Pw,同理 v y = ( G y − P y ) / P h v_y=(G_y-P_y)/P_h vy=(GyPy)/Ph
v w = ln ⁡ ( G w / P w ) v_w=\ln(G_w/P_w) vw=ln(Gw/Pw),同理 v h = ln ⁡ ( G h / P h ) v_h=\ln(G_h/P_h) vh=ln(Gh/Ph)


在这里插入图片描述
展开,上式 = s m o o t h L 1 ( t x u − v x ) + s m o o t h L 1 ( t y u − v y ) + s m o o t h L 1 ( t w u − v w ) + s m o o t h L 1 ( t h u − v h ) =smooth_{L1}(t_x^u-v_x)+smooth_{L1}(t_y^u-v_y)+smooth_{L1}(t_w^u-v_w)+smooth_{L1}(t_h^u-v_h) =smoothL1(txuvx)+smoothL1(tyuvy)+smoothL1(twuvw)+smoothL1(thuvh)

在这里插入图片描述
关于损失函数的学习,可以参考:回归损失函数1:L1 loss, L2 loss以及Smooth L1 Loss的对比

Fast R-CNN框架

在这里插入图片描述
对比于R-CNN的四部分框架,Fast R-CNN只包含两部分。第一部分就是SS算法获取候选框,第二部分将特征提取、分类、BBox回归融合到一个CNN网络

在这里插入图片描述


参考来源:1.1Faster RCNN理论合集

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

friedrichor

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值