R-CNN、SPP-Net、Fast R-CNN…你都掌握了吗?一文总结目标检测必备经典模型(一)
机器之心专栏
本文将分 3 期进行连载,共介绍 16 个在目标检测任务上曾取得 SOTA 的经典模型。
第 1 期:R-CNN、SPP-Net、Fast R-CNN、Faster R-CNN、OHEM
第 2 期:R-FCN、Mask RCNN、YoLo、SSD、FPN、RetinaNet
第 3 期:RRC detection、CornerNet、M2Det、FOCS、ObjectBox
您正在阅读的是其中的第 1 期。前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及 API 等资源。
模型 | SOTA!模型资源站收录情况 | 模型来源论文 |
---|---|---|
R-CNN | https://sota.jiqizhixin.com/project/r-cnn-2 收录实现数量:2 支持框架:MindSpore | Rich feature hierarchies for accurate object detection and semantic segmentation |
SPP-Net | https://sota.jiqizhixin.com/project/sppnet 收录实现数量:3 支持框架:PyTorch,MindSpore等 | Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition |
Fast R-CNN | https://sota.jiqizhixin.com/project/fast-rcnn-2 收录实现数量:27 支持框架:PyTorch,TensorFlow等 | Fast R-CNN |
Faster R-CNN | https://sota.jiqizhixin.com/project/faster-r-cnn-2 收录实现数量:16 支持框架:PyTorch,TensorFlow等 | Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks |
OHEM | https://sota.jiqizhixin.com/project/ohem 收录实现数量:5 支持框架:PyTorch,TensorFlow | Training Region-based Object Detectors with Online Hard Example Mining |
目标检测作为计算机视觉的基本问题之一,是许多其他计算机视觉任务的基础,如实例分割、图像字幕、对象跟踪等。简单来说,目标检测就是对图片中物体正确分类,同时找到物体的具体位置,具体是指识别图片中有哪些物体以及物体的位置(坐标位置)的技术。在互联网、大数据、人工智能等技术的发展浪潮下,目标检测展现出巨大的应用价值,受到工业界、学术界越来越多的关注。
目标检测的发展大致经历了两个历史时期:“ 传统的目标检测时期 ” ( 2014年以前 ) 和 “ 深度学习的目标检测时期 ” ( 2014年以后 )。本文重点回顾深度学习时代的经典模型。在深度学习时代,目标检测可以分为两类:“ two-stage detection ” 和 “ one-stage detection ”,前者将检测框定为一个 “ 从粗到细 ” 的过程,而后者将其定义为 “ 一步完成 ”。我们在介绍过程中,将分两类进行分析。两阶段模型(two-stage detection)因其对图片的两阶段处理得名,也称为基于区域(Region-based)的方法,R-CNN系列工作就是这一类型的代表。单阶段模型(one-stage detection)没有中间的区域检出过程,直接从图片获得预测结果,也被称为Region-free方法。
本文回顾目标检测中必备的TOP模型,包括one-stage模型和two-stage模型。
一、two-stage模型
1、 R-CNN
R-CNN是以深度神经网络为基础的物体检测模型 ,R-CNN在当时以优异的性能令世人瞩目,更重要的是,后续的SPPNet、Fast R-CNN、Faster R-CNN模型都是照着这个检测思路来工作的。R-CNN是这个系列的开山之作。
R-CNN将检测抽象为两个过程,首先,基于图片提出若干可能包含物体的区域(即图片的局部裁剪,被称为Region Proposal),文中使用的是Selective Search算法。其次,在提出的这些区域上运行当时表现最好的分类网络(文中使用AlexNet),得到每个区域内物体的类别。
如图1,R-CNN模型的具体实现步骤(以AlexNet网络为基准)如下:(1)确定图片中可能存在目标的侯选区域 (region proposal);(2)将候选区域调整为适应AlexNet网络的输入图像的大小227×227,通过CNN对候选区域提取特征向量,将2000个CNN特征组确定为AlexNet的最终输出,输出的大小为2000×4096;(3)利用2000×4096维特征训练SVM分类器,生成2000×20种类别矩阵;(4)分别对2000×20维矩阵进行非极大值抑制(Non-maximum suppression,NMS)剔除重叠的候选框,得到与目标物体最相关的一些建议框;(5)修正bbox,对bbox做回归微调。
图1. R-CNN目标检测系统概览
当前 SOTA!平台收录 R-CNN 共 2 个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
R-CNN | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/r-cnn-2 |
2、 SPP-Net
SPPNet(spatial pyramid pooling Net,空间金字塔池化)具体是在R-CNN的基础上引入了一个SPP层,其基本思路是:剔除原始图像上的缩放等操作,转而在卷积特征上采用空间金字塔池化层。此外,SPPNET 解决了 R-CNN 检测速度慢的问题。在一张图片中提取出 region proposal 之后,需要把每一个 region proposal 当做一张图片参加后面的操作,针对2000个region proposal,可以将它们看做一张图片的一个部分,我们可以选择对图像进行一次卷积层的特征提取,之后仅仅需要将 region proposal 从原图上的位置直接映射到卷积层的特征图上,这样针对一张图片只需要在它的卷积层上做一次特征提取即可,之后再将每一个 region proposal 的卷积层特征直接输入到全连接层上做后面的操作就可以了。
SPPNet还解决了R-CNN的另外一个问题:每一个 region proposal 的大小尺度都是不一样的,而全连接层的输入必须是同一长度的, 因此不能将 region proposal 直接输入到全连接层上。SPPNet针对输入到 CNN 中的每一张图片,进行卷积流程之后就能够获取卷积的特征,比如在 VGG16 中,最后的卷积层是 conv5_3,就能够得到512张特征图。原图中的一个 region proposal 映射到特征图上的区域,就是图中的 window 区域,只需要把这些大小尺度不同的 window 的特征对应得到维度相同的特征,并把它们输入到全连接层上,之后只需要在卷积层上对图片进行一次特征提取。SPPNET 采用的是空间金字塔的采样方式,把每一个窗口分割为 4×4,2×2,1×1 的块,之后对每一个块利用 max-pooling进行采样,确保每一个窗口通过 SPP 层之后就能输出一个(4×4+2×2+1×1)×512 维度的向量特征,把这个多维度的向量特征当做全连接层的输入来参加之后的流程。
图2. 一个带有空间金字塔池层的网络结构。这里256是conv5层的过滤器编号,conv5是最后一个卷积层
SPPNET 目标检测方法的操作步骤如下:(1) 区域选择:在图片中选取 2000 个候选区域,可采用 selective search 选取;(2) 候选区域缩放:SPPNET统一候选区域的长宽的最短边的长度,即 min(w,h)=s,s 从{480,576,688,864,1200}中进行选择,具体选择的原理是令调整之后的候选区域和 224×224 最相近,则为最优选择;(3) 提取特征:采用 SPPNET 架构来进行特征提取;(4) 分类和回归:与R-CNN 类似,利用特征训练SVM 分类器,同时采用边框回归来进行候选边框的调整。
当前 SOTA!平台收录 SPPNET 共 3 个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
SPPNET | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/sppnet |
3、 Fast R-CNN
SPPNet的性能已经得到很大的改善,但是由于网络之间不统一训练,造成很大的麻烦,接下来的Fast R-CNN就是为了解决这样的问题。Fast R-CNN提出了一个RoI pooling,然后整合整个模型,对CNN、RoI pooling、分类器、bbox回归几个模块一起训练。
Fast R-CNN采用精简的 SPP 架构:在卷积层的最后一层后面加了一个 ROI pooling layer 结构,它的操作和 SPP 是类似的,SPPNET 采用的是不同形状大小的金字塔映射,来对每一个 proposal 进行投射,而 ROI pooling layer 仅要求对 7*7 的特征图进行下采样操作。比如对VGG16 模型 conv5_3 是有 512 个特征图的,那么全部的 region proposal 的全连接层的输入向量就是 7×7×512 维的特征向量。
如图3,Fast R-CNN 模型的实现步骤如下:(1)首先将整个图片输入到一个基础卷积网络,得到整张图的feature map;(2)将选择性搜索算法的结果region proposal(RoI)映射到feature map中;(3)RoI pooling layer提取一个固定长度的特征向量,每个特征会输入到一系列全连接层,得到一个RoI特征向量(此步骤是对每一个候选区域都会进行同样的操作)。其中一个是传统softmax层进行分类,输出类别有K个类别加上”背景”类,另一个是bounding box 回归。
图3. Fast R-CNN架构。将一个输入图像和多个感兴趣的区域(RoI)输入到一个全卷积网络。每个ROI汇集成一个固定大小的特征图,然后通过全连接层(FCs)映射成一个特征向量。该网络对每个RoI有两个输出向量:softmax概率和每类bounding box回归偏移。该架构采用多任务损失法进行端到端训练
当前 SOTA!平台收录 Fast R-CNN 共 27 个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
Fast R-CNN | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/fast-rcnn-2 |
4、 Faster R-CNN
Faster R-CNN 舍弃了之前目标检测使用的 selective search 算法,而直接采用 RPN(Region Proposal Networks)网络来提取候选区域。RPN 将一张大小随意的图片输入到 RPN 结构中,得到的是一系列矩形候选区域,每一个矩形候选区域都对应着一个目标分数和位置信息。RPN 结构如图4:
图4. RPN结构
Faster R-CNN模型实现步骤如下:(1)提取特征:类似 Fast R-CNN,将整幅图像作为输入,采用 CNN 来对整幅图像进行操作,得到图像的特征层;(2)候选区域:利用 k 个不相同的矩形框(Anchor Box)在最后的卷积特征层上进行候选区域的提取,k 通常选取 9;(3)分类与回归:采用 object/non-object 来对每一个 Anchor Box 进行目标二分类,并且采用 k 个回归模型来对候选框的大小和位置进行微调,通常选用 9 个回归模型,这 9 个回归模型对应不同的 Anchor Box,最后对目标进行检测与分类。
图5. Faster R-CNN是一个用于物体检测的单一、统一的网络。RPN模块作为这个统一网络的 "注意力"
当前 SOTA!平台收录 Faster R-CNN 共 16 个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
Faster R-CNN | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/faster-r-cnn-2 |
5、 OHEM
OHEM(online hard example mining)是一种在线难例挖掘算法,用于训练基于区域的ConvNet检测器。该算法是对SGD的简单修改,根据非均匀的非平稳分布对训练样本进行采样,该分布取决于所考虑的每个样本的当前损失。该方法利用特定于检测的问题结构,其中每个SGD mini-batch仅涉及一个或两个图像,但是由数千个候选样本组成。候选样本根据偏向于多种高损失实例的分布进行二次采样。梯度计算(反向传播)仍然高效,因为它仅使用所有候选的一小部分。作者将OHEM应用于标准的Fast R-CNN检测方法,展示了与基线训练算法相比的三个好处:(1)它消除了对基于区域的ConvNets中常用的几种启发式和超参数的需求;(2)它产生了平均精度的一致且显著的提升;(3)随着训练集变得越来越大和越来越困难,它的有效性也会增加。
OHEM的过程如下。对于SGD第t次迭代的输入图像,首先使用Conv网络计算一个Conv特征图。然后,RoI网络使用这个特征映射和所有输入RoI (R),而不是抽样的mini-batch,来执行正向传递。损失表示当前网络在每个RoI上的表现如何。Hard样本是通过按损耗对输入RoI进行排序来选择的,并以当前网络性能最差的B/N示例为例。大部分的正向计算是通过Conv特征在RoIs之间共享的,所以需要额外的计算来转发所有的RoIs是相对较小的。此外,由于只选择了少量的RoI来更新模型,所以后向传递并不比以前更昂贵。不过,高重叠的共同投资回报率很可能有相关的损失。此外,由于分辨率的差异,这些重叠的RoI可以投影到Conv特征图中的相同区域,从而导致损失的重复计算。为了处理这些冗余和相关区域,作者使用标准非最大抑制(NMS)来执行重复数据删除。给定RoI及其损失列表,NMS通过迭代选择损失最大的RoI,然后删除与所选区域有高度重叠的所有较低的RoI。使用宽松的IoU阈值0.7来抑制只有高度重叠的RoI。
图6. OHEM训练过程,给定一个图像和选择性搜索的RoI,conv网络计算出一个conv特征图。在(a)中,只读RoI网络对特征图和所有RoI(绿色箭头所示)进行前向传递。然后,Hard RoI模块使用这些RoI损失来选择B个样本。在(b)中,这些hard样本被RoI网络用来计算前向和后向传递(红色箭头所示)
如图6所示的架构,OHEM维护了两个RoI网络副本,其中一个是只读的。这意味着只读RoI网络(图6(a))仅为所有RoI的前向传播分配内存,而不是标准的RoI网络为前向和后向传播都分配内存。对于SGD迭代,给定卷积特征映射,只读RoI网络执行前向传播并计算所有输入RoI(R)的损失(图6,绿色箭头)。然后,Hard RoI采样模块选择输入到常规RoI网络的Hard样本(Rhard-sel)(图2(b),红色箭头))。该网络仅计算Rhard-sel的前向和后向通道,累积梯度并将它们传递给conv网络。在实践中,作者使用来自所有N个图像的所有RoI作为R,因此,只读RoI网络的有效批量大小是|R|
当前 SOTA!平台收录 OHEM 共 5 个模型实现资源。
项目 | SOTA!平台项目详情页 |
---|---|
OHEM | 前往 SOTA!模型平台获取实现资源:https://sota.jiqizhixin.com/project/ohem |
前往 SOTA!模型资源站(sota.jiqizhixin.com)即可获取本文中包含的模型实现代码、预训练模型及API等资源。
网页端访问:在浏览器地址栏输入新版站点地址 sota.jiqizhixin.com ,即可前往「SOTA!模型」平台,查看关注的模型是否有新资源收录。
移动端访问:在微信移动端中搜索服务号名称「机器之心SOTA模型」或 ID 「sotaai」,关注 SOTA!模型服务号,即可通过服务号底部菜单栏使用平台功能,更有最新AI技术、开发资源及社区动态定期推送。
微信扫码关注该文公众号作者