目标检测之二阶检测算法:RCNN、Fast RCNN、Faster RCNN

系列文章目录

前言

注:本系列文章为本人学习目标检测阶段的读书总结,详细参考书目会在文末说明。


一、RCNN

源论文下载地址
源码下载地址

RCNN 是Ross Girshick团队在2014年提出来的目标检测算法,被誉为该领域的开山之作。主要的思想是将检测问题当做分类问题处理。

检测过程分为四个步骤:

  1. 候选区域生成:使用 Resion Proposal 提取候选区域,约1k~2k个候选区域,然后合并包含同一物体可能性高的区域。提取完后,对每一个区域进行归一化,统一图像大小。
  2. 特征提取:将上一步骤归一化的图像输入CNN网络,得到固定维度的特征输出。
  3. SVM分类:对上一步骤输出的特征进行分类,得到分类结果。
  4. 位置修正:通过回归器对特征边界进行回归以得到更精确的目标区域。

详细解说推荐视频:深度学习目标检测篇

二、Fast RCNN

源论文下载地址
源码下载地址

RCNN 虽然实现了物体检测,但是需要进行多步训练,步骤繁琐且识别速度非常慢,同时需要进行归一化处理得到相同尺寸的特征图像。为了进一步提升效果,Ross Girshick 在2015年提出了 Fast RCNN。算法基于VGG16网络,在训练速度上比RCNN快了近9倍,在测试速度上快了213倍,并在VOC 2012数据集上达到了68.4%的检测率。

主要的改进有以下三点:

  1. 共享卷积:在RCNN中输入卷积操作的是一个个生成的候选区域,而Fast RCNN 直接将整张图像输入卷积,避免了大量的重复卷积操作,节省了计算资源。
  2. RoI Pooling:利用特征池化操作进行尺度变换,使得输入可以是任意大小的图片。
  3. 多任务损失:将最后的分类和回归网络一起训练,同时为了避免SVM单独训练和速度慢的问题,引入Softmax函数进行分类。

Fast RCNN大大提升了检测速度,但是在实际过程中,候选区域生成阶段始终占据大部分时间开销(2~3秒),远比识别阶段(0.2秒)要慢。

三、Faster RCNN

源论文下载地址
源码下载地址(Python版)
源码下载地址(MATLAB版)

为了解决候选区域生成占据大量时间开销的问题,2015年的NIPS出现了Faster RCNN。该算法提出了RPN(Region Proposal Network)网络,利用Anchor机制将区域生成与卷积网络联系到一起,将检测速度一举提升到了17 FPS(Frames Per Second),并在VOC 2012测试集上实现了70.4%的检测结果。

区别于候选区域随机生成,基于Anchor机制的区域生成直接默认生成一系列固定大小宽高的矩形框,后续只需要对框进行微调。

下图展示的是Faster RCNN 的框架图:从功能模块来讲,主要包括4部分:特征提取网络、RPN模块、RoI Pooling(Region of Interest)模块与RCNN模块。

目标检测之二阶检测算法:RCNN、Fast RCNN、Faster RCNN_第1张图片
这里主要介绍RPN模块(区域生成模块):其作用是生成较好的建议框,即Proposal,这里用到了强先验的Anchor。RPN包含5个子模块:

  • Anchor生成:RPN对feature map上的每一个点都对应了9个Anchors,这9个Anchors大小宽高不同,对应到原图基本可以覆盖所有可能出现的物体。因此,有了数量庞大的Anchors,RPN接下来的工作就是从中筛选,并调整出更好的位置,得到Proposal。
  • RPN卷积网络:与上面的Anchor对应,由于feature map上每个点对应了9个Anchors,因此可以利用1×1的卷积在feature map上得到每一个Anchor的预测得分与预测偏移值。
  • 计算RPN loss:这一步只在训练中,将所有的Anchors与标签进行匹配,匹配程度较好的Anchors赋予正样本,较差的赋予负样本,得到分类与偏移的真值,与第二步中的预测得分与预测偏移值进行loss的计算。
  • 生成Proposal:利用第二步中每一个Anchor预测的得分与偏移量,可以进一步得到一组较好的Proposal,送到后续网络中。
  • 筛选Proposal得到RoI:在训练时,由于Proposal数量还是太多(默认是2000),需要进一步筛选Proposal得到RoI(默认数量是256)。在测试阶段,则不需要此模块,Proposal可以直接作为RoI,默认数量为300。

3.1 不同库源码对比

GitHub 上面复现Faster RCNN的源码评分较高的有大概五六份,这里进行一些对比:

github 地址 环境配置 硬件配置 Star 模型性能
(官方Python版本) rbgirshick/py-faster-rcnn Python
Caffe
CUDA
3G 内存 7.1k VOC 2017
测试时间 220ms/image(VGG16)
mAP 和 Matlab 版 Faster RCNN 训练结果 相近
jwyang/faster-rcnn.pytorch Python
Pytorch
CUDA
NVIDIA TITAN XP*8 6.8k VOC 2007
mAP: 69.4(VGG16)
75.2(Res-101)
smallcorgi/Faster-RCNN_TF TensorFlow
Python
3G GPU 2.4k VOC 2007
mAP: 68.1 (VGG16)
endernewton/tf-faster-rcnn TensorFlow
Caffe
多块 GPU 3.6k VOC 2007
mAP: 70.8 (VGG16)
75.7(ResNet101)
COCO 2014
mAP: 30.2 (VGGNet)
35.4 (ResNet101)
36.1 (MobileNet)
(官方Maltab版本) ShaoqingRen/faster_rcnn Matlab
Caffe
Titan, Titan Black, Titan X,
K20, K40, K80
5GB GPU(RPN) 8GB GPU(Fast RCNN)
3.5k 具体结果见下图
longcw/faster_rcnn_pytorch 不支持Pytorch 0.4.0 及以上 可以CPU/GPU 1.6k 没有达到官方mAP

MATLAB 版 Faster RCNN 实验结果:
目标检测之二阶检测算法:RCNN、Fast RCNN、Faster RCNN_第2张图片

参考文献

[1]. 董洪义.深度学习之Pytorch物体检测实战[M].北京:机械工业出版社, 2019.

你可能感兴趣的:(深度学习之目标检测,目标检测,算法,计算机视觉)