RCNN:
流程:
1、找出图片中可能存在目标的候选区域
2、将图片大小调整到适应AlexNet的227x227,然后用CNN提取若干个特征向量,2000个候选区域就有2000个特征向量。
3、将2000x4096维特征与20个SVM组成的权值矩阵4096x20相乘得到2000x20维矩阵。
4、分别对2000x20维矩阵中每一列即每一类进行NMS剔除重叠的bbox,得到该列即该类中得分最高的bbox。
5、修正bbox,对bbox做回归微调。
候选区域的选择:选择性搜索(SS):使用k-means对像素进行聚类得到2000个侯选框的可能区域。
Crop+Warp操作:由于候选区域的框大小不一致,所以需要将所有的候选框调整到合适的大小。
NMS:现在20个类别中每一个类别都有2000个框把它框住,我们需要选出最合适的那个框,那么就对每一个框进行打分,有2000个打分结果,就是说这2000个框属于这个类别的概率,但是有可能2000个框都不属于这个类别,因此就全>部去掉,然后将最终保留下来的框采用非极大抑制进行筛选。
SS算法的缺点是得经过NMS后还是可能框出错误的结果。因此诞生了SPP-Net。
SPP-Net:对RCNN的改进:
直接通过卷积得到特征图
通过SS算法得到候选区域,就得到了两个东西,特征图和候选区域。
将这两个进行映射,就是将原图中的候选区域跟特征图映射过去,就是将相应位置映射到特征图当中。
SPP:
映射过去以后经过一个SPP层,它使用4x4,2x2,1x1的池化得到16+4+1=21个结果,它可以理解为21个图片预测的概率,即每一个特征区域的21个概率,这21表示20个类别加上是否为背景。
SPP-Net的基本流程就是:先卷一次得到一个特征图,将原图的候选区域映射到特征图中,用4x4,2x2,1x1的池化后经过全链接层使用SVM和回归。
它的主要改进就是不是候选区域卷积,而是整个图卷积,然后将侯选框映射到特征图上。这样的好处是减少了所有卷积层的运算时间。
但是它还是没有摆脱训练步骤太多的问题,训练依然缓慢。
Fast-RCNN:
它的改进之处就是提出了POI pooling,整合整个模型,把CNN、SPP、bbox回归整合到一起来进行训练,它的分类不使用SVM而是使用Softmax,并且采用多任务损失。
它的主要流程依然是先进行一次卷积,在特征层上获取感兴趣区域,然后用ROI pooling,它的作用与SPP层一样只是不是多个池化,它提取一个固定长度的特征向量,每个特征会输入到一系列全链接层,得到ROI特征向量。
SPP的好处是准确,而ROIpooling是省时间。
但是到Fast-RCNN的时候依然没有摆脱SS算法,因此提出了Faster-RCNN来改进这个缺点。
Faster-RCNN:
它把SS一起拿过来训练。它有两个网络,一个是区域生成网络,一个是Fast-RCNN网络。
只是候选区域不是SS算法得到的,而是在特征图上来训练一个候选区域。它通过softmax来判断anchors属于前景还是背景,利用回归来修正anchors获得精确的proposals(候选区域),输出TOP-N(默认300个)
它的重点就在于如何选取候选区域,也就是RPN原理,它分为两步:
用nxn(默认3x3)的大小窗口去扫描特征图,每个滑窗位置映射到一个低维的向量(默认256维),并为每个窗口位置考虑k种(9)可能的参考窗口(anchors)就是说每一个像素都用k个anchors(不同大小和长宽比)。比如一个大小为30x30>的特征图,那么就会得到30x30x9个anchors。由于候选区域是凭空根据尺度和长宽比得到的,肯定不准确,因此要先对这8100个候选区域进行海选和微调。
比如先选出2000个合适的,位置也微调一下。海选的过程依然是看这个anchors是否属于这个类别,不是就去掉,用回归进行微调。这样得到的候选区域就比SS算法得出的更准确。
优点:端到端的网络,两个网络训练。
缺点:anchors太多,训练参数过大。
因此如果要改进的话可以把RPN的这些候选区域的anchors调整一下。
YOLO:
由于一直到Faster-RCNN一直都没有摆脱候选区域,因此YOLO算法直接删掉RPN,直接对proposal进行分类回归,提高速度。
它直接经过卷积,然后最终输出一个7x7x30的结果。
也就是7x7的单元格,每个单元格都有两个bbox框,这些bbox框经过NMS去筛选。
因此它总共有49x2=78个侯选框,它不需要候选区域,而是直接用算法预测得到的结果。
这个30代表的是(4(坐标信息)+1(置信度(IOU))+4(坐标信息)+1(置信度)+20(类别的概率结果))
它的损失就有三个,每一个网格都有bbox(坐标误差)、置信度(IOU误差)、概率(类别误差)
SSD:
它结合了Faster-RCNN的准确和YOLO的快,也就是结合了YOLO的回归i思想和Faster-RCNN的anchor机制。
SSD每一步都会得到固定大小的特征图,它会在每一层的特征图上做一个Detector和classifier,也就是说它会把中间层利用起来,在每一层得到固定的anchors。
Detector和classifier有三个部分:
default bbox(默认侯选框)(Faster-RCNN)
locallization(4个位置的偏移)(YOLO)
confidence(21个类别的置信度)(YOLO)
ROI Pooling,这个网络层可以把不同大小的输入映射到一个固定尺度的特征向量。
Faster-RCNN提出了RegionProposal这是一种新的提取框的算法,比如提取出几百个框然后让这几百个框一起去做分类,而不是一个一个的框去分类
ROIPooling可以将不同尺寸的变换到相同尺寸。
先卷积得到特征
在特征图上的每一个点产生k个框
对产生的k个框做ROIpooling使得每个框的大小相同
最后进行分类
基于区域的检测器使用的卷积特征映射,如快速rcnn,也可以用于生成区域提案。在这些卷积特征的基础上,我们通过增加几个卷积层来构造一个RPN,它同时在规则网格上的每个位置恢复区域边界和客观分数。因此,RPN是一种全卷积网络(FCN)[7],可以针对产生检测方案的任务进行端到端的训练。
使用不同的滤波器尺寸(如5×7和7×5)分别训练不同长宽比的模型。如果使用这种方法来处理多个尺度,则可以将其视为“滤波器金字塔”