zoukankan      html  css  js  c++  java
  • Mask RCNN笔记

    Mask RCNN

     

    一、核心要点

    (1)RoIAlign

    mask rcnn的关键 一是RoIAlign,是将RoIPooling的插值方式,从最近邻插值(INTER_NEAREST)方式变为双线性插值。

    这里复习一下关于RoI,RoIPooling的知识

    RoI是Region of Interests 特征图上感兴趣的区域(“框”)

    RoIPooling的过程是将一个个大小不同的box框,都映射成固定大小(w*h)的矩形框

    具体操作是:先把RoI中的坐标映射到feature map上,得到feature map上的坐标后,使用Pooling得到输出,在Pooling过程中需要计算Pooling后的结果对应到feature map上所占的范围,然后在那个范围中进行取max或average操作。使用RoIPooling会在RoI和extracted features之间对应位置产生偏移(introduce misalignments)。

    所以使用RoIAlign 来解决这个问题。

    论文中还和RoIWarp(J. Dai, K. He, and J. Sun. Instance-aware semantic segmentation via multi-task network cascades. In CVPR, 2016. 2, 3,4, 5, 6 )进行了比较,实验结果表明RoIAlign的效果要好于 RoIWarp。

    (2)实例分割同检测并行进行

     

    尝试了两种不同的faster rcnn的结构,ResNet C4和FPN结构。

    从图中可以看到,ResNet C4共享RoI层,而FPN是两个任务分开做RoI。

    mask Loss 只定义在了正例的RoIs上。

    在该文章中RPN和 mask分支,训练时,不共享特征;对于前边的特征提取,RPN和mask共享基础网络结构。

    (3)使用FCN对RoI进行实例分割

      使用FCN对RoI生成的每一个mask进行pixel2pixel的预测。mask编码了输入目标的空间分布。

    (4)类间无竞争的Lmask

    对于每个RoI,其loss定义为L=Lcls +Lbox + Lmask

    Lcls为分类损失,Lbox为bounding box回归,Lmask为实例分割损失

     生成k个m*m的mask,Lmask只定义在 k-th mask上对于一个具体为k类的gt,其他mask对loss没有贡献,这样类间就没有竞争。

    对每一个像素使用sigmod,然后取RoI上所有像素的交叉熵的平均值,作为Lmask,

    反向传播的时候,Loss只对gt那一类进行计算和反向传播,有效的避免了类别竞争,也使得分割和分类解耦(之前的FCN,是针对每一个像素进行softmax输出,然后计算交叉熵)

    实验

    实验一

    Instance Segmentation

    •  说明 Mask RCNN效果好, ResNeXt-FPN网络的表达能力最好

    实验二 剥离实验分析

    表二(a) Backbone Architecture实验说明,ResNeXt-101-FPN的效果要最好

    表二(b)说明计算loss时,使用sigmod要好于FCN的softmax

    表二(c、d)说明RoIAlign的效果要好于RoIPool和RoIWarp

    表二(e)说用使用FCN进行分割的效果要好于MLP(多层感知机)

    实验三 目标检测

    实验四 关键点检测

    实验五 cityscapes 上的效果

  • 相关阅读:
    Oracle 获取本周、本月、本季、本年的第一天和最后一天(转载)
    easyui tabs页签显示在底部属性
    java mybatis XML文件中大于号小于号转义(转载)
    原生JS日历 + JS格式化时间格式
    ajax之async属性
    Easyui 行编辑
    css中实现显示和隐藏(转)
    layer弹出层 获取index
    js中关于json常用的内容、js将数字保留两位小数
    发布项目到github上web服务器来运行
  • 原文地址:https://www.cnblogs.com/ya-cpp/p/8954828.html
Copyright © 2011-2022 走看看