1. RCNN

经典的目标检测算法使用滑动窗法依次判断所有可能存在的目标区域,RCNN预先提取一系列较可能是物体的候选区域(RP),之后仅在这些候选区域上提取特征,并进行判断。

步骤
RCNN算法分为4步:

  • 一张图像生成1K ~ 2K个获选区域
  • 对每个候选区域,使用CNN提取特征
  • 将提取得到的特征使用SVM进行分类,判断是否属于该类
  • 使用回归器修正候选框位置

rcnn和yolo正确率 rcnn步骤_深度学习

候选区域的生成
RCNN使用Selective Search(SS)方法生成候选区域,基本思路如下:

  • 使用一种过分割手段,将图像分割成小区域
  • 对现有的小区域,按一定规则合并其中两个,重复该步骤直到整张图像合并为一个区域
  • 输出所有曾经存在过的区域,即候选区域

特征提取

  • 将所有候选区域归一化为统一尺寸277×277
  • 使AlexNet作为特征提取网络,将网络最后两层全连接层的神经元数目由4096→1000改为4096→21,其中21表示20种类别+背景
  • 训练集中,候选框与某个类别真实框的IOU最大且大于0.5时,设定该候选框为该类别,否则设定该候选框为背景
  • 每次随机选取32个正样本和96个负样本输入网络进行分类训练
  • CNN倒数第二层得到的向量即为提取出的4096维特征

类别判断

  • 将4096维特征输入线性SVM二分类器,判断是否属于该类
  • 训练集中,正样本为真实框,负样本为与本类所有真实框的IOU都小于0.3的候选框

位置修正

  • 使用线性脊回归器进行位置修正,输入为CNN倒数第三层的4096维特征(卷积后的向量),输出为xy方向的缩放和平移
  • 与真实框IOU大于0.6的候选框作为训练样本

2. Fast RCNN

Fast RCNN解决了RCNN的以下问题:

  • 训练和测试速度慢:RCNN中一张图像的候选框之间大量重叠,提取特征操作冗余,Fast RCNN将整张图像输入网络,在全连接层之前再加入候选框信息
  • 训练所需空间大:RCNN中分类器和回归器相互独立,训练样本量大,Fast RCNN把分类和回归用同一个CNN实现,不需要额外存储

步骤

  • 使用SS算法生成候选区域
  • 将图像归一化至224×224后输入CNN,在最后一个卷积层(全连接层之前)输入对应的候选区域
  • 最后一个卷积层后接ROI Polling进行池化(简化版的空间金字塔池化),将每个候选区域均匀分成M×N块,每块进行最大池化(将大小不一的候选区域转为大小相同的向量)
  • 使用ImageNet进行1000类的分类训练,得到特征提取网络的参数,网络中得到的4096维全连接层向量为提取得到的特征
  • 将4096维的特征输入两个并行的全连接网络中,同时进行分类(softmax)和回归,该网络的代价函数由分类和回归的损失函数加权相加得到

rcnn和yolo正确率 rcnn步骤_特征提取_02

3. Faster RCNN

Faster RCNN将目标检测的4个基本步骤(生成候选区域、特征提取、分类、位置修正)统一到了一个网络中,所有计算没有重复,完全在GPU中完成,大大提高了运行速度。Faster RCNN可以简单地看做“区域生成网络(RPN)+ Fast RCNN”,用区域生成网络代替了Fast RCNN中的SS方法,RPN并不是在原图上生成候选区域,而是在低分辨率的特征图上进行,这样减少了计算量。

rcnn和yolo正确率 rcnn步骤_全连接_03

区域生成网络RPN

RPN网络通过滑动窗口的方式实现候选框的提取,每个滑动窗口位置生成9个候选框(3种尺寸 + 3种宽高比),这9个候选框又被称为anchor。RPN网络训练的过程中,每个anchor均通过两个全连接层进行分类和回归,保留联合概率值最高的300个anchor进行ROI Pooling。

rcnn和yolo正确率 rcnn步骤_深度学习_04

模型训练步骤

  • 根据现有的网络参数,训练RPN网络
  • 使用RPN提取到的anchor训练Fast RCNN,并更新网络参数
  • 重复以上步骤,直至收敛