一、RCNN
RCNN去掉窗口扫描,用聚类方式,对图像进行分割分组,得到多个候选框的层次组。
1. 原始图片通过Selective Search提取候选框,约2k个。
2. 候选框缩放成固定大小。
3. 经过CNN提取特征。
4. 利用SVM进行特征向量分类。
二、Fast-RCNN
RCNN中有CNN重复计算,Fast-RCNN则去掉重复计算,并微调候选框位置。
1. 整幅图经过CNN,得到特征图。
2. 提取候选框(Selective Search)。
3. 把候选框投影到特征图上,Pooling采样成固定大小(ROI Pooling)。
4. 经过两个全连接层,分类与微调候选框的位置。
三、Faster-RCNN
Faster-RCNN用CNN来预测候选框。
1. 整幅图经过CNN得到特征图。
2. 经过核为3*3*256的卷积,每个点上预测k个anchor box是否是物体,并微调anchor box的位置。(RPN的任务就是得到它是前景还是背景以及框的位置)
3. 提取出物体框后,采用Fast RCNN同样的方式进行分类。
4. 选框与分类共用一个CNN网络。
四、YOLO
YOLO将物体框的选择和识别进行了融合,一步输出。
1. 把缩放成统一大小的图片分割成S*S的单元格。
2. 每个单元格输出B个矩形框(冗余设计),包含框的位置信息(x, y, w, h)与物体的Confidence。
3. 每个单元格再输出C个类别的条件概率P(Class|Object)。
4. 最终的输出层应有S*S*(B*5+C)个单元。(论文中,S = 7, B = 2, C = 20)
Confidence的定义:
代价函数:
五、SSD
YOLO在7*7的框架下识别物体,遇到大量的小物体时,难以处理。
SSD则在不同层级的feature map下进行识别,能够覆盖更多的范围。
考虑一个m*n*p的feature map,每个位置采用k个default box,加上背景一共有c个类别,用3*3*p的卷积去做预测,那么每个位置输出就为k*(c+4),最后得到的输出就为k*(c+4)*m*n。
这里第一点的s_k是第k层的feature map的一个位置与原图大小的比列值,通过这个值我们可以计算出第k层的feature map的各个位置对应到原图是哪些位置,一旦对应到了原图的位置,在通过respectio ratio就能把不同大小规模的default box对应回原图的位置,从而可以在训练时计算label和在预测时做NMS。
六、R-FCN
图片分类需要兼容形变,而物体检测需要利用形变,如何平衡?R-FCN利用在CNN的最后进行位置相关的特征Pooling来解决以上两个问题。
经普通CNN后,做有 k^2(C+1) 个 channel 的卷积,生成位置相关的特征(position-sensitive score maps)。C 表示分类数,加 1 表示背景,k 表示后续要pooling 得到的大小,所以生成 k^2 倍的channel,以应对后面的空间pooling。
普通CNN后,还有一个RPN(Region Proposal Network),生成候选框。假设一个候选框大小为w*h,将它投影在位置相关的特征上,并采用average-pooling的方式生成一个 k*k*k^2(C+1) 的块(与Fast RCNN一样),再采用空间相关的pooling(k*k平面上每一个点取channel上对应的部分数据),生成 k*k*(C+1)的块,最后再做average-pooling生成 C+1 的块,最后做softmax生成分类概率。
七、Mask RCNN
Mask RCNN是何凯明基于以往的Faster RCNN架构提出的新的卷积网络,一举完成了object instance segmentation. 该方法在有效地提取目标的同时完成了高质量的语义分割。
文章的主要思路就是把原有的Faster RCNN进行扩展,添加一个分支使用现有的检测对目标进行并行预测。同时,这个网络结构比较容易实现和训练,速度5fps也算比较快点,可以很方便的应用到其他的领域,像目标检测,分割和人物关键点检测等。并且比现有的算法效果都要好。
整个网络结构:
主要贡献:(实际就是ROI Align和mask分支)
1. 强化的基础网络。通过ResNeXt-101和FPN用作特征提取网络,达到state-of-the-art的效果。
2. ROIAlign解决Misalignment的问题。
3. Loss Function。
细节描述:
1. ResNet + FPN:作者替换了再Faster RCNN中使用的VGG网络,转而使用特征表达能力更强的残差网络。另外为了挖掘多尺度信息,作者还是用了FPN网络。
2. ROIAlign:
对于ROI Pooling,经历了两个量化的过程:(a)从roi proposal到feature map的映射过程。方法是[x/16],这里x是原始roi的坐标值,而方框代表四舍五入。(b)从feature map划分成7*7的bin,每个bin使用max pooling。
ROI Align layer想法很简单,就是去掉ROI Pooling过程中所有的量化过程,包括从原图proposal到最后一层feature map映射,以及把feature map划分成m*m的bin过程中的量化。
3. Loss Function:回归加分类加mask预测的损失之和。
对于mask分支和其他的分类分支一样,使用全卷积网络输出,输出了k类的mask。注意这里mask的输出使用了sigmoid函数。最后可以通过与阈值0.5作比较输出二值mask。这样避免了类间的竞争,将分类的任务交给专业的classification分支。