2017-ICCV-Mask R-CNN

本周组会讲Mask R-CNN,借此机会把目标检测R-CNN系列的论文都整理了一遍,除了paper外,主要参考网上的一些博客,如有侵权,请告知,在此十分感谢。

文中如有错误,请积极指出,一起学习,共同进步。

相关论文链接:

R-CNN SPP Net Fast R-CNN Faster R-CNN Mask R-CNN

YOLOSSD

FCNFPNMNCFCIS

关于YOLO可参考本人另一篇博客2016-CVPR-YOLO

github代码:

pytorch-faster-rcnn

tensorflow-mask-rcnn

Introduction

Ross Girshick大神:
从DPM,R-CNN,fast R-CNN,faster R-CNN,到mask R-CNN,垄断object detection近10年。

Kaiming He大神:
ResNet系列基本搞定了Image classification。

现在两人联手,开始攻克Instance Segmentation。

Mask R-CNN在不加任何 trick 的情况下超过各种数据增强加持下的 COCO 2016 分割挑战的冠军 FCIS。

Mask R-CNN ICCV 2017 best paper

Scene understanding

这里写图片描述

Image classification:图像分类,识别出图中的物体类别

Object detection:目标检测,既要识别出图中的物体,又要知道物体的位置,即图像分类+定位

Semantic segmentation:语义分割,除了识别物体类别与位置外,还要标注每个目标的边界,但不区分同类物体,将物体进行像素级别的分割提取

Instance segmentation:实例分割,除了识别物体类别与位置外,还要标注每个目标的边界,且区分同类物体,将物体进行像素级别的分割提取

Mask R-CNN: Motivation and goals

Mask R-CNN的三个目标:

  1. 视觉场景理解的多任务模型的状态: 同时满足目标检测、分类及实例分割的要求
  2. 高度模块化,训练简单,相对于Faster R-CNN仅增加一个小的overhead,可以跑到5FPS
  3. 可以方便的扩展到其他任务,比如人体姿态估计等

R-CNN

这里写图片描述

步骤:

  1. 训练(或下载)一个分类模型(比如AlexNet)
  2. 对模型进行fine-tuning:
    1. 将分类数1000改为21(有一个类别是背景)
    2. 去掉最后一个全连接层
  3. 特征提取:
    1. 利用selective search算法在图像中从上到下提取约2k个候选区域
    2. 将每个候选区域wrap成 224224 的大小以适合CNN的输入,做一次前向传播,将CNN的fc7层的输出作为特征,保存到硬盘
  4. 训练一个SVM分类器来判断这个候选框里物体的类别,每个类别对应一个SVM,判断是否属于这个类别,是就是positive,反之就是nagative
  5. 使用SVM分好类的候选区域做边框回归,用bounding box 回归值校正

该方法在VOC 2011 test数据集上取得了71.8%的检测精度。

Selective search:

这个策略借助了层次聚类的思想,应用到区域的合并上面。

  1. 假设现在图像上有n个预分割的区域(Efficient Gragh-Based Image Segment),表示为 R=R1,R2,,Rn
  2. 计算每个region与它相邻region的相似度,这样会得到一个 nn 的相似度矩阵(同一个区域之间和不相邻区域之间的相似度可设为NaN),从矩阵中找出最大相似度值对应的两个区域,将这两个区域合二为一,这时图像上还剩下n-1个区域
  3. 重复上述过程(只需计算新的区域与它相邻区域的新相似度,其他的不用重复计算),重复一次,区域的总数目就少1,直到最后所有的区域都合并成为了同一个区域

img

缺点:

  1. 训练和测试过程分为多个阶段,步骤繁琐:微调网络,得到候选区域,CNN提取特征,SVM分类,SVM边界框回归
  2. 训练耗时,占用磁盘空间大,5000张图像产生几百G的特征文件
  3. 测试过程中,每一个候选区域都要提取一遍特征,这些区域有一定重叠度,各个区域的特征提取独立计算,效率不高,使测试一幅图像非常慢
  4. SVM和回归是事后操作,在SVM和回归过程中CNN特征没有被学习更新

因此,把R-CNN的缺点改掉,就成了Fast R-CNN。

Fast R-CNN

这里写图片描述
Fast R-CNN在R-CNN的基础上采纳了SPP Net方法,对R-CNN作了改进。使用VGG-19网络架构比R-CNN在训练和测试时分别快了9倍和213倍。

步骤:

  1. 输入测试图像
  2. 利用selective search算法在图像上从上到下提取约2k个候选区域
  3. 将整张图片输入CNN,进行特征提取,得到feature map
  4. 把候选区域映射到CNN的最后一层卷积feature map上
  5. 通过RoI pooling层使每个候选区域生成固定尺寸的feature map
  6. 利用Softmax loss(探测分类概率)和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练

