基于深度学习的目标检测框架总结

目前比较主流的基于深度学习的目标检测框架主要分为两类,一类是基于two-stage的方法,比如RCNN,Fast RCNN,Faster RCNN,将检测任务分为回归(location)和分类任务。还有基于one-stage的目标检测框架,例如YOLO/YOLOv2,SSD等,同时完成检测和回归任务。two-stage任务准确率较高,但是速度比较慢。one-stage能够达到实时性但是牺牲了精度。下面一次对这些进行一个系统的总结。

R-CNN,Fast R-CNN,Faster R-CNN关系表

R-CNN

RCNN的思想是利用SS算法提取候选框,然后利用CNN提取特征,最后利用SVM进行识别。

简单来说,RCNN使用以下四步实现目标检测:

  1. 在图像中确定约1000-2000个候选框
  2. 对于每个候选框内图像块,使用深度网络提取特征
  3. 对候选框中提取出的特征,使用分类器判别是否属于一个特定类
  4. 对于属于某一特征的候选框,用回归器进一步调整其位置

selective search算法

使用了Selective Search1方法从一张图像生成约2000-3000个候选区域。基本思路如下:

  • 使用一种过分割手段,将图像分割成小区域
  • 查看现有小区域,合并可能性最高的两个区域。重复直到整张图像合并成一个区域位置
  • 输出所有曾经存在过的区域,所谓候选区域

分割的部分采取了基于图的分割算法,其实这一部分没太看懂。。。

合并规则

优先合并以下四种区域:

  1. 颜色(颜色直方图)相近的
  2. 纹理(梯度直方图)相近的
  3. 合并后总面积小的
  4. 合并后,总面积在其BBOX中所占比例大的

第三条,保证合并操作的尺度较为均匀,避免一个大区域陆续“吃掉”其他小区域。

例:设有区域a-b-c-d-e-f-g-h。
较好的合并方式是:ab-cd-ef-gh -> abcd-efgh -> abcdefgh。 
不好的合并方法是:ab-c-d-e-f-g-h ->abcd-e-f-g-h ->abcdef-gh -> abcdefgh。

第四条,保证合并后形状规则。

左图适合合并,右图不适合合并

上述四条规则只涉及区域的颜色直方图、纹理直方图、面积和位置。合并后的区域特征可以直接由子区域特征计算而来,速度较快。

多样化与后处理

为尽可能不遗漏候选区域,上述操作在多个颜色空间中同时进行(RGB,HSV,Lab等)。在一个颜色空间中,使用上述四条规则的不同组合进行合并。所有颜色空间与所有规则的全部结果,在去除重复后,都作为候选区域输出。

RCNN解决的问题是利用selective search算法代替滑动窗口算法,提升了产生region proposal算法速度的问题。

Fast RCNN

Fast R-CNN框架与R-CNN有两处不同:

① 最后一个卷积层后加了一个ROI pooling layer;

② 损失函数使用了multi-task loss(多任务损失)函数,将边框回归直接加到CNN网络中训练。分类Fast R-CNN直接用softmax替代R-CNN用的SVM进行分类。

Fast R-CNN是端到端(end-to-end)的。

ROI Pooling

ROIs Pooling顾名思义,是Pooling层的一种,而且是针对RoIs的Pooling,他的特点是输入特征图尺寸不固定,但是输出特征图尺寸固定;[2]

什么是ROI呢?
ROI是Region of Interest的简写,指的是在“特征图上的框”;
1)在Fast RCNN中, RoI是指Selective Search完成后得到的“候选框”在特征图上的映射,如下图所示;
2)在Faster RCNN中,候选框是经过RPN产生的,然后再把各个“候选框”映射到特征图上,得到RoIs。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SUwNSnrd-1570719728424)(https://ws1.sinaimg.cn/large/005BVyzmgy1ftu89n0t9pj315s0dv461.jpg)]

ROI Pooling的输入

输入有两部分组成:

  1. 特征图:指的是图1中所示的特征图,在Fast RCNN中,它位于RoI Pooling之前,在Faster RCNN中,它是与RPN共享那个特征图,通常我们常常称之为“share_conv”;
  2. rois:在Fast RCNN中,指的是Selective Search的输出;在Faster RCNN中指的是RPN的输出,一堆矩形候选框框,形状为1x5x1x1(4个坐标+索引index),其中值得注意的是:坐标的参考系不是针对feature map这张图的,而是针对原图的(神经网络最开始的输入)

ROI Pooling的输出

输出是batch个vector,其中batch的值等于RoI的个数,vector的大小为channel * w * h;RoI Pooling的过程就是将一个个大小不同的box矩形框,都映射成大小固定(w * h)的矩形框;

其实这里有一点空间金字塔池化(SSP)的思想。即将所有大小不同的候选框resize()成大小一样的候选框。 参考ROI Pooling层详解

multi task

cls_score层用于分类,输出K+1维数组p,表示属于K类和背景的概率。
bbox_prdict层用于调整候选区域位置,输出4*K维数组t,表示分别属于K类时,应该平移缩放的参数。

loss_cls层评估分类代价。由真实分类 u u u对应的概率决定:

L c l s = − l o g p u L_{cls}=-log p_u Lcls=logpu

loss_bbox评估检测框定位代价。比较真实分类对应的预测参数 t u t^u tu和真实平移缩放参数为v的差别:

L l o c = ∑ i = 1 4 g ( t i u − v i ) L_{loc}=\sum_{i=1}^4 g(t_i^u-v_i) Lloc=i=14g(tiuvi)

g为Smooth L1误差,对outlier不敏感:

g ( x ) = { 0.5 x 2 ∣ x ∣ < 1 ∣ x ∣ − 0.5 o t h e r w i s e g(x)=\begin{cases}0.5x^2& |x|<1\\|x|-0.5&otherwise \end{cases} g(x)=<

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值