基于深度学习图像的目标检测

前言

有一些图像分割的背景知识也很有意思,简单列下, 概述下来,主要是五大任务, 六大数据集, 七大牛人组,一个效果评估。

五大图像处理任务

1. 图像分类

image

2. 分类和定位

image

3. 目标物体检测

image

4. 语义分割

一下子从框的世界进入了像素点的世界。

image

5. 实例分割

image

六大图像数据库

1. PASCAL Visual Object Classes (VOC) 挑战

人、车、自行车、公交车、飞机、羊、牛、桌等20大类

image

2. MS COCO: Microsoft Common Object in Context

80大类, 多目标

image

3. ImageNet Object Detection: ILSVRC DET 任务

200类别,578,482 图片

image

4. Oxford-IIIT Pet Dataset

37 类别,每个类别 200 图片

image

5. Cityscapes Dataset

30 类别,25,000 + 真实开车场景图片

image

6. ADE20K Dataset

150+ 类别,22,000 + 普通场景图片

image

七大牛人组

1. Navneet Dalal 和 Bill Triggs (INRIA)

两人提出了Histogram of Gradient (HOG) 获得2015年的 Longuet-Higgins Prize大奖

image

2. Pedro Felipe Felzenszwalb

和学生Ross Girshick一起发明了DPM,深化了HOG.

image

3. Ross Girshick

Felzenszwalb的高徒, RBG大神、发明了R-CNN、Mask R-CNN。 Ross目前在Facebook人工智能研究院 FAIR。

image

4. Koen van de Sande

提出Selective Search的大神。

image

5. Jitendra Malik

去噪模型Perona-Malik扩散和聚类分割里面的归一化分割Normalized Cut的发明人, RBG大神的博士后导师,鼓励RBG引入CNN做目标检测, R-CNN发明人之一。

image

6. Pietro Perona去噪模型Perona-Malik扩散的发明人, 李飞飞的博士导师, 2013获得Longuet-Higgins Prize。 和高徒Piotr Dollar一起提出Fast Feature Pyramids的神器。他的另外一个高徒Stefano Soatto搞出了 Structure From Motion SFM,视觉运动信息的多幅二维图像序列估计三维结构的技术。 他弟子Piotr Dollar目前在FAIR。

image

7. 何凯明ResNet,SPP, Mask-CNN发明人,目前在FAIR。

image

一个效果评估mAP(mean average precision) 借用了文档检索里面的标准, 假设目标物体的预测在所有的图像中都进行预测, 在每个图像上计算准确和召回。 但是最后计算每个目标物体的AP的时候, 仅仅选用相关的图像,进行平均average, 最后计算mAP的时候再求平均mean。 是一个奇怪的名字,却是一个蛮直观的评价!

image

R-CNN系列

R-CNN的横空出世, 随后经过一系列改进, 走到了Mask R-CNN和Mask^X R-CNN的神奇境界。

image

CNN结构上从AlexNet过渡到ResNet, 中间也受到Overfeat和SPPNet的影响深远!

一, R-CNN的前世

2013年之前, 基本由RBG和他导师的DPM主导, 当然离不开SS和SVM的应用,和后续Box Regression的修正。

image

1. Histogram of Gradient (HOG) 特征

8x8像素框内计算方向梯度直方图

image

2. HOG Pyramid

特征金字塔,对于不同大小的物体进行适应。

image

3. HOG特征 -> SVM分类

image

4. DPM模型 Deformable Part Model

加组件组合的HOG特征, 组件间计算弹性得分,优化可变形参数。

image

如果没有弹性距离,就是BoW (Bag of Word)模型, 问题很大, 位置全部丢失:

image

n个组件的DPM计算流程

image

5. Selective Search 思想

首先, 过分割后基于颜色纹理等相似度合并,

image

然后,过分割、分层合并、建议区域排序

image

6. 基于****Selective Search + DPM/HoG + SVM的物体识别

image

7. AlexNet的图像分类

2012年AlexNet赢得LSVRC的ImageNet分类竞赛。深度CNN结构用来图像特征提取。