相比R-CNN,两处改进:

  1. CNN最后一层卷积层后加了一个RoI pooling层,可以看做单层SPP Net的网络层,可以把不同大小的输入映射到一个固定尺寸的特征向量。
  2. 在R-CNN中是先用SVM分类器,再做bbox regression,而在Fast R-CNN中,损失函数使用了multi-task loss,将bbox regression直接加入到CNN网络中训练,并且实验证明这两个任务能够共享卷积特征,相互促进。

Faster R-CNN

这里写图片描述
步骤:

  1. 输入测试图像
  2. 将整张图片输入CNN,进行特征提取
  3. RPN生成候选区域,每张图片生成300个候选区域
  4. 把候选区域映射到CNN的最后一层卷积feature map上
  5. 通过RoI pooling层使每个RoI生成固定尺寸的feature map
  6. 利用Softmax loss(探测分类概率)和Smooth L1 Loss(探测边框回归)对分类概率和边框回归(Bounding box regression)联合训练

相比Fast R-CNN,两处改进:

  1. 使用RPN(Region Proposal Network)代替原来的Selective Search方法产生候选区域,使得检测速度大幅提高
  2. 产生候选区域的CNN和目标检测的CNN共享,候选区域的质量也有本质的提高

Mask R-CNN

这里写图片描述

Mask R-CNN实际上就是Faster R-CNN + Mask branch,RoIAlign的结果。

相比Faster R-CNN,两处改进:

  1. 把Faster R-CNN里的RoIPool layer改为RoIAlign layer
  2. 最后多了一个mask branch

RPN

这里写图片描述
RPN是一个全卷积网络,由于没有全连接层,所以可以输入任意分辨率的图像,经过网络后就得到一个feature map,然后利用这个feature map得到物体的位置和类别。

那么,怎么利用这个feature map得到物体的位置和类别呢?

在conv5-3的卷积feature map上用一个 nn(n=3) 的滑动窗口(sliding window)生成一个256维(ZFNet)或512维(VGGNet)长度的全连接特征,然后在这个特征后产生两个分支的全连接层:

  1. Reg-layer,用于预测proposal的中心锚点对应的proposal的坐标x,y和宽高w,h
  2. cls-layer,用于判定该proposal是前景还是背景

Anchor:

  1. 把得到的feature map上的每一个点映射回原图,得到原图上这些点的坐标
  2. 在这些点周围取一些提前设定好的区域用来训练RPN,这些区域就叫做Anchor boxes

anchor(锚点),位于 nn 的滑动窗口的中心处,对于一个滑动窗口,可以同时预测k个候选区域,即k个anchor boxes,每个anchor box可以用一个scale,一个aspect_ratio和滑动窗口中的anchor唯一确定。论文中定义k=9,即3种scales(比如 1282,2562,5122 )和3种aspect_ratio(比如 1:1,1:2,2:1 )确定出当前滑动窗口处对应的9个anchor boxes, 2k 个cls-layer的输出和 4k 个reg-layer的输出。对于一幅 W

Mask RCNN 是基于Kaiming 之前的工作 FPN (Feature Pyramid Network) 很形象地说就是用FPN产生的检测结果, 后面加了一个分割的网络. 文章中用到了 Top-Down + Bottom-Up 最近很流行的多层网络, 因为最开始Faster-RCNN只是在最后一层上面检测, 很容易丢掉小目标物体, 并且对细节遮挡也很不敏感. 最近的趋势就是结合多层 特征, 答主孔涛就很早发现了这个insight, 做出了HyperNet 并中了CVPR roal!!!作者:Oh233 链接:https://www.zhihu.com/question/57403701/answer/153060743 来源:知乎 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。 Mask R-CNN 这个结果确实很强,但要同时注意它主要是加上了许多(都是很有用的)engineering techniques 。 比如说 anchor 从 12 增加到了15个,图像 size 从600变成了800,还有ROI batch size变到了512,从FPN那篇paper来看,这些 better practice 会有对性能十分明显的提升 (table 3 baseline: AP=26.3 -> 31.6)。而我们组16年的coco分割竞赛冠军 ,Fully Convolutional Instance-aware Semantic Segmentation (FCIS)的代码昨晚终于开源了。限于计算资源,我们并没有加上这些改进。这些改进应该是比较 general 的,也会适用于 FCIS。欢迎大家试用一波。FCIS 提供了一种简单高效的框架去解决 instance segmentation 的问题。跟之前 COCO 2015 的冠军 MNC 相比,它的主要不同在于 mask estimation 和 detection 是共同做的,而不是先估计 mask 再做 detection。在 FCIS 中 detection/mask estimation 之间通过 inside/outside score map 互相影响,利用了这两个紧密相连 task 之间的共性。现在 release 版本基于支持多卡训练的MXNet,msracver/FCIS。实际上大概今年一月份我们就已经写出了外面可以使用的Caffe版本,但是当时官方 Caffe 只支持单卡做复杂任务的训练,对于COCO这种大规模数据集来说用单卡训练的话一下子几周的时间就过去了。考虑到大家用起来会非常蛋疼,最后还是决定没有release这个版本。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值