目标检测技术演进:Fast R-CNN、Faster R-CNN

简介: 我讲了 RCNN 算法,似乎它的表现不太好,所以这次我们讲讲它的进化版 —— Fast RCNN 和 Faster RCNN

在上一篇目标检测技术演进:R-CNN、Fast R-CNN、Faster R-CNN 之 RCNN中,我讲了 RCNN 算法,似乎它的表现不太好,所以这次我们讲讲它的进化版 —— Fast RCNN 和 Faster RCNN。

如果你还没看上一篇,可以在我的博客或者知乎查看。

1. Fast RCNN

先看看 Fast RCNN,RCNN 的时间花费主要来自于计算量的巨大。Fast RCNN 在时间花费的提升,就是因为减少了很多的计算量。比较一下,在 RCNN 上,我们在 CNN 上对一张图片跑 2000 次(因为一张图片会用 Selective Search 生成 2000 个建议区域),但是在 Fast RCNN 上我们对每一张图片只跑一次,然后就可以得到所有的区域,这些区域会在后面放到一个 映射(map) 上面,就可以一次生成了。(后面看到图可能会比较直观。)

RCNN 的作者 Ross Girshick 应用一种方法来让 2000 个区域共享 CNN 中的计算。所以在 Fast RCNN 中把输入图片放到 CNN 中,它会生成卷积特征映射。建议区域就会被提取到这个映射上面。然后使用一个 RoI 池化层(RoI pooling layer) 来把所有的建议区域转换成适合的尺寸,这样就可以输进后面的 全连接层(fully connnected network) 了。

分步来看看会比较清晰,这一步我直接把每一步的图片加上去,有助于理解:

  1. 首先是输入图片,这与之前的 RCNN 差不多:

在这里插入图片描述

  1. 图片通过 卷积网络(ConvNet) 得到 RoI:

在这里插入图片描述

  1. 然后应用 RoI 池化层来改变所提取的感兴趣区域的大小,也就是 RoI 的大小,来确保所有的区域都是相同的尺寸,这是为了后面可以输入到全连接层上。所以这里的 RoI Pooling 是 Fast RCNN 的另一份新方法:

在这里插入图片描述

  1. 最后这些区域就输入到全连接层来对它们进行分类,同时会使用 softmax 和 线性回归层(linear regression layers) 来输出 bounding boxes:

在这里插入图片描述

我们来看看两个网络的差别。在 RCNN 上 2000 个区域都是独立的,没有生成映射,而在 Fast RCNN 上,生成的映射就相当于一个区域;在特征提取、分类和生成选框上,前者使用了三个模型,而后者把三个模型集合到一个模型中,这样一来就省下了很多的时间。

2. Fast RCNN 的不足

Fast RCNN 没有解决的一个问题就是,它依然在使用选择性搜索来作为寻找 RoI 的区域建议方法,因为它依然很慢。每张图片话费 2 秒的时间吧,虽然这和 RCNN 比起来好很多了。但是依然不能够在大量数据上使用。

3. Faster RCNN 横空出世

Faster RCNN 与 Fast RCNN 最大的不同就是:Faster RCNN(以下称为 Faster)使用了一个全新的网络 —— Region Proposal Network,也就是「区域建议网络」,简称 RPN。RPN 把图片特征 map 作为输入,生成一系列的带目标分数的建议。也就是说,不再是单纯地只输出建议,而是把建议中是否有物体的分数也预测了。分数越高,代表区域包含物体的可能性越高。

还是来看看图文步骤:

  1. 把图片作为输入放进卷积网络中去,返回的是一个特征映射(feature map);
  2. RPN 处理这些 map,返回带分数的物体建议;
  3. 接下来的 RoI pooling 把这些建议都 reshape 成相同的尺寸;
  4. 最后,放到含有 softmax 层和线性回归层的全连接层上,来分类和输出 bounding boxes。

在这里插入图片描述

这里 RPN 被集成在了网络里面,等于从区域建议到最后的分类回归都在同一个网络,实现了端到端。即我们给这个网络输入一张图片,网络就会输出 bounding boxes 和分数。RPN 是 Faster 的重点,来看看里面怎么运作的。

