Fast R-CNN

2015 单 GPU 深度学习 被引用 28k 次
下载 PDF

Fast R-CNN - 中文验证版

英文原文卡片:fast_rcnn_2015.md

状态:已翻译。

元数据

  • Slug: fast_rcnn_2015
  • 年份: 2015
  • 会议: ICCV
  • 作者: Ross Girshick
  • 阅读状态: read complete
  • 计算范式: 单 GPU 深度学习
  • 主要来源: PDF抽取文本

计算设置

论文明确声明所有时间测量使用一块 NVIDIA K40 GPU,超频到 875 MHz。这是一篇单 GPU 检测器论文:时间表格比较了 Fast R-CNN、R-CNN 和 SPPnet,使用相同的 VGG16 骨干,包括训练小时数、每张图测试速率、加速比和 VOC07 mAP。候选区域时间从最快检测器的时间中排除,因此 GPU 测量隔离了 ConvNet 和检测器头部,而非完整的选择性搜索(selective search)管线。

精调每个 minibatch 使用 N = 2 张图像和 R = 128 个 RoI,从每张图中采样 64 个 RoI。来自同一图像的 RoI 共享卷积特征图,因此前向和反向传递共享计算和内存。论文称这比从 128 张图像中各采样一个 RoI 大约快 64 倍。对于 VGG16,尺度选择受限于内存:单尺度图像使用最短边 s = 600,最长边上限 1000,而多尺度 VGG 受 GPU 内存限制。

瓶颈

R-CNN 的瓶颈来自冗余的卷积计算。每张图像有数千个候选区域,R-CNN 对每个缩放变形(warped)后的候选区域分别运行 ConvNet。使用 VGG16 时,论文报告 GPU 上每张图 47 秒。训练也是多阶段的且 I/O 密集:从每个候选区域提取特征,写入磁盘,然后用于训练 SVM 和回归器。对于 VOC07 trainval,VGG16 特征提取耗时 2.5 GPU 天,缓存特征占据数百 GB。

SPPnet 通过从共享特征图池化消除了部分测试时冗余,但其训练仍冻结卷积层,因为当每个 RoI 来自不同图像时,通过金字塔层的反向传播效率低下。因此 Fast R-CNN 需要在一张图像内共享卷积工作并使其端到端可训练。

方法适配

Fast R-CNN 将计算从逐候选区域移到逐图像。网络先整体处理图像一次,然后 RoI 池化将每个候选区域在共享特征图上的区域裁剪并最大池化为固定的 7 x 7 张量(对 VGG16)。头部分支为 softmax 分类器和类别特定的边界框回归器。因为 RoI 通过 RoI 池化保持可微,模型可以精调卷积骨干并联合训练定位和分类。

minibatch 方案是对 GPU 内存和带宽的直接适配。使用 N = 2 张图像和 R = 128 个 RoI,一张图像的昂贵卷积激活被 64 个候选区域复用,而非被重复计算或重复加载。这减少了算术量,也减少了激活移动。它接受 minibatch 中 RoI 的相关性作为计算共享的代价;实验上,作者称收敛仍然是实用的。

最终适配是对全连接层进行截断 SVD。检测需要评估数千个 RoI,因此 fc6 和 fc7 在卷积共享后仍然昂贵。论文使用前 1024 个奇异值压缩 VGG16 的 25088 x 4096 fc6 矩阵,使用前 256 个压缩 fc7,将每个大矩阵替换为两个较小矩阵。

证据

对于 VGG16,R-CNN 训练耗时 84 小时,测试速度为每张图 47.0 秒。Fast R-CNN 训练 9.5 小时,无 SVD 时测试速度为每张图 0.32 秒,有 SVD 时为 0.22 秒。论文报告 9 倍训练缩减和 146 倍到 213 倍测试时加速。与 SPPnet 相比,VGG16 Fast R-CNN 训练 9.5 小时而非 25.5 小时,测试速度无 SVD 快 7 倍,有 SVD 快 10 倍。特征缓存也消失了。

准确率未被牺牲。在 VOC07 上使用 VGG16,Fast R-CNN 达到 66.9 mAP,而 R-CNN 为 66.0,SPPnet 为 63.1。在 VOC12 上,达到 65.7 mAP,使用额外数据时为 68.4。冻结卷积层仅精调 fc6 及以上使 VOC07 mAP 从 66.9 降至 61.4。从 conv2_1 开始精调使训练变慢 1.3 倍,12.5 小时对比 9.5 小时,而 conv1_1 超出 GPU 内存,因此 conv3_1 及以上是准确率与内存的权衡。

SVD 确认了检测器头部瓶颈:压缩前,fc6 和 fc7 占用前向时间的 45%;SVD 后,VGG16 时间从 320 ms/图降至 223 ms/图,mAP 从 66.9 变为 66.6。

历史影响

Fast R-CNN 使基于区域的 CNN 检测适应了实用的单 GPU 范式。它将目标检测从离线特征缓存管线转变为端到端可训练网络,其卷积工作在候选区域之间共享。一旦图像级特征图成为共享基板,候选区域就变成了索引视图而非独立的 ConvNet 样本。

这一转变也澄清了下一个瓶颈。论文最快的时间排除了目标候选生成时间,因此在 Fast R-CNN 加速 ConvNet 路径后,选择性搜索仍然位于 GPU 检测器之外,成为显而易见的剩余延迟来源。这直接为 Faster R-CNN 铺垫,后者将候选区域生成移入网络。

局限

主要局限是 Fast R-CNN 仍依赖外部目标候选区域,且 0.22 到 0.32 秒的检测器时间不包含候选区域生成。因此它本身并不是一个完整的实时检测器。内存约束在全文中也随处可见:VGG16 在实现中无法使用完整的多尺度设置,conv1_1 精调超出 GPU 内存,图像边长被限制以适应训练。

Fast R-CNN 也在全连接头部中留下了密集 RoI 评估。截断 SVD 以很小的准确率损失降低了成本,但该压缩是叠加在检测器之上的额外近似。最后,层级 minibatch 策略依赖于每张图像的大量候选区域;它对基于候选区域的检测非常出色,但并非对所有密集预测工作负载通用的批处理方案。

链接