【ZJU-Machine Learning】使用RCNN和FCN进行目标检测

目标检测的基本问题

Classification and Localization
在这里插入图片描述
如上图,我们将目标检测问题分割成了分类和定位两类大问题,分类是给出当前区域物体的类别,定位是给出准确的物体坐标(组成一个矩形)

RCNN

用大大小小的方框遍历所有图像不现实,如何快速挑出可能有物体的区域(Region of Interest, ROI)。我们需要一个计算量不那么大的算法,提出ROI的候选区域(Region of Proposals, or Proposals

为了将CNN用在目标检测上,我们设计了如下步骤
在这里插入图片描述
Basic Ideas:
1. Use selective search to generate proposals
2. Scale and resize proposals to fit the CNN
3. SVM for final decisions

在这里插入图片描述

即:先用普通计算机视觉的算法,选出可能出现待识别目标的区域(proposals),然后将每一个区域都输入到CNN中,最终实现对每一个区域的分类和定位。要注意后续regions的归一化(因为CNN要求输入格式一定是相同的),使用Pooling
在这里插入图片描述

Region Proposals (Selective Search, SS)
给定一张图片,首先使用 Efficient Graph-BasedImage Segmentation 算法,将图片进行过分割 (Over-Segmentation)
在这里插入图片描述
如图所示,过分割后的每个region非常小,以此为基础,对相邻的region进行相似度判断并融合,形成不同尺度下的region。每个region对应一个bounding

Main Problems:
1. High cost to perform Selective Search (~5s per image)
2. Too many passes to CNN (~2000 proposals per image)
3. Lead to unacceptable test time (~50s per image)
4. High space cost to train SVM (millions of 1024-d features)

其主要存在的问题是,不同区域出现了重复,且效率低(每一个区域都一个一个的输入CNN)。
在这里插入图片描述

fast-RCNN

Basic Ideas:

Reduce the computation redundancy caused by overlaps

在这里插入图片描述
也就是将整整一幅画面全部先输入CNN(当然,事先要先使用传统计算机视觉算法选定Proposals),在CNN的某个特定层,我们取其中的feature map,将原图中的proposals对应到feature map上(也就是原图的proposals在feature map上的感受野),将feature map上的proposals进行归一化(pooling),然后再将其输入到后面的全连接层,最后分为两路,分别预测分类和坐标。
在这里插入图片描述

Main Contributions:

  1. ROI pooling layer
  2. Replace SVM with softmax inside CNN
  3. Use SVD to accelerate fully connected layer

在这里插入图片描述

Main Problems:

SS costs too much time (~2s for a fast version)
改进了多次输入到CNN的问题,但是没有解决SS(选择proposals的过程)时间过长的问题
在这里插入图片描述

faster-RCNN

Basic Ideas:

Reduce the time of generating region proposals
解决SS(选择proposals的过程)时间过长的问题,其主要思想:先粗定位,再细定位。

即:SS以往采用传统方法,效率低。为了解决这个问题,我们在fast-RCNN的基础上进行改进,和fast-RCNN相同,先将一整幅图片输入CNN,但是我们事先不选取region proposals。然后选取feature map,在这层feature map 上,我们才进行region proposals的选取。我们不采用原始方法,而是选择采用一个简单的RPN(一种神经网络)来做。首先定义滑动窗口ANCHOR,通过设定的大小和形状遍历这个特征图,通过RPN网络判断当前窗口是否有待检测的目标,如果有,则输出1,并输出其ANCHOR的坐标,否则输出0(这也就是下图中的输出为什么是2k和4k)。这也就是粗定位
在这里插入图片描述

对于特征图某个固定点,ANCHOR 生成9个矩形,共有3种形状,长宽比为大约为:width:height = [1:1, 1:2, 2:1]三种,实际上通过anchors就引入了检测中常用到的多尺度方法。
在这里插入图片描述
把任意大小的输入图像reshape成800x600(即图2中的M=800,N=600)。再回头来看anchors的大小,anchors中长宽1:2中最大为352x704,长宽2:1中最大736x384,基本是cover了800x600的各个尺度和形状。

接下来进行细定位,将粗定位输出类别为1的区域输入fast-RCNN的后半层,后面与fast-RCNN思想一致,最终输出精确的类别和位置。
在这里插入图片描述

Main Contributions:

  1. Region Proposal Network (RPN)
  2. An end to end model finally!

faster-RCNN思想在人脸识别的应用——MTCNN

Multitask:
1 Face detection(框出人脸)
2 Facial landmarks localization(标出人脸的特征点)——这很重要,因为若仅识别整体的人脸轮廓,那么如果训练时的样本人脸角度和测试时的角度不同的话,则识别率会大大降低,因此我们需要对人脸特征点进行对齐校准。

MTCNN思想:
先使用R-Net粗识别,找到大概的人脸位置,然后使用O-Net进行精准识别(人脸特征点)。
在这里插入图片描述
P-Net (Proposal Network ):
该网络主要是检测图中人脸,产生多个人脸候选框和回归向量,再用回归向量对候选窗口进行校准,最后通过非极大值抑制NMS来合并高度重叠的候选框。

R-Net (Refine Network ):(粗定位)
该网络同样输出候选框置信度(根据置信度削减候选框数量)和回归向量,通过边界框回归和NMS精调候选框的位置。

O-Net (Output Network ):(精准识别)
比R-Net层又多了一层卷积层,处理结果更加精细,作用和R-Net层作用一样(削减框数量同时精调回归框)。再者,该层对人脸区域进行了更多的监督,最后输出5个人脸关键点坐标。
在这里插入图片描述

语义分割

可以使用全卷积网络FCN(Fully Convolutional Networks),使得输出的像素和输入相同。
在这里插入图片描述
整个过程是先降采样,后深采样的过程。

在实际训练时,要先训练前一半,前一半的网络也就是RCNN网络(输出类别和区域),后训练后一半(主要使用pooling的上采样和反卷积),这两部分完全对称。

Pooling 层的上采样(Upsampling)

a) Average pooling
在这里插入图片描述
(b) Max pooling

在这里插入图片描述

卷积层的上采样(Upsampling)

也叫反卷积(Deconvolution)或 转置卷积(Transpose Convolution)

考虑如下一个卷积层,输入特征图44,卷积核33,步长1,卷积后获得特征图维度为2*2:
在这里插入图片描述
其过程:
在这里插入图片描述
那么反卷积也就是
在这里插入图片描述
注意:这里的C并不是正向卷积数值的转置,而是位置的转置,也就是说这个w的位置是非0的,需要通过训练得出,不一定与正向卷积相同。

步长为2时,还是使用C的转置:

考虑一个卷积层,输入特征图55,卷积核33,步长2,补零1, 卷积后获得特征图维度为3*3,其反卷积示意图如下:
在这里插入图片描述

FCN的另一个应用——边缘提取

理论同语义分割
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/qq_45654306/article/details/113874422
今日推荐