【论文精读】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.

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/721956.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

鸿蒙Harmony应用开发—ArkTS声明式开发(通用属性:点击回弹效果)

设置组件点击时回弹效果。 说明: 从API Version 10开始支持。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本。 clickEffect clickEffect(value: ClickEffect | null) 设置当前组件点击回弹效果。 系统能力: SystemCapabilit…

表达式和语句

本文参考C Primer Plus进行C语言学习 文章目录 表达式语句 副作用和序列点复合语句(块)类型转换 1.表达式 表达式由运算符和运算对象组成。下面是一些表达式: 4 -6 421 a*(bc/d)/20 q5*2 xq%3 q>3 每个表达式都有一…

click house 数据库的intDiv函数计算原理

select intDiv(500000,50); --10000 select intDiv(500001,50); --10000 select intDiv(500050,50); --10001 Java代码实现 public static int intDiv(int a, int b) {if (b ! 0) {return a / b;} else {throw new ArithmeticException("Division by zero is not allowe…

Java学习笔记003——类成员的访问修饰符

在Java语言中,类成员的访问修饰符用于定义类成员的可见性,即哪些其他类可以访问这些成员。类成员包括字段(变量)、方法和构造器。Java提供了四种访问修饰符来控制成员的访问权限: public:公共的。任何类都可…

摘要, 加密, 数字签名, 数字证书以及加密通信简要介绍

如今 HTTPS 已几乎完全取代 HTTP, 大部分的网络通信也都有使用加密层, 那么对于非对称加密以及数字证书的学习也就不可避免了. 摘要 摘要是一个很简单的概念, 可以类比人类的指纹. 摘要是由数据计算而来的, 当数据变更的时候, 它的摘要也随之变更. 对比现实就是, 只要是不同的…

软件测试零基础新手入门必看

软件测试:使用技术手段验证软件是否满足使用需求 目的:减少缺陷,保证质量 一、测试主流技能: 1.功能测试 测试主要验证程序的功能是否满足需求 2.自动化测试 使用工具或代码代替手工,对项目进行测试 3.接口测试 …

Golang 开发实战day02 - Print Formatting

Golang 教程02 - Print,Formatting Strings Go语言提供了丰富的格式化字符串功能,用于将数据格式化为特定格式的字符串。本课程将详细介绍Go语言中Print和Formatting Strings的用法,并提供代码示例供大家参考。 Print 类型及使用 1.Print …

QEMU设备直通pass through的地址映射转换

[内核:HVA]->[QEMU:HVA]的mmap地址映射 $ sudo cat /proc/2047239/maps | grep -i vfio address perms offset dev inode pathname 7f4b5444a000-7f4b5445a000 rw-s 9da50000 00:0e 13037 anon_inode:[vfi…

C++中的静态成员变量和静态成员函数

一、静态成员变量 静态成员变量使用static修饰的成员变量。静态成员变量不属于某一个对象,而是属于整个类,因此静态成员变量不能设置缺省值,因为缺省值是给予初始化列表用于初始化对象的。 静态成员变量需要再类内声明,类外定义…

计算机网络 网络原理之Http

目录 1 前言2 什么是http的一次交互?3 理解“协议”二字4 认识URL4.1 简介4.2 URL的编码和解码(urlencode和urldecode) 5 抓包工具 fiddler6 http和https的区别7 http 头8 HTTP 状态码9 常见的 Http 服务器 1 前言 为什么要了解Http原理呢?因为http原理…

前端知识学习之proxy代理对象

前端proxy代理对象 1.学习背景 学习vue3过程中,发现vue3相比于vue2的最大优势在于,尤雨溪大佬在vue3中使用proxy 代理对象,vue2中使用的双向绑定Object.defineProperty,这两者有什么区别 2.Object.defineProperty 使用方法&am…

ECMAScript语法

什么是ECMAScript ECMAScript 是一种由 ECMA国际(前身为欧洲计算机制造商协会)通过 ECMA-262 标准化的脚本程序设计语言。 ECMAScript 是一种可以在宿主环境中执行计算并能操作可计算对象的基于对象的程序设计语言。ECMAScript 最先被设计成一种 Web 脚…

java使用mapper操作mysql

上半部分搭建springboot 简单使用数据库查询 添加链接描述 在impl接口实现操作 如 package com.service.impl; import com.dao.UserMapper; import com.pojo.User; import com.service.UserService; import org.springframework.beans.factory.annotation.Autowired; import…

基于SSM SpringBoot vue个人博客网站

基于SSM SpringBoot vue个人博客网站 系统功能 首页 图片轮播 博客文章 搜索 登录注册 论坛 留言板 个人中心 我的收藏 后台管理 登录 个人中心 博客分类管理 博客文章管理 论坛管理 系统管理 管理员管理 注册用户管理 开发环境和技术 开发语言:Java 使用框架:…

实战经验分享:如何优化即时通讯应用的性能?

在当今移动互联网时代,即时通讯应用如雨后春笋般涌现,用户对即时通讯应用的性能和体验要求也越来越高。作为即时通讯开发领域的专家,我将分享一些优化即时通讯应用性能的实战经验,帮助开发者提升应用质量和用户满意度。 1. 优化网…

【Leetcode每日一刷】贪心算法| 45.跳跃游戏 II

1、45.跳跃游戏 II 🦄解题思路: 这题还是比【55.跳跃游戏】难一些的。第一个版本只是说,求跳跃的范围,覆盖到了终点即可。这题则是,能保证覆盖范围到达终点,求的是最少跳几次,跳到终点。 这题…

289页初中级前端题助你拿下Offer,终局之战

HTML、CSS、JS三大部分都起什么作用? HTML内容层,它的作用是表示一个HTML标签在页面里是个什么角色;CSS样式层,它的作用是表示一块内容以什么样的样式(字体、大小、颜色、宽高等)显示;JS行为层…

Redis缓存【重点】

参考链接 https://xiaolincoding.com/redis/cluster/cache_problem.html#%E7%BC%93%E5%AD%98%E9%9B%AA%E5%B4%A9 目录 缓存雪崩大量数据同时过期Redis 故障宕机 缓存击穿第一种方案,非法请求的限制第二种方案,缓存空值或者默认值第三种方案,使…

01、MongoDB -- 下载、安装、配置文件等配置 及 副本集配置

目录 MongoDB -- 下载、安装、配置 及 副本集配置启动命令启动 mongodb 的服务器(单机和副本集)启动单机模式的 mongodb 服务器启动副本集的 3 个副本节点(mongodb 服务器) 启动 mongodb 的客户端 MongoDB 下载MongoDB 安装1、解压…

App自动化测试笔记(一):搭建环境

一、三个环境 1、android模拟器:模拟安卓手机 2、androidSDK:android SDK给你提供开发测试所必须android API类库 3、java:android底层是c、c语言,应用层是java语言 二、java环境搭建 java安装 安装jdk-8u151-windows-x64.exe 配置环境变量…