精华内容
参与话题
问答
  • CVPR2019-实例分割Mask Scoring R-CNN

    千次阅读 2019-05-24 23:01:19
    今年的Oral,在coco数据集表现超过了Mask RCNN,来自地平线的华科实习生。 论文:Mask Scoring R-CNN【paper】【github】 1. 提出背景 Mask RCNN 提出以来,一直是作为经典霸屏,但这里面一直存在一个严重的问题...

    今年的Oral,在coco数据集表现超过了Mask RCNN,来自地平线的华科实习生。

    论文:Mask Scoring R-CNN【paper】【github

    1. 提出背景

         Mask RCNN 提出以来,一直是作为经典霸屏,但这里面一直存在一个严重的问题,那就是其score机制:

         由于沿用了 Faster RCNN 的 class和box,对应class是类别score,并不能代表mask的好坏,看下图:

    2. 算法框架

        问题提出来,很简单的想法就是,我能否加一个分支预测mask部分的score呢?比如用IoU来度量。

         思路很简单,在Mask head的基础上,加了一个分支,将ROI对齐后的特征与得到的Mask做了一个concat,然后通过卷积层+全连接层,得到IoU Score,最后通过score相乘得到最终的得分:

    Smask​ = Scls​ ∗ Siou​

    • 训练阶段

         来看网络是如何训练的?给几个key point:

         1)对于新增的IoU分支,训练样本是RPN的正样本(负样本只参与分类),与Mask分支一致;

              定义正样本为RPN的Box与Ground Truth的IoU大于0.5。

         2)针对得到的Mask结果,根据阈值(文中是0.5)做二值化,计算二值化结果 和 Ground Truth的mask IoU;

             当二值化mask结果与GT一致时,Loss = 1 - Mask IoU = 0

             这里的二值化可以考虑修改一下,比如采用soft mask的方案

         3)3个head分支同时训练。

         这里作者试验了多个head,根据试验效果最后选择当前head,这里也有改进的空间,大家可以好好分析一下

    • 推理阶段

         1)对于输出的box做soft-NMS处理后,得到score top-k(文中k=100)的box;

               这一步和mask RCNN并无区别,根据输出box映射到mask 分支,获取对应的分割图。

         2)将得到的分割图送入mask IoU分支,计算对应得分;

         3)仅使用Mask IoU的score来矫正class core,能够整体反应分割的够不够好;

    3. 测试效果

        测试效果很不错,请看大屏幕:

         在CoCo数据集上的表现(不同backbone上均有显著提升):

    展开全文
  • 目标检测• RCNN RCNN(Regions with CNN features)是将CNN方法应用到目标检测问题上的一个里程碑,由年轻有为的RBG大神提出,借助CNN良好的特征提取和分类性能,通过RegionProposal方法实现目标检测问题的转化。...

    目标检测

    •   RCNN

            RCNN(Regions with CNN features)是将CNN方法应用到目标检测问题上的一个里程碑,由年轻有为的RBG大神提出,借助CNN良好的特征提取和分类性能,通过RegionProposal方法实现目标检测问题的转化。

            算法可以分为四步:

            1)候选区域选择

            Region Proposal是一类传统的区域提取方法,可以看作不同宽高的滑动窗口,通过窗口滑动获得潜在的目标图像,关于Proposal大家可以看下SelectiveSearch,一般Candidate选项为2k个即可,这里不再详述;

            根据Proposal提取的目标图像进行归一化,作为CNN的标准输入。

            2)CNN特征提取

            标准CNN过程,根据输入进行卷积/池化等操作,得到固定维度的输出;

            3)分类与边界回归

            实际包含两个子步骤,一是对上一步的输出向量进行分类(需要根据特征训练分类器);二是通过边界回归(bounding-box regression) 得到精确的目标区域,由于实际目标会产生多个子区域,旨在对完成分类的前景目标进行精确的定位与合并,避免多个检出。

            RCNN存在三个明显的问题:

    1)多个候选区域对应的图像需要预先提取,占用较大的磁盘空间;

    2)针对传统CNN需要固定尺寸的输入图像,crop/warp(归一化)产生物体截断或拉伸,会导致输入CNN的信息丢失;

    3)每一个ProposalRegion都需要进入CNN网络计算,上千个Region存在大量的范围重叠,重复的特征提取带来巨大的计算浪费。


    •   SPP-Net

            智者善于提出疑问,既然CNN的特征提取过程如此耗时(大量的卷积计算),为什么要对每一个候选区域独立计算,而不是提取整体特征,仅在分类之前做一次Region截取呢?智者提出疑问后会立即付诸实践,于是SPP-Net诞生了。


            SPP-Net在RCNN的基础上做了实质性的改进:

    1)取消了crop/warp图像归一化过程,解决图像变形导致的信息丢失以及存储问题;

    2)采用空间金字塔池化(SpatialPyramid Pooling )替换了 全连接层之前的最后一个池化层(上图top),翠平说这是一个新词,我们先认识一下它。

            为了适应不同分辨率的特征图,定义一种可伸缩的池化层,不管输入分辨率是多大,都可以划分成m*n个部分。这是SPP-net的第一个显著特征,它的输入是conv5特征图 以及特征图候选框(原图候选框 通过stride映射得到),输出是固定尺寸(m*n)特征;

            还有金字塔呢?通过多尺度增加所提取特征的鲁棒性,这并不关键,在后面的Fast-RCNN改进中该特征已经被舍弃;

            最关键的是SPP的位置,它放在所有的卷积层之后,有效解决了卷积层的重复计算问题(测试速度提高了24~102倍),这是论文的核心贡献。


            尽管SPP-Net贡献很大,仍然存在很多问题:

    1)和RCNN一样,训练过程仍然是隔离的,提取候选框 | 计算CNN特征| SVM分类 | Bounding Box回归独立训练,大量的中间结果需要转存,无法整体训练参数;

    2)SPP-Net在无法同时Tuning在SPP-Layer两边的卷积层和全连接层,很大程度上限制了深度CNN的效果;

    3)在整个过程中,Proposal Region仍然很耗时。


    •   Fast-RCNN

            问题很多,解决思路同样也非常巧妙,ok,再次感谢 RBG 大神的贡献,直接引用论文原图(描述十分详尽)。

            Fast-RCNN主要贡献在于对RCNN进行加速,快是我们一直追求的目标(来个山寨版的奥运口号- 更快、更准、更鲁棒),问题在以下方面得到改进:

            1)卖点1 - 借鉴SPP思路,提出简化版的ROI池化层(注意,没用金字塔),同时加入了候选框映射功能,使得网络能够反向传播,解决了SPP的整体网络训练问题;

            2)卖点2 - 多任务Loss层

        A)SoftmaxLoss代替了SVM,证明了softmax比SVM更好的效果;

        B)SmoothL1Loss取代Bouding box回归。

            将分类和边框回归进行合并(又一个开创性的思路),通过多任务Loss层进一步整合深度网络,统一了训练过程,从而提高了算法准确度。

            3)全连接层通过SVD加速

                这个大家可以自己看,有一定的提升但不是革命性的。

            4)结合上面的改进,模型训练时可对所有层进行更新,除了速度提升外(训练速度是SPP的3倍,测试速度10倍),得到了更好的检测效果(VOC07数据集mAP为70,注:mAP,mean Average Precision)。

            接下来分别展开这里面的两大卖点:

            前面已经了解过可伸缩的池化层,那么在训练中参数如何通过ROI Pooling层传导的?根据链式求导法则,对于yj = max(xi) 传统的max pooling的映射公式:


            其中 为判别函数,为1时表示选中为最大值,0表示被丢弃,误差不需要回传,即对应 权值不需要更新。如下图所示,对于输入 xi 的扩展公式表示为:


          (i,r,j) 表示 xi 在第 r 个框的第  j 个节点是否被选中为最大值(对应上图 y0,8 和 y1,0),xi 参数在前向传导时受后面梯度误差之和的影响。


            多任务Loss层(全连接层)是第二个核心思路,如上图所示,其中cls_score用于判断分类,bbox_reg计算边框回归,label为训练样本标记。

            其中Lcls为分类误差:


            px 为对应Softmax分类概率,pl 即为label所对应概率(正确分类的概率),pl = 1时,计算结果Loss为0, 越小,Loss值越大(0.01对应Loss为2)。

           Lreg为边框回归误差:

            即在正确分类的情况下,回归框与Label框之间的误差(Smooth L1), 对应描述边框的4个参数(上下左右or平移缩放),g对应单个参数的差异,|x|>1 时,变换为线性以降低离群噪声:


             Ltotal为加权目标函数(背景不考虑回归Loss):


            细心的小伙伴可能发现了,我们提到的SPP的第三个问题还没有解决,依然是耗时的候选框提取过程(忽略这个过程,Fast-RCNN几乎达到了实时),那么有没有简化的方法呢?

            必须有,搞学术一定要有这种勇气。


    •   Faster-RCNN

            对于提取候选框最常用的SelectiveSearch方法,提取一副图像大概需要2s的时间,改进的EdgeBoxes算法将效率提高到了0.2s,但是这还不够。

            候选框提取不一定要在原图上做,特征图上同样可以,低分辨率特征图意味着更少的计算量,基于这个假设,MSRA的任少卿等人提出RPN(RegionProposal Network),完美解决了这个问题,我们先来看一下网络拓扑。


            通过添加额外的RPN分支网络,将候选框提取合并到深度网络中,这正是Faster-RCNN里程碑式的贡献。

    RPN网络的特点在于通过滑动窗口的方式实现候选框的提取,每个滑动窗口位置生成9个候选窗口(不同尺度、不同宽高),提取对应9个候选窗口(anchor)的特征,用于目标分类和边框回归,与FastRCNN类似。

            目标分类只需要区分候选框内特征为前景或者背景。

            边框回归确定更精确的目标位置,基本网络结构如下图所示:


            训练过程中,涉及到的候选框选取,选取依据:

    1)丢弃跨越边界的anchor;

    2)与样本重叠区域大于0.7的anchor标记为前景,重叠区域小于0.3的标定为背景;

          对于每一个位置,通过两个全连接层(目标分类+边框回归)对每个候选框(anchor)进行判断,并且结合概率值进行舍弃(仅保留约300个anchor),没有显式地提取任何候选窗口,完全使用网络自身完成判断和修正。

            从模型训练的角度来看,通过使用共享特征交替训练的方式,达到接近实时的性能,交替训练方式描述为:

    1)根据现有网络初始化权值w,训练RPN;

    2)用RPN提取训练集上的候选区域,用候选区域训练FastRCNN,更新权值w;

    3)重复1、2,直到收敛。

            因为Faster-RCNN,这种基于CNN的real-time 的目标检测方法看到了希望,在这个方向上有了进一步的研究思路。至此,我们来看一下RCNN网络的演进,如下图所示:

            Faster RCNN的网络结构(基于VGG16):


            Faster实现了端到端的检测,并且几乎达到了效果上的最优,速度方向的改进仍有余地,于是YOLO诞生了。

    •   YOLO

            YOLO来自于“YouOnly Look Once”,你只需要看一次,不需要类似RPN的候选框提取,直接进行整图回归就可以了,简单吧?


            算法描述为:

    1)将图像划分为固定的网格(比如7*7),如果某个样本Object中心落在对应网格,该网格负责这个Object位置的回归;

    2)每个网格预测包含Object位置与置信度信息,这些信息编码为一个向量;

    3)网络输出层即为每个Grid的对应结果,由此实现端到端的训练。

            YOLO算法的问题有以下几点:

    1)7*7的网格回归特征丢失比较严重,缺乏多尺度回归依据;

    2)Loss计算方式无法有效平衡(不管是加权或者均差),Loss收敛变差,导致模型不稳定。

    Object(目标分类+回归)<=等价于=>背景(目标分类)

            导致Loss对目标分类+回归的影响,与背景影响一致,部分残差无法有效回传;

    整体上YOLO方法定位不够精确,贡献在于提出给目标检测一个新的思路,让我们看到了目标检测在实际应用中真正的可能性。

            这里备注一下,直接回归可以认为最后一层即是对应7*7个网格的特征结果,每一个网格的对应向量代表了要回归的参数(比如pred、cls、xmin、ymin、xmax、ymax),参数的含义在于Loss函数的设计。

    •   SSD

            由于YOLO本身采用的SingleShot基于最后一个卷积层实现,对目标定位有一定偏差,也容易造成小目标的漏检。

            借鉴Faster-RCNN的Anchor机制,SSDSingle Shot MultiBox Detector在一定程度上解决了这个问题,我们先来看下SSD的结构对比图。

            基于多尺度特征的Proposal,SSD达到了效率与效果的平衡,从运算速度上来看,能达到接近实时的表现,从效果上看,要比YOLO更好。

            对于目标检测网络的探索仍在一个快速的过程中,有些基于Faster-RCNN的变种准确度已经刷到了87%以上,而在速度的改进上,YOLO2也似乎会给我们带来一定的惊喜,“未来已来”,我们拭目以待!

    图像语义分割

           传统的图像分割方法主要包括以下几种:

    1)基于边缘检测

    2)基于阈值分割

          比如直方图,颜色,灰度等

    3)水平集方法

            这里我们要说的是语义分割,什么是语义分割呢?先来看张图:

            

           将目标按照其分类进行像素级的区分,比如区分上图的 摩托车 和 骑手,这就是语义分割,语义分割赋予了场景理解更进一步的手段。

           我们直接跳过传统的语义分割方法,比如 N-Cut,图割法等,直接进入深度学习。


    FCN 的引入

           CNN 在图像分割中应用,起源于2015年的这篇影响深远的文章:

           Fully Convolutional Networks for Semantic Segmentation 【点击下载

           这里提到的就是全卷积网络,那么这个全卷积是如何理解 和 Work 的呢?来看一个对比:

               

          上图红色部分 对应CNN分类网络的最后三层,也就是 FC 全连接,通过 Softmax 得到一个1000维的向量(基于Imagenet的图像分类),表示1000个不同的分类对应的概率,“tabby cat” 作为概率最高的结果。

          下图蓝色部分将 分类网络对应的最后三层全连接 替换成了 卷积。整个网络全部通过卷积连接,so called 全卷积。这么做的目的是什么呢?

    ● 通过像素分类来定义语义分割

           全卷积网络的输出是一张分割图,如何输出这张分割图呢? 通过卷积,图像的分辨率逐渐降低,这里需要 引入一个概念,就是上采样,即将低分辨率的图像放大到和原始图像同分辨率上,这是一个关键点。比如经过5次卷积(pooling)后,图像的分辨率依次缩小了2,4,8,16,32倍。对于最后一层的输出图像,需要进行32倍的上采样,得到原图大小一样的图像。

           这个上采样是通过 反卷积(DeConvolution)实现的。来直观看一下反卷积的过程:

            

           加上反卷积过程,整个的网络可以描述成:

         

           由于前面采样部分过大,有时候会导致后面进行反卷积得到的结果分辨率比较低,导致一些细节丢失,解决的一个办法是 将 第 3|4|5 层反卷积结果叠加,结果我们就不贴了,肯定是上采样倍数越小,结果越好,来看叠加示意图(这种方式应该不陌生): 

            

     FCN 的改进

           虽然 FCN引领了CNN基于语义分割的方向,但仍有很多地方需要改进,比如上采样导致的像素分割不精细,效率也不够快等等,我们相信一定有办法让其 更高效、更精细。这里提到的一个 方法就是结合 CRF

           CRF 全称是 Conditional Random Field,中文叫 “条件随机场”,首先来理解什么是随机场,一堆随机的样本就可以理解为是随机场,假设这些样本之间有关联关系,就成立条件随机场,CRF 最早在深度学习的 NLP 领域有比较多的应用,可以理解为语境的上下文关系,可以参考下面这篇文章:

           Introduction to Conditional Random Fields

           第一个改进 来自于 UCLA 的 Liang-Chieh Chen,在像素分类后叠加了一个 Fully Connected Conditional Random Fields(全连接的条件随机场)。

           论文地址:Semantic image segmentation with deep convolutional nets and fully connected crfs

            

           通过上图示意可以看到,Fully Connected CRF 在前面 FCN 输出的基础上,以全连接的形式,实现了后处理过程,使得像素分割更加细致,具体请参考论文。


           接下来的改进有 通过 RNN + CRF 的idea:

           参考论文:Conditional random fields as recurrent neural networks

           根据实验对比效果来看,相当不错(注:DeepLab 就是上面的 Full connected CRF方法): 

            

           针对FCN的改进会在近两年一直持续,作者最关注的还是,Mask-RCNN,将目标检测与分割一起work的方法,接下来在下一篇文章介绍!

           “桃李不言,下自成蹊”,FCN 当真是属于这个级别的贡献,引领了在这条道路上的每一次Follow。


    实例分割(Instance Segment)

           实例分割 与 语义分割的区别是要区分出每个目标(不仅仅是像素),相当于 检测+分割,通过一张图来直观理解一下:

            

           关于 实例分割 的一篇典型论文 MaskRCNN,可以参考【Mask RCNN】,代码实现可以参考【浅入浅出TensorFlow 8 - 行人分割

    相关论文:

           Instace-sensitive Fully Convolutional Networks.ECCV 2016【2016.3月上传到arxiv

           R-FCN:Object Detection via Region-based Fully Convolutional Networks.NIPS 2016【2016.7月上传到arxiv】

           Fully Convolutional Instance-aware Semantic Segmentation.xxxx 2017【2016年11月上传到arxiv,MSCOCO2016的第一名】



    实例分割

    一. Mask-RCNN 介绍

           上篇文章介绍了 FCN,这篇文章引入个新的概念 Mask-RCNN,看着比较好理解哈,就是在 RCNN 的基础上添加 Mask。

           Mask-RCNN 来自于年轻有为的 Kaiming 大神,通过在 Faster-RCNN 的基础上添加一个分支网络,在实现目标检测的同时,把目标像素分割出来。

           论文下载:Mask R-CNN           部分翻译

           代码下载:【Github

           Mask-RCNN 的网络结构示意(在作者原图基础上修改了一下):

            

           假设大家对 Faster 已经很熟悉了,不熟悉的同学建议先看下之前的博文:【目标检测-RCNN系列

           其中 黑色部分为原来的 Faster-RCNN,红色部分为在 Faster网络上的修改:

    1)将 Roi Pooling 层替换成了 RoiAlign;

    2)添加并列的 FCN 层(mask 层);

           先来概述一下 Mask-RCNN 的几个特点(来自于 Paper 的 Abstract):

    1)在边框识别的基础上添加分支网络,用于 语义Mask 识别;

    2)训练简单,相对于 Faster 仅增加一个小的 Overhead,可以跑到 5FPS;

    3)可以方便的扩展到其他任务,比如人的姿态估计 等;

    4)不借助 Trick,在每个任务上,效果优于目前所有的 single-model entries;

         包括 COCO 2016 的Winners。

            PS:写到这儿提醒一句,建议大家先读一遍 原 Paper,这样再回来看的话会有第二次理解。


    二. RCNN行人检测框架

           基于最早的 Faster RCNN 框架,出现不少改进,主要有三篇需要看:

    1)作者推荐的这篇

         Speed/accuracy trade-offs for modern convolutional object detectors

         论文下载arxiv

    2)ResNet

         MSRA也算是作者自己的作品,可以 refer to blog【ResNet残差网络】 

         论文下载arxiv

    3)FPN

         Feature Pyramid Networks for Object Detection,通过特征金字塔来融合多层特征,实现CNN。

         论文下载arxiv

           来看下 后面两种 RCNN 方法与 Mask 结合的示意图(直接贴原图了):

            

           图中灰色部分是 原来的 RCNN 结合 ResNet or FPN 的网络,下面黑色部分为新添加的并联 Mask层,这个图本身与上面的图也没有什么区别,旨在说明作者所提出的Mask RCNN 方法的泛化适应能力 - 可以和多种 RCNN框架结合,表现都不错


    三. Mask-RCNN 技术要点

    ● 技术要点1 - 强化的基础网络

         通过 ResNeXt-101+FPN 用作特征提取网络,达到 state-of-the-art 的效果。

    ● 技术要点2 - ROIAlign

         采用 ROIAlign 替代 RoiPooling(改进池化操作)。引入了一个插值过程,先通过双线性插值到14*14,再 pooling到7*7,很大程度上解决了仅通过 Pooling 直接采样带来的 Misalignment 对齐问题

         PS: 虽然 Misalignment 在分类问题上影响并不大,但在 Pixel 级别的 Mask 上会存在较大误差。

         后面我们把结果对比贴出来(Table2 c & d),能够看到 ROIAlign 带来较大的改进,可以看到,Stride 越大改进越明显。 

    ● 技术要点3 - Loss Function

         每个 ROIAlign 对应 K * m^2 维度的输出。K 对应类别个数,即输出 K 个mask,m对应 池化分辨率(7*7)。Loss 函数定义:

                Lmask(Cls_k) = Sigmoid (Cls_k),    平均二值交叉熵 (average binary cross-entropy)Loss,通过逐像素的 Sigmoid 计算得到。

         Why K个mask?通过对每个 Class 对应一个 Mask 可以有效避免类间竞争(其他 Class 不贡献 Loss )。

            

         通过结果对比来看(Table2 b),也就是作者所说的 Decouple 解耦,要比多分类 的 Softmax 效果好很多。


    四. 对比实验效果


           另外,作者给出了很多实验分割效果,就不都列了,只贴一张 和 FCIS 的对比图(FCIS 出现了Overlap 的问题):

           

    五. Mask-RCNN 扩展

           Mask-RCNN 在姿态估计上的扩展,效果不错,有兴趣的童鞋可以看Paper。

            

    展开全文
  • 实例分割Mask R-CNN

    2019-03-05 20:52:28
    本文主要的点是在 Faster R-CNN 已有预测 bounding box 分支的基础上增加了一个预测物体掩码(mask) 的并行分支,提出了 RoIAlign 操作,使其处理不同的任务,例如目标检测,实例分割,人体关键点检测等。 1. ...

    《Mask R-CNN》

    原文链接: https://arxiv.org/abs/1703.06870

    本文主要的点是在 Faster R-CNN 已有预测 bounding box 分支的基础上增加了一个预测物体掩码(mask) 的并行分支,提出了 RoIAlign 操作,使其处理不同的任务,例如目标检测,实例分割,人体关键点检测等。

    在这里插入图片描述

    1. Introduction

    目前的目标检测领域和语义分割领域已经取得了快速的发展,这些进步很大一部分是由于一些强有力的基础学习框架,例如目标检测领域的 Fast/Faster R-CNN 和语义分割领域的 FCN。本文的目标就是提出一个在实例分割方面的基础学习框架。

    实例分割不仅需要对每个类别进行精准定位,还要分割出每一个实例,它同时包含了目标检测和语义分割。如前面提到的 Mask R-CNN 就是在 Faster R-CNN 的基础上增加了一个预测 mask 的分支,这个分支类似于一个小的 FCN 网络,应用在每一个 RoI 上,用来预测像素级别的分类结果。

    2. Related Work

    R-CNN: 基于区域建议的方法是产生一系列的可能包含物体的区域候选框,然后在这些候选框上用神经网络进行分类。随后 R-CNN 类的方法被扩展成对每一个RoI区域使用 RoIPool,从而加快了网络的速度以及达到了更好的准确率。 Faster R-CNN 则是创新性的加入了注意力机制(attrntion mechanism),提出了 RPN(Region Proposal Network)。

    Instance Segment: 因为 R-CNN 系列方法的有效性,很多实例分割的算法也是基于分割建议(segment proposals)的。一些早期的方法都是自下而上的分割, DeepMask 及其一系列的工作都是学习如何生成候选分割区域,然后使用 Fast R-CNN 来对这些区域分类,这些方法中,分割先于识别,这样即慢又不准确。本文的方法则是一个并行的结构,更灵活简单。 最近 FCIS 系列的方法是预测一系列的对位置敏感的全卷积通道,这些通道同时解决了目标类别,位置,以及掩码的问题,系统很快速,但是 FCIS 对存在重叠的实例不能很好的解决,也存在假边问题。

    3. Mask R-CNN

    Mask R-CNN 概念上很简单,Faster R-CNN 原本对每一个候选物体有两个输出,一个是类别标签,一个是位置信息,在这些的基础上我们增加了新的分支,来输出目标掩码,由于预测掩码需要输出更精细的物体空间分布,所以这一分支的设计会不同于另外两个输出分支。

    下面先简单回顾一下 Faster R-CNN, Faster R-CNN包含了两步,第一步是使用一个叫做 RPN 的网络处理物体候选框,然后使用 RoIPool (Fast R-CNN 中提出的)从每一个候选区域中提取特征,最后用作分类和边框回归。

    Mask R-CNN 则是采用完全一样的两步走方法,第一步与 Faster R-CNN 一致。在第二部,除了对每个 RoI 预测分类标签和位置信息,Mask R-CNN 还会数以一个二值掩码图像,这三个结果是并行输出的,不同于目前的一些方法,它们的分类是基于掩码预测的。主要特点:

    1. Loss 函数的修改。 这里在分类与边框回归产生的两个损失函数的基础上,增加了一个 Lmask, 对于 k 类物体,每一类都生成一个 mxm 的 mask,而最后是通过类别分支的输出,只用属于预测类别的 mask 来计算损失函数,这样就把分类预测与掩码预测分开了。
    2. Mask Representation。 因为掩码需要更精细的物体空间位置信息,所以这里最后没办法像分类或者边界框输出一样使用全连接层,所以这里我们使用一个 FCN 网络来对每一个 RoI 生成一个 mask,不同于目前使用全连接层预测 mask 的方法,我们的网络使用了更少的参数,实验证明产生了更好的结果,而这也需要我们的 RoI 区域的特征与原图中的空间关系要很好的对齐。这也是本文提出 RoIAlign 层的主要原因。
    3. RoIAlign。 RoIPool 是用来对每一个 RoI 提取特征的标准操作,RoIPool 首先根据输入图片,将 RoI 映射到对应的位置,这个过程会有一个量化(quantizes),即向上取整 ,然后根据设定的最后输出尺寸,将原图区域划分成不同的 section,分割的时候又可能产生小数, 再次量化 ,依次最后对这些 section 执行 max-pooling 操作。 毫无疑问这样经过两次量化会损失很对空间位置信息,对分类可能没有问题,但是对于像素级别的掩码预测是不好的,为了解决这一问题,本文提出了 RoIAlign 层,主要区别是不进行量化操作,然后设置好采样点个数,例如 4, 然后对这四个点进行双线性插值,用来作为此 section 的值 其实RoIAlign 的重点不在于取多少个 section ,或者是取多少个插值采样点,主要是没有量化操作了。(上述结论也是文中和其他文章中提出的 RoIWrap 方法进行实验比较得到的,RoIWarp 也是进行了双重线性插值,不过不同点是 RoIWarp进行了量化操作)
    4. Network Aechitecture。 为了显示 Mask R-CNN 的泛化特性,文中使用了多种网络结构进行实验,这里的网络主要是包含两部分的网络,一是作为特征提取的 backbone 网络, 二是做分类和边框回归的网络。这里结果最好的是使用 ResNeXt 作为特征提取以及 FPN 作为 mask 预测的结构。

    4. 实验

    文中做了大量的对比实验来验证模型的有效性,及每个模块的重要性实验数据可以说很强了,其中 将 mask 与分类分开预测,网络结构选择,RoIAlign 层的提出, mask 分支的机构等都进行了实验对比和阐述(以上均是对结果有一个好的影响)。 最后则是将 Mask R-CNN 拓展到人体关键点检测问题中(一张图片产生 k 个 mask,每一个 mask 预测一个关键点)

    研究相关领域的同学,需要做相关实验的推荐阅读原文!!

    展开全文
  • 实例分割Mask R-CNN

    千次阅读 2018-07-14 11:51:41
    Faster R-CNN主要是用来进行目标识别的,为了能够进行实例分割Mask R-CNN在Faster R-CNN的基础上加了一个分支,这个分支主要是由一个small FCN(全卷积网络)构成。这个FCN就是用来输出一个Mask,这也就...

    论文地址:Mask R-CNN

    代码地址:facebookresearch/Detectron

    Mask R-CNN是在Faster R-CNN的基础上进行了改进。Faster R-CNN主要是用来进行目标识别的,为了能够进行实例分割,Mask R-CNN在Faster R-CNN的基础上加了一个分支,这个分支主要是由一个small FCN(全卷积网络)构成。这个FCN就是用来输出一个Mask,这也就是所谓的Mask R-CNN了。这个Mask 就是为了更准确的对实例的轮廓进行定位,以便进行准确的分割。FCN若要准确的预测实例的轮廓位置,对每个像素进行准确分类,对输入输出特征对齐要求非常高,即输入输出的空间尺度对齐。而Fast R-CNN中的RoIPooling的两步量化操作导致了严重的空间尺度失准,为了克服RoIPooling层的量化操作,Mask R-CNN提出了改进的RoIPooling层,称之为RoIAlign层。RoIAlign层在进行输出固定feature maps的过程中,没有量化过程。总结如下:

    1. Mask R-CNN在Faster R-CNN的框架下加入了一个FCN分支,用来输出Mask;

    2. Mask R-CNN对Fast R-CNN提出的RoIPooling层进行了改进,提出了RoIAlign层。

    下面来看一下Mask R-CNN的总体框图,如下图图1所示:


                                                                   图1 Mask R-CNN网络架构

    从上图图1的Mask R-CNN的网络架构可以看出,整个架构是基于Faster R-CNN的。首先是读入一张图像,进入backbone architecture(论文中采用ResNet和ResNet-FPN),输出feature maps,接下来的两个分支的处理操作与Faster R-CNN完全一致,接下来的区别就在RoIPooling层与RoIAlign层的区别。下面具体看一下RoIPooling层与RoIAlign层的操作有什么不同,如下图图2所示:


                                                                          图2 RoIPooling层与RoIAlign层输出对比

    首先说一下RoIAlign层,论文中描述RoIAlign层是一个quantization-free layer。那么与之相对的RoIPooling层执行了哪些量化操作呢?由Fast R-CNN可知,RoIPooling总共执行了两步量化操作:

    第一步:将原图像坐标系输出的region proposals的四元组坐标映射到feature maps上是会根据Pooling层(比如VGG16的con4_x输出的feature maps经历了4个max pooling层)的操作,feature maps的spatial size进行了缩放,比如VGG16用RoIPooling替换掉最后一个max pooling,其输出的feature maps的spatial size相对原图像缩小了16倍,所以将原图像坐标系对应的四元组坐标值均要除以16,此时对于不能整除的结果进行第一步量化,为表示rounding操作。

    第二步:在对region proposal进行划分网格的时候,也会遇到不能整除的情况,如上图图2中左上角的图,就因为不能整除,在进行量化的时候,导致无法对region proposal进行均匀划分网格,这回导致输入与输出特征的严重失准。

    下面来看一下RoIAlign层是怎么做的。RoIAlign严格避免了上述的两步量化操作,以至于region proposal与划分的网格不能正好包含完整的像素,如上图图2中的第2列所示。RoIAlign是通过双线性插值的方法来得到每个网格的像素值的。如下图图3所示:


    并且在上述插值的过程中,实验效果表明,只要这个过程没有量化操作,对于每个网格插值的位置与抽样点数均不敏感,所以在编程实现的时候一般对每个网格只插值一个抽样点。

    下面说一下由FCN得到Mask的过程。起初FCN是用于语义分割被提出来的,这里的FCN是用于对每一个由RPN输出的region proposal进行语义分割的,首先由FCN输出81个通道的feature maps(Mask R-CNN在MS COCO上做的实验,MS COCO总共有80类+BG为81类),而选择哪个通道的feature map呢?是这样的,由Classification Head,根据Softmax输出的类别概率分布,选择概率最大值对应的类别标签作为最终的预测类别,然后根据这个预测类别,选出对应的channel。也就是说,如果Classification Head预测的类别为7,则选出FCN输出的第7个通道的feature map,其它通道的feature maps直接被忽略了,在计算FCN Mask的目标函数的时候,他们也不参与。下面看一下的计算:


    那么怎样得到最终的输出Mask呢?是这样的,首先Mask经过sigmoid函数,将输出映射到[0, 1]之间的概率值,然后将输出的mxm 的spatial size resize to the RoI size,再采用阈值法,论文中的阈值设为0.5,进行二值化。那么输出的这个Mask在进行实例分割的时候扮演什么样的角色呢?主要是用来大致定位出目标实例的基本轮廓,有利于进一步准确进行实例分割。

    Mask R-CNN论文中做的相关实验非常丰富,这里就不讲了,关键在于理解RoIAlign层和添加的FCN分支,在以后会详细讲解Mask R-CNN的代码实现。




    展开全文
  • PANet实例分割超越mask—rcnn

    千次阅读 2018-07-24 09:06:31
    CVPR2018香港中文大学和腾讯组合作提出了新型实例分割PANet,优势在于通过加速信息ghe流数据和整合了不同层级的特征图提高生成预测掩码的质量。Path Aggregation Network for Instance Segmentation 收录:CVPR2018...
  • 实例分割模型Mask R-CNN详解 基础深度学习的目标检测技术演进解析 本文转载地址  Mask R-CNN是ICCV 2017的best paper,彰显了机器学习计算机视觉领域在2017年的最新成果。在机器学习2017年的最新发展中,单任务...
  • Mask R-CNN是一种基于深度学习的图像实例分割方法,可对物体进行目标检测和像素级分割。 本课程将手把手地教大家使用VIA图像标注工具制作自己的数据集,并使用Mask R-CNN训练自己的数据集,从而能开展自己的图像...
  • 深度学习之实例分割-Mask RCNN

    万次阅读 2017-12-12 16:50:28
    We present a conceptually simple, flexible, and general framework for object instance segmentation. Our approach efficiently detects objects in an image while simultaneously generating a high-quality ...
  • Mask R-CNN是ICCV2017的best paper,在一个网络中同时做目标检测(object detection)和实例分割(instance segmentation)。该算法在单GPU上的运行速度差不多是5 fps,并且在COCO数据集的三个挑战赛:instance ...
  • 实例分割-Mask R-CNN

    2019-02-21 21:09:07
    1.熟悉Flink大数据生态圈以及未来发展趋势 2.快速上手开发Flink批处理程序和流处理程序 3.掌握了Flink核心知识与编程模型,深入理解Flink计算框架 4.掌握了Flink HA分布式集群安装部署
  • Mask R-CNN是ICCV 2017的best paper,彰显了机器学习计算机视觉领域在2017年的最新成果。在机器学习2017年的最新发展中,单任务的网络结构已经逐渐不再引人瞩目,取而代之的是集成,复杂,一石多鸟的多任务网络模型...
  • mask rcnn实例分割

    千次阅读 2019-06-04 15:02:22
    参考网址:https://baijiahao.baidu.com/s?id=1595621180643410921&wfr=spider&for=pc ... 实例分割是一种在像素层面识别目标轮廓的任务, 分类:这张图像中有一个气球 语义分割:这些全是气球像素 目...
  • 语义分割mask的IoU的计算(含代码分析)什么是IoU?广播原则代码分析 什么是IoU? 广播原则 代码分析
  • 1、Mask R-CNN网络的整体结构:  RPN + ROIAlign + Fast R-CNN + FCN,如图: 2、Mask R-CNN概念 Faster R-CNN为每个候选目标输出一个类标签和一个边框偏移量。我们添加了一个输出目标掩模的第三条分支。附加的...
  • 睿智的目标检测19——Keras搭建Mask R-CNN实例分割平台学习前言什么是Mask R-CNN源码下载Mask R-CNN实现思路一、预测部分1、主干网络介绍2、特征金字塔FPN的构建3、获得Proposal建议框4、Proposal建议框的解码5、对...
  • 实例分割向:Mask R-CNN

    千次阅读 2018-03-22 14:50:57
    我们展现了一个思想上很简单的、灵活的、一般的目标实例分割框架。我们的方法有效地实现了在一幅图上同时生成高质量的分割掩膜并检测目标的目的。这一方法称为,Mask R-CNN,它在Faster R-CNN的基础上衍生出和目前...
  • 下一章:深度篇——实例分割(三)细说mask rcnn 实例分割代码 训练自己数据 之 相关网络,数据处理,工具等 论文地址:《Mask R-CNN》 作者代码地址:Mask R-CNN code 我优化的代码地址:mask_rcnn_pro(只需修改...
  • 本文提出了一种新的掩码表示:DCT-Mask,可以轻松地集成到大多数基于像素的实例分割方法中,显著涨点!性能优于HTC、SOLOv2和CondInst等网络;作者单位:浙江大学, 阿里巴巴达摩院 1 简介 二值 Grid Mask 表示法...
  • 但是又提出了很多的改进措施,Mask-RCNN非常灵活,我们可以可以增加不同的分支完成不同的任务,可以完成目标分类、目标检测、语义分割、实例分割、人体姿势识别等多种任务,与其说Mask-RCNN是一个实例分割算法,倒...
  • Mask R-CNN是一种基于深度学习的图像实例分割方法,可对物体进行目标检测和像素级分割。 本课程将手把手地教大家使用Labelme图像标注工具制作自己的数据集,并使用PyTorch版本的Mask R-CNN(Facebook ...
  • 实例分割--Mask RCNN详解(ROI Align / Loss Fun)

    万次阅读 多人点赞 2018-07-03 16:46:24
    1 总结架构与主要思想未完待续。。。
  • 点击我爱计算机视觉标星,更快获取CVML新技术今天新出的论文BlendMask: Top-Down Meets Bottom-Up for Instance Segmentation,提...
  • 主要介绍了在Pytorch中使用Mask R-CNN进行实例分割操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 使用labelme自带的json_to_dataset.py,结果如下图所示
  • Mask R-CNN 是一个两阶段的框架,第一个阶段扫描图像并生成提议(proposals,即有可能包含...Faster R-CNN 是一个流行的目标检测框架,Mask R-CNN 将其扩展为实例分割框架。 下载权值文件:http://download.tenso...
  • 实例分割阶段,可以使用u2net来输出mask图,代码地址。 下边为原图以及产生的mask图 然后我们找一张想要替换的背景图 import cv2 person = cv2.imread("原图") back = cv2.imread("背景图") #这里将mask图转化为...
  • Object-Guided Instance Segmentation ... 设计思路: 对图片新进行目标检测,框出所检测的实例范围。将框映射到浅层特征图(0-1)以及深层...分割阶段,从最深层的分割图开始,先进行上采样,与下一层拼接,进行...
  • 目的:对象实例分割(区别出不同的对象) 提出:Mask R-CNN(扩展的FasterR-CNN)----通过在每个RoI处添加用于预测分割的mask(小的FCN),与用于分类和边界框回归的Faster R-CNN并行。 优点:...
  • 点击上方“AI算法修炼营”,选择加星标或“置顶”标题以下,全是干货前面的话实例分割(Instance Segmentation)是视觉经典四个任务中相对最难的一个,它既具备语义分割(Se...

空空如也

1 2 3 4 5 ... 20
收藏数 32,725
精华内容 13,090
关键字:

实例分割