image
image

8. bounding-box regression 框回归

BBR 在DPM时代就和SVM分类结合,一般直接使用线性回归,或者和SVR结合。

image

二, R-CNN的出世

这个工作是RBG在Malik那里读博士后的产出。 这个工作的影响巨大!

1.1 R-CNN的本质, 用深度CNN网络取代了HoG/DPM的特征提取!

image
image

1.2 R-CNN依赖分类预训练的特征

image

1.3 通过bounding-box regression改进效果,对于SS推荐的, 经过SVM分类的结果进行修正。

image

这样,我们就得到了最后RNN的框架,我们看到区域推荐、SVM和Bound Box Regression都是成熟的技术的整合:

image

R-CNN优点:

1. 效果比DPM方法大幅度提高

2. 开启了CNN网络的目标检测应用

3. 引入了BBR和分类结合的思想

4. 定义了RoI, 基于推荐区域的思想

R-CNN问题:

  1. 不是端到端的模型,依赖SS和SVM!

  2. 计算速度相当慢!

  3. 对于过大过小的东西,效果很不好。

譬如,对于长凳, 或者眼镜等等。

image
image

三,MR-CNN的改进

Multi-Region的提出, 开始对Box进一步做文章, 相当于对Box进一步做增强,希望改进增强后的效果,主要改善了部分重叠交叉的情况。

image

但是特征拼接后使得空间变大,再使用SVM处理, 效果和R-CNN基本类似。

image

MR-CNN改进有限!

四, Overfeat的改进

LeCun的Overfeat是个端到端的模型,直接抛弃了SVM,并且把BBR整合一起使用FCN(Fully-Connected Net)搞定, 解决了后面一端的问题(取代了SVM和BBR)。

image

另外, 也直接抛弃了SS,采用CNN上滑动窗口来进行框推荐,搞定前面一端。

image

然后直接根据滑动窗口的不准确的判断, 进行Box 回归(BR)来进行准确定位。

image

并且在计算上做了三大优化: 第一, 先进行CNN再滑动窗口, 而不是先滑动窗口再进行CNN计算。 把窗口滑动放到CNN之后进行。 避免重复的特征计算。

image
image

第二, 多类别并行计算框架, 进一步减少CNN特征计算因为没有找到特定类别而浪费。

image

第三, 把FCN直接用CNN网络取代, 计算量大大减少。怎么做到的呢? 结合上面两点, 利用每个类别实现一个0-1的CNN网络, 然后所有类别并行处理。

image

还做了一大改进, 考虑了多尺度衍生:

image

Overfeat优点:

1. 端到端的模型

2. 回归和分类结合的计算模型

3. 首次将区域计算后移, 极大节省计算量, 优化速度

4. 有多尺度考量,试图优化极大极小目标问题

Overfeat问题:

1. 取消区域推荐, 依赖窗口滑动和BR效果后的推荐效果一般。

2. 定位准确, 但是对于重叠目标物体的情况,效果很差。

image
image

五, SPPNet的改进

这个工作是何凯明在孙剑指导下, 微软的工作。 后来孙剑去了旷视科技, 而何凯明去了Facebook人工智能实验室FAIR。 前面, 我们提到R-CNN和Overfeat都存在部分多尺度,重叠效果的问题。 某种意义上, 应对了HoG特征, 这样对于物体来说类似BoW模型, 我们知道DPM里面,是带有组件空间分布的弹性得分的, 另外也有HoG Pyramid的思想。 如何把Pyramid思想和空间限制得分加入改善多尺度和重叠的效果呢? MR-CNN里面尝试了区域增强, Overfeat里面尝试了多尺度输入。 但是效果都一般。 这里我们介绍另外一个技术Spatial Pyramid Matching, SPM。把空间和Pyramid结合的思想。

1. SPM

把BoW修改金字塔Pyramid方式进行空间限制,做特征提取。

image
  1. SPM用在CNN特征之后,R-CNN里面 SVM分类之前。
image

