CNNs 在图像分割中应用简史: 从R-CNN到Mask R-CNN

版权:本文版权归作者和博客园共有 
转载:欢迎转载,但未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
 
本文仅是本人学习A Brief History of CNNs in Image Segmentation: From R-CNN to Mask R-CNN后对原文的翻译,如有错误之处,欢迎指出
 
近些年来,尽管用CNNs做图像分类任务的结果很惊艳,但是,图像分类在复杂度和多样性方面都比真实的人类视觉理解简单得多。
分类任务中用的一个图像实例。注意到图像是框(framed)好的而且只有一个物体。
在分类中,一般一张图像只需关注一个物体,任务就是说出这个图像是什么。但环顾我们的世界,我们要执行的是一个更复杂的任务。
现实生活中的场景往往由大量不同的、重叠的对象、背景、和行为(actions)组成,我们不仅要对不同的物体分类还要识别出他们的边界、差异和相互间的关系。
图像分割,目标是对图像的不同目标分类,识别出他们的边界,图来自Mask R-CNN论文
 
本文目标
分析目标检测和分割中用到的主要技巧后包含的intuition,看看他们是怎么从一个方法进化到另一个的。我们会提到R-CNN (Regional CNN),CNNs在这个问题的原始应用,和他的后代Fast R-CNN,Faster R-CNN. 最后分析一下Mask R-CNN,是Facebook研究院最新出的一篇论文,把目标检测技巧扩展到提供像素级分割。引用了四篇论文:
 
2014: R-CNN - CNNs在目标检测的早期应用
 

目标检测算法,如R-CNN输入一张图像,确定图像中主要物体的位置和类别。

 目标检测是从一幅图像中找出不同的物体并且对物体分类的任务。受多伦多大学Hinton实验室研究的启发,UC伯克利的Jitendra Malik教授领导的一个小团队发现,可以类似图像分类任务,用 Krizhevsky et. al’s(AlexNet网络)在目标检测PASCAL VOC Challenge上做,第一次将CNNs用在了PASCAL VOC上,与简单的类似hog特征的方法相比,极大地提升了目标检测的性能。下面花点时间理解一下他们的架构Regions With CNNs (R-CNN) works。
 
Understanding R-CNN
 R-CNN的目标是输入一张图像,正确地判断主要目标在图像的什么位置(用bounding box表示)
  • Inputs: Image 输入是图像
  • Outputs: Bounding boxes + labels for each object in the image.输出是,对于图像中的每个物体给出 Bounding boxes+标签
 那么怎么找到 bounding boxes在哪呢?R-CNN按照我们的直觉这样做--在图像中给出很多boxes,判断每一个box是否真的对应一个物体。

 选择性搜索Selective Search利用多尺度的窗口搜索有纹理、颜色和强度的相邻像素。 图片来源: https://www.koen.me/research/pub/uijlings-ijcv2013-draft.pdf

 
R-CNN用Selective Search方法创建这些边界框 bounding boxes,或者候选区域region proposals。在high level上,Selective Search通过不同尺寸的窗观察图像,对每个尺寸,利用纹理、颜色和强度组合起来的邻近像素一起识别物体。
 一旦创建了一些候选区域region proposals,R-CNN就把区域变成标准的方形尺寸,输入到修改过了的AlexNet 中,见上图。在CNN的最后一层,R-CNN加了一个支持向量机SVM来简单地判断是否是物体,若是,判断是个什么物体,见上图的第四步。
 
改进边界框Bounding Boxes
 
现在框中有物体了,能够减小框,适应物体的真实尺寸吗?可以通过R-CNN的最后一步来实现,就是在候选区域region proposal上用一个简单的线性回归,生成更小tighter 的bounding box坐标得到最终的结果,下面是回归模型的输入和输出:
  • Inputs: sub-regions of the image corresponding to objects.图像对应物体的子区域
  • Outputs: New bounding box coordinates for the object in the sub-region.在子区域中物体的新的边界框坐标
