热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MaskRCNN算法详解

MaskR-CNN算法详解论文背景算法背景算法详解RoIAlign神经网络结构FPN实验论文背景论文名称:MaskR-CNN论文链接:https:ar


Mask R-CNN算法详解

    • 论文背景
    • 算法背景
    • 算法详解
      • RoIAlign
      • 神经网络结构
      • FPN
    • 实验


论文背景

论文名称:Mask R-CNN
论文链接:https://arxiv.org/abs/1703.06870
论文日期:2018.1.24


算法背景

mask rcnn是用来进行instance segmentation,在检测物体的同时,还进行了高质量的segmentation mask,是在faster rcnn的基础上加了一个预测mask的分支,因此,最终会存在三个平行的分支,分别进行classify,location,mask,mask rcnn只是在faster rcnn的顶部加了一点小改进,运行5fps,但是可以完成更多的任务,例如识别人体的姿态。没有附加条款,mask rcnn在所有任务的存在的单一模型中表现最为出色。在Instance segmentation,bounding box object detection,person keypoint detection中表现最为出色。

mask rcnn是一个instance segmentation算法,instance segmentation不仅能分类不同的类,而且能把同一类物体中的多个不同物体分别标记出来,与semantic segmentation不同,semantic segmentation只能分割不同类型的目标,但是同一类目标没有被分别标记,是作为一个整体被检测出来。
在这里插入图片描述

在faster rcnn的基础上加了一个分支,可以在每一个RoI上预测segmentation masks,和classification and bounding box regression分支平行存在, mask分支是一个应用到每一个RoI上的全卷积神经网络(FCN)。

两个改进方面(在后部分将详细拓展):


  • RoIAlign
    mask的分支是一个以像素到像素(pixel-to-pixel)的方式预测一个segmentation mask,而faster rcnn不是一个像素到像素的对齐,因为使用了RoIPooling,对于特征提取,表现了一个粗糙的空间量化。因此,在Mask rcnn中提出了一个新的池化方式,RoIAlign,会相对精确的保留空间定位。

    结果:RoIAlign对于实验结果有一个很大的改进,将Mask的准确性提升到了10%到50%,在严格定位矩阵下准确性获得了很大提升。

  • decouple mask and class prediction
    =将mask和分类分离开来,分别独立地对每一个类别预测一个二值化mask并不在类之间进行比较,依赖于神经网络的RoI的分类分支来预测类别,矛盾的是,FCN经常在单像素多类别的分类问题的使用,而这会将分割问题与分类问题连接在一起,而在我们的instance segmentation的实验中表现的很差。

    运行速度很快:在GPU上运行600 mspf,在COCO keypoint dataset上运行5fps。

早期的Instance segmentation求助于自下而上的分割方法来提取分割区域,然后再利用faster rcnn进行分类,但是运行速度慢且准确率低。而后来的 Instance-aware semantic segmentation via multi-task network cascades算法提出来了一个多阶段的方法来从候选边界框提取中预测分割候选,接着进行分类。而本文的方法是采取一个平行的预测,对mask和分类标签进行平行的预测,有两个平行的分支组成。

不同与其他许多的算法,都是用segmentation-first strategy,mask rcnn使用instance-first strategy。

mask rcnn是在faster rcnn上加了一个mask分支,因此最后损失函数由三个部分组成:
在这里插入图片描述

Mask分支对于每一个RoI都有一个Km*m-d的输出,K指K个类别,对于每一个类别都做一个sigmoid,判断是该物体,或者不是。而不是对所有类别一起做一个softmax。Lmask使用平均二值化交叉熵损失函数,对于每一个RoI与真实标签的类别k结合起来。Lmask仅仅只定义在第k类的mask上,(其他类别的mask对损失没有贡献),只计算单一类别的损失。

mask分支去除全连接层,只使用全卷积结构,在卷积之间有一个像素到像素的联系。不需要拉伸成为一个向量,这个会失去一些空间的特征。同时,FCN会需要更少的参数。


算法详解


RoIAlign

RoIAlign是在RoIPool的基础上进行了优化。

在原始的RoIPool算法中,当候选区域映射到feature map上时,与特征图上的像素点不匹配时,会直接使用stride进行间隔取整,进行一个平移操作,最后得到的各个grid里面的值均为整数,但是这样会导致feature map上的RoI映射回原图上时,与原图的RoI有stride有误差,这样经过max pooling后误差更大。

但是在RoIAlign算法中,我们对于每一个grid都取一个float值,对每一个grid中的值都进行一个双线性插值,对于feature map上的每一个RoI都会被分成m*m个grid,然后对每一个grid,在其中选取4个点,这4个点分别是这个格子中四个部分的中点,然后对于每一个点进行一次双线性插值计算。
双线性插值的原理:
在这里插入图片描述

在这里插入图片描述
对于RoIAlign的工作原理:
在这里插入图片描述

对于每个点,都取点所在的格子的四个顶点的坐标值做双线性插值,双线性插值的原理如上所示。然后进行max pooling。


神经网络结构