3. 基于CNN的Pooling技术来实现SPM, 通过不同尺度的Pooling技术很容易就实现了CNN特征的SPM特征。

image

4. 先特征后区域的处理, 某种意义上取代了多尺度输入,或者特征增强。

image

和R-CNN相比做到了先特征后区域, 和Overfeat相比自带Multi-Scale。

image

于是SPPNet(Spatial Pyramid Pooling Net)很空出世!

image

SPPNet优点:

1. 提取SPP的概念, 把CNN的Pooling用的出神入化, 取代了HoG Pyramid的改进。 对于大小尺度的物体识别有改进。

2. 进一步强调了CNN特征计算前移, 区域处理后移的思想, 极大节省计算量。

SPPNet缺点:

1. 依然不是端到端的模型

2. 过于注重CNN特征的分离, CNN特征提取没有联动调参数!

image
image

Fast R-CNN的改进

RBG从后来去了微软,在微软了解了何凯明的SPPNet工作。 所以Fast R-CNN 基本和SPPNet类似, 但是进一步联动改进!全部打通区域推荐之后到目标识别后一端!而且效果较好!

image

基于SPPNet, Fast R-CNN做了两大改进:

一, 简化SPP成为RoI Pooling, 只用了最细分的SPPNet。 把RoI区域变成了RoI Pooling, 这就是RoI Pooling的思想的来源。 Pyramid上层更粗的特征, 可以依赖FCN进行整合学习。

image

二, CNN特征网络联动调参数!

image

这样, Softmax分类误差和线性回归误差叠加的误差, 可以反传通过FCN, ROI Pooling和ConvNet层。

image

Fast R-CNN优点:

1. 吸收了SPPNet和R-CNN的精华,极大的打通并且改进了从区域推荐到目标检测一端。

2. RoI Pooling技术横空出世, 极大的发挥了区域计算后移的优势, 加快了训练速度。

3. Log 损失和Smooth L1的损失下的FCN、RoI Pooling、ConvNet三层联动调参数成熟, 并且带来效果上的提升。

4. 并且应用VGG16,取代AlexNet作为CNN网络模型

Fast R-CNN缺点:

1. 依然没有实现端到端的模型,对SS区域推荐依赖严重。

image
image

Faster R-CNN的改进

SPPNet和Fast R-CNN都面临着并非端到端模型的困惑, 那么RBG、何凯明和孙剑, 微软的3位牛人合作开启了端到端模型的开发。

提出RPN(Region Proposal Net)取代了SS区域推荐。 RPN有点类似Overfeat的ConvNet的滑动窗口, 但是加入了Anchor Box的设计。

image

在Overfeat的ConvNet上的滑动窗口, 加上Multi-Scale的图像输入设计, 编程了带Anchor Box推荐的区域Pyramid。 这种机制, 某种意义上是带了先验的Attention机制。

image

这样 RPN的Anchor和Pyramid和定位都可以是参数学习, 例如:9 anchors x 2 scores x width x height。

如果在考虑ROI Pooling对推荐区域的修正作为新的RPN,就会带来ROI Pooling的迭代:

image

所以最初, RPN的损失是单独计算进行参数学习的。

image

但是后来, RPN的误差也全部整合处理了, 一个端到端的模型诞生,并且具有较好的区域推荐、特征Pyramid,和Box回归的效果保证。

image

Faster R-CNN优点:

1. 和Overfeat一样是一个端到端的模型, 但是集成了以前图像处理里面的思想: 区域推荐, 特征Pyramid和Box回归。

2. 较好的ConvNet特征共享, 效率更高

3. 提出了RPN网络,并且整合后的效果和Fast R-CNN一样

Faster R-CNN缺点:

1. 依然难以做到实时高效

2. 功能上没有进入实例分割阶段。

image

小结

