🤵 Author :Horizon John



[ 目标检测 ] 经典网络模型2——Fast R-CNN 详解与复现

  • 🚀 Fast Region-based Convolutional Network
  • 🚀 Fast R-CNN 详解
  • 🎨 Fast R-CNN 提出背景
  • 🚩 R-CNN 缺点
  • 🚩 SPP-Net 原理
  • 🚩 贡献
  • 🎨 Fast R-CNN 网络结构
  • 🚩 RoI pooling layer
  • 🚩 VOC 数据集检测效果
  • 🚀 Fast R-CNN 复现

🚀 Fast Region-based Convolutional Network

Fast R-CNN 是一种基于区域卷积网络 ( Region-based Convolutional Network ) 的快速目标检测方法 ;

Fast R-CNNR-CNN 快 9倍,在测试时快 213倍,在 PASCAL VOC 2012 上实现了更高的映射 ;

fastchat指定模型使用GPU卡_人工智能


🔗 论文地址:Fast R-CNN


fastchat指定模型使用GPU卡_人工智能_02

Fast R-CNN architecture


🚀 Fast R-CNN 详解

🎨 Fast R-CNN 提出背景

目标检测 任务比 图像分类 任务更为复杂,其具体有以下两个方面的 挑战

  • 需要处理大量的候选对象区域(candidate object locations) ;
  • 这些候选区域只是粗略的定位,需要加以改进才能实现精确的定位 ;

这些问题的解决方案会影响目标检测最终的 速度精度

基于此作者提出了一种单阶段训练算法 (single-stage training),
该算法通过 共同学习(jointly learns) 候选对象分类(classify object proposals) 和 空间位置优化(refine their spatial locations) ;


🚩 R-CNN 缺点

虽然 R-CNN 利用深度卷积网络实现了较好的目标检测效果,但仍存在着以下的 缺陷

  • 训练是一个 多阶段 的过程 (ConvNet → SVMs → bounding-box regressors);
  • 训练在 空间和时间 上都很昂贵 ( 每个候选区域提取的特征都需要通过磁盘写入和读取) ;
  • 物体检测很 ( 需要对每个候选区域进行特征提取 ) ;

R-CNN 的检测速度很慢源于对于每一个建议对象都会执行ConvNet前向传播,而没有使用共享计算 ;

空间金字塔池化网络 (Spatial pyramid pooling networks) SPP-Net 的提出通过 共享计算 实现 R-CNN 的加速 ;


🚩 SPP-Net 原理

在图像分类或目标检测时,输入CNN的图像尺寸是固定的 ( 如224×224 ) ;

一般都是通过裁剪 ( crop ) 和变形 ( wrap ) 等方法将图像适应成输入图像的尺寸 ;

fastchat指定模型使用GPU卡_人工智能_03

但这样会限制了输入图像的长宽比和缩放尺度等信息,影响最后的预测精度 ;

而固定尺寸图像输入的原因是因为 全连接层需要固定尺寸的输入

可以通过在全连接层前添加一个层,使其针对任意尺寸的输入都可以输出固定的尺寸,这就是 Spatial Pyramid Pooling Layer


论文地址🔗:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition

fastchat指定模型使用GPU卡_目标检测_04

Spatial Pyramid Pooling Layer

如上图所示,输入图像(input image) 通过 卷积层(convolutional layers) 后提取到特征的 特征图(feature maps of conv5) ,

在最后的 全连接层(fully-connected layers) 之前,加入 空间金字塔池化层(spatial pyramid pooling layer) 实现固定尺寸的输出 ;

如上图所示,采用了三层金字塔结构,将每一层特征图分别划分成 4×4、2×2、1×1 大小的子块,得到 (4×4 + 2×2 + 1×1) = 21个子块 (Spatial bins) ,

对每一个Spatial bins 进行 MaxPooling,就可以实现21维的特征向量的提取,将它们连起来就形成了一个 固定长度的特征向量

这样 256 层特征图一共包含了(4×4 + 2×2 + 1×1) * 256 维特征 ;

SPP-Net 依然存在着明显缺点:训练是一个多阶段的过程,特征依然要保存在磁盘中,无法更新SPP层之前的卷积层 ;


🚩 贡献

  • 较 R-CNN 和 SPP-Net 拥有更高的检测精度(mAP):
  • 训练是单阶段的,采用多任务损失 (multi-task loss) ;
  • 训练可以更新所有的网络层 ;
  • 特征缓存不需要磁盘存储 ;


🎨 Fast R-CNN 网络结构

Fast R-CNN architecture


fastchat指定模型使用GPU卡_人工智能_02

Fast R-CNN整张图像一组建议框(object proposals) 作为输入,通过几个卷积层和最大池化层处理整张图像,得到 卷积特征图(conv feature map) ;

然后,对于每一个建议框, 通过提出的 RoI pooling layer(感兴趣的区域 (Region of Interest)) 从卷积特征图中利用提取 固定长度的特征向量

每个特征向量输入到一系列的 全连接层(FCs) 中,最后通过两个同级的输出:softmaxbbox regressor

分别对应 K个对象的类别(object classes) 概率 和 K个对象边界框(bounding-box)的 位置 ( 包含四个实数 ) ;

所以就有多任务损失 (multi-task loss) ,一个输出类别的 离散概率分布 ,一个输出边界框的 回归偏移

因此有 损失函数(multi-task loss) :

fastchat指定模型使用GPU卡_Fast R-CNN_06


式中,L 为多任务损失,u 为真实类别(ground-truth class),v 为真实边界框(ground-truth bounding-box)回归目标 ;

  • Lcls(p, u) = -log pu 为类别的 log 损失(log loss) ;
  • Lloc 为 真实边界框 (vx,vy,vw,vh) 与 预测边界框 (fastchat指定模型使用GPU卡_目标检测_07) 之间的回归损失 ;


🚩 RoI pooling layer

使用 MaxPooling 将任何有效感兴趣区域(any valid region of interest) 内的特征转换为具有固定空间范围 ( H×W ) 的小特征图 ;

其中 H 和 W 是独立于任何特定 RoI 的层超参数 ;

RoI 是进入卷积特征图(Conv feature map) 的 矩形窗口(rectangular window) ;

RoI 由四个参数组成 (r,c,h,w) ,分别对应矩形窗口的 左上角坐标高度 宽度

RoI max pooling 的原理:

h×w RoI 窗口划分为大小近似为 h/H × w/W 大小的子窗口的 H×W 网格 ;

然后将每个子窗口的中的值最大化(max-pooliing) 作为对应对应网格的输出 ;

RoI pooling layerSPP-Net 的特例,它只有一个金字塔层 ;


fastchat指定模型使用GPU卡_目标检测_08


🚩 VOC 数据集检测效果

VOC 2007 检测平均精度(%)

fastchat指定模型使用GPU卡_目标检测_09

VOC 2010 检测平均精度(%)

fastchat指定模型使用GPU卡_fastchat指定模型使用GPU卡_10

VOC 2012 检测平均精度(%)

fastchat指定模型使用GPU卡_fastchat指定模型使用GPU卡_11


🚀 Fast R-CNN 复现


🎨 详见下一章节 📕 :[ 目标检测 ] 经典网络模型3——Faster R-CNN 详解与复现


fastchat指定模型使用GPU卡_人工智能_12