目标检测第二弹——Fast RCNN

Fast RCNN

Fast RCNN训练VGG19网络速度比RCNN快9倍,测试速度快213倍,与SPP网络相比,训练速度快3倍,测试快10倍,并且更准确。

介绍

在当时,目标检测训练任务都是分多个阶段进行模型训练,缓慢且不优雅。因此在Fast RCNN中提出了一种单阶段的训练方式,将物体分类和位置确定结合起来。测试阶段处理一张图片只需要0.3秒,并且在PASCAL VOC 2012数据集上更准确,mAP为66%(RCNN为62%)。

RCNN的不足

  1. 多阶段训练。RCNN首先在进行候选框的训练,在ConvNet上微调,使用log损失,然后使用ConvNet提取的特征训练SVM,再使用bounding box回归进行bounding box位置训练。
  2. 训练耗时且占用空间。SVM和bounding box回归训练所用到的特征,都由ConvNet存在了磁盘上,这会占用上百G的存储空间。
  3. 目标检测耗时。在GPU上处理一张图片要47秒。

SPP的不足

  1. 多阶段训练
  2. 特征写入磁盘
  3. 无法更新空间金字塔池化层之前卷积层的网络参数。

Fast RCNN优点

改进了RCNN和SPP的不足,并提升了速度和准确率,Fast RCNN有以下优点:

  1. 相比RCNN,SPP,Fast RCNN有更好的检测质量(mAP)。
  2. 单阶段训练,使用多任务损失。
  3. 训练过程中能更新所有网络层参数。
  4. 不会将提取的特征缓存到磁盘上。

Fast RCNN结构

网络接收整张图片和一系列候选物体作为输入,在图像上使用多个卷积层和最大池化层得到卷积特征,然后在每个候选物体区域上使用RoI(region of interest)池化来得到固定长度的特征向量,再将这些特征向量输入到一系列全连接层中,最后分成两个输出层:1. 使用softmax进行分类,2. 使用bounding box回归得到候选框坐标。

目标检测第二弹——Fast RCNN_第1张图片

RoI池化层

RoI层实际上是SPP层的一种特殊情况,SPP-Net中会使用不同大小的金字塔映射,而RoI池化层只下采样到7 × 7的特征图。

SPP-Net为什么不能更新SPP层前面卷积层的权重

SPP-Net在训练时,每个训练样本都来自不同的图像,因此会导致反向传播非常低效。为什么会低效呢,因为每个RoI都有非常大的感受野,通常包含整个图像。由于前向传播过程必须处理整个感受野,训练的输入很大(通常是整张图像),因此造成反向传播低效。

截尾奇异值分解

对于分类整张图像,全连接层耗时要比卷积层少,但是对于检测RoI这样的检测任务时,全连接层的计算耗时占了整个前向传播的一半。因此使用截尾奇异值分解来减少全连接层的运算时间。对于大小为u × v的权重矩阵W,它约等于:
W ≈ U Σ t V T W \approx U\Sigma_tV^T WUΣtVT
左奇异U大小为u × t,对角矩阵大小为t × t,右奇异V大小为v × t。因此原本uv个参数减少到t(u + v),如果t远远小于min(u,v),那么性能会提升许多。

欢迎爱好人工智能的小伙伴关注公众号:机器工匠,不定时发布一些关于人工智能的技术、资讯文章,更有面向初学者的系列文章。

你可能感兴趣的:(人工智能,神经网络与机器学习笔记)