Tensorflow实现Mask R-CNN实例分割通用框架,检测,分割和特征点定位一次搞定(多图)
Mask R-CNN实例分割通用框架,检测,分割和特征点定位一次搞定(多图)
对Facebook而言,想要提高用户体验,就得在图像识别上做足功夫。
雷锋网此前报道《Facebook AML实验室负责人:将AI技术落地的N种方法》(上 ,下篇)就提到,做好图像识别,不仅能让Facebook的用户更精准搜索到想要的图片,为盲人读出图片中包含的信息,还能帮助用户在平台上销售物品、做社交推荐等等。
近日, FAIR部门的研究人员在这一领域又有了新的突破——他们提出一种目标实例分割(object instance segmentation)框架Mask R-CNN,该框架较传统方法操作更简单、更灵活。研究人员把实验成果《Mask R-CNN》发布在了arXiv上,并表示之后会开源相关代码。
以下为AI科技评论据论文内容进行的部分编译。
论文摘要
物体识别,图像语义分割技术能在短时间内快速发展,Fast/Faster RCNN和全卷积网络(FCN)框架等技术功不可没。这些方法概念直观,训练和推断速度快,并且具有良好的灵活性和鲁棒性。
一般来说,目标分割的难点在于,它需要正确识别出图像中所有物体的方向,并且要将不同物体精准区分开。因此,这里面涉及到两个任务:
用物体识别技术识别物体,并用边界框表示出物体边界;
用语义分割给像素分类,但不区分不同的对象实例。
大家可能认为,要同时完成这两个任务,方法一定会相当复杂;但Mask R-CNN却可以更轻松的解决这两个问题。
Mask R-CNN是Faster R-CNN的扩展形式,能够有效地检测图像中的目标,同时还能为每个实例生成一个高质量的分割掩码(segmentation mask)。
它的构建方法是:在每个兴趣点(Region of Interest,RoI)上加一个用于预测分割掩码的分层,称为掩码层(mask branch),使该层并行于已有边界层和分类层(如下图所示)。
Mask R-CNN 框架
于是,掩码层就成为了一个小型FCN。我们将它应用于单个RoI中,以在pixel-to-pixel行为中预测分割掩码。
Mask R-CNN 的优点:
由于目前已有许多设计良好,可用于Faster R-CNN的构架,因此,作为Faster R-CNN的扩展,Mask R-CNN在应用时也没有阻碍;
考虑到掩码层只给整个系统增加一小部分计算量,所以该方法运行起来非常高效;
Mask R-CNN 还可以很容易泛化到其它任务上。比如,可以在同一个框架中估计人物的动作。
在COCO测试中可以看到,Mask R-CNN 在实例分割、边界框目标检测和人物关键点检测这三个难点上都获得了较好的实验效果,并且比每个现有的独立模型,包括 COCO 2016 挑战赛的获胜模型,表现都要好。
所以,我们希望该方法能为简化势力层面的识别打下一个坚实的基础。
实验结果图&表
研究人员进行了一系列实验来分析Mask R-CNN的运行效果。例如,把Mask R-CNN放在 COCO 测试集上进行测试、对比多项掩码和单项掩码(Multinomial vs. Independent Masks)、对比Class-Specific 和Class-Agnostic Masks、对比RoIAlign和RoIWarp等。以下是论文中出现的部分实验图和表格:
图2:Mask R-CNN在 COCO 测试集上的测试结果。结果显示,Mask R-CNN能用 ResNet-101,在 5 fps 的度下实现 35.7 的 mask AP。图上不同的颜色表示不同的掩码,另外也给出的边界框、类别和置信度。
图 3:顶端架构:我们延展了两个已有的 Faster R-CNN 头 [14,21]。左图和右图分别展示了 ResNet C4 和 FPN 的主干的顶端部分,分别来自 [14] 和 [21],而且可以看到上面还增加了一个 mask 分支。图中的数字表示空间分辨率和信道,箭头表示卷积、去卷积或全连接层。具体可以根据情况推断(卷积会保持空间维度而去卷积会增加空间维度)。除了输出卷积是 1×1 之外,其它所有卷积都是 3×3,去卷积是 2×2,步幅为 2。我们在隐藏层中使用 ReLU [24]。左图中 res5 表示 ResNet 的第 5 阶段,但为了简单起见,我们做了修改,使第 1 个卷积层运行在一个 7×7 RoI 上,步幅为 1(而不是如 [14] 中的 14×14,步幅为 2)。右图中的 ×4 表示 4 个连续卷积的堆叠。
表 1:在 COCO test-dev 上的实例分割 mask AP。MNC [7] 和 FCIS [20] 分别是 COCO 2015 和 2016 分割挑战赛的获胜模型。仅有Mask R-CNN,其表现就超过了更复杂的 FCIS+++——其包括多种规模的训练/测试、水平翻转测试和 OHEM [29]。所有的项都是单个模型的结果。
表2:Mask R-CNN 的分解表。在 trainval35k 上训练,在 minival 上测试。主要是 mask AP 的成绩,除非有特别指明。
上图显示,更深层的网络(图2a:50 vs 101)和更先进的设计(包括FPN和ResNeXt)都对Mask R-CNN有帮助作用。不过,也不是所有框架都能自动从中受益。
表3:在 test-dev 上目标检测单个模型的结果(边界框 AP)vs 当前最佳。使用 ResNet-101-FPN 的 Mask R-CNN 的表现超越了所有之前最佳模型的基本变体(在这些实验中忽略了 mask output)。Mask R-CNN 在 [21] 的基础上获得的增益得益于对 RoIAlign (+1.1 APbb)、多任务训练 (+0.9 APbb) 和 ResNeXt-101 (+1.6 APbb) 的使用。
图6:用Mask R-CNN (ResNet-50-FPN)在COCO测试上进行关键点测试。该模型在 5 fps 条件下实现了 63.1 的关键点 AP。
表 4:在 COCO test-dev 上的关键点检测 AP。ResNet-50-FPN 是以 5 fps 运行的单个模型。CMUPose+++[4] 是 2016 年的比赛获胜者,使用了多尺度测试、带有 CPM 的后处理 [33] 和带有一个目标检测器的滤波,累加约 5 分(在个人通信中阐明的)。G-RMI 是在 COCP plus MPII [1](2.5 万张图像)上训练的,使用了两个模型(Inception-ResNet-v2 + ResNet- 101)。由于使用了更多数据,所以不是与 Mask R-CNN 的直接对比。
源代码见:https://github.com/Mark110/Master-R-CNN
Tensorflow实现Mask R-CNN实例分割通用框架,检测,分割和特征点定位一次搞定(多图)的更多相关文章
- CVPR2020:三维实例分割与目标检测
CVPR2020:三维实例分割与目标检测 Joint 3D Instance Segmentation and Object Detection for Autonomous Driving 论文地址 ...
- 手把手教你使用LabVIEW实现Mask R-CNN图像实例分割
前言 前面给大家介绍了使用LabVIEW工具包实现图像分类,目标检测,今天我们来看一下如何使用LabVIEW实现Mask R-CNN图像实例分割. 一.什么是图像实例分割? 图像实例分割(Instan ...
- TensorFlow学习之运行label_image实例
前段时间,搞了搞编译label_image中cc的实例,最后终于搞定...但想在IDE中编译还没成功,继续摸索中. 现分享一下,探究过程,欢迎叨扰,交流. 个人地址:http://home.cnblo ...
- tf.nn.embedding_lookup TensorFlow embedding_lookup 函数最简单实例
tf.nn.embedding_lookup TensorFlow embedding_lookup 函数最简单实例 #!/usr/bin/env python # -*- coding: utf-8 ...
- tensorflow笔记:多层CNN代码分析
tensorflow笔记系列: (一) tensorflow笔记:流程,概念和简单代码注释 (二) tensorflow笔记:多层CNN代码分析 (三) tensorflow笔记:多层LSTM代码分析 ...
- TensorFlow的安装与CNN测试
0.说明 在Google开源该框架之后便使用真实K40m卡测试,由于生产环境是CentOS6.6的操作系统,但是该框架需要在Python2.7环境下执行,CentOS6.6下折腾了一天没搞定,后来换成 ...
- 【Python 实例】面向对象 | 按逗号分割列表
[Python 实例]面向对象 | 按逗号分割列表 题目: 按逗号分割列表 应该得到如下结果: ["xx"],["xx"],["xx"] 解 ...
- pytorch中检测分割模型中图像预处理探究
Object Detection and Classification using R-CNNs 目标检测:数据增强(Numpy+Pytorch) - 主要探究检测分割模型数据增强操作有哪些? - 检 ...
- 100天搞定机器学习|day40-42 Tensorflow Keras识别猫狗
100天搞定机器学习|1-38天 100天搞定机器学习|day39 Tensorflow Keras手写数字识别 前文我们用keras的Sequential 模型实现mnist手写数字识别,准确率0. ...
随机推荐
- vue-pos : 子组件与子组件通讯
子组件与子组件通讯: 例子子组件1 要与子组件2 通讯 步骤1 : 在父组件新建一个 vue 对象 : const eventHub = new Vue() 步骤2 : 子组件1 发起事件 :this ...
- Counting blessings can actually increase happiness and health by reminding us of the good things in life.
Counting blessings can actually increase happiness and health by reminding us of the good things in ...
- nginx学习书籍推荐
最好的书是源码 深入理解NGINX" 陶辉著 <实战Nginx...>张宴 <深入理解Nginx:模块开发与架构解析> nginx开发从入门到精通 Nginx HTT ...
- sql server 索引总结三
一.非聚集索引维护 非聚集索引的行定位器值保持相同的聚集索引值,即使该聚集索引列物理上重新定位后,也是如此. 为了优化这个维护开销,SQL Server添加一个指向旧数据页的指针,以在页面分割之后指向 ...
- Posgtes 常见命令
postgres 版本查看命令sudo -u postgres psql --version
- C语言——字符串长度的计算方法
1.不带转义字符的字符串 如:“abc!x=/”,其长度为7 2.带转义字符的字符串 (1) 字符串“abc\n”:其中的'\n'为转义字符(换行符),计算字符串长度时只能计作一个字符,所以该字符串的 ...
- 安装express
就目前来说安装express需要走几个步骤,要不就会出现在检查版本的时候就会出现,expres不是内部的命令或者是这种 安装的步骤: 1. 先是输入npm install -g express-gen ...
- SAP成都研究院马洪波:提升学习力,增强竞争力,收获一生乐趣
马洪波是SAP成都研究院CEC开发团队三大巨头之一.关于他的背景介绍,参考我以前的公众号文章:SAP成都研究院CEC团队三巨头之一:M君的文章预告. 其实早在2007年,互联网上已经有介绍马洪波的文章 ...
- 还在用SELECT COUNT统计数据库表的行数?Out了
在ABAP里我们如果想用代码获得一个数据库表里有多少条记录,常规做法是使用SELECT COUNT. 如果您使用的是HANA数据库,现在有一种新的办法可以达到同样的目的.HANA数据库里有一张名为m_ ...
- Java生成不重复的随机数
public class test { public static int[] Randoms(int number) { Random rand = new Random(); //创建一个新随机数 ...