从上图看到,Faster 从 CNN(图中 conv layers)里得到 feature map,然后输入到 RPN 里。在 RPN 在这个 map 上使用一个滑动窗口(sliding window),在每个窗口中都会生成 k 个不同形状和大小的 Anchor boxes。在论文中他们使用的是 9 个 Anchor。

Anchor 就是在图片中有不同形状和大小的但具有固定尺寸的边界框。什么意思呢?就是每一个 Anchor 都是固定的大小,比如有 3*3、6*6、3*6、6*3 这些,他们和最后的 bounding boxes 不一样,anchor 的尺寸都是固定的。就像上图红色的框,而旁边的蓝色的框代表了其不同形状和大小的框。

在这里插入图片描述

对于 anchor,RPN 会做两件事:

  1. 第一件就是预测 anchor 框出的部分属于物体的可能性;
  2. 第二就是这个 anchor 对于最后应该生成的 bounding box 的回归,或者说怎么去调节这个 anchor 能使它更加好的框出物体。

在 RPN 之后我们会得到不同形状大小的 bounding boxes,再输入到 RoI 池化层中。在这一步,虽然知道 boxes 里面是一个物体了,但其实是不知道它属于哪个类别的。就好像是,它知道这个东西是个物体,但是不知道是猫是狗还是人。RoI 池化层的作用就是提取每个 anchor 的固定大小的 feature map:
在这里插入图片描述

这些 feature map 最后就被送到全连接层里去做 softmax 分类和线性回归。最后就会得到分类好的又有 bounding box 的物体了。

4. Faster RCNN 的不足

虽然是 Faster 了,但是其实还是存在不足的。但是在我看来,它表现得已经很好了,但是我们的目标总是想往着更好去的不是吗?

从 RCNN 到 Faster 算法,所有的这些都是使用区域建议来识别物体的。这些网络不是看一张图片的整体的,而是集中关注它的某一部分,这样就造成了两个问题:

  • 网络需要对一张图片的每一部分都处理,以此来保证能够检测出所有的物体;
  • 网络中的每一部分都接在上一部分的后面,所以后面系统的表现就依赖于前面系统了。

5. 各种算法的比较:

算法 特点 平均时间花费(秒) 限制性
CNN 把图片分为多个区域然后对各个区域进行分类 需要大量地区域才能使得预测变精确,但是这样做会带来很大的计算量
RCNN 使用选择性搜索生成区域,每张图片抽取 2000 个区域。 45 - 50 由于每个区域都输入到 CNN 上,而且使用了三个独立的模型,计算时间很长
Fast RCNN 每张图片由 CNN 抽取 feature maps,然后由选择性搜索来生成预测区域;把 RCNN 的三个模型集成为一个 2 因为选择性搜索本身就很慢,再加上计算量依旧没减,时间花费还是挺高
Faster RCNN 区域建议网络(RPN)来代替选择性搜索,使得算法变得快了很多 0.2 因为不同的系统使用串联的方式连接,目标建议依旧是时间花费的主要原因,而且每层系统的表现受到上层系统的制约

6. 结语

我们介绍了 RCNN 的历史。但这仅仅是目标检测算法的开始,还有许许多多的算法,我们会陆续为你介绍。目标检测是一个很吸引人的领域。RCNN 算是其中的一个经典,但是还有其他表现得比它好的算法,例如:YOLO、RetinaNet、Master RCNN 等。我们会继续讲解介绍这些网络,期待着吧!


如果你想了解更多关于人工智能的资讯,欢迎扫码关注微信公众号以及知乎专栏 「译智社」,我们为大家提供优质的人工智能文章、国外优质博客和论文等资讯哟!

