卷积神经网络(CNN)可以做的不仅仅是分类!在本文中,我们将看到卷积神经网络(CNN)改进其在图像实例分割任务中的结果。自AlexKrizhevsky、GeoffHinton和IlyaSutskever在2012年赢得ImageNet以来,卷积神经网络一直是分割图像的黄金标准。事实上,从那时起,卷积神经网络不断改进,并在ImageNet挑战赛上超越了人类。卷积神经网络现在在ImageNet上的表现优于人类。图中的y轴代表ImageNet的错误率。虽然这些结果令人印象深刻,但与真实人类视觉理解的多样性和复杂性相比,图像分类要简单得多。分类挑战中使用的图像示例。注意画面的构图和主体的独特性。在分类中,图像的焦点通常是单个对象,任务是对图像的简单描述(见上文)。但是当我们观察周围的世界时,我们正在处理更复杂的任务。现实世界的场景通常包含许多不同的重叠目标、上下文和行为。我们看到的场景包含多个重叠的目标和不同的背景,我们不仅需要对这些不同的目标进行分类,还要识别它们的边界、差异和关系!在图像分割中,我们的目的是对目标的不同目标进行分类,并确定它们的边界。卷积神经网络可以帮助我们完成如此复杂的任务吗?也就是说,给定一个更复杂的图像,我们是否可以使用卷积神经网络来识别图像中的不同对象及其边界?事实上,正如RossAsGirshick和他的同事在过去几年所做的那样,答案无疑是肯定的。本文的目标在本文中,我们将介绍一些主流的对象检测和分割技术背后的直觉,并了解它们是如何演变的。具体来说,我们介绍了R-CNN(RegionalCNN),卷积神经网络在这个问题上的原始应用,以及变体FastR-CNN和FasterR-CNN。最后,我们将介绍FacebookResearch最近发表的一篇论文MaskR-CNN,它扩展了这种对象检测技术以实现像素级分割。以上四篇论文的链接如下:R-CNN:https://arxiv.org/abs/1311.2524FastR-CNN:https://arxiv.org/abs/1504.08083FasterR-CNN:https:///arxiv.org/abs/1506.01497MaskR-CNN:https://arxiv.org/abs/1703.06870一、2014:R-CNN——首次使用CNN进行物体检测物体检测算法,如R-CNN,可以分析图像确定主要物体的位置和类别。受多伦多大学Hinton实验室研究的启发,由JitendraMalik领导的加州大学伯克利分校的一个团队向自己提出了一个在今天看来不可避免的问题:Krizhevsky等人可以在多大程度上做到这一点。以上是否推广到物体检测?对象检测是在图像中查找和分类不同对象的任务(如上图所示)。在PASCALVOC挑战赛(类似于ImageNet的著名目标检测挑战赛)上进行测试时,RossGirshick(下文会详细介绍)、JeffDonahue和TrevorDarrel的团队发现这个问题确实可以通过Krizhevsky的发现解决。他们写道:Krizhevsky等。al首次表明,与基于更简单的HOG特征的系统相比,卷积和神经网络显着提高了PASCALVOC上的对象检测性能。现在让我们花点时间了解一下他们的架构R-CNN是如何工作的。1.理解R-CNNR-CNN的目的是接收图像并正确识别图像中主要物体(通过边界框)的位置。输入:图像输出:边界框+图像中每个对象的标签但是我们如何找出这些边界框的位置呢?R-CNN也做了我们可以直观地做的事情——假设图像中有一系列边界,看看它们是否真的能对应到一个目标。有选择地搜索多个尺度的窗口,并寻找共享纹理、颜色或强度的相邻像素。R-CNN在这种称为SelectiveSearch的方法上创建这些边界框,或区域建议(regionproposals),在高层次上,SelectiveSearch(如上所示)通过不同大小的窗口查看图像,对于不同的大小,它尝试通过按纹理、颜色或强度对相邻像素进行分组来识别对象。创建一组区域建议后,R-CNN只需将图像传递给修改版的AlexNet以确定它是否是有效区域。创建这些建议后,R-CNN只需将区域变形为标准正方形大小并将其传递给AlexNet的修改版本(启发R-CNN的ImageNet2012冠军),如上所示。在CNN的最后一层,R-CNN增加了一个支持向量机(SVM),可以简单定义一个物体是不是物体,是什么物体。这是上图中的第4步。2.增强边界框既然在边界框中找到了对象,我们是否可以收紧边界框以适应对象的真实大小?我们确实可以,这是R-CNN的最后一步。R-CNN对区域建议运行简单的线性回归,为最终结果生成更紧密的边界框坐标。下面是这个回归模型的输入和输出:输入:图像对应对象的子区域输出:子区域中对象的新边界框坐标所以,回顾一下,R-CNN只是以下几个简单的步骤用于边界框生成的一组建议。通过预训练好的AlexNet运行boundingbox中的图像,最后通过SVM运行,可以看到box中图像中的物体是什么。通过线性回归模型运行边界框,并在对象被分类后输出边界框的更紧密坐标。二、2015年:FastR-CNN-AcceleratingandSimplifyingR-CNNRossGirshick写了R-CNN和FastR-CNN,并继续推动FacebookResearch在计算机视觉方面的进步。R-CNN表现很好,但速度很慢,原因如下:它需要CNN(AlexNet)对每张图像的每个区域提议进行前向传递(每张图像大约2000次前向传递)。它必须分别训练三个不同的模型——一个CNN来生成图像特征,一个分类器来预测类别,以及一个回归模型来收紧边界框。这使得管道难以训练。2015年,R-CNN的第一作者RossGirshick解决了这两个问题,创造了第二种算法——FastR-CNN。以下是其主要思想。1.FastR-CNNInsight1:ROI(RegionofInterest)Pooling对于CNN的前向传递,Girshick意识到对于每个图像,许多建议的图像区域总是会相互重叠,导致我们一遍又一遍地重复这个过程再次。CNN计算(大约2000次!)。他的想法很简单:为什么不只对每张图像运行一次CNN,然后找到一种方法在2000个提案中共享计算?在ROIPool中,创建图像的完整正向传递,并为传递中的每个感兴趣区域提取转换后的特征。这正是FastR-CNN使用称为RoIPool(感兴趣区域池化)的技术所做的。它的要点是RoIPool在图像的子区域上共享CNN的前向传递。在上图中,请注意如何通过从CNN的特征图中选择相应的区域来获取每个区域的CNN特征。然后,简单地池化每个区域的特征(通常使用最大池化)。所以我们只需要原始图像的一次传递,而不是大约2000次!2.FastR-CNNInsight2:将所有模型组合成一个网络FastR-CNN将一个卷积神经网络(CNN)、一个分类器和边界框回归器组合成一个简单的网络。FastR-CNN的第二个见解是在单个模型中联合训练卷积神经网络、分类器和边界框回归器。以前我们有不同的模型来提取图像特征(CNN)、分类(SVM)和紧凑边界框(Regression),而FastR-CNN使用单个网络来计算上述三种模型。在上图中,您可以看到这是如何完成的。FastR-CNN在CNN之上用一个简单的softmax层代替了支持向量机分类器(SVMclassfier)来输出分类。它还添加了一个与softmax层平行的线性回归层来输出边界框坐标。这样,所有需要的输出都来自一个网络!以下是整个模型的输入和输出:输入:具有区域建议的图像输出:具有更紧密边界框的每个区域的对象分类III,2016:更快的R-CNN-加速区域建议即使有了这些进步,仍然存在瓶颈在FasterR-CNN-区域提议器中。众所周知,检测对象位置的第一步是生成一系列潜在的边界框或感兴趣区域以进行测试。在FastR-CNN中,这些建议是通过使用选择性搜索创建的,这是一个相当缓慢的过程,被认为是整个过程的瓶颈。微软研究院首席研究员孙健带领FasterR-CNN团队。2015年年中,由任少卿、何凯明、RossGirshick和孙健组成的微软研究团队发现了一种名为FasterR-CNN的架构,将区域生成步骤的成本降低到几乎为零。FasterR-CNN的见解是,区域提议取决于通过CNN的前向传递计算的图像特征(分类的第一步)。为什么不对区域建议重复使用相同的CNN结果,而不是单独运行选择性搜索算法?在FasterR-CNN中,单个CNN用于区域建议和分类。事实上,这正是FasterR-CNN团队取得的成果。在上面你可以看到单个CNN如何执行区域提议和分类。这样,我们几乎可以通过训练单个CNN来免费获得区域建议!作者写道:我们观察到FastR-CNN等区域检测器使用的卷积特征图也可用于生成区域提案[从而使区域提案的成本几乎为零]。以下是其模型的输入和输出:输入:图像(注意区域提议不是必需的)。输出:图像中对象的分类和边界框坐标。1.区域是如何生成的让我们花点时间看看FasterR-CNN如何从CNN特征中生成这些区域建议。FasterR-CNN在CNN特征之上添加了一个简单的全卷积网络,创建了一个所谓的区域建议网络。区域提议网络在CNN特征上滑动一个窗口。在每个窗口位置,网络在每个锚点处输出一个分数和一个边界框(因此,4k个框坐标,其中k是锚点的数量)。区域生成网络的工作是在CNN特征图上传递一个滑动窗口,并在每个窗口中输出k个潜在边界框和分数,以评估这些框的好坏程度。这些k-box代表什么?我们知道,人们的盒子往往是水平的和垂直的。我们可以使用这种直觉来通过创建这种尺寸的锚点来指导区域建议网络。我们知道图像中的对象应该符合某些常见的纵横比和大小。例如,我们想要一些类似人的矩形框。同样,我们没有看到很多非常窄的边界框。通过这种方式,我们创建了k个常见的纵横比,称为锚框。对于每个这样的锚框,我们输出一个边界框并在图像中的每个位置打分。记住这些锚框,让我们看看区域提议网络的输入和输出:输入:CNN特征图。输出:每个锚点的边界框。该分数表征边界框内的图像是对象的可能性。然后我们简单地将每个可能的对象边界框传递给FastR-CNN以生成分类和收紧边界框。4.2017:MaskR-CNN-ExtendingFasterR-CNNforPixel-LevelSegmentation图像实例分割的目的是识别像素级场景中的不同对象。到目前为止,我们已经了解了如何以许多有趣的方式使用CNN来有效地定位图像中具有边界框的不同对象。我们能否进一步扩展这些技术来定位每个对象的精确像素,而不仅仅是边界框?这个问题被称为图像分割。KaimingHe和包括Girshick在内的一组研究人员在FacebookAI上使用一种名为MaskR-CNN的架构探索了这个图像分割问题。FacebookAI研究员KaimingHe是MaskR-CNN的主要作者和FasterR-CNN的合著者。与FastR-CNN和FasterR-CNN非常相似,MaskR-CNN的基础非常简单直观。鉴于FasterR-CNN对象检测效果如此之好,我们是否可以简单地将其扩展到像素级分割?在MaskR-CNN中,在FasterR-CNN的CNN特征网络(FCN)之上添加了一个简单的全卷积来生成掩码(分割输出)。请注意它是如何与FasterR-CNN的分类和边界框回归网络并行化的。MaskR-CNN的工作原理是简单地向FasterR-CNN添加一个分支以输出一个二进制掩码,说明给定像素是否是对象的一部分。如上所述,分支(上图中的白色)只是CNN特征图上的全卷积网络。以下是它的输入和输出:输入:CNN特征图。输出:像素属于目标的所有位置都为1,其他位置为0的矩阵(这称为二进制掩码)。但是MaskR-CNN的作者必须进行一些小的调整才能使该管道按预期工作。RoiAlign-Re-alignstheRoIPooltomakeitmoreaccurate图像通过RoIAlign而不是RoIPool,这样RoIPool选择的特征图区域更精确地对应于原始图像的区域。这是必要的,因为像素级分割需要比边界框更细粒度的对齐。当运行未经修改的原始FasterR-CNN架构时,MaskR-CNN作者意识到RoIPool选择的特征图区域与原始图像的区域略有错位。由于图像分割需要像素级的特异性,与边界框不同,这自然会导致不准确。作者通过简单地调整RoIPool以使用RoIAlign方法进行更精确的对齐来解决此问题。我们如何准确地将原始图像的相关区域映射到特征图上?想象一下,我们有一个大小为128x128的图像和一个大小为25x25的特征图。想象一下,我们想要的是原始图像中左上角15x15像素对应的区域(见上图)。我们如何从特征图中选择这些像素?我们知道原始图像中的每个像素对应于原始图像中的~25/128像素。要从原始图像中选择15个像素,我们只需选择15*25/128~=2.93像素。在RoIPool中,我们丢弃了一些并只选择了2个像素,导致轻微的错位。然而,在RoIAlign,我们避免了这种牺牲。相反,我们使用双线性插值来准确获取2.93像素的内容。这在很大程度上使我们能够避免由RoIPool引起的错位。生成这些掩码后,MaskR-CNN只需将它们与FasterR-CNN的分类和边界框结合起来即可产生如此惊人的准确分割:MaskR-CNN还可以对图像中的对象进行分割和分类。展望过去3短短几年,我们已经看到研究界如何从Krizhevsky等人的最初成果发展到R-CNN,最后一路发展到MaskR-CNN的强大成果。单独来看,像MASKR-CNN这样的结果似乎是遥不可及的惊人飞跃。但是,通过本文,我希望您认识到,这些进步实际上是通过多年的努力和协作实现的直观和渐进的改进。从R-CNN、FastR-CNN、FasterR-CNN到MaskR-CNN的每个想法不一定是飞跃,但它们的总和具有非常显着的效果,帮助我们理解人类的水平愿景又向前迈进了几步。原文:https://blog.athelas.com/a-brief-history-of-cnns-in-image-segmentation-from-r-cnn-to-mask-r-cnn-34ea83205de4辛的原文翻译,微信公众号《机器之心(id:almosthuman2014)》】点此查看该作者更多好文
