当前位置: 首页 > news >正文

【论文精读】Mask R-CNN

摘要

       基于Faster RCNN,做出如下改变:
image

  • 添加了用于预测每个感兴趣区域(RoI)上的分割掩码分支,与用于分类和边界框回归的分支并行。mask分支是一个应用于每个RoI的FCN,以像素到像素的方式预测分割掩码,只增加了很小的计算开销,实现了实时分割
  • Faster R-CNN不是为网络输入和输出之间的像素到像素对齐而设计的。在RoIPool为特征提取执行粗空间量化过程中,出现特征错位会四舍五入强迫RoI对齐图像特征,这会对后续分支产生计算误差。为解决RoIPool带来的错位,提出一种简单的、无量化的层RoIAlign,精确保留了特征的空间位置

框架

Faster R-CNN

       Faster R-CNN由两个阶段组成。第一阶段称为区域建议网络(RPN),提出候选目标边界框。 第二阶段为Fast R-CNN,使用RoIPool从每个候选框中提取特征,并执行分类和边界框回归。 两个阶段使用的特征可以共享,以更快地进行推理。
image

Mask R-CNN

       Mask R-CNN采用与Faster R-CNN相同的两阶段过程,第一阶段(RPN)相同。在第二阶段,与边界框分类和回归并行,Mask R-CNN为每个RoI输出二值掩码,具体为对每个RoI使用全卷积网络FCN预测 m × m m× m m×m掩码图。

       在训练期间,损失定义为 L = L c l s + L b o x + L m a s k L = L_{cls} + L_{box} + L_{mask} L=Lcls+Lbox+Lmask。其中分类损失 L c l s L_{cls} Lcls和边界框损失 L b o x L_{box} Lbox与Faster R-CNN定义相同。mask分支为每个RoI提供了 K m 2 Km^2 Km2维的输出,编码了分辨率为 m × m m × m m×m K K K个二值掩码图, K K K为分类类别数。对掩码图逐像素应用sigmoid,则 L m a s k L_{mask} Lmask定义为与ground-truth类 k k k相关联的RoI掩码图的平均二值交叉熵损失(其他掩码输出对损失没有贡献)。

RoI align

       Mask分支采用的像素到像素的方法要求RoI特征(图像特征+建议框)必须良好对齐,以精准地保持每个像素的明确空间对应关系。
image
       RoIPool(上图)用于从每个RoI中提取一个小的特征映射(例 2 × 2 2× 2 2×2)。首先将浮点RoI映射到输入特征,再将RoI四舍五入细分为具有整数长度的 2 × 2 2× 2 2×2个空间box,最后将每个box覆盖的特征值聚合得到特征映射(通常通过最大池化)。这种特征映射方法对大的特征区域是鲁棒的,但对预测像素精确的掩码有很大的负面影响。
image
       为解决上述问题,提出RoIAlign层,以消除 RoIPool的特征错位。如上图,首先将RoI细分为 2 × 2 2× 2 2×2个相同大小的空间box,对每个box使用双线性插值来计算每个RoI bin采样位置的输入特征的精确值,并聚合结果(使用最大值或平均值)。注意到,结果对精确的采样位置或采样多少点不敏感。

网络架构

       网络可分为:

  • 用于在整个图像上进行特征提取的卷积主干网络
  • 用于边界框识别(分类和回归)和掩码预测的网络头,分别应用于每个RoI
    image

       如上图,本文评估了深度为50或101层的ResNet和ResNeXt网络(左)及FPN网络(右)作为主干网络FCN作网络头的Mask RCNN。

实验

训练配置

       同Fast RCNN,如果一个RoI与ground-truth box的IoU为0.5,则认为它是正的,否则是负的。 L m a s k L_{mask} Lmask仅在正RoI上定义,mask目标是RoI对应的真实mask二值图。

       采用了以图像为中心的训练。图像的大小调整为800像素。每个GPU的mini batch有2个图像,每个图像采样N个建议区域,正负比为1:3。N对于C4骨干是64,对于FPN是512。在8个gpu上训练(mini batch为16),进行160k迭代,学习率为0.02,在120k迭代时降低了10。使用0.0001的权重衰减和0.9的动量。使用ResNeXt时,每个GPU下训练1张图像,初始学习率为0.01。

       RPN anchor采用5种尺度和3种长宽比。为了方便消融,RPN是单独训练的,除非指定,否则不与Mask R-CNN共享特征。RPN和Mask R-CNN具有相同的主干。

