选自tryolabs
作者:Matt Simon
机器之心编译
本文详细解释了 Faster R-CNN 的网络架构和工作流,一步步带领读者理解目标检测的工作原理,作者本人也提供了 Luminoth 实现,供大家参考。
Luminoth 实现:https://github.com/tryolabs/luminoth/tree/master/luminoth/models/fasterrcnn
在阅读本文之前,若想了解 R-CNN 网络家族的发展,可以参看机器之心的文章:
深度 | 用于图像分割的卷积神经网络:从R-CNN到Mark R-CNN
去年,我们决定深入了解 Faster R-CNN,阅读原始论文以及其中引用到的其他论文,现在我们对其工作方式和实现方法有了清晰的理解。
我们最终在 Luminoth 中实现了 Faster R-CNN,Luminoth 是基于 TensorFlow 的计算机视觉工具包,易于训练和监控,支持多种不同的模型。到目前为止,Luminoth 已经吸引了很大的关注,我们在 ODSC Europe 和 ODSC West 的论坛中也介绍过这个项目。
(ODSC,Open Data Science Conference,专注于开源数据科学的会议)。
基于开发 Luminoth 的工作和过去的报告,我们认为把所有实现 Faster RCNN 的细节和相关链接整合到一篇博客中是一个不错的点子,这对未来其他对此领域感兴趣的人会很有意义。
背景
Faster R-CNN 最早在 2015 年的 NIPS 发布。其在发布后经历了几次修改,这在之后博文中会有讨论。Faster-RCNN 是 RCNN 系列论文的第三次迭代,这一系列论文的一作和联合作者是 Ross Girshick。
这一切始于 2014 年的一篇论文「Rich feature hierarchies for accurate object detection and semantic segmentation」(R-CNN),其使用了称为 Selective Search 的算法用来提取感兴趣候选区域,并用一个标准的卷积神经网络 (CNN) 去分类和调整这些区域。Fast R-CNN 从 R-CNN 演变优化而来,Fast R-CNN 发布于 2015 年上半年,其中一种称为感兴趣区域池化的技术,使得网络可以共享计算结果,从而让模型提速。这一系列算法最终被优化为 Faster R-CNN,这是第一个完全可微分的模型。
框架
Faster R-CNN 的框架由几个模块部件组成,所以其框架有些复杂。我们将从高层次的概述开始,之后会介绍不同组成部分的具体细节。
从一张图片开始,我们将会得到:
一个边框列表
每个边框会被分配一个标签
每对标签和边框所对应的概率
完整的 Faster R-CNN 框架
输入的图片以长×宽×高的张量形式表征,之后会被馈送入预训练好的卷积神经网络,在中间层得到特征图。使用该特征图作为特征提取器并用于下一流程。
上述方法在迁移学习中经常使用,尤其在为小数据集训练分类器时,其通常取用了在另一个较大数据集训练好的权重。我们在下一章节会深入了解这个部分。接着,我们会使用到区域建议网络(Region Proposal Network,RPN)。使用 CNN 计算得到的特征,去寻找到预设好数量的可能包含目标的区域 (边框)。
使用深度学习进行目标检测最大的困难可能是生成一个长度可变的边框列表。使用深度神经网络建模时,模型最后一部分通常是一个固定尺寸的张量输出(除了循环神经网络)。例如,在图片分类中,输出是 (N,) 形状的张量,N 是类别的数量,其中在第 i 个位置标量含有该图片属于类别 i 的概率。
RPN 中长度可变列表的问题可以使用锚点解决:使用固定尺寸的参考边框在原始图片上一致地定位。不是直接探测目标在哪,而是把问题分两个方面建模,对每个锚点,我们考虑:
这个锚点包含相关目标吗?
如何调整锚点以更好的拟合到相关目标?
可能会有点困扰,但是没关系,下面会深入了解。
在取得一系列的相关目标和其在原始图片上的位置后,目标探测问题就可以相对直观地解决了。使用 CNN 提取到的特征和相关目标的边框,我们在相关目标的特征图上使用感兴趣区域池化 (RoI Pooling),并将与目标相关的特征信息存入一个新的张量。之后的流程与 R-CNN 模型一致,利用这些信息:
对边框内的内容分类(或者舍弃它,并用「背景」标记边框内容)
调整边框的坐标(使之更好地包含目标)
显然,这样做会遗失掉部分信息,但这正是 Faster-RCNN 如何进行目标探测的基本思想。下一步,我们会仔细讨论框架、损失函数以及训练过程中各个组件的具体细节。
基础网络
之前提到过,Faster R-CNN 第一步要使用在图片分类任务 (例如,ImageNet) 上预训练好的卷积神经网络,使用该网络得到的中间层特征的输出。这对有深度学习背景的人来说很简单,但是理解如何使用和为什么这样做才是关键,同时,可视化中间层的特征输出也很重要。没有一致的意见表明哪个网络框架是最好的。原始的 Faster R-CNN 使用的是在 ImageNet 上预训练的 ZF 和 VGG,但之后出现了很多不同的网络,且不同网络的参数数量变化很大。例如,MobileNet,以速度优先的一个小型的高效框架,大约有 330 万个参数,而 ResNet-152(152 层),曾经的 ImageNet 图片分类竞赛优胜者,大约有 6000 万个参数。最新的网络结构如 DenseNet,可以在提高准确度的同时缩减参数数量。
VGG
在讨论网络结构孰优孰劣之前,让我们先以 VGG-16 为例来尝试理解 Faster-RCNN 是如何工作的。
VGG 网络结构
VGG,其名字来自于在 ImageNet ILSVRC 2014 竞赛中使用此网络的小组组名,首次发布于论文」Very Deep Convolutional Networks for Large-Scale Image Recognition」, 作者是 Karen Simonyan 和 Andrew Zisserman。以今天的标准来看这个网络谈不上深度,但是在发布之际 VGG16 比当时常用的网络要多一倍的层数,其推动了「深度 → 更强大性能 → 更好结果」的浪潮(只要训练是可行的)。
当使用 VGG 进行分类任务时,其输入是 224×224×3 的张量 (表示一个 224×224 像素大小的 RGB 图片)。在分类任务中输入图片的尺寸是固定的,因为网络最后一部分的全连接层需要固定长度的输入。在接入全连接层前,通常要将最后一层卷积的输出展开成一维张量。
因为要使用卷积网络中间层的输出,所以输入图片的尺寸不再有限制。至少,在这个模块中不再是问题,因为只有卷积层参与计算。让我们深入了解一下底层的细节,看看具体要使用哪一层卷积网络的输出。Faster R-CNN 论文中没有具体指定使用哪一层;但是在官方的实现中可以观察到,作者使用的是 conv5/conv5_1 这一层 (caffe 代码)。
每一层卷积网络都在前一层的信息基础上提取更加抽象的特征。第一层通常学习到简单的边缘,第二层寻找目标边缘的模式,以激活后续卷积网络中更加复杂的形状。最终,我们得到一个在空间维度上比原始图片小很多,但表征更深的卷积特征图。特征图的长和宽会随着卷积层间的池化而缩小,深度会随着卷积层滤波器的数量而增加。
从图片到卷积特征图
卷积特征图将图片的所有信息编码到深度的维度上,同时保留着原始图片上目标物体的相对位置信息。例如,如果图片左上角有一个红色矩形,经过卷积层的激活,那么红色矩形的位置信息仍然保留在卷积特征图的左上角。
VGG vs ResNet
如今,ResNet 已经取代大多数 VGG 网络作为提取特征的基础框架。Faster-RCNN 的三位联合作者 (Kaiming He, Shaoqing Ren 和 Jian Sun) 也是论文「Deep Residual Learning for Image (https://arxiv.org/abs/1512.03385) Recognition」的作者,这篇论文最初介绍了 ResNets 这一框架。
ResNet 对比 VGG 的优势在于它是一个更深层、大型的网络,因此有更大的容量去学习所需要的信息。这些结论在图片分类任务中可行,在目标探测的问题中也应该同样有效。
ResNet 在使用残差连接和批归一化的方法后更加易于训练,这些方法在 VGG 发布的时候还没有出现。
锚点
现在,我们将使用处理过后的特征图并建议目标区域,也就是用于分类任务的感兴趣区域。之前提到过锚点是解决长度可变问题的一种方法,现在将详细介绍。
我们的目标是寻找图片中的边框。这些边框是不同尺寸、不同比例的矩形。设想我们在解决问题前已知图片中有两个目标。那么首先想到的应该是训练一个网络,这个网络可以返回 8 个值:包含(xmin, ymin, xmax, ymax)的两个元组,每个元组都用于定义一个目标的边框坐标。这个方法有着根本问题,例如,图片可能是不同尺寸和比例的,因此训练一个可以直接准确预测原始坐标的模型是很复杂的。另一个问题是无效预测:当预测(xmin,xmax)和(ymin,ymax)时,应该强制设定 xmin 要小于 xmax,ymin 要小于 ymax。
另一种更加简单的方法是去预测参考边框的偏移量。使用参考边框(xcenter, ycenter, width, height),学习预测偏移量(Δxcenter,Δycenter,Δwidth,Δheight),因此我们只得到一些小数值的预测结果并挪动参考变量就可以达到更好的拟合结果。
锚点是用固定的边框置于不同尺寸和比例的图片上,并且在之后目标位置的预测中用作参考边框。
我们在处理的卷积特征图的尺寸分别是 convwidth×convheight×convdepth,因此在卷积图的 convwidth×convheight 上每一个点都生成一组锚点。很重要的一点是即使我们是在特征图上生成的锚点,这些锚点最终是要映射回原始图片的尺寸。
因为我们只用到了卷积和池化层,所以特征图的最终维度与原始图片是呈比例的。数学上,如果图片的尺寸是 w×h,那么特征图最终会缩小到尺寸为 w/r 和 h/r,其中 r 是次级采样率。如果我们在特征图上每个空间位置上都定义一个锚点,那么最终图片的锚点会相隔 r 个像素,在 VGG 中,r=16。
原始图片的锚点中心
为了选择一组合适锚点,我们通常定义一组固定尺寸 (例如,64px、128px、256px,此处为边框大小) 和比例 (例如,0.5、1、1.5,此处为边框长宽比) 的边框,使用这些变量的所有可能组合得到候选边框 (这个例子中有 1 个锚点和 9 个边框)。
左侧:锚点、中心:特征图空间单一锚点在原图中的表达,右侧:所有锚点在原图中的表达
区域建议网络
RPN 采用卷积特征图并在图像上生成建议。
像我们之前提到的那样,RPN 接受所有的参考框(锚点)并为目标输出一套好的建议。它通过为每个锚点提供两个不同的输出来完成。
第一个输出是锚点作为目标的概率。如果你愿意,可以叫做「目标性得分」。注意,RPN 不关心目标的类别,只在意它实际上是不是一个目标(而不是背景)。我们将用这个目标性得分来过滤掉不好的预测,为第二阶段做准备。第二个输出是边框回归,用于调整锚点以更好的拟合其预测的目标。
RPN 是用完全卷积的方式高效实现的,用基础网络返回的卷积特征图作为输入。首先,我们使用一个有 512 个通道和 3x3 卷积核大小的卷积层,然后我们有两个使用 1x1 卷积核的并行卷积层,其通道数量取决于每个点的锚点数量。
RPN 架构的卷积实现,其中 k 是锚点的数量。
对于分类层,我们对每个锚点输出两个预测值:它是背景(不是目标)的分数,和它是前景(实际的目标)的分数。
对于回归或边框调整层,我们输出四个预测值:Δxcenter、Δycenter、Δwidth、Δheight,我们将会把这些值用到锚点中来得到最终的建议。
使用最终的建议坐标和它们的目标性得分,然后可以得到一套很好的对于目标的建议。
训练、目标和损失函数
RPN 执行两种不同类型的预测:二进制分类和边框回归调整。为了训练,我们把所有的锚点分成两类。一类是「前景」,它与真实目标重叠并且其 IoU(Intersection of Union)值大于 0.5;另一类是「背景」,它不与任何真实目标重叠或与真实目标的 IoU 值 小于 0.1。
然后,我们对这些锚点随机采样,构成大小为 256 的 mini batch——维持前景锚点和背景锚点之间的平衡比例。
RPN 用所有以 mini batch 筛选出来的锚点和二进制交叉熵(binary cross entropy)来计算分类损失。然后它只用那些标记为前景的 mini batch 锚点来计算回归损失。为了计算回归的目标,我们使用前景锚点和最接近的真实目标,并计算将锚点转化为目标所需的正确 Δ。
论文中建议使用 Smooth L1 loss 来计算回归误差,而不是用简单的 L1 或 L2 loss。Smooth L1 基本上就是 L1,但是当 L1 的误差足够小,由确定的 σ 定义时,可以认为误差几乎是正确的且损失以更快的速率减小。
使用 dynamic batches 是具有挑战性的,这里的原因很多。即使我们试图维持前景锚点和背景锚点之间的平衡比例,但这并不总是可能的。根据图像上的真实目标以及锚点的大小和比例,可能会得到零前景锚点。在这种情况下,我们转而使用对于真实框具有最大 IoU 值的锚点。这远非理想情况,但是为了总是有前景样本和目标可以学习,这还是挺实用的。
后处理
非极大抑制(Non-maximum suppression):由于锚点经常重叠,因此建议最终也会在同一个目标上重叠。为了解决重复建议的问题,我们使用一个简单的算法,称为非极大抑制(NMS)。NMS 获取按照分数排序的建议列表并对已排序的列表进行迭代,丢弃那些 IoU 值大于某个预定义阈值的建议,并提出一个具有更高分数的建议。
虽然这看起来很简单,但对 IoU 的阈值设定一定要非常小心。太低,你可能会丢失对目标的建议;太高,你可能会得到对同一个目标的很多建议。常用值是 0.6。
建议选择:应用 NMS 后,我们保留评分最高的 N 个建议。论文中使用 N=2000,但是将这个数字降低到 50 仍然可以得到相当好的结果。
独立应用程序
RPN 可以独立使用,而不需要第二阶段的模型。在只有一类对象的问题中,目标性概率可以用作最终的类别概率。这是因为在这种情况下,「前景」=「目标类别」以及「背景」=「不是目标类别」。
一些从独立使用 RPN 中受益的机器学习问题的例子包括流行的(但仍然是具有挑战性的)人脸检测和文本检测。
仅使用 RPN 的优点之一是训练和预测的速度都有所提高。由于 RPN 是一个非常简单的仅使用卷积层的网络,所以预测时间比使用分类基础网络更快。
兴趣区域池化
在 RPN 步骤之后,我们有很多没有分配类别的目标建议。我们接下来要解决的问题就是如何将这些边框分类到我们想要的类别中。
最简单的方法是采用每个建议,裁剪出来,然后让它通过预训练的基础网络。然后,我们可以用提取的特征作为基础图像分类器的输入。这种方法的主要问题是运行所有 2000 个建议的计算效率和速度都是非常低的。
Faster R-CNN 试图通过复用现有的卷积特征图来解决或至少缓解这个问题。这是通过用兴趣区域池化为每个建议提取固定大小的特征图实现的。R-CNN 需要固定大小的特征图,以便将它们分类到固定数量的类别中。
兴趣区域池化
一种更简单的方法(被包括 Luminoth 版本的 Faster R-CNN 在内的目标检测实现方法所广泛使用),是用每个建议来裁剪卷积特征图,然后用插值(通常是双线性的)将每个裁剪调整为固定大小(14×14×convdepth)。裁剪之后,用 2x2 核大小的最大池化来获得每个建议最终的 7×7×convdepth 特征图。
选择这些确切形状的原因与下一模块(R-CNN)如何使用它有关,这些设定是根据第二阶段的用途得到的。
基于区域的卷积神经网络
基于区域的卷积神经网络(R-CNN)是 Faster R-CNN 工作流的最后一步。从图像上获得卷积特征图之后,用它通过 RPN 来获得目标建议并最终为每个建议提取特征(通过 RoI Pooling),最后我们需要使用这些特征进行分类。R-CNN 试图模仿分类 CNNs 的最后阶段,在这个阶段用一个全连接层为每个可能的目标类输出一个分数。
R-CNN 有两个不同的目标:
1. 将建议分到一个类中,加上一个背景类(用于删除不好的建议)。
2. 根据预测的类别更好地调整建议的边框。
在最初的 Faster R-CNN 论文中,R-CNN 对每个建议采用特征图,将它平坦化并使用两个大小为 4096 的有 ReLU 激活函数的全连接层。
然后,它对每个不同的目标使用两种不同的全连接层:
一个有 N+1 个单元的全连接层,其中 N 是类的总数,另外一个是背景类。
一个有 4N 个单元的全连接层。我们希望有一个回归预测,因此对 N 个类别中的每一个可能的类别,我们都需要 Δcenterx、Δcentery、Δwidth、Δheight。
R-CNN 架构
训练和目标
R-CNN 的目标与 RPN 的目标的计算方法几乎相同,但是考虑的是不同的可能类别。我们采用建议和真实边框,并计算它们之间的 IoU。
那些有任何真实边框的建议,只要其 IoU 大于 0.5,都被分配给那个真实数据。那些 IoU 在 0.1 和 0.5 之间的被标记为背景。与我们在为 RPN 分配目标时相反的是,我们忽略了没有任何交集的建议。这是因为在这个阶段,我们假设已经有好的建议并且我们对解决更困难的情况更有兴趣。当然,这些所有的值都是可以为了更好的拟合你想找的目标类型而做调整的超参数。
边框回归的目标是计算建议和与其对应的真实框之间的偏移量,仅针对那些基于 IoU 阈值分配了类别的建议。
我们随机抽样了一个尺寸为 64 的 balanced mini batch,其中我们有高达 25% 的前景建议(有类别)和 75% 的背景。
按照我们对 RPN 损失所做的相同处理方式,现在的分类损失是一个多类别的交叉熵损失,使用所有选定的建议和用于与真实框匹配的 25% 建议的 Smooth L1 loss。由于 R-CNN 边框回归的全连接网络的输出对于每个类都有一个预测,所以当我们得到这种损失时必须小心。在计算损失时,我们只需要考虑正确的类。
后处理
与 RPN 相似,我们最终得到了很多已经分配了类别的目标,在返回它们之前需要进一步处理。
为了实施边框调整,我们必须考虑哪个类别具有对该建议的最高概率。我们也需要忽略具有最高概率的背景类的建议。
在得到最终目标和忽略被预测为背景的目标之后,我们应用基于类的 NMS。这通过按类进行分组完成,通过概率对其排序,然后将 NMS 应用于每个独立的组。
对于我们最后的目标列表,我们也可以设置一个概率阈值并且对每个类限制目标的数量。
训练
在最初的论文中,Faster R-CNN 是用多步法训练的,独立地训练各部分并且在应用最终的全面训练方法之前合并训练的权重。之后,人们发现进行端到端的联合训练会带来更好的结果。
把完整的模型放在一起后,我们得到 4 个不同的损失,两个用于 RPN,另外两个用于 R-CNN。我们在 RPN 和 R-CNN 中有可训练的层,我们也有可以训练(微调)或不能训练的基础网络。
是否训练基础网络的决定取决于我们想要学习的目标特性和可用的计算能力。如果我们想检测与在原始数据集(用于训练基础网络)上的数据相似的目标,那么除了尝试压缩我们能获得的所有可能的性能外,其他做法都是没有必要的。另一方面,为了拟合完整的梯度,训练基础网络在时间和必要的硬件上都是昂贵的。
用加权和将四种不同的损失组合起来。这是因为相对于回归损失,我们可能希望给分类损失更大的权重,或者相比于 RPN 可能给 R-CNN 损失更大的权重。
除了常规的损失之外,我们也有正则化损失,为了简洁起见,我们可以跳过这部分,但是它们在 RPN 和 R-CNN 中都可以定义。我们用 L2 正则化一些层。根据正在使用哪个基础网络,以及如果它经过训练,也有可能进行正则化。
我们用随机梯度下降的动量算法训练,将动量值设置为 0.9。你可以轻松的用其他任何优化方法训练 Faster R-CNN,而不会遇到任何大问题。
学习率从 0.001 开始,然后在 50K 步后下降到 0.0001。这是通常最重要的超参数之一。当用 Luminoth 训练时,我们经常从默认值开始,并以此开始做调整。
评估
在一些特定的 IoU 阈值下,使用标准平均精度均值(mAP)来完成评估(例如,mAP@0.5)。mAP 是源于信息检索的度量标准,并且常用于计算排序问题中的误差和评估目标检测问题。
我们不会深入讨论细节,因为这些类型的度量标准值得用一篇完整博客来总结,但重要的是,当你错过了你应该检测到的框,以及当你发现一些不存在的东西或多次检测到相同的东西时,mAP 会对此进行惩罚。
结论
到目前为止,你应该清楚 Faster R-CNN 的工作方式、设计目的以及如何针对特定的情况进行调整。如果你想更深入的了解它的工作原理,你应该看看 Luminoth 的实现。
Faster R-CNN 是被证明可以用相同的原理解决复杂的计算机视觉问题的模型之一,在这个新的深度学习革命刚开始的时候,它就展现出如此惊人的结果。
目前正在建立的新模型不仅用于目标检测,还用于基于这种原始模型的语义分割、3D 目标检测等等。有的借用 RPN,有的借用 R-CNN,还有的建立在两者之上。因此,充分了解底层架构非常重要,从而可以解决更加广泛的和复杂的问题。
原文地址: https://tryolabs.com/blog/2018/01/18/faster-r-cnn-down-the-rabbit-hole-of-modern-object-detection/
选自Athelas
作者:Dhruv Parthasarathy
机器之心编译
参与:王宇欣、hustcxy、黄小天
卷积神经网络(CNN)的作用远不止分类那么简单!在本文中,我们将看到卷积神经网络(CNN)如何在图像实例分割任务中提升其结果。
自从 Alex Krizhevsky、Geoff Hinton 和 Ilya Sutskever 在 2012 年赢得了 ImageNet 的冠军,卷积神经网络就成为了分割图像的黄金准则。事实上,从那时起,卷积神经网络不断获得完善,并已在 ImageNet 挑战上超越人类。
现在,卷积神经网络在 ImageNet 的表现已超越人类。图中 y 轴代表 ImageNet 错误率。
虽然这些结果令人印象深刻,但与真实的人类视觉理解的多样性和复杂性相比,图像分类还是简单得多。
分类挑战赛使用的图像实例。注意图像的构图以及对象的唯一性。
在分类中,图像的焦点通常是一个单一目标,任务即是对图像进行简单描述(见上文)。但是当我们在观察周遭世界时,我们处理的任务相对复杂的多。
现实中的情景通常由许多不同的互相重叠的目标、背景以及行为构成。
我们看到的情景包含多个互相重叠的目标以及不同的背景,并且我们不仅要分类这些不同的目标还要识别其边界、差异以及彼此的关系!
在图像分割中,我们的目的是对图像中的不同目标进行分类,并确定其边界。来源:Mask R-CNN
卷积神经网络可以帮我们处理如此复杂的任务吗?也就是说,给定一个更为复杂的图像,我们是否可以使用卷积神经网络识别图像中不同的物体及其边界?事实上,正如 Ross Girshick 和其同事在过去几年所做的那样,答案毫无疑问是肯定的。
本文的目标
在本文中,我们将介绍目标检测和分割的某些主流技术背后的直观知识,并了解其演变历程。具体来说,我们将介绍 R-CNN(区域 CNN),卷积神经网络在这个问题上的最初的应用,及变体 Fast R-CNN 和 Faster R-CNN。最后,我们将介绍 Facebook Research 最近发布的一篇文章 Mask R-CNN,它扩展了这种对象检测技术从而可以实现像素级分割。上述四篇论文的链接如下:
1. R-CNN: https://arxiv.org/abs/1311.2524
2. Fast R-CNN: https://arxiv.org/abs/1504.08083
3. Faster R-CNN: https://arxiv.org/abs/1506.01497
4. Mask R-CNN: https://arxiv.org/abs/1703.06870
2014 年:R-CNN - 首次将 CNN 用于目标检测
目标检测算法,比如 R-CNN,可分析图像并识别主要对象的位置和类别。
受到多伦多大学 Hinton 实验室的研究的启发,加州伯克利大学一个由 Jitendra Malik 领导的小组,问了他们自己一个在今天看来似乎是不可避免的问题:
Krizhevsky et. al 的研究成果可在何种程度上被推广至目标检测?
目标检测是一种找到图像中的不同目标并进行分类的任务(如上图所示)。通过在 PASCAL VOC Challenge 测试(一个知名的对象检测挑战赛,类似于 ImageNet),由 Ross Girshick(将在下文细讲)、Jeff Donahue 和 Trevor Darrel 组成的团队发现这个问题确实可通过 Krizhevsky 的研究结果获得解决。他们写道:
Krizhevsky et. al 第一次提出:相比基于更简单、HOG 般的特征的系统,卷及神经网络可显著提升 PASCAL VOC 上的目标检测性能。
现在让我们花点时间来了解他们的架构 R-CNN 的运作的方式。
理解 R-CNN
R-CNN 的目的为接收图像,并正确识别图像中主要目标(通过边界框)的位置。
输入:图像
输出:边界框+图像中每个目标的标注
但是我们如何找出这些边界框的位置?R-CNN 做了我们也可以直观做到的——在图像中假设了一系列边界,看它们是否可以真的对应一个目标。
通过多个尺度的窗口选择性搜索,并搜寻共享纹理、颜色或强度的相邻像素。图片来源:https://www.koen.me/research/pub/uijlings-ijcv2013-draft.pdf
R-CNN 创造了这些边界框,或者区域提案(region proposal)关于这个被称为选择性搜索(Selective Search)的方法,可在这里(链接:http://www.cs.cornell.edu/courses/cs7670/2014sp/slides/VisionSeminar14.pdf)阅读更多信息。在高级别中,选择性搜索(如上图所示)通过不同尺寸的窗口查看图像,并且对于不同尺寸,其尝试通过纹理、颜色或强度将相邻像素归类,以识别物体。
在创建一组区域提案(region proposal)后,R-CNN 只需将图像传递给修改版的 AlexNet 以确定其是否为有效区域。
一旦创建了这些提案,R-CNN 简单地将该区域卷曲到一个标准的平方尺寸,并将其传递给修改版的 AlexNet(ImageNet 2012 的冠军版本,其启发了 R-CNN),如上所示。
在 CNN 的最后一层,R-CNN 添加了一个支持向量机(SVM),它可以简单地界定物体是否为目标,以及是什么目标。这是上图中的第 4 步。
提升边界框
现在,在边界框里找到了目标,我们可以收紧边框以适应目标的真实尺寸吗?我们的确可以这样做,这也是 R-CNN 的最后一步。R-CNN 在区域提案上运行简单的线性回归,以生成更紧密的边界框坐标从而获得最终结果。下面是这一回归模型的输入和输出:
输入:对应于目标的图像子区域
输出:子区域中目标的新边界框坐标
所以,概括一下,R-CNN 只是以下几个简单的步骤
1. 为边界框生成一组提案。
2. 通过预训练的 AlexNet 运行边界框中的图像,最后通过 SVM 来查看框中图像的目标是什么。
3. 通过线性回归模型运行边框,一旦目标完成分类,输出边框的更紧密的坐标。
2015: Fast R-CNN - 加速和简化 R-CNN
Ross Girshick 编写了 R-CNN 和 Fast R-CNN,并持续推动着 Facebook Research 在计算机视觉方面的进展。
R-CNN 性能很棒,但是因为下述原因运行很慢:
1. 它需要 CNN(AlexNet)针对每个单图像的每个区域提案进行前向传递(每个图像大约 2000 次向前传递)。
2. 它必须分别训练三个不同的模型 - CNN 生成图像特征,预测类别的分类器和收紧边界框的回归模型。这使得传递(pipeline)难以训练。
2015 年,R-CNN 的第一作者 Ross Girshick 解决了这两个问题,并创造了第二个算法——Fast R-CNN。下面是其主要思想。
Fast R-CNN 见解 1:ROI(兴趣区域)池化
对于 CNN 的前向传递,Girshick 意识到,对于每个图像,很多提出的图像区域总是相互重叠,使得我们一遍又一遍地重复进行 CNN 计算(大约 2000 次!)。他的想法很简单:为什么不让每个图像只运行一次 CNN,然后找到一种在 2000 个提案中共享计算的方法?
在 ROIPool 中,创建了图像的完整前向传递,并从获得的前向传递中提取每个兴趣区域的转换特征。来源:CS231N 幻灯片,Fei Fei Li、Andrei Karpathy、和 Justin Johnson 斯坦福大学
这正是 Fast R-CNN 使用被称为 RoIPool(兴趣区域池化)的技术所完成的事情。其要点在于,RoIPool 分享了 CNN 在图像子区域的前向传递。在上图中,请注意如何通过从 CNN 的特征映射选择相应的区域来获取每个区域的 CNN 特征。然后,每个区域的特征简单地池化(通常使用最大池化(Max Pooling))。所以我们所需要的是原始图像的一次传递,而非大约 2000 次!
Fast R-CNN 见解 2:将所有模型并入一个网络
Fast R-CNN 将卷积神经网络(CNN),分类器和边界框回归器组合为一个简单的网络。
Fast R-CNN 的第二个见解是在单一模型中联合训练卷积神经网络、分类器和边界框回归器。之前我们有不同的模型来提取图像特征(CNN),分类(SVM)和紧缩边界框(回归器),而 Fast R-CNN 使用单一网络计算上述三个模型。
在上述图像中,你可以看到这些工作是如何完成的。Fast R-CNN 在 CNN 顶部用简单的 softmax 层代替了支持向量机分类器(SVM classfier)以输出分类。它还添加了与 softmax 层平行的线性回归层以输出边界框坐标。这样,所有需要的输出均来自一个单一网络!下面是整个模型的输入和输出:
输入:带有区域提案的图像
输出:带有更紧密边界框的每个区域的目标分类
2016:Faster R-CNN—加速区域提案
即使有了这些进步,Faster R-CNN 中仍存在一个瓶颈问题——区域提案器(region proposer)。正如我们所知,检测目标位置的第一步是产生一系列的潜在边界框或者供测试的兴趣区域。在 Fast R-CNN,通过使用选择性搜索创建这些提案,这是一个相当缓慢的过程,被认为是整个流程的瓶颈。
微软研究院首席研究员孙剑领导了 Faster R-CNN 团队。
2015 年中期,由 Shaoqing Ren、Kaiming He、Ross Girshick 和孙剑组成的微软研究团队,找到了一种被其命为 Faster R-CNN 的架构,几乎把区域生成步骤的成本降为零。
Faster R-CNN 的洞见是,区域提案取决于通过 CNN 的前向(forward pass)计算(分类的第一步)的图像特征。为什么不重复使用区域提案的相同的 CNN 结果,以取代单独运行选择性搜索算法?
在 Faster R-CNN,单个 CNN 用于区域提案和分类。
事实上,这正是 Faster R-CNN 团队取得的成就。上图中你可以看到单个 CNN 如何执行区域提案和分类。这样一来,只需训练一个 CNN,我们几乎就可以免费获得区域提案!作者写道:
我们观察到,区域检测器(如 Fast R-CNN)使用的卷积特征映射也可用于生成区域提案 [从而使区域提案的成本几乎为零]。
以下是其模型的输入和输出:
输入:图像(注意并不需要区域提案)。
输出:图像中目标的分类和边界框坐标。
如何生成区域
让我们花点时间看看 Faster R-CNN 如何从 CNN 特征生成这些区域提案。Faster R-CNN 在 CNN 特征的顶部添加了一个简单的完全卷积网络,创建了所谓的区域提案网络。
区域提案网络在 CNN 的特征上滑动一个窗口。在每个窗口位置,网络在每个锚点输出一个分值和一个边界框(因此,4k 个框坐标,其中 k 是锚点的数量)。
区域生成网络的工作是在 CNN 特征映射上传递滑动窗口,并在每个窗口中输出 k 个潜在边界框和分值,以便评估这些框有多好。这些 k 框表征什么?
我们知道,用于人的边框往往是水平和垂直的。我们可以使用这种直觉,通过创建这样维度的锚点来指导区域提案网络。
我们知道图像中的目标应该符合某些常见的纵横比和尺寸。例如,我们想要一些类似人类形状的矩形框。同样,我们不会看到很多非常窄的边界框。以这种方式,我们创建 k 这样的常用纵横比,称之为锚点框。对于每个这样的锚点框,我们在图像中每个位置输出一个边界框和分值。
考虑到这些锚点框,我们来看看区域提案网络的输入和输出:
输入:CNN 特征图。
输出:每个锚点的边界框。分值表征边界框中的图像作为目标的可能性。
然后,我们仅将每个可能成为目标的边界框传递到 Fast R-CNN,生成分类和收紧边界框。
2017:Mask R-CNN - 扩展 Faster R-CNN 以用于像素级分割
图像实例分割的目的是在像素级场景中识别不同目标。
到目前为止,我们已经懂得如何以许多有趣的方式使用 CNN,以有效地定位图像中带有边框的不同目标。
我们能进一步扩展这些技术,定位每个目标的精确像素,而非仅限于边框吗?这个问题被称为图像分割。Kaiming He 和一群研究人员,包括 Girshick,在 Facebook AI 上使用一种称为 Mask R-CNN 的架构探索了这一图像分割问题。
Facebook AI 的研究员 Kaiming He 是 Mask R-CNN 的主要作者,也是 Faster R-CNN 的联合作者。
很像 Fast R-CNN 和 Faster R-CNN,Mask R-CNN 的基本原理非常简单直观。鉴于 Faster R-CNN 目标检测的效果非常好,我们能将其简单地扩展到像素级分割吗?
在 Mask R-CNN 中,在 Faster R-CNN 的 CNN 特征的顶部添加了一个简单的完全卷积网络(FCN),以生成 mask(分割输出)。请注意它是如何与 Faster R-CNN 的分类和边界框回归网络并行的。
Mask R-CNN 通过简单地向 Faster R-CNN 添加一个分支来输出二进制 mask,以说明给定像素是否是目标的一部分。如上所述,分支(在上图中为白色)仅仅是 CNN 特征图上的简单的全卷积网络。以下是其输入和输出:
输入:CNN 特征图。
输出:在像素属于目标的所有位置上都有 1s 的矩阵,其他位置为 0s(这称为二进制 mask)。
但 Mask R-CNN 作者不得不进行一个小的调整,使这个流程按预期工作。
RoiAlign——重对齐 RoIPool 以使其更准确
图像通过 RoIAlign 而不是 RoIPool 传递,使由 RoIPool 选择的特征图区域更精确地对应原始图像的区域。这是必要的,因为像素级分割需要比边界框更细粒度的对齐。
当运行没有修改的原始 Faster R-CNN 架构时,Mask R-CNN 作者意识到 RoIPool 选择的特征图的区域与原始图像的区域略不对齐。因为图像分割需要像素级特异性,不像边框,这自然地导致不准确。
作者通过使用 RoIAlign 方法简单地调整 RoIPool 来更精确地对齐,从而解决了这个问题。
我们如何准确地将原始图像的相关区域映射到特征图上?
想象一下,我们有一个尺寸大小为 128x128 的图像和大小为 25x25 的特征图。想象一下,我们想要的是与原始图像中左上方 15x15 像素对应的区域(见上文)。我们如何从特征图选择这些像素?
我们知道原始图像中的每个像素对应于原始图像中的〜25/128 像素。要从原始图像中选择 15 像素,我们只需选择 15 * 25/128〜=2.93 像素。
在 RoIPool,我们会舍弃一些,只选择 2 个像素,导致轻微的错位。然而,在 RoIAlign,我们避免了这样的舍弃。相反,我们使用双线性插值来准确得到 2.93 像素的内容。这很大程度上,让我们避免了由 RoIPool 造成的错位。
一旦这些掩码生成,Mask R-CNN 简单地将它们与来自 Faster R-CNN 的分类和边界框组合,以产生如此惊人的精确分割:
Mask R-CNN 也能对图像中的目标进行分割和分类.
展望
在过去短短 3 年里,我们看到研究界如何从 Krizhevsky 等人最初结果发展为 R-CNN,最后一路成为 Mask R-CNN 的强大结果。单独来看,像 MASK R-CNN 这样的结果似乎是无法达到的惊人飞跃。然而,通过这篇文章,我希望你们认识到,通过多年的辛勤工作和协作,这些进步实际上是直观的且渐进的改进之路。R-CNN、Fast R-CNN、Faster R-CNN 和最终的 Mask R-CNN 提出的每个想法并不一定是跨越式发展,但是它们的总和却带来了非常显著的效果,帮助我们向人类水平的视觉能力又前进了几步。
特别令我兴奋的是,R-CNN 和 Mask R-CNN 间隔只有三年!随着持续的资金、关注和支持,计算机视觉在未来三年会有怎样的发展?我们非常期待。
原文链接:https://blog.athelas.com/a-brief-history-of-cnns-in-image-segmentation-from-r-cnn-to-mask-r-cnn-34ea83205de4
人工智能赛博物理操作系统
AI-CPS OS
“人工智能赛博物理操作系统”(新一代技术+商业操作系统“AI-CPS OS”:云计算+大数据+物联网+区块链+人工智能)分支用来的今天,企业领导者必须了解如何将“技术”全面渗入整个公司、产品等“商业”场景中,利用AI-CPS OS形成数字化+智能化力量,实现行业的重新布局、企业的重新构建和自我的焕然新生。
AI-CPS OS的真正价值并不来自构成技术或功能,而是要以一种传递独特竞争优势的方式将自动化+信息化、智造+产品+服务和数据+分析一体化,这种整合方式能够释放新的业务和运营模式。如果不能实现跨功能的更大规模融合,没有颠覆现状的意愿,这些将不可能实现。
领导者无法依靠某种单一战略方法来应对多维度的数字化变革。面对新一代技术+商业操作系统AI-CPS OS颠覆性的数字化+智能化力量,领导者必须在行业、企业与个人这三个层面都保持领先地位:
重新行业布局:你的世界观要怎样改变才算足够?你必须对行业典范进行怎样的反思?
重新构建企业:你的企业需要做出什么样的变化?你准备如何重新定义你的公司?
重新打造自己:你需要成为怎样的人?要重塑自己并在数字化+智能化时代保有领先地位,你必须如何去做?
AI-CPS OS是数字化智能化创新平台,设计思路是将大数据、物联网、区块链和人工智能等无缝整合在云端,可以帮助企业将创新成果融入自身业务体系,实现各个前沿技术在云端的优势协同。AI-CPS OS形成的数字化+智能化力量与行业、企业及个人三个层面的交叉,形成了领导力模式,使数字化融入到领导者所在企业与领导方式的核心位置:
精细:这种力量能够使人在更加真实、细致的层面观察与感知现实世界和数字化世界正在发生的一切,进而理解和更加精细地进行产品个性化控制、微观业务场景事件和结果控制。
智能:模型随着时间(数据)的变化而变化,整个系统就具备了智能(自学习)的能力。
高效:企业需要建立实时或者准实时的数据采集传输、模型预测和响应决策能力,这样智能就从批量性、阶段性的行为变成一个可以实时触达的行为。
不确定性:数字化变更颠覆和改变了领导者曾经仰仗的思维方式、结构和实践经验,其结果就是形成了复合不确定性这种颠覆性力量。主要的不确定性蕴含于三个领域:技术、文化、制度。
边界模糊:数字世界与现实世界的不断融合成CPS不仅让人们所知行业的核心产品、经济学定理和可能性都产生了变化,还模糊了不同行业间的界限。这种效应正在向生态系统、企业、客户、产品快速蔓延。
AI-CPS OS形成的数字化+智能化力量通过三个方式激发经济增长:
创造虚拟劳动力,承担需要适应性和敏捷性的复杂任务,即“智能自动化”,以区别于传统的自动化解决方案;
对现有劳动力和实物资产进行有利的补充和提升,提高资本效率;
人工智能的普及,将推动多行业的相关创新,开辟崭新的经济增长空间。
给决策制定者和商业领袖的建议:
超越自动化,开启新创新模式:利用具有自主学习和自我控制能力的动态机器智能,为企业创造新商机;
迎接新一代信息技术,迎接人工智能:无缝整合人类智慧与机器智能,重新
评估未来的知识和技能类型;
制定道德规范:切实为人工智能生态系统制定道德准则,并在智能机器的开
发过程中确定更加明晰的标准和最佳实践;
重视再分配效应:对人工智能可能带来的冲击做好准备,制定战略帮助面临
较高失业风险的人群;
开发数字化+智能化企业所需新能力:员工团队需要积极掌握判断、沟通及想象力和创造力等人类所特有的重要能力。对于中国企业来说,创造兼具包容性和多样性的文化也非常重要。
子曰:“君子和而不同,小人同而不和。” 《论语·子路》云计算、大数据、物联网、区块链和 人工智能,像君子一般融合,一起体现科技就是生产力。
如果说上一次哥伦布地理大发现,拓展的是人类的物理空间。那么这一次地理大发现,拓展的就是人们的数字空间。在数学空间,建立新的商业文明,从而发现新的创富模式,为人类社会带来新的财富空间。云计算,大数据、物联网和区块链,是进入这个数字空间的船,而人工智能就是那船上的帆,哥伦布之帆!
新一代技术+商业的人工智能赛博物理操作系统AI-CPS OS作为新一轮产业变革的核心驱动力,将进一步释放历次科技革命和产业变革积蓄的巨大能量,并创造新的强大引擎。重构生产、分配、交换、消费等经济活动各环节,形成从宏观到微观各领域的智能化新需求,催生新技术、新产品、新产业、新业态、新模式。引发经济结构重大变革,深刻改变人类生产生活方式和思维模式,实现社会生产力的整体跃升。
产业智能官 AI-CPS
用“人工智能赛博物理操作系统”(新一代技术+商业操作系统“AI-CPS OS”:云计算+大数据+物联网+区块链+人工智能),在场景中构建状态感知-实时分析-自主决策-精准执行-学习提升的认知计算和机器智能;实现产业转型升级、DT驱动业务、价值创新创造的产业互联生态链。
长按上方二维码关注微信公众号: AI-CPS,更多信息回复:
新技术:“云计算”、“大数据”、“物联网”、“区块链”、“人工智能”;新产业:“智能制造”、“智能金融”、“智能零售”、“智能驾驶”、“智能城市”;新模式:“财富空间”、“工业互联网”、“数据科学家”、“赛博物理系统CPS”、“供应链金融”。
官方网站:AI-CPS.NET
本文系“产业智能官”(公众号ID:AI-CPS)收集整理,转载请注明出处!
版权声明:由产业智能官(公众号ID:AI-CPS)推荐的文章,除非确实无法确认,我们都会注明作者和来源。部分文章推送时未能与原作者取得联系。若涉及版权问题,烦请原作者联系我们,与您共同协商解决。联系、投稿邮箱:erp_vip@hotmail.com