在之前的文章中(参考:),我们提到了Polygon-RNN++在数据标注中的应用。今天不得不提到多伦多大学与英伟达联合公布的一项最新研究:Curve-GCN的应用结果显示图像标注速度提升10倍。

Curve-GCN是一种高效交互式图像标注方法,其性能优于Polygon-RNN++。在自动模式下运行时间为29.3ms,在交互模式下运行时间为2.6ms,比Polygon-RNN ++分别快10倍和100倍。

数据标注是人工智能产业的基础,在机器的世界里,图像与语音、视频等一样,是数据的一个种类。

对象实例分割是在图像中概括给定类的所有对象的问题,这一任务在过去几年受到了越来越多的关注,传统标记工具通常需要人工先在图片上点击光标描记物体边缘来进行标记。

然而,手动跟踪对象边界是一个费力的过程,每个对象大概需要30-60秒的时间。

为了缓解这个问题,已经提出了许多交互式图像分割技术,其通过重要因素加速注释。但是交互式分割方法大多是逐像素的(比如DEXTR),在颜色均匀的区域很难控制,所以最坏的情况下仍然需要很多点击。

Polygon-RNN将humans-in-the-loop(人机回圈)过程进行构架,在此过程中模型按顺序预测多边形的顶点。通过纠正错误的顶点,注释器可以在发生错误时进行干预。该模型通过调整校正来继续其预测。Polygon-RNN显示在人类协议水平上产生注释,每个对象实例只需点击几下。这里最糟糕的情况是多边形顶点的数量,大多数对象的范围最多为30-40个点。

然而,模型的重复性将可扩展性限制为更复杂的形状,导致更难的训练和更长的推理。此外,期望注释器按顺序纠正错误,这在实践中通常是具有挑战性的。

最新研究成果中,研究人员将对象注释框架化为回归问题,其中所有顶点的位置被同时预测。

在Curve-GCN中,注释器会选择一个对象,然后选择多边形或样条轮廓。

Curve-GCN自动地勾勒出对象的轮廓:

Curve-GCN允许交互式更正,并且可以自动重新预测多边形/样条

与Polygon-RNN + +相比:

  • Curve-GCN具有多边形或样条曲线参数
  • Curve-GCN可同时预测控制点(更快)

代码:

https://github.com/fidler-lab/curve-gcn

论文地址:

https://arxiv.org/abs/1903.06874

论文摘要

通过边界跟踪来手动标记对象是一个繁重的过程。在Polygon-RNN ++中,作者提出了Polygon-RNN,它使用CNN-RNN架构以循环方式产生多边形注释,允许通过humans-in-the-loop(人机回圈)的方式进行交互式校正。

我们提出了一个新的框架,通过使用图形卷积网络(GCN)同时预测所有顶点,减轻了Polygon-RNN的时序性。我们的模型是端到端训练的。它支持多边形或样条对对象进行标注,从而提高了基于线和曲线对象的标注效率。结果表明,在自动模式下,Curve-GCN的性能优于现有的所有方法,包括功能强大的PSP-DeepLab,并且在交互模式下,Curve-GCN的效率明显高于Polygon-RNN++。我们的模型在自动模式下运行29.3ms,在交互模式下运行2.6ms,比Polygon-RNN ++分别快10倍和100倍。

参考:

多伦多大学&NVIDIA最新成果:图像标注速度提升10倍!

