【经典检测框架】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)。空间金字塔要解决的问题是神经网络输入图像尺寸固定的问题。普通网络因为全连接层的存在,前面卷积层的输出尺寸要是固定的,进而输入图像尺寸要固定。而空间金字塔能将任意尺寸的输入变换成固定维度的向量。
    【经典检测框架】RCNN/SPP NET/Fast R-CNN/Faster R-CNN/SSD/YOLO
    图中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阶段就是一个端对端模型了。

【经典检测框架】RCNN/SPP NET/Fast R-CNN/Faster R-CNN/SSD/YOLO

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有四路输出。

【经典检测框架】RCNN/SPP NET/Fast R-CNN/Faster R-CNN/SSD/YOLO
上图的conv layer用的是vgg网络,所以只有pool层能降维,故feature map的尺寸变为原图的116×116\frac{1}{16}\times \frac{1}{16}
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值。

总共要预测S×S×(5×B+C)S\times S\times(5\times B+C)个变量。
【经典检测框架】RCNN/SPP NET/Fast R-CNN/Faster R-CNN/SSD/YOLO

优点: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直接采用卷积对不同的特征图来进行提取检测结果。对于形状为 m×nm\times n 的特征图,只需要采用 3×3×p3\times 3\times p这样比较小的卷积核得到检测值。
  • 采用了anchor
    结合了RCNN的优点。先算出每个特征图的尺度,分别为(30,60,111,162,213,264). 再对这些尺度进行长宽比变换,可以选择的长宽比为(1,2,3,0.5,0.33,1’)。

SSD和YOLO还有其他区别,比如SSD是对每个box做分类,而YOLO是对每个网格做分类; SSD将背景当成第一类等。

下图为SSD与YOLO网络结构的对比。
【经典检测框架】RCNN/SPP NET/Fast R-CNN/Faster R-CNN/SSD/YOLO
SSD 总共有38×38×4+19×19×6+10×10×6+5×5×6+3×3×4+1×1×4=873238\times 38\times 4+19\times 19\times 6+10\times 10\times 6+5\times 5\times 6+3\times 3\times 4+1\times 1\times 4=8732个box。

优点:媲美RCNN的精确率,媲美YOLO的速度。