我们发现, 单纯的端到端ConvNet模型的Overfeat很难达到较好的效果。 如何融合图像处理经典思想里面的区域推荐, 特征金字塔, 和框回归,还是非常有必要。 而Faster R-CNN做到了这些。 这个过程中一直伴随着性能的提升, 其中重要一步就是如何让特征计算不要重复,做到一次计算。 如何进一步提高速度, 和增强功能, 是后续网络的要改进的地方。 例如, 我们发现ConvNet的计算在Faster R-CNN已经达到很高的共享, 但是ROI之后依然有ConvNet的计算, 如何进一步共享这部分计算呢?

image

天下武功唯快不破!

所以在如何让检测更快? 主要有两种思路:

1. 把好的方法改进的更快!

前面我们提到了从R-CNN到Faster R-CNN主要的技术思想就是避免特征计算浪费。 所以要把ConvNet特征计算前移,只做一次计算。 而把区域操作后移。 我们也提到Faster R-CNN在RoI之后还有部分ConvNet的计算。 有没有可能把ROI之上的计算进一步前移? R-FCN(Region-based Fully Convolutional Networks) 基于这个思路,做到了,所以更快, 某种意义上,是Fatest R-CNN。

R-FCN

image

2. 把快的方法,改进的更好!

前面我们谈到overfeat的效果一般, 但是overfeat基于滑动窗口和回归思想的速度很快。 从效果上来说, overfeat 的效果一般, 对于重叠情况很多不能识别的情况。 如何将基于回归的思想,做到逼近区域推荐的效果?YOLO把分而治之和IoU的思想集成进来了。 而SSD把多尺度Anchor Box的思想集成进来了。

除了快还有什么?当然是做优做强

Faster R-NN有三大主要部件, RPN 做区域推荐, RoI Pooling类似特征Pyramid,改善极大极小重叠, 分类和Box回归的Log 加 Smoothed L1 损失, 针对定位修正。 如何要做优做强?

能否比RPN做的更优?

前面我们提到RPN能够达到Selective Search的效果, 那么假如还要更好, 怎么能够做到?AttractioNet利用了NMS(non-maxima suppression)效果。 AttentionNet利用了弱注意力集中的机制。

能否比RoI Pooling做的更优?

前面我们提到RoI Pooling能够做到和HoG Pyramid和DPM空间限制类似的SPM的效果, 那么加入还要更好, 怎么能够做到? ION(Inside-Outside Net)提出了四方向上下文的思想, FPN提出了特征Pyramid网络。

能否比RoI Pooling做的更强?

前面我们提到RoI Pooling是建立在RoI基础上的, 对应的区域推荐, 如何进一步对齐到像素点? Mask R-CNN提出了RoI Align的思想。 在误差计算中,除了分类, Box回归基础上再加入像素点Mask Branch距离的思想。

那么, 什么是FCN(Fully Convolutional Networks), IoU, NMS, Weak Attention Narrowing, ION, FPN, RoI Align 和 Mask Branch思想?理解了这些, 你对厦门这个图,就不再陌生!

image

下面, 开启下半场的路程!

R-FCN

前面我们提到, Faster R-CNN打通前后端成为端到端的模型的同时, ConvNet模型也换成了VGG-16的模型。 但是在GoogLeNet和ResNet网络结构上, 全连接FC层就只有一层了, 最后一层,为Softmax分类服务了。

image

那么, 如果要把GoogLeNet和ResNet应用到Faster R-CNN中去,就面临一个现象,去掉最后一层FC层, 因为那是用来做分类的。 需要换到新的尾部网络, 能够兼容分类和Box回归。

image
image

这样, 我们再来看RoI Pooling的使用, 那么RoI Pooling后面的FC层也要换成卷积层。 这样, 卷积层就被RoI Pooling层隔断了。 而且这种隔断使得RoI Pooling后面的ConvNet重复计算了。

image

一个问题, 能不能直接把后面FCs变成ResNet之后的ConvNet直接丢弃? 不行, 这样的效果会打折扣, 为什么? 我们在Fast R-CNN继承SPPNet的SPM技术, 演绎出RoI Pooling的时候讲了,RoI Pooling只是相当于最细分的区域固定, 那么粗粒度的部分, 可以由后续的多层FCs来达到类似的效果。 如果去掉, 就少了金字塔结构了,或者少了深度了。