推理配置

       在测试时,使用C4骨干或FPN骨干得到建议框。在这些建议框上运行bbox预测分支,首先根据置信度进行非极大值抑制,然后将mask分支应用于得分最高的100个检测框。mask分支可以预测每个RoI的K个掩码,但只使用 k − t h k -th kth掩码,其中 k k k是classification分支预测的类别。然后将 m × m m×m m×m的浮点数掩码输出调整为RoI大小,并以0.5的阈值进行二值化得到mask图。

对比实验

image
       上图为Mask R-CNN在COCO测试集上的结果。这些结果基于ResNet-101,实现了35.7的mask AP。显示了mask、bbox、类别和置信度。
image
       上图在COCO数据集上,在使用同样的骨干网络下将Mask R-CNN与最先进的实例分割方法进行比较。该模型的所有实例分割都优于之前最先进的模型,如MNC、FCIS、FCIS++。
image
       上图可视化比较了Mask R-CNN和FCIS++,FCIS++在重叠实例上出现了伪影,Mask R-CNN没有这样的问题。
image
       上图将Mask R-CNN与最先进的COCO 目标检测算法进行比较。实验训练了完整的Mask R-CNN模型,在推理时只使用分类和框输出(忽略掩码输出)。观察到使用ResNet-101-FPN的Mask R-CNN优于之前所有最先进的模型的基本变体。使用ResNeXt-101-FPN,Mask R-CNN进一步提高了结果,比使用Inception-ResNet-v2-TDM模型高出3.0点AP。

       作为进一步的比较,训练了一个没有Mask分支的Mask R-CNN,在上图中用“Faster R-CNN,RoIAlign”表示。由于RoIAlign的存在,该模型比行二算法具有更好的性能。另一方面,比Mask RCNN低0.9分box AP。因此可知Mask R-CNN在box检测上的这种差距受益于多任务训练。

       最后,注意到Mask R-CNN在其掩码和box AP之间存在一个小差距37.1(mask)和39.8(box)之间的2.7点。这表明所提出方法在很大程度上缩小了目标检测和实例分割任务之间的差距。

消融实验

image
       上图为一系列消融实验结果。表a显示了各种骨干的Mask R-CNN。在更深层的网络(50 vs. 101)和先进的设计(FPN和ResNeXt)下,模型都有不同程度的改进。

       表b为多项式方法和独立掩码预测方法的比较。Mask R-CNN将mask和类预测解耦,因为box分支可以独立预测类标签,故mask分支可以为每个类生成一个掩码,从而使类之间没有竞争(通过每个像素 的sigmoid和二值损失)。将其与使用逐像素softmax和多项式loss(在FCN中常用)的预测方法进行比较,这种方案将掩码任务和类别预测任务耦合在一起,相比于解耦方案,这导致掩码5.5AP的损失。一旦实例被分类为一个整体(通过box分支),就无需关注类别,这使掩码模型更容易训练。

       表c本实验中,使用步长为16的ResNet-50-C4主干网络对比RoIAlign和RoIPool。观察到RoIAlign比RoIPool提高了AP约3个点。且观察到RoIAlign对max/average pool不敏感。 此外,还与RoIWarp进行了比较,RoIWarp同样会使得输入失去对齐,观察到RoIWarp的表现与RoIPool相当,但比RoIAlign差得多。验证了正确的对齐是关键。

       表d用步长为32的ResNet-50-C5骨干评估RoIAlign。观察到RoIAlign使掩膜AP提高了7.3点,掩膜AP75提高了10.5点。还注意到,在RoIAlign中,使用stride-32 C5特征(30.9 AP)比使用stride-16 C4特征(30.3 AP,表1c)更准确。RoIAlign在很大程度上解决了长期以来使用大步长特征进行检测和分割的挑战。

       表e中,使用ResNet-50-FPN骨干网络比较MLP和FCNs。使用FCNs可以在MLPs上获得2.1掩膜AP增益。

