RCNN(Region with CNN feature) -- Fast -- Faster

参考链接:霹雳吧啦b站

主要参考了b站霹雳吧啦的视频《深度学习目标检测篇》。



前言

R-CNN采用VGG-16作为backbone,突破了传统方法的性能瓶颈。Fast R-CNN大大提升了推理速度,并且性能提升了4%。Faster R-CNN将RPN模块与Fast R-CNN相结合进一步提升了推理速度。


R-CNN

在这里插入图片描述

根据上图,R-CNN一共可以分为4个步骤:

  1. 一张图像生成1k~2k个候选区域(Selective Search,SS).
  2. 对于每个候选区域的图像,均resize至227×227,然后(每个resize后的候选区域图像)送入CNN网络,输出时将特征进行展平(2000×4096)。
  3. 将特征送入每一类的SVM(4096×20)分类器,生成2000×20的特征矩阵。接着对矩阵中的每一列即每一类进行NMS,剔除重叠框。
  4. 然后剔除预测框与GT框IOU小于阈值的框。最后使用20个回归器对剩余预测框进行回归。

缺点

  1. 使用SS算法耗时,且一张图像内候选框之间存在大量重叠,提取特征冗余。
  2. 训练过程繁琐,训练速度慢。
  3. SVM和bbox回归训练需要将提取的候选框写入磁盘,需要的存储空间很大。

Fast R-CNN

在这里插入图片描述

根据上图,Fast R-CNN一共可以分为3步:

  1. 一张图像生成1K~2K个候选区域(SS生成)。
  2. 将整张原图输入到CNN网络当中(而R-CNN将所有候选区域输入到网络中),将SS算法生成的候选框投影到特征图上获得相应的特征矩阵。
  3. 将每个特征矩阵通过ROI Pooling层缩放至7*7,接着将特征图展平通过一系列全连接层得到预测结果。
  • 在训练过程中,并不是直接使用SS生成的全部候选区域。一般户使用64个候选区域,并且其中包含正样本(与目标GT的IOU大于0.5)和负样本。

输出:

  1. 分类器(softmax)输出N+1个类别概率(N为检测目标的种类,1为背景概率),共N+1个节点。
  2. 边界框回归输出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个节点。

在这里插入图片描述

Loss:
总损失为分类损失加边界框回归损失。
L ( p , u , t u , v ) = L c l s ( p , u ) + λ [ u ≥ 1 ] L l o c ( t u , v ) L(p,u,t^u,v)=L_{cls}(p,u)+λ[u≥1]L_{loc}(t^u,v) L(p,u,tu,v)=Lcls(p,u)+λ[u1]Lloc(tu,v)

其中 p p p为分类器预测的 softmax \text{softmax} softmax概率分布 p = ( p 0 , ⋅ ⋅ ⋅ , p k ) p=(p_0,···,p_k) p=(p0,⋅⋅⋅,pk) u u u为目标真实类别标签 u = ( 0 , ⋅ ⋅ ⋅ , 1 , 0 ) u=(0,···,1,0) u=(0,⋅⋅⋅,1,0) 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≥1] [u1]是一个艾弗森括号,当 u ≥ 1 u≥1 u1时,括号表达式的值为1,否则为0。即当有目标存在时, one-hot \text{one-hot} one-hot标签为1,此时才计算回归损失,否则当类别为背景时,不计算回归损失。

对于分类损失(多分类 softmax \text{softmax} softmax,所有输出概率和为1;二分类 sigmoid \text{sigmoid} sigmoid,各个输出节点概率输出互不相干):
L c l s ( p , u ) = − log  p u L_{cls}(p,u)=-\text{log} \ p_u Lcls(p,u)=log pu

