🤵 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-CNN 比 R-CNN 快 9倍,在测试时快 213倍,在 PASCAL VOC 2012 上实现了更高的映射 ;
🔗 论文地址:Fast R-CNN
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 ) 等方法将图像适应成输入图像的尺寸 ;
但这样会限制了输入图像的长宽比和缩放尺度等信息,影响最后的预测精度 ;
而固定尺寸图像输入的原因是因为 全连接层需要固定尺寸的输入 ;
可以通过在全连接层前添加一个层,使其针对任意尺寸的输入都可以输出固定的尺寸,这就是 Spatial Pyramid Pooling Layer
;
论文地址🔗:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
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
Fast R-CNN 将 整张图像
和 一组建议框
(object proposals) 作为输入,通过几个卷积层和最大池化层处理整张图像,得到 卷积特征图
(conv feature map) ;
然后,对于每一个建议框, 通过提出的 RoI pooling layer
(感兴趣的区域 (Region of Interest)) 从卷积特征图中利用提取 固定长度的特征向量
;
每个特征向量输入到一系列的 全连接层
(FCs) 中,最后通过两个同级的输出:softmax
和 bbox regressor
;
分别对应 K个对象的类别(object classes) 概率
和 K个对象边界框(bounding-box)的 位置
( 包含四个实数 ) ;
所以就有多任务损失 (multi-task loss) ,一个输出类别的 离散概率分布
,一个输出边界框的 回归偏移
;
因此有 损失函数(multi-task loss) :
式中,L
为多任务损失,u
为真实类别(ground-truth class),v
为真实边界框(ground-truth bounding-box)回归目标 ;
- Lcls(p, u) = -log pu 为类别的 log 损失(log loss) ;
- Lloc 为 真实边界框 (vx,vy,vw,vh) 与 预测边界框 () 之间的回归损失 ;
🚩 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 layer
是 SPP-Net
的特例,它只有一个金字塔层 ;
🚩 VOC 数据集检测效果
VOC 2007 检测平均精度(%)
VOC 2010 检测平均精度(%)
VOC 2012 检测平均精度(%)
🚀 Fast R-CNN 复现
🎨 详见下一章节 📕 :[ 目标检测 ] 经典网络模型3——Faster R-CNN 详解与复现