计算机视觉面试之物体检测

一、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的定义:

代价函数:

λ_coord = 5, λ_noobj = 0.5

五、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网络。

(a)人工设计特征金字塔;(b)正常的CNN结构;(c)SSD风格的金字塔,但是SSD为了避免使用低层特征,放弃了浅层的feature map;(d)自然的利用了CNN层级特征的金字塔形式,同时生成在所有尺度上都具有强语义信息的特征金字塔,所以FPN设计了top-down结构和横向连接。

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分支。

你可能感兴趣的:(计算机视觉面试之物体检测)