数据标记系列——图像分割 & Curve-GCN的更多相关文章

  1. 数据标记系列——图像分割 & PolygonRNN++(一)

    当前大多数图像语义分割算法都是基于深度学习的方式,但是深度学习的效果很大程度上是依赖于大量训练数据的.目前的图像分割方法无非两种,一种是通过标注人员手动标注,如Cityscapes(提供无人驾驶环境下 ...

  2. 数据标记系列——图像分割 & PolygonRNN++(二)

    实践 1.export PATH=~/anaconda3/bin:$PATH 2.Anaconda3 中创建新环境 Conda create –name=labelme_polyrnn_pp pyth ...

  3. 数据标记系列——标记工具Imagtagger

    https://github.com/bit-bots/imagetagger 待有空说一说!

  4. Java 数据持久化系列之池化技术

    在上一篇文章<Java 数据持久化系列之JDBC>中,我们了解到使用 JDBC 创建 Connection 可以执行对应的SQL,但是创建 Connection 会消耗很多资源,所以 Ja ...

  5. C# 数据操作系列 - 6 EF Core 配置映射关系

    0. 前言 在<C# 数据操作系列 - 5. EF Core 入门>篇中,我们简单的通过两个类演示了一下EF增删改查等功能.细心的小伙伴可能看了生成的DDL SQL 语句,在里面发现了些端 ...

  6. C# 数据操作系列 - 8. EF Core的增删改查

    0.前言 到目前为止,我们看了一下如何声明EF Core的初步使用,也整体的看了下EF Core的映射关系配置以及导航属性的配置. 这一篇,我带大家分享一下,我在工作中需要的EF Core的用法. 1 ...

  7. C# 数据操作系列 - 16 SqlSugar 完结篇

    0. 前言 前一篇我们详细的介绍了SqlSugar的增删改查,那些已经满足我们在日常工程开发中的使用了.但是还有一点点在开发中并不常用,但是却非常有用的方法.接下来让我们一起来看看还有哪些有意思的内容 ...

  8. C# 数据操作系列 - 19 FreeSql 入坑介绍

    0. 前言 前几天FreeSql的作者向我推荐了FreeSql框架,想让我帮忙写个文章介绍一下.嗯,想不到我也能带个货了.哈哈,开个玩笑-看了下觉得设计的挺有意思的,所以就谢了这篇文章. 简单介绍一下 ...

  9. Tapdata 肖贝贝:实时数据引擎系列(四)-关于 Oracle 与 Oracle CDC

      摘要:想实现 Oracle 的 CDC,排除掉一些通用的比如全量比对, 标记字段获取之外, 真正的增量形式获取变更, 有三种办法: Logminer .XStream .裸日志解析,但不管哪种方法 ...

随机推荐

  1. mysql跨表删除多条记录

    Mysql可以在一个sql语句中同时删除多表记录,也可以根据多个表之间的关系来删除某一个表中的记录. 假定我们有两张表:Product表和ProductPrice表.前者存在Product的基本信息, ...

  2. Java8新特性(拉姆达表达式lambda)

    一.函数式接口 函数式接口(functional interface 也叫功能性接口,其实是同一个东西).简单来说,函数式接口是只包含一个方法的接口.比如Java标准库中的java.lang.Runn ...

  3. SpringBoot 初始化流程以及各种常见第三方配置的源码实现

    带着这几个问题去分析SpringBoot 初始化以及扩展机制实现 1.容器何时被创建,并默认配置了什么? 2.Spring 容器依赖于哪个后置处理器进行bean 容器的装配? 3.Spring 如何进 ...

  4. 自定义菜单和高级接口-获取Access Token

    自定义菜单和高级接口都需要使用APPID和AppSecret来创建. 对应暂时没有这些权限的微信公众账号,开发者可以申请测试账号来体验和测试体验微信公众平台的所有高级接口的功能.链接 https:// ...

  5. C++函数调用方式约定stdcall,cdecl,pascal,naked,thiscall,fastcall

    https://www.cnblogs.com/xiangtingshen/p/11014514.html C++函数调用约定_cdecl约定:参数:从右向左依次入栈堆栈平衡:调用方平衡 #inclu ...

  6. SAM:后缀自动机

    好文转载 luoguP3804 代码: /* 定义.对给定字符串s的后缀自动机是一个最小化确定有限状态自动机,它能够接收字符串s的所有后缀. 对给定字符串s的后缀自动机是一个最小化确定有限状态自动机, ...

  7. C#中的Byte,String,Int,Hex之间的转换函数。

    /// <summary> Convert a string of hex digits (ex: E4 CA B2) to a byte array. </summary> ...

  8. Oracle误删除数据恢复。Oracle删除后恢复数据

    发现误删除时需要及时处理,速度要快,姿势要帅.晚了就恢复不了额 1.查询时间 以确保恢复到某个时间点 select SQL_TEXT, LAST_ACTIVE_TIME from v$sqlarea ...

  9. Kafka与ActiveMQ区别

    Kafka 是LinkedIn 开发的一个高性能.分布式的消息系统,广泛用于日志收集.流式数据处理.在线和离线消息分发等场景.虽然不是作为传统的MQ来设计,在大部分情况,Kafaka 也可以代替原先A ...

  10. Android中显式意图和隐式意图的区别

    1.显式意图 可以直接通过名称开启指定的目标组件: 通过构造方法Intent(Context packageContext,class<?>cls)来实现. button_1 = (But ...