实例分割之 Mask R-CNN

2024-06-10 05:48
文章标签 mask 分割 实例 cnn

本文主要是介绍实例分割之 Mask R-CNN,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

论文地址: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的代码实现。




这篇关于实例分割之 Mask R-CNN的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!


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

相关文章

Python实现PDF按页分割的技术指南

《Python实现PDF按页分割的技术指南》PDF文件处理是日常工作中的常见需求,特别是当我们需要将大型PDF文档拆分为多个部分时,下面我们就来看看如何使用Python创建一个灵活的PDF分割工具吧... 目录需求分析技术方案工具选择安装依赖完整代码实现使用说明基本用法示例命令输出示例技术亮点实际应用场景扩

MySQL多实例管理如何在一台主机上运行多个mysql

《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读... 目录一、什么是mysql多实例二、二进制方式安装MySQL1.获取二进制代码包2.安装基础依赖3.清

SpringBoot 异常处理/自定义格式校验的问题实例详解

《SpringBoot异常处理/自定义格式校验的问题实例详解》文章探讨SpringBoot中自定义注解校验问题,区分参数级与类级约束触发的异常类型,建议通过@RestControllerAdvice... 目录1. 问题简要描述2. 异常触发1) 参数级别约束2) 类级别约束3. 异常处理1) 字段级别约束

Apache Ignite缓存基本操作实例详解

《ApacheIgnite缓存基本操作实例详解》文章介绍了ApacheIgnite中IgniteCache的基本操作,涵盖缓存获取、动态创建、销毁、原子及条件更新、异步执行,强调线程池注意事项,避免... 目录一、获取缓存实例(Getting an Instance of a Cache)示例代码:二、动态

JSONArray在Java中的应用操作实例

《JSONArray在Java中的应用操作实例》JSONArray是org.json库用于处理JSON数组的类,可将Java对象(Map/List)转换为JSON格式,提供增删改查等操作,适用于前后端... 目录1. jsONArray定义与功能1.1 JSONArray概念阐释1.1.1 什么是JSONA

MySQL中的LENGTH()函数用法详解与实例分析

《MySQL中的LENGTH()函数用法详解与实例分析》MySQLLENGTH()函数用于计算字符串的字节长度,区别于CHAR_LENGTH()的字符长度,适用于多字节字符集(如UTF-8)的数据验证... 目录1. LENGTH()函数的基本语法2. LENGTH()函数的返回值2.1 示例1:计算字符串

java向微信服务号发送消息的完整步骤实例

《java向微信服务号发送消息的完整步骤实例》:本文主要介绍java向微信服务号发送消息的相关资料,包括申请测试号获取appID/appsecret、关注公众号获取openID、配置消息模板及代码... 目录步骤1. 申请测试系统2. 公众号账号信息3. 关注测试号二维码4. 消息模板接口5. Java测试

MySQL数据库的内嵌函数和联合查询实例代码

《MySQL数据库的内嵌函数和联合查询实例代码》联合查询是一种将多个查询结果组合在一起的方法,通常使用UNION、UNIONALL、INTERSECT和EXCEPT关键字,下面:本文主要介绍MyS... 目录一.数据库的内嵌函数1.1聚合函数COUNT([DISTINCT] expr)SUM([DISTIN

Python实例题之pygame开发打飞机游戏实例代码

《Python实例题之pygame开发打飞机游戏实例代码》对于python的学习者,能够写出一个飞机大战的程序代码,是不是感觉到非常的开心,:本文主要介绍Python实例题之pygame开发打飞机... 目录题目pygame-aircraft-game使用 Pygame 开发的打飞机游戏脚本代码解释初始化部

Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析

《Spring组件实例化扩展点之InstantiationAwareBeanPostProcessor使用场景解析》InstantiationAwareBeanPostProcessor是Spring... 目录一、什么是InstantiationAwareBeanPostProcessor?二、核心方法解