候选区域的提取仍然使用RPN,但是对于各个层都是用了featrue map的提取。例如ResNet,可以根据卷积的深度进行分层,总共可以分为4层,然后分别对每一层使用不同的scale,但是相同的aspect radio进行候选区域的提取,不同于faster rcnn,mask rcnn不仅有一个自下而上的卷积的过程,还有一个自上而下的上采样过程,这就是FPN的结构。
maskrcnn算法详解
maskrcnn算法详解


FPN

在这里插入图片描述

对每一层feature map分别进行候选区域的提取。

每一个自上而下的上采样实现细节,由卷积之后的特征图进行1*1的卷积然后与上一层的特征映射的使用因子为2的最近邻上采样结果进行求和。
在这里插入图片描述


实验

准确率有了很大提升:
在这里插入图片描述
将分类与分割解耦:
在这里插入图片描述
使用RoIAlign:
在这里插入图片描述
使用全卷积神经网络:
在这里插入图片描述
与Faster RCNN对比:
在这里插入图片描述


推荐阅读
  • 本文介绍了一个适用于PHP应用快速接入TRX和TRC20数字资产的开发包,该开发包支持使用自有Tron区块链节点的应用场景,也支持基于Tron官方公共API服务的轻量级部署场景。提供的功能包括生成地址、验证地址、查询余额、交易转账、查询最新区块和查询交易信息等。详细信息可参考tron-php的Github地址:https://github.com/Fenguoz/tron-php。 ... [详细]
  • 微软头条实习生分享深度学习自学指南
    本文介绍了一位微软头条实习生自学深度学习的经验分享,包括学习资源推荐、重要基础知识的学习要点等。作者强调了学好Python和数学基础的重要性,并提供了一些建议。 ... [详细]
  • 在Android开发中,使用Picasso库可以实现对网络图片的等比例缩放。本文介绍了使用Picasso库进行图片缩放的方法,并提供了具体的代码实现。通过获取图片的宽高,计算目标宽度和高度,并创建新图实现等比例缩放。 ... [详细]
  • Python实现变声器功能(萝莉音御姐音)的方法及步骤
    本文介绍了使用Python实现变声器功能(萝莉音御姐音)的方法及步骤。首先登录百度AL开发平台,选择语音合成,创建应用并填写应用信息,获取Appid、API Key和Secret Key。然后安装pythonsdk,可以通过pip install baidu-aip或python setup.py install进行安装。最后,书写代码实现变声器功能,使用AipSpeech库进行语音合成,可以设置音量等参数。 ... [详细]
  • 使用在线工具jsonschema2pojo根据json生成java对象
    本文介绍了使用在线工具jsonschema2pojo根据json生成java对象的方法。通过该工具,用户只需将json字符串复制到输入框中,即可自动将其转换成java对象。该工具还能解析列表式的json数据,并将嵌套在内层的对象也解析出来。本文以请求github的api为例,展示了使用该工具的步骤和效果。 ... [详细]
  • 本文介绍了PhysioNet网站提供的生理信号处理工具箱WFDB Toolbox for Matlab的安装和使用方法。通过下载并添加到Matlab路径中或直接在Matlab中输入相关内容,即可完成安装。该工具箱提供了一系列函数,可以方便地处理生理信号数据。详细的安装和使用方法可以参考本文内容。 ... [详细]
  • 本文介绍了Python字典视图对象的示例和用法。通过对示例代码的解释,展示了字典视图对象的基本操作和特点。字典视图对象可以通过迭代或转换为列表来获取字典的键或值。同时,字典视图对象也是动态的,可以反映字典的变化。通过学习字典视图对象的用法,可以更好地理解和处理字典数据。 ... [详细]
  • 关于如何快速定义自己的数据集,可以参考我的前一篇文章PyTorch中快速加载自定义数据(入门)_晨曦473的博客-CSDN博客刚开始学习P ... [详细]
  • 前端开发工程师必读书籍有哪些值得推荐?我们直接进入代码复杂版式设置,如下所示,先写些标签,源码在这个链接里面:https://codepen.io/Shadid ... [详细]
  • vb6集成ad登录共享文件_SCSP实验2单点登录
    01—实验目的掌握单点登陆相关原理和深信服配置02—实验环境1.AC版本v12.0.42AC1地址:https:172.172.1.1AC2地址:htt ... [详细]
  • OpenStackQ版本已经发布了一段时间了。今天,小编来总结一下OpenStackQ版本核心组件的各项主要新功能,再来汇总一下最近2年来OpenStackN、O、P、Q各版本核心 ... [详细]
  • 安装Tensorflow-GPU文档第一步:通过Anaconda安装python从这个链接https:www.anaconda.comdownload#window ... [详细]
  • 湍流|低频_youcans 的 OpenCV 例程 200 篇106. 退化图像的逆滤波
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了youcans的OpenCV例程200篇106.退化图像的逆滤波相关的知识,希望对你有一定的参考价值。 ... [详细]
  • 程度|也就是_论文精读:Neural Architecture Search without Training
    篇首语:本文由编程笔记#小编为大家整理,主要介绍了论文精读:NeuralArchitectureSearchwithoutTraining相关的知识,希望对你有一定的参考价值。 ... [详细]
  • oracle11.2.0.4的rac集群,其中一个节点出现故障,集群无法启动,使用crsctlcheckcrs查看集群状况如下:[grid@db2client]$crsctlche ... [详细]
author-avatar
看人不顺眼说明6自己没教养
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有