【经典检测框架】RCNN/SPP NET/Fast R-CNN/Faster R-CNN/SSD/YOLO
参考来源
https://cloud.tencent.com/developer/news/281788
RCNN
R-CNN的简要步骤如下
(1) 输入测试图像
(2) 利用选择性搜索Selective Search算法在图像中从下到上提取2000个左右的可能包含物体的候选区域Region Proposal
(3) 因为取出的区域大小各自不同,所以需要将每个Region Proposal缩放(warp)成统一的227x227的大小并输入到CNN,将CNN的fc7层的输出作为特征
(4) 将每个Region Proposal提取到的CNN特征输入到SVM进行分类
(5)使用回归器精细修正候选框位置:对于每一个类,训练一个线性回归模型去判定这个框是否框得完美。
优点:Selective Search算法避免了暴力搜索,且有较高的召回率。
缺点:1,尽管用来Selective Search, 但region proposal还是太多了,耗时长。 2,非端对端,不符合神经网络“数据驱动”的思想。
SPP NET
SPP NET 有两个主要创新点
- 提出了空间金字塔(SPP)。空间金字塔要解决的问题是神经网络输入图像尺寸固定的问题。普通网络因为全连接层的存在,前面卷积层的输出尺寸要是固定的,进而输入图像尺寸要固定。而空间金字塔能将任意尺寸的输入变换成固定维度的向量。
图中256是通道数。 分别用44,22,1*1大小的块,将这三张网格放到下面这张特征图上,就可以得到16+4+1=21种不同的切割方式,分别在每一个区域取最大池化,那么就可以得到21组特征。 - 只对原图提取一次卷积特征。
只对原图进行一次卷积计算,便得到整张图的卷积特征feature map,然后找到每个候选框在feature map上的映射patch,将此patch作为每个候选框的卷积特征输入到SPP layer和之后的层,完成特征提取工作。
优点:比RCNN 快很多。
Fast R-CNN
相比R-CNN主要两个地方不同:
- 像SPP NET一样 只对原图提取一次卷积特征
- 在网络中使用了ROI layer。ROI layer将输入的feature map 池化成7x7的大小的输出feature map。达到和SPP相同的效果,不过实现更简单。
- 使用边框回归,并且将边框回归放到了神经网络内部。这样除了Selective Search阶段就是一个端对端模型了。
Faster R-CNN
参考
https://zhuanlan.zhihu.com/p/31426458
Faster R-CNN相比Fast R-CNN,引入了RPN(region proposal network)替代Selective Search。把这个替换后,就是彻底地端对端了。Faster R-CNN可分为四步:
-
Conv layers。作为一种CNN网络目标检测方法,Faster RCNN首先使用一组基础的conv+relu+pooling层提取image的feature maps。该feature maps被共享用于后续RPN层和全连接层。
-
RPN。RPN网络用于生成region proposals。该层通过softmax判断anchors属于positive或者negative,再利用bounding box regression修正anchors获得精确的proposals。
-
Roi Pooling。该层收集输入的feature maps和proposals,综合这些信息后提取proposal feature maps,送入后续全连接层判定目标类别。
-
Classification。利用proposal feature maps计算proposal的类别,同时再次bounding box regression获得检测框最终的精确位置。
可以看到Faster R-CNN有四路输出。
上图的conv layer用的是vgg网络,所以只有pool层能降维,故feature map的尺寸变为原图的。
vgg提取的feature Map每个点都有9个anchor。每个anchor预测positive或negtive,四个边框回归参数(dx,dy,dw,dh),对应图上通道“18”和“36”
YOLO v1
参考
https://zhuanlan.zhihu.com/p/31427164
Faster RCNN将目标检测分解为分类为题和回归问题。YOLO直接将二者作为一个整体。从本质上说,Faster RCNN通过对Anchors的判别和修正获得检测框;而YOLO通过强行回归获得检测框。
Faster RCNN是通过一个个anchor获得region proposal的,利用的是局部信息。而YOLO 预测位置用的是整张图片的信息。
YOLO的工作过程分为以下:
- 将原图划分为SxS的网格(7x7),如果一个目标的中心落入某个格子,这个格子就负责检测该目标。
- 每个网格要预测B个bounding boxes,以及C个类别概率Pr(classi|object)。注意是一个网格对应一个目标,不是一个box对应一个目标
- 每个bounding box除了要回归自身的位置之外,还要附带预测一个confidence值。
总共要预测个变量。
优点:1,快 2,背景误检率低
缺点:1,位置精准性差 2,小目标召回率低
SSD
参考
https://zhuanlan.zhihu.com/p/33544892
SSD和YOLO一样都是采用一个CNN网络来进行检测,但是却采用了多尺度的特征图。
SSD与YOLO的不同之处包括:
- 采用了多尺度特征图用于检测。
前面的特征图每个点视野小,适用于小物体检测。后面的特征图视野大,适用于大物体检测。
SSD使用了六个特征图,边长分别为:38,19,10,5,3,1 - 采用卷积进行检测
与Yolo最后采用全连接层不同,SSD直接采用卷积对不同的特征图来进行提取检测结果。对于形状为 的特征图,只需要采用 这样比较小的卷积核得到检测值。 - 采用了anchor
结合了RCNN的优点。先算出每个特征图的尺度,分别为(30,60,111,162,213,264). 再对这些尺度进行长宽比变换,可以选择的长宽比为(1,2,3,0.5,0.33,1’)。
SSD和YOLO还有其他区别,比如SSD是对每个box做分类,而YOLO是对每个网格做分类; SSD将背景当成第一类等。
下图为SSD与YOLO网络结构的对比。
SSD 总共有个box。
优点:媲美RCNN的精确率,媲美YOLO的速度。