关键点检测

image
       上图可视化显示联合学习所有三个任务(box、mask、keypoint)可以使一个统一的系统同时有效地预测所有输出。
image
       上图实验评估了人体关键点AP,并在ResNet-50-FPN骨干上进行了实验。上图显示本文的结果(62.7 APkp)比使用多阶段处理管道的COCO 2016关键点检测冠军CMU-pose++高0.9分。
image
       上图显示将mask分支添加到仅支持box的版本(Faster RCNN)或仅支持keypoint的版本中,可以不断改进这些任务。然而,添加关键点分支略微减少了box/mask AP,这表明尽管关键点检测从多任务训练中受益,但它并没有反过来帮助其他任务。
image
       上图研究了RoIAlign对关键点检测的影响。尽管ResNet-50-FPN骨干具有很细的步长,但因为关键点检测对定位精度更敏感,所以RoIAlign仍然比RoIPool显示出显著的改进,并将APkp提高了4.4个点。这再次表明,对齐对于像素级定位(包括掩码和关键点)至关重要。

reference

Kaiming, H. , Georgia, G. , Piotr, D. , & Ross, G. . (2018). Mask R-CNN.

相关文章:

  • H5:列表
  • MathType玩耍指南
  • 分享一个AI工程师从入门到精通学习路径
  • 智能合约的编程语言
  • 城市平均高温、平均低温数据爬取与可视化
  • 2195. 深海机器人问题(网络流,费用流,上下界可行流,网格图模型)
  • cookie和session的区别(七大不同)
  • [LeetBook]【学习日记】获取子字符串 + 颠倒子字符串顺序
  • Ruoyi框架上传文件
  • 超级副业SOP,各行各业,太全了!
  • VM新建虚拟机
  • Flask g对象和插件
  • 手写分布式配置中心(二)实现分布式配置中心的简单版本
  • 美摄科技实时语音数字人解决方案
  • Vue+OpenLayers7入门到实战目录
  • [deviceone开发]-do_Webview的基本示例
  • bearychat的java client
  • Effective Java 笔记(一)
  • Idea+maven+scala构建包并在spark on yarn 运行
  • IIS 10 PHP CGI 设置 PHP_INI_SCAN_DIR
  • Mac转Windows的拯救指南
  • maven工程打包jar以及java jar命令的classpath使用
  • mysql中InnoDB引擎中页的概念
  • Shell编程
  • 坑!为什么View.startAnimation不起作用?
  • 前端路由实现-history
  • 使用阿里云发布分布式网站,开发时候应该注意什么?
  • 微信小程序开发问题汇总
  • 用 Swift 编写面向协议的视图
  • UI设计初学者应该如何入门?
  • 进程与线程(三)——进程/线程间通信
  • 小白应该如何快速入门阿里云服务器,新手使用ECS的方法 ...
  • ​LeetCode解法汇总2696. 删除子串后的字符串最小长度
  • #多叉树深度遍历_结合深度学习的视频编码方法--帧内预测
  • (1/2) 为了理解 UWP 的启动流程,我从零开始创建了一个 UWP 程序
  • (done) 两个矩阵 “相似” 是什么意思?
  • (Python第六天)文件处理
  • (Redis使用系列) Springboot 整合Redisson 实现分布式锁 七
  • (WSI分类)WSI分类文献小综述 2024
  • (八)Flask之app.route装饰器函数的参数
  • (附源码)php投票系统 毕业设计 121500
  • (附源码)python旅游推荐系统 毕业设计 250623
  • (接口封装)
  • (经验分享)作为一名普通本科计算机专业学生,我大学四年到底走了多少弯路
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (四)汇编语言——简单程序
  • (小白学Java)Java简介和基本配置
  • (心得)获取一个数二进制序列中所有的偶数位和奇数位, 分别输出二进制序列。
  • (转载)深入super,看Python如何解决钻石继承难题
  • .h头文件 .lib动态链接库文件 .dll 动态链接库
  • .NET BackgroundWorker
  • .NET C#版本和.NET版本以及VS版本的对应关系
  • .NET Framework 服务实现监控可观测性最佳实践
  • .net 程序发生了一个不可捕获的异常