image

那么, 如何把RoI后面的卷积计算也移到前面去?就是R-FCN解决的问题!一方面要保留空间限制, 另一方面要有一定特征层次。 R-FCN提出了Position-Sensitive RoI Pooling。

image

Position-Sensitive RoI Pooling的思想, 正式将位置并行起来, 是一种结合了空间信息的的注意力机制。 每个小的子框数据来源一个和特点位置绑定的ConvNet特征层。

image

一旦和位置绑定了, 那么特征计算, 就从以前的中心点, 变成了一系列从上下左右的不同子框去看的特征图。 那么再把这些组合起来。 即暗含了不同空间信息。类别的说,就是你先上下左右的看这个山峰, 回头把看的拼接起来, 判断山峰有没有认错。 选择好不同位子的特征,再整合起来, 得到在不同位子点确认的特征, 再做Pooling, 通过Pooling进行投票。

image

这样的效果就是, 把特征计算放在前面, 而把位置信息拼接投票放在最后处理。 而不是先通过位置划出特征, 然后把带位置的特征先融合,再做分类和回归。 这里直接进行位置投票。 要注意的PS RoI Pooling和RoI Pooling并不是一个Pooling。

image

R-FCN优点:

  1. 清楚的关联了速度提升和ConvNet特征共享的关系。

  2. 通过不同位置为注意力的并行特征计算,再极好的利用Pooling来投票, 取代了RoI Pooling后续计算的计算要求。

  3. 速度快, 效果好的均衡下的推荐选择。

R-FCN问题:

  1. 依然无法实现视频基本的实时(每秒24帧图像)。

  2. 功能上没有涉及到像素级别的实例分割

image

YOLO

其实, 我们前面提到了Overfeat效果不好, 一个很大原因就是Overfeat没有专门为了提高召回率的区域推荐机制。 而有区域推荐RPN的Faster R-CNN慢的一个重要原因,就是RPN的计算量基本也够计算Overfeat了。 所以它是两个阶段。

image

Overfeat开启了一个阶段端到端的神话, 但是效果却不好。 如果不使用区域推荐机制的情况下, 仅仅依靠分类和回归的话, 如何进一步提升召回率呢?

如何改善滑动窗口呢?

1. 分而治之判断类别

image

2. 分而治之, 预测框

image

3. 合并类别和不同框

image

这里面一个问题,就是如何选择框, 用到IoU(intersection over union)。 有两个步骤:

  1. 先根据类别数预测不同的框, 譬如3个物体(狗,自行车,和车), 那么就会对应到回归3个框。
image

2. 判断是物体应该对应哪个框呢?这个交集占并集比会决定应该用哪个框。

image

根据经验, 发现对于VOC2007的数据分析有如下结论:

image

这样YOLO的损失函数考虑了, 1)框回归, 2)是否有物体, 和有哪个物体, 3)另外就是区域最合适的物体。

image

前面我们提到, Faster R-CNN 已经很快了, 但是做不到实时, 因为视频要求1秒24帧以上。 既然YOLO很快, 那么必然用到视频中去了。 如果再视频中, 还可以进一步优化YOLO到Fast YOLO更快。 更快,就是共享! 对的, 共享了类别的概率图Class Prob. Map。 通过修正而不是重新学习。 所以更快!

image

YOLO优点:

1. 典型的回归加分类模型和单一的CNN网络

2. 分治思想很好

3. 实时性很好, 基本上接近1秒24帧的标准。

4. 比Select Search找的框少很多(区域推荐更看重召回率)

YOLO问题:

  1. 准确率不高, 不如Faster R-CNN和R-FCN

2. 小物体,不规则物体识别差

3. 定位精度不高

image

YOLO-v2

如何进一步提高YOLO的准确度呢?记得RPN里面利用了各种框的长宽比先验知识么? Anchor Box。 大概5种左右的框就占据了60%的情况。

image

这样,把单纯的框预测, 变成带先验的框预测, 就是长度和宽度拥有一定的先验。

