论文名称:Rich feature hierarchies for accurate object detection and semantic segmentation 提出时间:2014年 论文地址: 针对问题: 从Alexnet提出后,作者等人思考如何利用卷积网络来完成检测任务,即输入一张图,实现图上目标的定位(目标在哪)和分类(目标是什么)两个目标,并最终完成了RCNN网络模型。 创新点: RCNN提出时,检测网络的执行思路还是脱胎于分类网络。也就是深度学习部分仅完成输入图像块的分类工作。那么对检测任务来说如何完成目标的定位呢,作者采用的是Selective Search候选区域提取算法,来获得当前输入图上可能包含目标的不同图像块,再将图像块裁剪到固定的尺寸输入CNN网络来进行当前图像块类别的判断。 参考博客: 。 论文题目:OverFeat: Integrated Recognition, Localization and Detection using Convolutional Networks 提出时间:2014年 论文地址: 针对问题: 该论文讨论了,CNN提取到的特征能够同时用于定位和分类两个任务。也就是在CNN提取到特征以后,在网络后端组织两组卷积或全连接层,一组用于实现定位,输出当前图像上目标的最小外接矩形框坐标,一组用于分类,输出当前图像上目标的类别信息。也是以此为起点,检测网络出现基础主干网络(backbone)+分类头或回归头(定位头)的网络设计模式雏形。 创新点: 在这篇论文中还有两个比较有意思的点,一是作者认为全连接层其实质实现的操作和1x1的卷积是类似的,而且用1x1的卷积核还可以避免FC对输入特征尺寸的限制,那用1x1卷积来替换FC层,是否可行呢?作者在测试时通过将全连接层替换为1x1卷积核证明是可行的;二是提出了offset max-pooling,也就是对池化层输入特征不能整除的情况,通过进行滑动池化并将不同的池化层传递给后续网络层来提高效果。另外作者在论文里提到他的用法是先基于主干网络+分类头训练,然后切换分类头为回归头,再训练回归头的参数,最终完成整个网络的训练。图像的输入作者采用的是直接在输入图上利用卷积核划窗。然后在指定的每个网络层上回归目标的尺度和空间位置。 参考博客: 论文题目:Scalable Object Detection using Deep Neural Networks 提出时间:2014年 论文地址: 针对问题: 既然CNN网络提取的特征可以直接用于检测任务(定位+分类),作者就尝试将目标框(可能包含目标的最小外包矩形框)提取任务放到CNN中进行。也就是直接通过网络完成输入图像上目标的定位工作。 创新点: 本文作者通过将物体检测问题定义为输出多个bounding box的回归问题. 同时每个bounding box会输出关于是否包含目标物体的置信度, 使得模型更加紧凑和高效。先通过聚类获得图像中可能有目标的位置聚类中心,(800个anchor box)然后学习预测不考虑目标类别的二分类网络,背景or前景。用到了多尺度下的检测。 参考博客: 论文题目:DeepBox: Learning Objectness with Convolutional Networks 提出时间:2015年ICCV 论文地址: 主要针对的问题: 本文完成的工作与第三篇类似,都是对目标框提取算法的优化方案,区别是本文首先采用自底而上的方案来提取图像上的疑似目标框,然后再利用CNN网络提取特征对目标框进行是否为前景区域的排序;而第三篇为直接利用CNN网络来回归图像上可能的目标位置。创新点: 本文作者想通过CNN学习输入图像的特征,从而实现对输入网络目标框是否为真实目标的情况进行计算,量化每个输入框的包含目标的可能性值。 参考博客: 论文题目:AttentionNet: AggregatingWeak Directions for Accurate Object Detection 提出时间:2015年ICCV 论文地址: 主要针对的问题: 对检测网络的实现方案进行思考,之前的执行策略是,先确定输入图像中可能包含目标位置的矩形框,再对每个矩形框进行分类和回归从而确定目标的准确位置,参考RCNN。那么能否直接利用回归的思路从图像的四个角点,逐渐得到目标的最小外接矩形框和类别呢? 创新点: 通过从图像的四个角点,逐步迭代的方式,每次计算一个缩小的方向,并缩小指定的距离来使得逐渐逼近目标。作者还提出了针对多目标情况的处理方式。 参考博客: 论文题目:Spatial Pyramid Pooling in Deep Convolutional Networks for Visual Recognition 提出时间:2014年 论文地址: 针对问题: 如RCNN会将输入的目标图像块处理到同一尺寸再输入进CNN网络,在处理过程中就造成了图像块信息的损失。在实际的场景中,输入网络的目标尺寸很难统一,而网络最后的全连接层又要求输入的特征信息为统一维度的向量。作者就尝试进行不同尺寸CNN网络提取到的特征维度进行统一。创新点: 作者提出的SPPnet中,通过使用特征金字塔池化来使得最后的卷积层输出结果可以统一到全连接层需要的尺寸,在训练的时候,池化的操作还是通过滑动窗口完成的,池化的核宽高及步长通过当前层的特征图的宽高计算得到。原论文中的特征金字塔池化操作图示如下。 参考博客 : 论文题目:Object detection via a multi-region & semantic segmentation-aware CNN model 提出时间:2015年 论文地址: 针对问题: 既然第三篇论文multibox算法提出了可以用CNN来实现输入图像中待检测目标的定位,本文作者就尝试增加一些训练时的方法技巧来提高CNN网络最终的定位精度。创新点: 作者通过对输入网络的region进行一定的处理(通过数据增强,使得网络利用目标周围的上下文信息得到更精准的目标框)来增加网络对目标回归框的精度。具体的处理方式包括:扩大输入目标的标签包围框、取输入目标的标签中包围框的一部分等并对不同区域分别回归位置,使得网络对目标的边界更加敏感。这种操作丰富了输入目标的多样性,从而提高了回归框的精度。 参考博客 : 论文题目:Fast-RCNN 提出时间:2015年 论文地址: 针对问题: RCNN中的CNN每输入一个图像块就要执行一次前向计算,这显然是非常耗时的,那么如何优化这部分呢? 创新点: 作者参考了SPPNet(第六篇论文),在网络中实现了ROIpooling来使得输入的图像块不用裁剪到统一尺寸,从而避免了输入的信息丢失。其次是将整张图输入网络得到特征图,再将原图上用Selective Search算法得到的目标框映射到特征图上,避免了特征的重复提取。 参考博客 : 论文题目:DeepProposal: Hunting Objects by Cascading Deep Convolutional Layers 提出时间:2015年 论文地址: 主要针对的问题: 本文的作者观察到CNN可以提取到很棒的对输入图像进行表征的论文,作者尝试通过实验来对CNN网络不同层所产生的特征的作用和情况进行讨论和解析。 创新点: 作者在不同的激活层上以滑动窗口的方式生成了假设,并表明最终的卷积层可以以较高的查全率找到感兴趣的对象,但是由于特征图的粗糙性,定位性很差。相反,网络的第一层可以更好地定位感兴趣的对象,但召回率降低。 论文题目:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 提出时间:2015年NIPS 论文地址: 主要针对的问题: 由multibox(第三篇)和DeepBox(第四篇)等论文,我们知道,用CNN可以生成目标待检测框,并判定当前框为目标的概率,那能否将该模型整合到目标检测的模型中,从而实现真正输入端为图像,输出为最终检测结果的,全部依赖CNN完成的检测系统呢? 创新点: 将当前输入图目标框提取整合到了检测网络中,依赖一个小的目标框提取网络RPN来替代Selective Search算法,从而实现真正的端到端检测算法。 参考博客 :
姓名:王咫毅 学号: 【嵌牛导读】机器学习成为现在研究的一大热门,而机器学习所应用到的领域图像处理 目标检测 图像分割都已经日趋成熟,而cnn是如何应用到图像分割里边的呢?而其发展过程又有哪些呢? 【嵌牛鼻子】机器学习 cnn 【嵌牛提问】r-cnn和mask r-cnn有什么区别?两者又是怎么形成的? 【嵌牛正文】 在 Athelas (Athelas 通过深度学习进行血液诊断),我们使用卷积神经网络(CNN)不仅仅是分类!在这篇文章中,我们将看到如何在图像实例分割中使用CNN,效果很好。 自从 Alex Krizhevsky,Geoff Hinton和Ilya Sutskever在2012年赢得ImageNet以来 ,卷积神经网络(CNNs)已经成为图像分类的黄金标准。事实上,从那时起,CNN已经改进到现在他们在ImageNet挑战中胜过人类的程度! need-to-insert-img CNN现在在ImageNet挑战中胜过人类。上图中的y轴是ImageNet上的错误率。 虽然这些结果令人印象深刻,但图像分类远比真人类视觉理解的复杂性和多样性简单得多。 need-to-insert-img 分类挑战中使用的图像示例。请注意图像是如何构图良好的,并且只有一个对象。 在分类中,通常有一个图像,其中一个对象作为焦点,任务是说该图像是什么(见上文)。但是,当我们观察周围的世界时,我们会执行更复杂的任务。 need-to-insert-img 现实生活中的景点通常由许多不同的,重叠的物体,背景和动作组成。 我们看到复杂的景点有多个重叠的物体和不同的背景,我们不仅要对这些不同的物体进行分类,还要确定它们之间的界限,差异和关系! need-to-insert-img CNN可以帮助我们完成这些复杂的任务吗?也就是说,给定一个更复杂的图像,我们可以使用CNN来识别图像中的不同对象及其边界吗?正如Ross Girshick和他的同龄人在过去几年所表明的那样,答案是肯定的。 这篇文章的目标 通过这篇文章,我们将介绍在对象检测和分割中使用的一些主要技术背后的直觉,并了解它们是如何从一个实现发展到下一个实现的。特别是,我们将介绍R-CNN(地区CNN),这是CNN对此问题的原始应用,以及其后代Fast R-CNN和Faster R-CNN。最后,我们将介绍最近由Facebook Research发布的一篇文章Mask R-CNN,它扩展了这种对象检测技术以提供像素级分割。以下是本文中引用的论文: R-CNN: https : //arxiv.org/abs/1311.2524 Fast R-CNN: https : //arxiv.org/abs/1504.08083 Faster R-CNN: https : //arxiv.org/abs/1506.01497 Mask R-CNN: https : //arxiv.org/abs/1703.06870 2014年:R-CNN - CNN在物体检测中的早期应用 need-to-insert-img 诸如R-CNN的对象检测算法接收图像并识别图像中主要对象的位置和分类。 受多伦多大学Hinton实验室研究的启发,由Jitendra Malik教授领导的加州大学伯克利分校的一个小团队问自己,今天看来是一个不可避免的问题: 在多大程度上[Krizhevsky等。al的结果]推广到物体检测? 对象检测的任务是在图像中查找不同的对象并对其进行分类(如上图所示)。由Ross Girshick(我们将再次看到的名字),Jeff Donahue和Trevor Darrel组成的团队发现,通过测试PASCAL VOC Challenge,这是一种类似于ImageNet的流行物体检测挑战,Krizhevsky的结果可以解决这个问题。他们写, 本文首次表明,与基于简单HOG类功能的系统相比,CNN可以在PASCAL VOC上实现更高的物体检测性能。 现在让我们花一点时间来了解他们的架构,CNNs区域(R-CNN)是如何工作的。 了解R-CNN R-CNN的目标是接收图像,并正确识别图像中主要对象(通过边界框)的位置。 输入 :图像 输出 :图像中每个对象的边界框+标签。 但是我们如何找出这些边界框的位置?R-CNN做了我们可能直观地做的事情 - 在图像中 提出 一堆框,看看它们中的任何一个是否实际上对应于一个对象 。 need-to-insert-img 选择性搜索查看多个比例的窗口,并查找共享纹理,颜色或强度的相邻像素 R-CNN使用称为选择性搜索的过程创建这些边界框或区域提议,您可以在 此处 阅读。在较高的层次上,选择性搜索(如上图所示)通过不同大小的窗口查看图像,并且对于每个尺寸,尝试通过纹理,颜色或强度将相邻像素组合在一起以识别对象。 need-to-insert-img 在创建一组区域提议后,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年:快速R-CNN - 加速并简化R-CNN need-to-insert-img Ross Girshick写了R-CNN和Fast R-CNN。他继续在Facebook Research推动计算机视觉的界限。 R-CNN效果很好,但由于一些简单的原因,它确实很慢: 它需要CNN(AlexNet)的正向传递,用于每个单个图像的每个区域建议(每个图像大约2000个前向传递!)。 它必须分别训练三个不同的模型 - 用于生成图像特征的CNN,用于预测类的分类器,以及用于收紧边界框的回归模型。这使得管道极难训练。 2015年,R-CNN的第一作者Ross Girshick解决了这两个问题,导致了我们短暂历史中的第二个算法 - 快速R-CNN。现在让我们回顾一下它的主要见解。 Fast R-CNN洞察力1:RoI(感兴趣区域)池 对于CNN的前向传递,Girshick意识到对于每个图像,图像的许多建议区域总是重叠,导致我们一次又一次地运行相同的CNN计算(~2000次!)。他的洞察力很简单 - 为什么不在每张图像上运行CNN一次,然后找到一种方法来分享〜2000个提案中的计算? need-to-insert-img 在RoIPool中,创建图像的完整前向传递,并从所得到的前向传递中提取每个感兴趣区域的conv特征。 这正是Fast R-CNN使用称为RoIPool(感兴趣区域池)的技术所做的事情。在其核心,RoIPool分享CNN的前向传递,以在其子区域中形成图像。在上图中,请注意如何通过从CNN的要素图中选择相应的区域来获取每个区域的CNN要素。然后,汇集每个区域中的要素(通常使用最大池)。所以我们所需要的只是原始图像的一次传递而不是~2000! 快速R-CNN洞察力2:将所有模型组合到一个网络中 need-to-insert-img 快速R-CNN将CNN,分类器和边界框回归器组合成一个单一网络 Fast R-CNN的第二个见解是在单个模型中联合训练CNN,分类器和边界框回归器。之前我们有不同的模型来提取图像特征(CNN),分类(SVM)和收紧边界框(回归量),而 快速R-CNN则使用单个网络来计算所有三个。 您可以在上图中看到这是如何完成的。快速R-CNN用在CNN顶部的softmax层替换SVM分类器以输出分类。它还添加了一个与softmax图层平行的线性回归图层,以输出边界框坐标。这样,所需的所有输出都来自一个网络!以下是此整体模型的输入和输出: 输入 :带有区域提案的图像。 输出 :每个区域的对象分类以及更严格的边界框。 2016年:更快的R-CNN - 加速地区提案 即使有了所有这些进步,快速R-CNN过程仍然存在一个瓶颈 - 区域提议者。正如我们所看到的,检测对象位置的第一步是生成一堆潜在的边界框或感兴趣的区域进行测试。在Fast R-CNN中,这些提议是使用 选择性搜索 创建的,这是一个相当缓慢的过程,被发现是整个过程的瓶颈。 need-to-insert-img 微软研究院的首席研究员孙健带领团队领导更快的R-CNN。 在2015年中期,由Shaoqing Ren,Kaiming He,Ross Girshick和Jian Sun组成的微软研究团队找到了一种方法,通过他们(创造性地)命名为快速R-CNN的架构,使该区域提案步骤几乎免费。 更快的R-CNN的见解是区域建议取决于已经通过CNN的前向传递(分类的第一步)计算的图像的特征。 那么为什么不为区域提案重用那些相同的CNN结果而不是运行单独的选择性搜索算法呢? need-to-insert-img 在Faster R-CNN中,单个CNN用于区域提议和分类。 实际上,这正是R-CNN团队更快取得的成就。在上图中,您可以看到单个CNN如何用于执行区域提议和分类。这样, 只有一个CNN需要接受培训 ,我们几乎可以免费获得地区建议!作者写道: 我们的观察结果是,基于区域的探测器(如Fast R-CNN)使用的卷积特征图也可用于生成区域提议[从而实现几乎无成本的区域提议]。 以下是其模型的输入和输出: 输入 :图像(注意不需要区域提议)。 输出 :图像中对象的分类和边界框坐标。 如何生成区域 让我们花点时间看看R-CNN如何通过CNN功能更快地生成这些区域提案。Faster R-CNN在CNN的功能之上增加了一个完全卷积网络,创建了所谓的 区域提案网络 。 need-to-insert-img 区域提案网络在CNN的功能上滑动窗口。在每个窗口位置,网络输出每个锚点的分数和边界框(因此4k框坐标,其中k是锚的数量)。 区域提议网络通过在CNN特征映射和每个窗口上传递滑动窗口来工作,输出 k个 潜在的边界框以及每个框预期有多好的分数。这些 k 盒代表什么? need-to-insert-img 我们知道人们的边界框往往是矩形和垂直的。我们可以通过创建这样的维度锚来利用这种直觉来指导我们的区域提案网络。 直觉上,我们知道图像中的对象应该适合某些常见的宽高比和大小。例如,我们知道我们想要一些类似于人类形状的矩形盒子。同样,我们知道我们不会看到很多非常薄的盒子。以这种方式,我们创建 k 这样的常见宽高比,我们称之为 锚盒 。对于每个这样的锚箱,我们输出一个边界框并在图像中的每个位置得分。 考虑到这些锚框,我们来看看这个区域提案网络的输入和输出: 输入 :CNN功能图。 输出 :每个锚点的边界框。表示该边界框中图像成为对象的可能性的分数。 然后,我们将可能是对象的每个这样的边界框传递到Fast R-CNN,以生成分类和收紧的边界框。 2017:Mask R-CNN - 扩展更快的R-CNN以实现像素级分割 need-to-insert-img 图像实例分割的目标是在像素级别识别场景中不同的对象是什么。 到目前为止,我们已经看到我们如何能够以许多有趣的方式使用CNN功能来有效地定位带有边界框的图像中的不同对象。 我们是否可以扩展这些技术以进一步找到每个对象的精确像素而不仅仅是边界框?这个问题被称为图像分割,是Kaiming He和包括Girshick在内的一组研究人员在Facebook AI上使用一种名为 Mask R-CNN 的架构进行探索的。 need-to-insert-img Facebook AI的研究员Kaiming He是Mask R-CNN的主要作者,也是Faster R-CNN的合着者。 就像Fast R-CNN和Faster R-CNN一样,Mask R-CNN的潜在直觉也是直截了当的。鉴于Faster R-CNN在物体检测方面的效果非常好,我们是否可以扩展它以进行像素级分割? need-to-insert-img 在掩码R-CNN中,在快速R-CNN的CNN特征之上添加完全卷积网络(FCN)以生成掩码(分段输出)。注意这与Faster R-CNN的分类和边界框回归网络并行。 Mask R-CNN通过向更快的R-CNN添加分支来完成此操作,该分支输出二进制掩码,该Mask 表示给定像素是否是对象的一部分。与以前一样,分支(上图中的白色)只是基于CNN的特征映射之上的完全卷积网络。以下是其输入和输出: 输入 :CNN功能图。 输出 :矩阵在像素属于对象的所有位置上为1,在其他位置为0(这称为 二进制掩码 )。 但Mask R-CNN的作者不得不进行一次小调整,以使这条管道按预期工作。 RoiAlign - 重新调整RoIPool更准确 need-to-insert-img 而不是RoIPool,图像通过RoIAlign传递,以便RoIPool选择的特征图的区域更精确地对应于原始图像的区域。这是必需的,因为像素级分割需要比边界框更细粒度的对齐。 当在原始的快速R-CNN架构上运行而没有修改时,Mask R-CNN作者意识到由RoIPool选择的特征图的区域与原始图像的区域略微不对准。由于图像分割需要像素级特异性,与边界框不同,这自然会导致不准确。 作者能够通过巧妙地调整RoIPool来解决这个问题,使用一种称为RoIAlign的方法进行更精确的对齐。 need-to-insert-img 我们如何准确地将感兴趣的区域从原始图像映射到特征图? 想象一下,我们有一个大小为 128x128 的图像和一个大小为 25x25 的特征图。让我们想象一下,我们想要的特征区域对应于原始图像中左上角的 15x15 像素(见上文)。我们如何从要素图中选择这些像素? 我们知道原始图像中的每个像素对应于特征图中的~25 / 128像素。要从原始图像中选择15个像素,我们只选择15 * 25 / 128~ = 2.93 像素。 在RoIPool中,我们将它向下舍入并选择2个像素,导致轻微的错位。但是,在RoIAlign中, 我们避免了这种舍入。 相反,我们使用 双线性插值 来准确了解像素2.93处的内容。这在很大程度上是允许我们避免RoIPool引起的错位的原因。 生成这些掩模后,Mask R-CNN将它们与Faster R-CNN中的分类和边界框组合在一起,生成如此精确的分割: need-to-insert-img Mask R-CNN能够对图像中的对象进行分段和分类。 期待 在短短3年时间里,我们已经看到研究界如何从Krizhevsky等进步。al的原始结果是R-CNN,最后一直到Mask R-CNN这样强大的结果。孤立地看,像面具R-CNN这样的结果看起来像天才的难以置信的飞跃,是无法接近的。然而,通过这篇文章,我希望你已经看到这些进步如何通过多年的努力和合作实现直观,渐进的改进。R-CNN,Fast R-CNN,Faster R-CNN以及最后的Mask R-CNN提出的每个想法都不一定是量子跳跃,但它们的总和产品已经产生了非常显着的结果,使我们更接近人类水平了解视力。 让我特别兴奋的是,R-CNN和Mask R-CNN之间的时间只有三年!通过持续的资金,关注和支持,未来计算机视觉能够进一步提升?