目录
相关文章
|
4月前
|
机器学习/深度学习 算法 PyTorch
【PyTorch实战演练】Fast R-CNN中的RoI(Region of Interest)池化详解
【PyTorch实战演练】Fast R-CNN中的RoI(Region of Interest)池化详解
144 1
|
4月前
|
机器学习/深度学习 算法 安全
FRCNN来袭 | Faster RCNN与FCN永不遗忘,联邦学习+边缘数据既保护隐私也提升性能
FRCNN来袭 | Faster RCNN与FCN永不遗忘,联邦学习+边缘数据既保护隐私也提升性能
183 0
|
22天前
|
机器学习/深度学习 网络安全 TensorFlow
探索操作系统的心脏:内核与用户空间的奥秘云计算与网络安全:技术挑战与未来趋势深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【8月更文挑战第29天】在数字世界的每一次点击与滑动背后,都隐藏着一个不为人知的故事。这个故事关于操作系统——计算机的灵魂,它如何协调硬件与软件,管理资源,并确保一切运行得井井有条。本文将带你走进操作系统的核心,揭示内核与用户空间的秘密,展现它们如何共同编织出我们日常数字生活的底层结构。通过深入浅出的讲解和代码示例,我们将一同解锁操作系统的神秘面纱,理解其对现代计算的重要性。 【8月更文挑战第29天】本文将深入探讨卷积神经网络(CNN)的基本原理和结构,以及它们如何被广泛应用于图像识别任务中。我们将通过代码示例来展示如何使用Python和TensorFlow库构建一个简单的CNN模型,并训练
|
4月前
|
机器学习/深度学习 自然语言处理 大数据
深度学习中的卷积神经网络优化技术探析
【2月更文挑战第4天】在深度学习领域,卷积神经网络(CNN)一直扮演着重要角色,但其训练和推理过程中存在许多挑战。本文将从优化角度出发,探讨卷积神经网络中的权重初始化、损失函数设计、学习率调整等优化技术,旨在为深度学习爱好者提供一些实用的技术感悟和分享。
74 3
|
4月前
|
机器学习/深度学习 数据可视化 定位技术
PrObeD方法开源 | 主动方法助力YOLOv5/Faster RCNN/DETR在COCO/GOD涨点
PrObeD方法开源 | 主动方法助力YOLOv5/Faster RCNN/DETR在COCO/GOD涨点
66 0
|
4月前
|
机器学习/深度学习 监控 算法
【Keras计算机视觉】Faster R-CNN神经网络实现目标检测实战(附源码和数据集 超详细)
【Keras计算机视觉】Faster R-CNN神经网络实现目标检测实战(附源码和数据集 超详细)
63 0
|
4月前
|
机器学习/深度学习 算法 固态存储
【计算机视觉】目标检测中Faster R-CNN、R-FCN、YOLO、SSD等算法的讲解(图文解释 超详细必看)
【计算机视觉】目标检测中Faster R-CNN、R-FCN、YOLO、SSD等算法的讲解(图文解释 超详细必看)
346 0
|
5天前
|
机器学习/深度学习 人工智能 TensorFlow
深度学习入门:理解卷积神经网络(CNN)
【9月更文挑战第14天】本文旨在为初学者提供一个关于卷积神经网络(CNN)的直观理解,通过简单的语言和比喻来揭示这一深度学习模型如何识别图像。我们将一起探索CNN的基本组成,包括卷积层、激活函数、池化层和全连接层,并了解它们如何协同工作以实现图像分类任务。文章末尾将给出一个简单的代码示例,帮助读者更好地理解CNN的工作原理。
21 7
|
3天前
|
机器学习/深度学习 算法 算法框架/工具
深度学习中的卷积神经网络(CNN)及其在图像识别中的应用
【9月更文挑战第16天】本文将深入浅出地介绍卷积神经网络(CNN)的基本概念、结构和工作原理,同时通过一个实际的代码示例来展示如何在Python中使用Keras库构建一个简单的CNN模型进行图像识别。我们将看到,即使是初学者也能够通过简单的步骤实现深度学习的强大功能,进而探索其在复杂数据集上的应用潜力。
|
11天前
|
机器学习/深度学习 自然语言处理 自动驾驶
CNN的魅力:探索卷积神经网络的无限可能
卷积神经网络(Convolutional Neural Networks, CNN)作为人工智能的重要分支,在图像识别、自然语言处理、医疗诊断及自动驾驶等领域展现了卓越性能。本文将介绍CNN的起源、独特优势及其广泛应用,并通过具体代码示例展示如何使用TensorFlow和Keras构建和训练CNN模型。

热门文章

最新文章