目标检测——Mask R-CNN算法解读

论文:Mask R-CNN
作者:Kaiming He Georgia Gkioxari Piotr Doll´ar Ross Girshick
链接:https://arxiv.org/abs/1703.06870
代码:https://github.com/facebookresearch/Detectron

R-CNN系列其他文章:

1、算法概述

该论文主要实现的是把图片中的目标一个一个的分割出来,也叫实例分割;是在Faster R-CNN的基础上增加了一个预测实例目标掩模的分支。该算法在COCO 2016竞赛的三大任务(实例分割、目标检测、关键点预测)中都获得了单模型最好的成绩。
在这里插入图片描述
如上图所示,(d)即为实例分割,实例分割是具有挑战性的,因为它需要正确检测图像中的所有对象,同时还要精确分割每个实例。因此,它结合了对单个对象进行分类和使用边界框对每个对象进行定位。

2、Mask R-CNN细节

在这里插入图片描述
在这里插入图片描述
如上图所示,Mask R-CNN就是在Faster R-CNN的基础上增加一个mask分支,但是额外的掩码输出与原本的class和box输出不同,需要提取对象的更精细的空间布局,包括需要学习像素级对齐。对于每个RoI,Mask R-CNN在预测类别和box偏置的同时,还会输出二进制掩码。
在训练阶段,也采用多任务损失:L=Lcls+Lbox+Lmask

2.1 Mask Representation

Mask分支以RoI的特征图作为输入完成mask编码学习,它不像类别分类和box偏移以压缩形式的全连接作为输入,因为它需要以卷积的形式学习像素到像素的对应关系。Mask R-CNN的mask分支是一个FCN结构,对于每个RoI特征输入,输出大小为mxm大小的mask,若类别为K,则输出为Kmxm,对于每类(对应一个mxm大小的feature map)都在每个像素应用sigmoid操作用来评估是否属于该类。

由于mask分支为FCN结构,所以能让分支上的每一层都保持对应的空间结构,这就要求RoI特征和输入图像的特征在空间位置上要保存对应关系,不能有空间上的偏移,这促使作者改进Faster R-CNN的RoI Pooling层为RoI Align。

2.2 RoI Align

RoI Pooling是从每个RoI中提取小特征图(例如7x7)的标准操作。在Faster R-CNN中,使用RoI Pooling之前的特征图大小是原图的1/16,假设某个RoI区域在原图位置上的横坐标范围是x0到x1,纵坐标范围是y0到y1,那么这个RoI区域在经过一系列卷积后,在RoI Pooling的输入特征图上的横坐标范围应为x0/16到x1/16,纵坐标范围应为y0/16到y1/16。但是RoI Pooling操作做了取整操作,即RoI在特征图上的位置变为了[x0/16] 到[x1/16]和[y0/16]到[y1/16],这里的取整操作反映到原图上就发生了位置偏移,造成了RoI区域在空间位置上没有对齐,这可能对分类不会有太大影响,但是对应mask学习,影响太大了。所以作者没有采用RoI Pooling,而且采用了RoI Align,它没有取整操作,而且对相应位置做了双线性插值,以保证位置前后对齐。
在这里插入图片描述
在这里插入图片描述

3、实验结果

作者以ResNet50,ResNet101和ResNeXt50,ResNeXt101作为backbone,假如Faster R-CNN采用ResNet50并以第4个stage的输出作为RoI的特征就命名为ResNet-50-C4,实验在COCO数据集上进行统计,实例分割结果如下:
在这里插入图片描述
目标检测的结果如下:
在这里插入图片描述
关键点检测结果如下:
在这里插入图片描述

4、创新点

  • 创新点:
    1、在Faster R-CNN的基础上新增mask分支,对bounding box回归有相互促进的效果;
    2、提出RoI Align操作,纠正了RoI Pooling在特征图上的取值偏移,使得检测分支和mask分支在特征图上的RoI区域和原图的RoI区域在空间位置上对齐;

相关推荐

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-08 18:24:04       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-08 18:24:04       100 阅读
  3. 在Django里面运行非项目文件

    2023-12-08 18:24:04       82 阅读
  4. Python语言-面向对象

    2023-12-08 18:24:04       91 阅读

热门阅读

  1. 使用True False矩阵对torch.tensor切片

    2023-12-08 18:24:04       53 阅读
  2. 【Node.js】笔记梳理 7 - mongoose

    2023-12-08 18:24:04       63 阅读
  3. 大语言模型评测论文HELM阅读笔记

    2023-12-08 18:24:04       65 阅读
  4. pytorch bert实现文本分类

    2023-12-08 18:24:04       51 阅读
  5. 前端中的响应式布局与各个端适配

    2023-12-08 18:24:04       62 阅读
  6. 如何给一个栏位绑定监听事件

    2023-12-08 18:24:04       55 阅读