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

Mask R-CNN论文原理讲解

论文:arxiv.org/pdf/1703.06870

代码:maskrcnn-benchmark:Fast, modular reference implementation of Instance Segmentation and Object Detection algorithms in PyTorch. - GitCode

Mask R-CNN简介 

        Mask R-CNN是何凯明大神的新作。Mask R-CNN是一种在有效检测目标的同时输出高质量的实例分割mask。是对faster r-cnn的扩展,与bbox检测并行的增加一个预测分割mask的分支。Mask R-CNN 可以应用到人体姿势识别。并且在实例分割、目标检测、人体关键点检测三个任务都取得了现在最好的效果,下图是Mask R-CNN的检测效果图:

        语义分割通过对输入图像中每个像素的标签进行预测,给出了较好的推理,例如是前景还是背景。每个像素都根据其所在的对象类进行标记。为了进一步发展,实例分割为属于同一类的对象的单独实例提供了不同的标签。

        目标检测:可以区分个体但不够准确。
        语义分割:可以划分像素但不可以区分个体。
而实例分割则可以结合二者的优点,对个体的分类及定位更加精准。因此,实例分割可以定义为同时解决目标检测问题和语义分割问题的技术。

 Mask R-CNN架构

从上图可以看出Mask RCNN架构非常接近Faster RCNN。主要区别在于,在网络的末端,还有另一个头,即上图中的掩码分支,用于生成掩码进行实例分割。还有把Faster RCNN中的ROI Pooling换成了ROIAlign。

Mask R-CNN的改进

ROIAlign

ROIAlign是ROIPooling的进化版,下面来具体讲解一下它的优化:

        ROIAlign的提出是为了解决Faster R-CNN中RoI Pooling的区域不匹配的问题,下面我们来举例说明什么是区域不匹配。ROI Pooling的区域不匹配问题是由于ROI Pooling过程中的取整操作产生的(如下图),我们知道ROI Pooling是Faster R-CNN中必不可少的一步,因为其会产生长度固定的特征向量,有了长度固定的特征向量才能进行softmax计算分类损失。

如下图,输入是一张800×800 的图片,经过一个有5次降采样的卷机网络,得到大小为 25×25 的Feature Map。图中的ROI区域大小是 600×500 ,经过网络之后对应的区域为 =18.75X15.625,由于无法整除,ROI Pooling采用向下取整的方式,进而得到ROI区域的Feature Map的大小为 18 × 15 这就造成了第一次区域不匹配。

RoI Pooling的下一步是对Feature Map分bin,加入我们需要一个7 × 7的bin,每个bin的大小为,由于不能整除,ROI同样采用了向下取整的方式,从而每个bin的大小为 2 × 2 ,即整个RoI区域的Feature Map的尺寸为14 × 14。第二次区域不匹配问题因此产生。

对比ROI Pooling之前的Feature Map,ROI Pooling分别在横向和纵向产生了4.75和1.625的误差,对于物体分类或者物体检测场景来说,这几个像素的位移或许对结果影响不大,但是语义分割任务通常要精确到每个像素点,因此ROI Pooling是不能应用到Mask R-CNN中的。

为了解决这个问题,作者提出了RoIAlign。RoIAlign并没有取整的过程,可以全程使用浮点数操作,步骤如下:

1. 计算RoI区域的边长,边长不取整;
2. 将ROI区域均匀分成k × k个bin,每个bin的大小不取整;
3. 每个bin的值为其最邻近的Feature Map的四个值通过双线性插值得到;
4. 使用Max Pooling或者Average Pooling得到长度固定的特征向量。

回到流程的正式讲解,首先输入RP特征图,用的是上一节所讲公式分配的feature map上投射出的,在此不再赘述。补充一下,训练时只传入挑选出的正负样本RP,测试时都传入。然后得到两张7×714×14大小的特征图,分别传入进Head层的两个功能分支。 

Mask分割

Mask分支用的就是传统的FCN图像分割方法,最后生成28×28×80的预测mask结果,注意得到的结果是软掩码,经过sigmoid后的0~1浮点数。

