rcnn->fast->faster

感谢b站up【霹雳吧啦Wz】

一、RCNN

1.RCNN的流程

在这里插入图片描述

  1. 候选区域的生成:
    利用selective Search算法通过图像分割的方法得到一些原始区域,然后使用一些合并策略将这些区域合并,得到一个层次化的区域结构,而这些结构就包含着可能需要的物体。
  2. 对每个候选区域,使用深度网络提取特征
    将2000候选区域缩放到227x227像素,接着将候选区域输入事先训练好的AlexNet CNN网络获取4096维的特征得到2000×4096维矩阵(注:最后输出20006464,拉平变成2000*4096)。
  3. 特征送入每一类的SVM分类器,判定类别
    将2000×4096维特征与20个SVM组成的权值矩阵4096×20相乘,获得2000×20维矩阵表示每个建议框是某个目标类别的得分。分别对上述2000×20维矩阵中每一列即每一类进行非极大值抑制剔除重叠建议框,得到该列即该类中得分最高的一些建议框。(注意,会有2000*20个候选框,每个类别2000个)
  4. 使用回归器精细修正候选框位置
    对NMS处理后剩余的建议框进一步筛选。接着分别用20个回归器对上述20个类别中剩余的建议框进行回归操作(回归给出了(中心点x的偏移量,中心点y的偏移量,w的缩放系数,h的缩放系数)),最终得到每个类别的修正后的得分最高的bounding box。
    如图,黄色框口P表示建议框Region Proposal,绿色窗口G表示实际框Ground Truth,红色窗口G表示Region Proposal进行回归后的预测窗口,可以用最小二乘法解决的线性回归问题。
    在这里插入图片描述

2.RCNN的缺点

  1. 测试速度慢(ss提取还会有很多冗余操作)
  2. 训练速度慢
  3. 训练所需空间大

二、Fast-RCNN

1.Fast RCNN流程

在这里插入图片描述

  1. 生成候选区域(同rcnn)
  2. 一次性计算整张图的图像特征
    对于rcnn:每个候选区输入一个神经网络(2000个就2000次)
    对于fast rcnn:一张图直接输入一个神经网络得到特征图,然后取出对应候选区域的特征,注意,此时随机采样了ss候选区域一部分作为样本输入。
  3. roi pooling:
    在这里插入图片描述

3.训练时正负样本的判断

正样本:预测框与GT的iou>0.5
负样本:0.1<预测框与GT的iou<0.4

4.损失函数:

分类损失:log损失, L c l s ( p , u ) = − l o g ( p u ) L_{cls}(p,u)=-log(p_u) Lcls(p,u)=log(pu),其中,p:预测的概率分布,u,真实类别标签
边界框回归损失: L l o c ( t u , v ) = ∑ i ∈ ( x , y , w , h ) s m o o t h L 1 ( t u − v i ) L_{loc}(t^{u},v)=\sum_{i\in(x,y,w,h)} smooth_{L_{1}}(t^{u}-v_i) Lloc(tu,v)=i(x,y,w,h)smoothL1(tuvi)
其中, s m o o t h L 1 = { 0.5 x 2 , i f ∣ x ∣ < 1 ∣ x ∣ − 0.5 , 其 他 smooth_{L_{1}}=\left\{\begin{matrix} 0.5x^2,if \left | x \right | <1\\ \left |x \right | -0.5 ,其他 \end{matrix}\right. smoothL1={0.5x2,ifx<1x0.5,,其中, t u t^{u} tu对应边界框回归器预测的对应类别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 x , v y , v w , v h ) (v_{x},v_{y},v_{w},v_{h}) (vx,vy,vw,vh)
对于v是用G往回归器代,例如对于 v x , v x = ( G x − P x ) / P h v^{x},v^{x}=(G_{x}-P_{x})/P_h vx,vx=(GxPx)/Ph
其他: [ μ ≥ 1 ] [\mu\ge1] [μ1]为艾弗森括号,表示 μ ≥ 1 \mu\ge1 μ1时为1,其他为0。
λ \lambda λ为边界框损失系数

在这里插入图片描述
在这里插入图片描述

三、Faster-RCNN(RPN+fast-rcnn)

1.Faster-RCNN流程

Faster R一CNN算法流程可分为3个步骤:

  • 将图像输入网络得到相应的特征图
  • 使用RPN结构生成候选框,将RPN生成的候选框投影到特征图上获得相应的特征矩阵
  • 将每个特征矩阵通过ROI pooling层缩放到7x7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果

2.RPN

step 1:用anchor滑动生成候选框
对于特征图,使用k个anchor在特征图上进行滑动,每个anchor生成2组(一组为类别以区分前后景,不区分类别,参数量为2;一组为回归,参数量为4),256为backbone的输出通道数。
faster rcnn的anchor:3种尺寸: 12 8 2 , 25 6 2 , 51 2 2 128^2 , 256^2,512^2 1282,2562,5122 3种比例:{1:1,1:2,2:1},故而有9种anchor
问:为什么小的感受野的可以预测大物体?(如512*512的anchor为什么可以预测更大的物体?)
答:通过一个小的感受野去预测一个比它大的目标边界框是有可能的,比如通过经验去看物体的一部分,就能大概的猜出这个目标完整的位置区域了。而且在实际使用过程中,这个方法也确实是有效的。

step 2 :忽略跨边界的anchor ,对剩下的候选框进行基于候选框 c l s cls cls得分进行NMS,iou设为0.7,得到最后的候选框

step 3:对于剩下的候选框,选取128个正样本,128个负样本,当正样本数<128时,负样本数为256-正样本数

在这里插入图片描述

3.RPN正负样本的判断

1)候选框与真值进行iou,大于0.7的即为正样本
2)当1)获取的正样本数少于128时,取剩余与GT相交的iou最大的作为正样本

4.RPN损失函数:

在这里插入图片描述

4.1分类损失

分类损失:原文使用log损失 L c l s = − l o g ( p i ) L_{cls}=-log(p_i) Lcls=log(pi) p i p_i pi表示第i个anchor预测为真实值的概率,有些地方改进为二值交叉熵损失,此时输出为k个score,loss为: L c l s = − [ p i ∗ l o g ( p i ) + ( 1 − p i ∗ ) l o g ( 1 − p i ) ] L_{cls}=-[p_{i}^{*}log(p_i)+(1-p_{i}^{*})log(1-p_i)] Lcls=[pilog(pi)+(1pi)log(1pi)],当 p ∗ p^* p为正样本时为1,负样本为0.

4.2 边界框回归损失

在这里插入图片描述

5.Faster RCNN训练

在这里插入图片描述

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值