我们经常使用卷机神经网络来进行图片分离(注意,不仅仅是图片分类哦),在本文中,我们将会了解如何使用卷机神经网络来做图片实例分离。
从2012年Alex Krizhevsky,Geoff Hinton,和Ilya Sutskever 赢得ImageNet大奖开始,卷机神经网络变成为图片分类的黄金标准。事实上,从那时开始,卷机神经网络的识别图像分类的能力已经超过了人类,表现出无限的魅力。
虽然这些结果非常令人敬佩,但是,图片分类与人类视觉的理解能力的复杂程度以及多样方面相比表现得太过简单了
图片分类中的样例图片,想想咱们能用一个框正好把这只小狗框住吗(图二)
在图片分类的任务中,将要进行分类的图片一般都是图片中的焦点,或者可以说是图片中非常突出的物体,而且图片上往往仅有一个物体,但是想想,我们生活的世界是一个到处都是充满各种物体的世界,要在这样的世界中实现物体分类就没那么简单了。
我们所看到的现实世界中,有很多物体是重叠的,并且有不同的背景,我们的任务不仅要把这些物体进行分类,而且还要识别他们的边界,不同点以及物体之间的相关性。
卷机神经网络能帮我们实现这样的功能吗?也就是说,给出一张复杂的图片,对不同的物体进行分类,标定物体的边界,卷机神经网络能完成这样的功能吗,该结论已经被Ross Girshick和他的团队证实——绝对可以
通过这篇文章,我们将会加深使用在物体侦测和分离背后相关技术理论的理解,也会明白这些技术是如何从一种具体实现演进到下一个更先进的技术。总而言之,本文覆盖了R-CNN(Regional CNN),解决上述问题的一种很原始的技术,紧接着讲解他的后续先进的演变 Fast R-CNN和Faster R-CNN,最终给大家讲解Mask R-CNN—-一篇由Facebook研究团队最近提出的基于像素级别的对象侦测和物体分离技术,以下是本文涉及到的论文。
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
R-CNN 对象侦测算法,拍摄一张照片,然后识别其中的主要物体并且将其分离出来(图五)
受到多伦多大学Hinton’s(很牛的一个实验室) 实验室的启发,由Jitendra Malik教授领导的一个小团队提出一个不可避免的疑问:
通用的物体侦测技术能到什么程度([Krizhevsky 结论,后面还会提到)。
物体侦测是一个从一张图片中找到不同物体并且将其进行分类的技术,该团队(由Ross Girshick ,Jeff Donahue和Trevor Darrel组成)发现该问题可以使用PASCAL和VOC 挑战赛的数据集(和ImageNet 类似)来进行测试,他们提到:
本文首次提到一个CNN网络可以很明显的提高物体侦测的性能和准确性,在PASCAL VOC数据集上,以简化的HOG特征作为对比
我们来看看 R-CNN的基本架构以及其是如何工作的
R-CNN的目标是拍一张照片然后正确地将其中主要的物体识别出来(放置于图片的一个矩形框中)
我们如何弄清楚矩形框处在什么位置呢,R-CNN的做法,在图片上构建一系列矩形框,然后看矩形框之间的相似性和一致性,最后将其合并的一个物体中
R-CNN创建这些矩形框或者叫做(region proposal),使用一种叫做选择性搜索(selective search)的技术,上图已做说明。
一旦这些矩形框(也叫region proposals)创建完成之后,R-CNN通过AlexNet(一种普通图片物体识别的网络) 神经网络传输一张图片来判断其是否是一个有效的矩形区域,该网络分类正确的话就证明该矩形框选对了。
在最后一层CNN网络,R-CNN使用SVM支持向量机简化该输出结果是不是一个物体对象的,如果是则是什么物体。
现在既然找到了物体矩形框,我们能还能时矩形框更加紧致使其刚好到达框住物体的大小吗?答案当然是能了,这就是R-CNN的最后一个步骤,R-CNN执行一个基于矩形框的很简单的线性回归来生成更加紧致的矩形框坐标,最终达到我们的目标,下面是回归模型的输入和输错:
* 输入: 能匹配出物体对象的子区域
* 输出: 新的物体在子区域中的矩形坐标
所以R-CNN的概括如下:
1. 生成一系列矩形候选框
2. 通过将数据输入预先训练好的AlexNet神经网络,并最终通过SVM来判断一个物体是否在矩形框中
3. R-CNN执行一个基于矩形框的很简单的线性回归来生成更加紧致的矩形框坐标
R-CNN 效果很好,但是相当的慢
1. 对于每一张图片的每一个矩形框(proposals)都需要一个前向CNN网络作为支撑,也就是说每张图片大约需要2000次前向传输
2. R-CNN训练三种模式是单独分开执行的,CNN 生成图片特征,分类器预测类别,回归模型使矩形框更加紧致。这使得整条线特别难执行。
在2015年,Ross Girshick R-CNN 的第一作者,解决了这些问题,从R-CNN到Fast R-CNN的过度只需要很短的时间。
Fast R-CNN 观点一:RoI(Region of Interest)Pooling
对于前向传递的CNN网络,Girshick 认识到,对于每一张图片,图片上的大量矩形框总是重叠在一,致使我们在执行相同的一遍又一遍的CNN计算(~2000次),他的观点非常简单,为什么不一张图片只执行一次CNN,然后找到一种方式来共享计算过程。
该图就是Fast R-CNN使用的叫做RoIPool的技术(Region of Interest Pooling)。该技术的核心:对于一张图片在其子区域中RoIPool共享一个前向传递的CNN,在上面的图片中,注意如何从CNN的特征映射中选择相应的区域来获取每个区域的CNN特征。然后,每个对每个区域的特征进行池化(通常使用max pooling),所以该过程对于一张原始图片来说只需传递一次数据就能达到以上方法中两千次的效果。
Fast R-CNN 观点二:在一个网络中结合所有模型
Fast R-CNN的第二个观点是将CNN,分类器,和矩形框(bounding box)回归合为一个单一的神经网络。在前一个R-CNN中我们用不同的模型来提取图片特征(CNN),分类(SVM),紧致Bounding Box(可以称作回归器),故 Fast R-CNN 仅仅使用单一网络就能实现这三个功能。
从上面图片可以看出,Fast R-CNN 在CNN的顶层使用softmax回归来替换SVM分类器。还添加和softmax并行的线性回归来计算Bounding Box的坐标,通过这种方式所有的输出就都来自于单一网络,以下是该模型的综述:
就算图片识别和分离取得如此成就,但Fast R-CNN仍然存在瓶颈—-矩形框生成器。正如我们所看到的,侦测对象位置最快速的一步是生成一些潜在的矩形候选框(Bounding Box 或者叫做RoI)。在Fast R-CNN网络中,这些Box依然是使用Selective Search(选择性搜索的方式生成),这是一个相当慢的过程。
2015年中旬,由孙建,何凯明,Ross Girshick,任少卿组成的微软研究团队发现一种生成proposal的方法,对于Fast R-CNN而言几乎不耗费任何计算成本。他们命名为Faster R-CNN
Faster R-CNN的观点是 Box(proposals)取决于图片的特征,该特征已经在前向CNN计算的过程中(用于分类)进行完成,所以产生一种疑问,为什么不重复使用CNN的结果来生成Box( proposals) 而不是执行一个单独的Selective Search(选择性搜索)的算法。
确实,这就是该团的实现的最后理论,在上述图片中,你能看到单一CNN用来实现region proposals(Box)和分类,通过这种方式,仅仅只需要一个CNN就能开始进行模型的训练,从而不需要耗费任何别的代价就能得到proposals(Selective Search得到的结果)。他们提到:
我们观察的是特征映射的卷积过程,用于做基于region的侦测,就像Fast R-CNN,也能用来生成proposals。
以下是他们模型的基本输入输出:
* 输入:图片
* 输出:物体对象分类和物体的矩形框
区域(Regions)如何生成呢:
让我们来看看Faster R-CNN如何从CNN特征中生成候选Box(Regions),Faster R-CNN在CNN特征的顶层添加了一个全连接的卷机网络,称作:Region Proposal Network
Region Proposal Network通过在CNN特征映射层上传输一个滑动窗口,输出k个潜在的box矩形框以及每一个矩形框所占的权重。k个box代表又什么呢?
我们都知道能框住这个人的一定是矩形,我们能使用这种理论通过创建这种维度矩形的锚点来引导生成我们的Region Proposal Network。(图十一)
直觉上我们都知道,图片上的物体都或多或少的能通过调整矩形的宽高比以将其刚好框住。例如,我们知道我们不会看到很多很薄很细的盒子,通过这种方式,我们创建k个这种常见的矩形(我称之为锚点矩形)。对于每一个锚点矩形,我们输出一个矩形框和权重(在每一张图片的每个位置)。
考虑到这种锚点矩形,我们来看看该网络的输入和输出吧:
至今为止,我们已经能使用CNN特征以许多有趣的方式来有效地在一张图片中定位不同的对象(以Box的方式)
我们还能继续往下走吗?精确的在像素级别上定位物体而不是仅仅以矩形框的方式(bounding box),该问题就是何凯明和他的团队研究的问题,叫做 Mask R-CNN
与Fast R-CNN和Faster R-CNN相似,Mask R-CNN‘s 重视的理论是前向传播,考虑到Faster R-CNN在物体鉴别的效果特别好,我们还能继续实现基于像素级别的物体分离吗?
Mask R-CNN 通过在Faster R-CNN网络上添加个分支,该分支产生一个二分Mask,用来确定给出的像素是否是一个物体的一部分。该分支(在上诉图片中用白色来体现),和之前一样,就是一个基于CNN 特征映射网络顶层的全连接的卷机神经网络。下面是他的输入和输出:
但是Mask R-CNN的作者对之前的网络做了一些微小的调整
RoiAlign - Realigning RoIPool to be More Accurate
当执行基于原始的没有任何修正的Faster R-CNN架构时,Mask R-CNN的作者意识到通过由RoIPool选择的特征映射的区域和原始图片区域相比有一点点的没有对齐。由于图像分离需要像素级别的的准确性,和bounding box不一样(本身就带有不准确性)
这些作者们通过明智的调整RoIPool的精度来解决该问题。
想想一下,我们有一个128x128以及一个正特映射25x25的图片,让我们假定左上角的15x15的像素和原始图片的特征是一致的,我们有多大的可能性从特征映射中选择这些这些像素。
我们知道每一个像素在原始图片中和25/128像素是一致的,要从原始图片中选择15个像素,我们仅仅15*25/128 ~= 2.93个像素。
在RoI中,我们可能将该值降低了,选择两个像素造成了不对齐。然后,在RoIAlign,我们避免了四舍五入,使用了双限行插值的方式获得更高的精度2.93,在该精度下我们避免了由RoI造成的不对齐。
一旦这些Mask 生成,Mask R-CNN结合来源于Faster R-CNN的分类,边界框,将能产生更加精确的物体分离。
下图是使用Mask R-CNN 技术生成的图片生成实例
原文地址
TensorFlow技术实现Mask R-CNN: https://github.com/CharlesShang/FastMaskRCNN