Author :Horizon Max
✨ 编程技巧篇:各种操作小结
机器视觉篇:会变魔术 OpenCV
深度学习篇:简单入门 PyTorch
神经网络篇:经典网络模型
算法篇:再忙也别忘了 LeetCode
Fast R-CNN 是一种基于区域卷积网络 ( Region-based Convolutional Network ) 的快速目标检测方法 ;
Fast R-CNN 比 R-CNN 快 9倍,在测试时快 213倍,在 PASCAL VOC 2012 上实现了更高的映射 ;
论文地址:Fast R-CNN
目标检测
任务比 图像分类
任务更为复杂,其具体有以下两个方面的 挑战
:
这些问题的解决方案会影响目标检测最终的 速度 和 精度 ;
基于此作者提出了一种单阶段训练算法 (single-stage training),
该算法通过 共同学习(jointly learns) 候选对象分类(classify object proposals) 和 空间位置优化(refine their spatial locations) ;
虽然 R-CNN 利用深度卷积网络实现了较好的目标检测效果,但仍存在着以下的 缺陷 :
多阶段
的过程 (ConvNet → SVMs → bounding-box regressors);空间和时间
上都很昂贵 ( 每个候选区域提取的特征都需要通过磁盘写入和读取) ;慢
( 需要对每个候选区域进行特征提取 ) ;而 R-CNN 的检测速度很慢源于对于每一个建议对象都会执行ConvNet前向传播,而没有使用共享计算 ;
空间金字塔池化网络 (Spatial pyramid pooling networks) SPP-Net 的提出通过 共享计算
实现 R-CNN 的加速 ;
在图像分类或目标检测时,输入CNN的图像尺寸是固定的 ( 如224×224 ) ;
一般都是通过裁剪 ( crop ) 和变形 ( wrap ) 等方法将图像适应成输入图像的尺寸 ;
但这样会限制了输入图像的长宽比和缩放尺度等信息,影响最后的预测精度 ;
而固定尺寸图像输入的原因是因为 全连接层需要固定尺寸的输入 ;
可以通过在全连接层前添加一个层,使其针对任意尺寸的输入都可以输出固定的尺寸,这就是 Spatial Pyramid Pooling Layer
;
论文地址:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition
如上图所示,输入图像
(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层之前的卷积层 ;
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)回归目标 ;
使用 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
的特例,它只有一个金字塔层 ;
详见下一章节 :[ 目标检测 ] 经典网络模型3——Faster R-CNN 详解与复现