image

其他一系列改进技巧, 使得YOLOv2 要比YOLO好!你会看到下面, 提升最大的是dimension priors。 所以尺度计算一个先验分布的帮助很大!

image

然后采用了DarkNet19的网络, 速度变得更快。

image

YOLO9000, 分层的物体标签实现wordtree。

image

YOLO-v2优点:

1. 引入BN(Batch normalization) (%2 mAP改进)

2. 高分辨率图片(448x448), 改善小物体识别 (4% mAP改进)

3. 更细化的分块(13x13) (1% mAP改进)

4. 引入Anchor框 ( K-means ) (81% 召回 到 88% 召回)

YOLO-9000优点:

5. 分层的结果标签 COCO ImageNet

image

YOLO-v2问题:

  1. 没有实现实例分割。
image
image

SSD

和Anchor Box思想和Pyramid思想一致, 引入多尺度和多默认比例。

image

多尺度CNN网络采用类似GoogLeNet的那种分层输出模式。

image

所以结合起来,就有了SSD如下网络:

image

从SSD的网络可以看到, 这个多尺度是并行实现的。

image

SSD优点:

1. 在YOLO基础上引入多尺度特征映射, 并且分成ConvNet并行实现

2. 引入Anchor Box机制

3. 和YOLO比效果更好, 速度更快

SSD问题:

1. 效果很难突破R-FCN和Faster R-CNN

image

AttentionNet

主力集中的思想比较简单:

image

和区域推荐相比有一定优势:

image

而这个注意力迁移的过程, 可以解读为左上点和右下点相互尽可能靠近的一个过程:

image

整个过程循环迭代, 直到检测的比较精准为止。

image

这种注意力移动的过程,也必须和具体目标对应起来, 才能应用到多目标的情况下:

image

所以说, 不同类别就可以配置成并行的结构框架。

image

这样的话, 多个目标实例都要拥有一个这样的注意力移动的过程。 而多个实例,就也可以并行实现。

image

这样的话, 采用两阶段过程, 第一步先找到每个实例对应的一个大框, 第二步, 细化找到准确的框。

image

AttentionNet优点:

  1. 全新的区域查找方式

  2. 对比R-CNN,效果有提升

AttentionNet问题:

  1. 多实例的方式较为复杂

  2. 移动迭代,计算量过大

image.gif

AttractioNet

(Act)ive Box Proposal Generation via (I)n-(O)ut Localization (Net)work, 如何框优化?

一) 更集中注意!

image

二) 更细化定位

image

如何细化定位?

通过对物体分布概率的在横轴和纵轴上的裁剪。

image

对应的网络结构ARN(Attend & Refine),然后反复迭代, 最后通过NMS矫正。 这个过程是不是和RPN结构加RoI Pooling迭代过程有点类似。 不一样的地方, 每个ARN的框推荐都会被用上,使用NMS进行修正。

image

而ARN和之前RPN结构不太一样, 它的横轴和纵轴是分别细化,然后通过In-Out 最大似然度来定义的, 也就是前面的那个细化的示意图。

image

上面解释了ARN, 那么NMS是什么呢?其实就是一个局部求最值的过程!

image

NMS修正的过程,效果能从多个框中找到一个最符合的框, 有点类似投票。

image

AttractioNet优点:

  1. 实现提出迭代优化区域思想

  2. AttractioNet 要比Selective Search效果更好

  3. 基于CNN网络上的区域推荐

AttractioNet问题:

  1. 反复迭代会降低运行速度

  2. 网络结构复杂, 不如RPN简单

image

G-CNN

Grid-CNN 吸收了YOLO分而治之的思想。 然后进行区域合并。

image

但是它不是简单的合并, 而是采用迭代优化的思路。

image

这个过程和NMS非常不一样, 通过反复的IoU计算, 优化迭代。

image

为了避免特征的反复计算,它把特征计算作为全局步骤, 而把回归反复优化的部分称为回归部分。

image

你可以看到回归框的移动过程:

image