对于回归损失
L l o c ( t u , v ) = ∑ i ∈ { x , y , w , h } s m o o t h L 1 ( t i u − v i ) L_{loc}(t^u,v)=\sum_{i \in \{x,y,w,h\}}smooth_{L1}(t_i^u-v_i) Lloc(tu,v)=i{x,y,w,h}smoothL1(tiuvi)
s m o o t h L 1 ( x ) = { 0.5 x 2 , if  ∣ x ∣ < 1 ∣ x ∣ − 0.5 , otherwise smooth_{L1}(x) = \begin{cases} 0.5x^2, & \text{if} \ |x| < 1 \\ |x|-0.5, & \text{otherwise} \end{cases} smoothL1(x)={0.5x2,x0.5,if x<1otherwise


Faster R-CNN

在这里插入图片描述

根据上图,可以将Faster R-CNN算法分为3个步骤:

  1. 将整张图像输入网络得到对应的特征图。
  2. 利用RPN结构生成候选框,然后将候选框投影至特征图上获得对应的特征矩阵。
  3. 将每个候选框特征矩阵通过ROI Pooling层缩放到7*7大小的特征图,接着将特征图展平通过一系列全连接层得到预测结果。

RPN

  • 对于一张1000×600×3的图像,大约有60×40×9(20k)个anchor,忽略跨越边界的anchor以后,剩下约6k个anchor。使用RPN生成的候选框之间同样存在大量重叠,此时基于候选框的 c l s cls cls得分,采用NMS,IOU设为0.7,这样每张图片只剩2k个候选框。
  • 训练RPN模块需要使用anchor,上一步说明剩余6k个anchor,此时需要从这些anchor中选取256个anchor,这些anchor中包含正负样本,当正样本不足128个时,使用负样本填充满足样本总量256个。
  • 正样本:(1) anchor与GT的IOU大于0.7。(2) 若没有满足条件(1)的,则选择与GT的IOU最大的anchor当做正样本;负样本:anchor与GT的IOU小于0.3。

Anchor Size
三种尺度(面积):{ 12 8 2 , 25 6 2 , 51 2 2 128^2,256^2,512^2 1282,2562,5122},三种比例{ 1 : 1 , 1 : 2 , 2 : 1 1:1,1:2,2:1 1:1,1:2,2:1},则可生成9种anchor size:

128×128(16384)256×256(65536)512×512(262144)
1:1128×128256×256512×512
1:290×181181×362362×724
2:1181×90362×181724×362

LOSS
RPN Multi-task loss:
L ( { p i } , { t i } ) = 1 N c l s ∑ i L c l s ( p i , p i ∗ ) + λ 1 N r e g ∑ i p i ∗ L r e g ( t i , t i ∗ ) L(\{p_i\},\{t_i\})=\frac{1}{N_{cls}}\sum_iL_{cls}(p_i,p_i^*)+λ\frac{1}{N_{reg}}\sum_ip_i^*L_{reg}(t_i,t_i^*) L({pi},{ti})=Ncls1iLcls(pi,pi)+λNreg1ipiLreg(ti,ti)
其中 p i p_i pi表示模型预测的第 i i i anchor \text{anchor} anchor中有前景的概率, p i ∗ p_i^* pi表示真实情况第 i i i anchor \text{anchor} anchor是否含有目标,若有其值为1,否则其值为0。 t i t_i ti表示预测的目标框相对于第 i i i anchor \text{anchor} anchor的偏移量, t i ∗ t_i^* ti表示 G T GT GT框相对于第 i i i anchor \text{anchor} anchor的偏移量(利用两个相较于anchor的偏移量计算loss)。 N c l s N_{cls} Ncls表示一个 mini-batch \text{mini-batch} mini-batch中的所有样本数量(256), N r e g N_{reg} Nreg表示特征图像素个数(不包含channel,约2400)。
L c l s ( softmax ) L_{cls}(\text{softmax}) Lcls(softmax):
L c l s = − log ( p i ) L_{cls}=-\text{log}(p_i) Lcls=log(pi)

L r e g L_{reg} Lreg:
L r e g ( t i , t i ∗ ) = ∑ i s m o o t h L 1 ( t i − t i ∗ ) L_{reg}(t_i,t_i^*)=\sum_{i}smooth_{L1}(t_i-t_i^*) Lreg(ti,ti)=ismoothL1(titi)
s m o o t h L 1 ( x ) = { 0.5 x 2 , if  ∣ x ∣ < 1 ∣ x ∣ − 0.5 , otherwise smooth_{L1}(x) = \begin{cases} 0.5x^2, & \text{if} \ |x| < 1 \\ |x|-0.5, & \text{otherwise} \end{cases} smoothL1(x)={0.5x2,x0.5,if x<1otherwise
回归损失的示意图如图所示:

在这里插入图片描述
其中,偏移量 t i = [ t x , t y , t w , t h ] t_i=[t_x,t_y,t_w,t_h] ti=[tx,ty,tw,th]与偏移量 t i ∗ = [ t x ∗ , t y ∗ , t w ∗ , t h ∗ ] t_i^*=[t_x^*,t_y^*,t_w^*,t_h^*] ti=[tx,ty,tw,th]的计算如上图所示。


FPN

在这里插入图片描述

特征金字塔结构,通过融合不同层的特征增强表征能力。最后输出的浅层P2由于保留了更多的细节信息用于预测小目标,深层P5/P6用于预测大的目标。

RetinaNet

在这里插入图片描述正负样本匹配

  1. 使用 anchor \text{anchor} anchor G T GT GT IOU \text{IOU} IOU计算,当 IOU ≥ 0.5 \text{IOU}≥0.5 IOU0.5时,当前 anchor \text{anchor} anchor被当做正样本;而当 IOU < 0.4 \text{IOU}<0.4 IOU<0.4时时,当前 anchor \text{anchor} anchor被当做负样本,其余的则被舍弃。
  2. RetinaNet使用 FCOS Loss \text{FCOS Loss} FCOS Loss
  • 13
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值