总体来说,R-CNN就是几个步骤:
  • 生成一组候选边界框
  • 将带有候选边界框的图像输入到预训练好的AlexNet中,最后用SVM判断图像中物体在哪个框中
  • 如果物体被分类了(这个框确实包含物体),就把框输入到线性模型中,输出这个框更窄tighter的坐标。

2015: Fast R-CNN -加速、简化R-CNN

 
Ross Girshick wrote both R-CNN and Fast R-CNN. He continues to push the boundaries of Computer Vision at Facebook Research.
 
 R-CNN很慢,有几个很简单的原因:
  • 每张图像的每个候选区域都要输入到CNN(AlexNet)中(每张图像大约2000次)
  • 需要分别训练三个不同的模型-生成图像特征的CNN,预测类别的分类器(SVM)和用于缩小边界框的回归模型。
 在2015年,Ross Girshick,R-CNN的第一作者解决了这两个问题,得到了Fast R-CNN。我们看看它的主要思想(insights)。
 
Fast R-CNN Insight 1: RoI (Region of Interest) Pooling感兴趣区域池化
 
 作者意识到对每张图像总是有许多候选区域会重叠,会导致重复地做相同的CNN计算(约2000次)。他的insight很简单-为什么不每张图像做一次CNN计算,然后找到一个方法,在2000候选区域上共享计算结果呢?
 

这就是Fast R-CNN做的一个技巧--RoIPool (Region of Interest Pooling)感兴趣区域池化。在上图中,每个区域的CNN特征是通过从CNN的特征图中选择对应的区域得到的,然后,每个区域的特征再经过池化(通常最大池化)这样相比于之前的每张图像需要进入CNN2000次,用这个方法后每张图像就只经过CNN一次。

 Fast R-CNN Insight 2: Combine All Models into One Network
 

Fast R-CNN的第二个insight就是在一个单独模型中,联合训练CNN、分类器和边界框回归器,R-CNN需要有不同的模型提取图像特征(CNN)、分类(SVM)和缩小边界框(回归器)。

 Fast R-CNN在CNN最后用soft-max层代替SVM分类器输出一个分类结果,还增加了一个线性回归,和softmax层并行,用来输出边界框坐标。用这种方法所有的输出需要从单独的网络得到。下面是这个模型的输入和输出:
  • Inputs: Images with region proposals.带有候选区域的图像
  • Outputs: Object classifications of each region along with tighter bounding boxes.每个区域的物体分类和更窄的边界框
 

2016: Faster R-CNN - 加速候选区域

 Fast R-CNN中仍然有个瓶颈--候选区域部分。检测目标未知的第一步是生成一些可能的边界框或者感兴趣区域用于测试,在Fast R-CNN中,这些候选是用Selective Search来做的,这个过程相当慢,是整个过程的瓶颈。
 

 

 Jian Sun, a principal researcher at Microsoft Research, led the team behind Faster R-CNN. Source: https://blogs.microsoft.com/next/2015/12/10/microsoft-researchers-win-imagenet-computer-vision-challenge/#sm.00017fqnl1bz6fqf11amuo0d9ttdp
 
在2015年年中,微软的一个团队发现了一种生成候选区域的方法--Faster R-CNN,整个过程几乎没有cost。
 R-CNN的想法就是候选区域取决于图像的特征,这在通过CNN的过程中已经计算过了(分类的第一步),那么为什么要单独运行 selective search 算法,重新用那些相同的CNN结果来得到候选区域呢?这就是Faster R-CNN的实现。

 
 In Faster R-CNN, a single CNN is used for region proposals, and classifications. Source: https://arxiv.org/abs/1506.01497.
 
 从上图中可以看出一个单独的CNN用于得到候选区域和分类,以这种方式,只需训练一个CNN,无需额外的成本就可以得到候选形状。(作者是观察到:用基于区域的检测器的卷积特征图,如Fast R-CNN,也可以用于生成候选区域) 模型的输入和输出为:
  • Inputs: Images (Notice how region proposals are not needed).图像,不需要候选区域
  • Outputs: Classifications and bounding box coordinates of objects in the images.图像中物体的分类和边界框坐标。