G-CNN优点:

  1. 通过迭代优化替换了类似NMS的简单的合并。

  2. 效果比Faster R-CNN要好点

  3. 通过分而治之, 速度要比Faster R-CNN快点。

G-CNN问题:

  1. 速度依然太慢,难以实时应用

ION

Inside-Outside Net是提出基于RNN的上下文的目标检测方法。 对于图像上下左右移动像素, 用RNN来编码, 称为这个方向上的上下文。

image

这样, 实现了4方向RNN上下文, 用来提取上下文特征。

image

并且设置了RNN堆栈来强化不同粒度的上下文。

image

所以R-FCN里面对空间限制进行迭代编码类似, 不过这次不是人为划分框的位置, 而是通过IRNN直接编码。

image

对比添加上下文和没有上下文的网络设置区别。 对比得到IRNN可以提高2个mAP的提升。

image

ION优点:

  1. 提出RNN上下文的概念

  2. 对小物体的识别的效果提升

  3. 比R-FCN效果要佳。

ION问题:

  1. RNN计算量增加,速度变慢
image

FPN

如何将特征金字塔融合成神经网络,为了避免重复计算。

image

提出FPN网络, 通过卷积和拼接得到特征金字塔网络
image

有了特征金字塔,有什么好处呢? 对于不同大小的物体可以在不同缩放上进行分割。

image

这样,在每个层次就可以利用类似的尺度来发现目标物体。

image

做到各个尺度的兼容:

image

FPN优点:

  1. 多尺度和小物体的融合考虑

  2. 速度和准确率的兼容

  3. 可以广泛的结合, 提高不同模型的效果

FPN问题:

  1. 需要多层计算,增加计算量
image

Mask R-CNN

稍微回顾一下, 第一次提出RoI, 再R-CNN里面

image

第一次提出RoI Pooling在Fast R-CNN里面

image

第一次提出 RPN在Faster R-CNN里面:

image

到了Mask R-CNN, 做了什么改进呢?提出了RoI Align , 方便后面增加的Mask Branch, 对应到像素点。

image

什么是mask?

image

有了Mask之后, 我们能实现实例分割了

image
image

那么, RoI Pooling和RoI Align的区别在于哪里呢?如何能够精确的反向找到对应像素点边缘? 这样的话,就要求对Pooling的划分不能按照Pooling的边缘, 而是要按照像素点缩放后的边缘。

image

而用Pooling的话, 就会有偏差, 这种偏差对应到像素的Mask上就会找不准边界, 之前有人利用RoI Wrapping进行插值矫正。

image

对于Mask和分类,回归学习, 即可以基于FPN或者就是RoI Align的特征

image

Mask计算的先驱:

1. MNC(Multi-task Network Cascade)的RoI Wrapping, 插值估算

image

2. FCIS (Fully Convolutional Instance Segmentation)的positional aware sliding masks

image

RoI Align要比Segment要好很多!

image

在加上人体姿势的17个关键点

image
image

Mask R-CNN优点:

  1. ROIPool 到 ROIAlign (借鉴了ROI Wrapping)

  2. Mask的预测 (借鉴了MNC和FCIS)

  3. State-of-Art的效果

  4. 轻微调整可以做人体姿态识别

Mask R-CNN问题:

  1. 速度不够快

  2. 像素预测需要大量训练数据

Mask X R-CNN

带Transfer learning的Mask R-CNN。

image

效果提升:

image

小结

给一个概要的takeaway

  1. 速度优先:SSD算法

  2. 速度和效果均衡: R-FCN算法

  3. 效果优先:Faster R-CNN, Mask R-CNN

  4. 一网多用:Mask R-CNN

对于实践开发

另外matterport公司在github上对Mask R-CNN的开源实现, https://github.com/matterport/Mask_RCNN 。

Ross Girshick, “CVPR 2017 Tutorial on Deep Learning for Objects and Scenes”

https://www.robots.ox.ac.uk/~vgg/rg/slides/vgg_rg_16_feb_2017_rfcn.pdf

你可能感兴趣的:(基于深度学习图像的目标检测)