损失函数

网络是如何训练的呢?(损失函数如下图:)

上式的分类损失和回归框矫正损失,就不再赘述了,实在是老生常谈。我来主要讲解一下Lmask
​语义分割损失。在进行掩码预测时,FCN的分割和预测是同时进行的,即要预测每个像素属于哪一类。而Mask R-CNN将分类和语义分割任务进行了解耦,即每个类单独的预测一个位置掩码,这种解耦提升了语义分割的效果。

总结

1. 使用残差网络作为卷积结构
2. 使用Faster R-CNN的物体检测流程:RPN+Fast R-CNN
3. 增加FCN用于语义分割
 

 

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【C#】静态成员(static)与实例成员(非静态成员)的理解
  • macos USB外接键盘ctrl键绑定方法 解决外接USB键盘与mac键盘不一致问题
  • JVM【面试题】2024最新
  • 【C++ | 设计模式】工厂方法模式的详解与实现
  • Kompose工具:转换Compose项目为K8S项目
  • 深度强化学习算法(三)(附带MATLAB程序)
  • priority_queue模拟
  • 【动态规划】区间dp
  • 通过SynchronousQueue方式实现线程间数据传递
  • 算法笔记|Day37动态规划X
  • Websocket笔记
  • Tarjan的脱机最小公共祖先算法详解
  • Linux 数据结构 内核链表 栈
  • 联影一面面经
  • 探索VB与ASP.NET的融合艺术:Web开发的高效实践
  • @jsonView过滤属性
  • [case10]使用RSQL实现端到端的动态查询
  • [分享]iOS开发-关于在xcode中引用文件夹右边出现问号的解决办法
  • [译]前端离线指南(上)
  • axios请求、和返回数据拦截,统一请求报错提示_012
  • AzureCon上微软宣布了哪些容器相关的重磅消息
  • Markdown 语法简单说明
  • PHP面试之三:MySQL数据库
  • React Transition Group -- Transition 组件
  • socket.io+express实现聊天室的思考(三)
  • supervisor 永不挂掉的进程 安装以及使用
  • Vim Clutch | 面向脚踏板编程……
  • 湖南卫视:中国白领因网络偷菜成当代最寂寞的人?
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 批量截取pdf文件
  • 如何使用Mybatis第三方插件--PageHelper实现分页操作
  • 微信如何实现自动跳转到用其他浏览器打开指定页面下载APP
  • 一天一个设计模式之JS实现——适配器模式
  • 源码之下无秘密 ── 做最好的 Netty 源码分析教程
  • 再次简单明了总结flex布局,一看就懂...
  • Hibernate主键生成策略及选择
  • 资深实践篇 | 基于Kubernetes 1.61的Kubernetes Scheduler 调度详解 ...
  • ​七周四次课(5月9日)iptables filter表案例、iptables nat表应用
  • # 安徽锐锋科技IDMS系统简介
  • #传输# #传输数据判断#
  • $con= MySQL有关填空题_2015年计算机二级考试《MySQL》提高练习题(10)
  • %3cscript放入php,跟bWAPP学WEB安全(PHP代码)--XSS跨站脚本攻击
  • (2)(2.4) TerraRanger Tower/Tower EVO(360度)
  • (2020)Java后端开发----(面试题和笔试题)
  • (ISPRS,2021)具有遥感知识图谱的鲁棒深度对齐网络用于零样本和广义零样本遥感图像场景分类
  • (草履虫都可以看懂的)PyQt子窗口向主窗口传递参数,主窗口接收子窗口信号、参数。
  • (附源码)ssm教材管理系统 毕业设计 011229
  • (附源码)ssm码农论坛 毕业设计 231126
  • (接口封装)
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转载)OpenStack Hacker养成指南
  • (状压dp)uva 10817 Headmaster's Headache
  • .mat 文件的加载与创建 矩阵变图像? ∈ Matlab 使用笔记
  • .NET C# 使用 SetWindowsHookEx 监听鼠标或键盘消息以及此方法的坑
  • .NET CORE 2.0发布后没有 VIEWS视图页面文件