区域是怎么生成的
 Faster R-CNN在CNN得到的特征顶部增加了一个全卷积网络--候选区域网络Region Proposal Network。
 

 The Region Proposal Network slides a window over the features of the CNN. At each window location, the network outputs a score and a bounding box per anchor (hence 4k box coordinates where k is the number of anchors). Source: https://arxiv.org/abs/1506.01497.

 区域候选网络在CNN特征图上滑动窗口,在每个窗口,输出k个可能的边界框,还有一个衡量框的可能性的得分。

We know that the bounding boxes for people tend to be rectangular and vertical. We can use this intuition to guide our Region Proposal networks through creating an anchor of such dimensions. Image Source: http://vlm1.uta.edu/~athitsos/courses/cse6367_spring2011/assignments/assignment1/bbox0062.jpg.

 直观地,我们知道图像中的物体应该符合某个常见的长宽比和尺寸,例如,我们想要一些和人的形状相似的矩形框,同样,我们不想看到非常瘦的框。按这种方式,我们创建了K个常见的长宽比称为anchor boxes,对于每个anchor box,我们输出一个边界框和并对每个位置打分。这个候选区域网络的输入和输出为:
  • Inputs: CNN Feature Map. CNN特征图
  • Outputs: A bounding box per anchor. A score representing how likely the image in that bounding box will be an object. 每个anchor一个边界框,打分代表边界框内是物体的可能性
 之后把可能是物体的边界框输出到Fast R-CNN中得到分类和窄的边界框。

2017: Mask R-CNN - 将Faster R-CNN拓展到像素级分割

The goal of image instance segmentation is to identify, at a pixel level, what the different objets in a scene are. Source: https://arxiv.org/abs/1703.06870.

 我们能否用这种技术定位出每个物体的精确像素而不只是边界框?这个问题就是图像分割。
 

Kaiming He, a researcher at Facebook AI, is lead author of Mask R-CNN and also a coauthor of Faster R-CNN.

 和Fast R-CNN, Faster R-CNN很像, Mask R-CNN’s 潜在的直觉是直接的。
 

 

 In Mask R-CNN, a Fully Convolutional Network (FCN) is added on top of the CNN features of Faster R-CNN to generate a mask (segmentation output). Notice how this is in parallel to the classification and bounding box regression network of Faster R-CNN. Source: https://arxiv.org/abs/1703.06870.
 
 Mask R-CNN在Faster R-CNN中添加一个分支,用于输出二值mask,表示给定像素是否是一个物体的一部分,上图中白色部分是分支,是一个在CNN特征图顶部的全卷积网络,下面是输入和输出:
  • Inputs: CNN Feature Map. CNN特征图
  • Outputs: Matrix with 1s on all locations where the pixel belongs to the object and 0s elsewhere (this is known as a binary mask).二值矩阵,当该像素属于物体时mask值为1,否则为0
还需做个调整RoiAlign 。
RoiAlign - Realigning RoIPool to be More Accurate 调整RoIPool 
 

Instead of RoIPool, the image gets passed through RoIAlign so that the regions of the feature map selected by RoIPool correspond more precisely to the regions of the original image. This is needed because pixel level segmentation requires more fine-grained alignment than bounding boxes. Source: https://arxiv.org/abs/1703.06870.

 不修改原始 Faster R-CNN架构,作者发现用RoIPool选择的特征图和原图的区域没有完全对齐,因为图像分割任务要求像素级,不像边界框,这样自然会导致不准确。作者机智地用RoIAlign方法调整RoIPool使对齐更准确。
 

How do we accurately map a region of interest from the original image onto the feature map?

在RoIPool中我们大概选择两个像素,得到了有些不对齐的结果,然而在RoIAlign中我们避免用这样的舍入,用双线性插值得到准确的2.93。这样就可以避免RoIPool产生的不对齐。

当得到了这些masks后,Mask R-CNN用Faster R-CNN生成的分类和边界框将他们结合起来,生成精确地分割。

Mask R-CNN is able to segment as well as classify the objects in an image. Source: https://arxiv.org/abs/1703.06870.

posted @ 2017-04-24 15:48  嫩芽33  阅读(4718)  评论(0编辑  收藏  举报