基于轮廓调整的SOTA实例分割方法,速度达32.3fps | CVPR 2020
作者 | VincentLee
来源 | 晓飞的算法工程笔记
介绍
实例分割是许多计算机视觉任务中的重要手段,目前大多数的算法都采用在给定的bbox中进行pixel-wise分割的方法。受snake算法和Curve-GCN的启发,论文采用基于轮廓的逐步调整策略,提出了Deep snake算法进行实时实例分割,该算法将初始轮廓逐渐优化为目标的边界,如图1所示,达到很好的性能且依然保持很高的实时性(32.3fps) 。 论文的主要贡献如下:
提出基于学习的snake算法用于实时实例分割,对初始轮廓调整至目标边界,并且引入循环卷积(circular convolution)进行轮廓特征的学习。
提出two-stage流程进行实例分割,先初始化轮廓再调整轮廓,两个步骤均可以用于修正初始定位的误差。
Deep snake能在多个实例分割数据集上达到SOTA,对于512的图片输入能达到32.3fps。
方法
Deep snake方法将初始轮廓逐渐优化为目标的边界来进行目标分割,即将物体轮廓作为输入,基于CNN主干特征预测每个顶点的偏移量。为了充分利用轮廓拓扑结构,论文使用循环卷积(circular convolution)进行顶点特征的学习,有助于学习轮廓的优化,并基于deep snake提出了一套实时实例分割的流程。
Learning-based snake algorithm
传统的snake算法将顶点的坐标作为变量来优化人工设计的能量函数(energy function),通过最小化能量函数来拟合目标边界。由于能量函数通常是非凸的,而且需要基于低维图像特征进行人工设计,通常会陷于局部最优解。
而deep snake则是直接从数据学习如何微调轮廓,对于个顶点,首先构造每个顶点的特征向量,顶点的特征为对应的网络特征和顶点坐标的concate,其中为主干网络输出的特征图,为顶点处的双线性差值输出,附加的用于描述顶点间的位置关系,是平移不变的,由每个顶点坐标减去轮廓中所有顶点的最小和得到相对坐标。
在获得顶点特征后,需要对轮廓特征进一步学习,顶点的特征可以视作1-D离散信号,然后使用标准卷积对顶点逐个进行处理,但这样会破坏轮廓的拓扑结构。因此,将顶点特征定义为公式1的周期信号,然后使用公式2的循环卷积进行特征学习,为可学习的卷积核,为标准卷积操作。
循环卷积操作如图2所示,与标准的卷积操作类似,可以很简单地集成到目前的网络中。在特征学习后,对每个顶点使用3个卷积层进行偏移的输出,实验中循环卷积的核大小固定为9。
图a展示了deep snake的细节结构,输入为初始轮廓,主干包含8个"CirConv-Bn-ReLU"层,每层都使用残差连接,Fusion block用于融合主干网络中的多尺度轮廓特征,Prediction head使用3个卷积输出每个顶点的偏移。
Deep snake for instance segmentation
将deep snake加入到目标检测模型中进行实例分割,流程如图b所示。模型首先产生目标框,将其构建成菱形框,然后使用deep snake算法将菱形顶点调整为目标极点,构造八边形轮廓,最后进行迭代式deep snake轮廓调整得到目标形状
Initial contour proposal
论文采用ExtreNet的极点思想,能够很好地包围物体。在得到矩形框后,获取4条边的中心点连成菱形轮廓,使用deep snake对菱形轮廓调整成极点,然后每个极点放置一条边,连接边构造多边形,每个极点的边为其对应的bbox边的,若边超过原bbox范围会被截断。在实际使用时,菱形轮廓输入deep snake前会平均上采样到40个点(有助于deep snake计算),但损失函数计算只考虑的对应偏移
Contour deformation
对八边形平均采样个点,将上极点作为起点,同样地,GT轮廓对物体边缘平均采样个点,将靠近的点作为起点,一般为128。如果顶点离GT很远,很难直接正确调整,于是采用迭代式地进行deep snake调整,实验采用的迭代次数为3次。
轮廓是目标空间位置的一种扩展表示方法,通过调整轮廓到物体边缘能够帮助解决detector的定位误差
Handling multi-component objects
由于遮挡,一个实例可能包含多个组件,然而一个轮廓只能勾勒出bbox内的一个组件。为了解决这个问题,使用RoIAlign来提取初始bbox特征,然后配合detector来检测组件的box,再对每个box进行上述的轮廓调整,最后结合初始bbox内相同类别的组件输出最终的物体形状。
实现细节
Training strategy
极点的损失函数如公式3,为预测的极点。
迭代轮廓调整的损失函数如公式4,为调整后的顶点,为对应的GT边缘点。对于检测部分,则采用跟原检测函数一样的损失函数。
Detector
使用CenterNet作为检测器,对于物体检测,使用跟原来一样的设定输出类别相关的box,而对于组件检测,则使用类不可知的CenterNet,对于的特征图,输出的中心点heatmap和的box大小特征图。
实验
Ablation studies
Baseline将轮廓视为图结构,然后使用GCN进行轮廓调整,初始轮廓为围绕bbox的椭圆,Arichitecture加入Fusion block,Initial proposal加入论文的轮廓初始化方法,最后是将GCN修改为循环卷积,可以看到每个步骤都对AP有提升。
论文也对比了卷积类型以及迭代次数对结构的影响,可以看到循环卷积的结果比GCN要好。
Comparison with the state-of-the-art methods
论文在不同的数据集上都取得了不错的效果,作者在每个数据集上的训练参数都有点不一样,具体参数可以看看原文
Running time
结论
论文提出基于轮廓的实例分割方法Deep snake,轮廓调整是个很不错的方向,引入循环卷积,不仅提升了性能还减少了计算量,保持了实时性,但是Deep snake的大体结构不够优雅,应该还有一些工作可以补。
论文地址:https://arxiv.org/abs/2001.01629
论文代码:https://github.com/zju3dv/snake/
参考内容
Snakes: Active Contour Models - http://www.cs.ait.ac.th/~mdailey/cvreadings/Kass-Snakes.pdf
Fast Interactive Object Annotation with Curve-GCN - https://arxiv.org/pdf/1903.06874.pdf
【end】◆精彩推荐◆推荐阅读百万人学AI:CSDN重磅共建人工智能技术新生态清华学霸组团的工业AIoT创企再获数千万融资:玩家应推动在边缘 AI 芯片上跑算法阿里文娱测试实战:机器学习+基于热度链路推荐的引流,让对比测试更精准另一种声音:容器是不是未来?1 分钟抗住 10 亿请求!某些 App 怎么做到的?| 原力计划探索比特币独特时间链、挖矿费用及场外交易的概念你点的每个“在看”,我都认真当成了AI
相关文章:

Redis运行流程源码解析
原文作者:凡趣科技 pesiwang 原文地址:http://blog.nosqlfan.com/html/4007.html 本文分析源码基于 Redis 2.4.7 stable 版本。 概述 Redis通过定义一个 struct redisServer 类型的全局变量server 来保存服务器的相关信息(比如:…

2010年5月blog汇总:OpenExpressApp、其他
OpenExpressApp 信息系统开发平台OpenExpressApp - 框架待完善工作事项信息系统开发平台OpenExpressApp - 报表模块支持ReportObjectView信息系统开发平台OpenExpressApp - 从compositewpf到MEF信息系统开发平台OpenExpressApp - …

注意!Linux glibc再曝漏洞,可导致Linux软件劫持
2019独角兽企业重金招聘Python工程师标准>>> glibc是GNU发布的libc库,即c运行库。它是Linux系统中最底层的API,几乎其它运行库都会依赖于glibc。 近日,Google和Red Hat的安全人员发现GNU C Library (glibc)中存在严重的安全漏洞&a…

redis常用命令参考
操作Redis数据库 下面我们来简单的操作一下数据库。在实例开启的情况下: 1、插入数据 redis 127.0.0.1:6379> set name wwl OK 设置一个key-value对。 2、查询数据 redis 127.0.0.1:6379> get name "wwl" 取出key所对应的value。 3、删除键…

Script:收集UNDO诊断信息
以下脚本可以用于收集Automatic Undo Management的必要诊断信息,以sysdba身份运行: spool Undo_Diag.out ttitle off set pages 999 set lines 150 set verify off set termout off set trimout on set trimspool onREM REM ----------------------------------…
又要头秃?2020年七大AI编程语言大盘点
作者 | Claire D译者 | 苏本如,编辑 | 伍杏玲来源 | CSDN(ID:CSDNnews)人工智能已成为我们日常生活不可或缺的一部分,它被广泛地应用到几百种实际场景中,极大地便利人们的工作和生活。随着近年来的发展&…

I.MX6 bq27441 driver hacking
/************************************************************************** I.MX6 bq27441 driver hacking* 声明:* 本文主要是记录对电池计量芯片bq27441芯片驱动注册过程进行代码跟踪。** 2016-2-…
PHP5.5的一点变化
之前一直使用eAccelerator,参考:PHP安装eAccelerator 注意PHP5.5以后暂时不能使用eAccelerator 原因:其中一个我知道的是eAccelerator中使用了: php_register_info_logo(EACCELERATOR_VERSION_GUID, "text/plain", (un…

虚拟机的操作系统的安装
虚拟机的操作系统的安装启动虚拟机进入下一步,按Enter键开始安装。按F8许可协议选则C创建分区再按C,将未划分的分区划分按ENTER继续,选择NTFS文件系统格式化磁盘分区写上姓名和单位,单击下一步直接点击关闭<?xml:namespace pr…
2020,国产AI开源框架“亮剑”TensorFlow、PyTorch
「AI技术生态论」 人物访谈栏目是CSDN发起的百万人学AI倡议下的重要组成部分。通过对AI生态专家、创业者、行业KOL的访谈,反映其对于行业的思考、未来趋势的判断、技术的实践,以及成长的经历。 2020年,CSDN将对1000人物进行访谈,形…

Centos下部署Solr 搜索引擎
一、环境准备:系统环境:centos 6.5tomcat 7.0.47jdk-7u9solr-4.7.0首先将软件包上传到/tmp目录下1、 jdk安装[rootsvn-server /]# cd /tmp/ [rootsvn-server /]#tar zxvf jdk-7u9-linux-x64.tar.gz[rootsvn-server /]#mv jdk1.7.0_09 /u…

Redis源码分析-TCMalloc
redis很多地方都在调用zmalloc函数 zmalloc在这里定义zmalloc.c void *zmalloc(size_t size) {void *ptr malloc(sizePREFIX_SIZE);if (!ptr) zmalloc_oom_handler(size); #ifdef HAVE_MALLOC_SIZEupdate_zmalloc_stat_alloc(zmalloc_size(ptr));return ptr; #else*((size_t…
让AI训练AI,阿里和浙大的“AI训练师助手”是这样炼成的
不久前,人力资源社会保障部发布了一种炙手可热的新职业:AI训练师。没想到,浙江大学与阿里安全的人工智能训练师马上创造出一个 “AI训练师助手”,高效打造AI深度模型,应对海量应用场景的增加,让AI训练模型面…

用 Navicat for Oracle 管理 Oracle10g/11g 数据库
Navicat for xxx 是一个优秀的数据库管理客户端,有 MySQL、Oracle 等版本。建议大家最好用 Enterprise 版本,功能全面一些,但较之于免费的 Lite 版,企业版可是要花银子买的。 安装 Navicat for Oracle 后,首先需要建一…

借一个同事的经历,谈一谈程序员的成长
一个很久之前的同事,今天找我,想让我帮他推荐下,去我们公司来工作,因为认识很久,就和他说了说公司的现状,也询问了一下他的状况,寒暄几句,让他下周等面试。 这位同事是之前一起做游戏…

select,epoll,poll比较
select,poll,epoll简介 select select本质上是通过设置或者检查存放fd标志位的数据结构来进行下一步处理。这样所带来的缺点是: 1 单个进程可监视的fd数量被限制 2 需要维护一个用来存放大量fd的数据结构,这样会使得用户空间和内…
华为开发者大会HDC.Cloud技术探秘:云搜索服务技术实践
搜索是一个古老的技术,从互联网发展的第一天开始,搜索技术就绽放出了惊人的社会和经济价值。随着信息社会快速发展,数据呈爆炸式增长,搜索技术通过数据收集与处理,满足信息共享与快速检索的需求。基于搜索技术…

从今天开始,自己做SEO。
1.购买了一点黑链。开始优化之路。 2.更改了关键词,描述。 3.整理了友情链接。 4.购买了VPS服务器:点击查看 转载于:https://www.cnblogs.com/zq535228/archive/2010/06/09/1754986.html

Elasticsearch2.2.0配置文件说明
为什么80%的码农都做不了架构师?>>> 官方配置文档 https://www.elastic.co/guide/en/elasticsearch/reference/current/setup.html 配置详解 # ---------------------------------- Cluster (集群配置)----------------------…

各种类型的字节数
int类型比较特殊,具体的字节数同机器字长和编译器有关。如果要保证移植性,尽量用__int16 __int32 __int64吧,或者自己typedef int INT32一下。 C、C标准中只规定了某种类型的最小字节数(防止溢出) 64位指的是cpu通用寄…
154 万 AI 开发者用数据告诉你,中国 AI 如何才能弯道超车?| 中国 AI 应用开发者报告...
曾经,软件吞噬世界。现在,AI 吞噬软件。作者 | 屠敏数据 | 杨阳、刘学涛可视化&策划 | 唐小引出品 | CSDN(ID:CSDNnews)从三年前年薪 25 万只是白菜价,到去年华为以年薪最高达 201 万招揽顶尖应届毕业生…

中国移动用户能不能用WCDMA网?(世界杯与通信2)
到南非有移动的用户也有联通的用户,联通的网络快这是肯定的,不过联通的通话价格也比移动的高,就有人希望拿着移动的号去南非,最好也能享受WCDMA的网络速度,这样就是两全其美了,对于这个问题,在国…

平安陆金所-点金计划,简直是骗子行为。
陆金所点金计划,让人防不胜防。平安保险,骗子中的教练。 转载于:https://www.cnblogs.com/hthf/p/5205921.html
深度分析define预处理指令
#define语句 预处理 宏替换 --以上出自《C语言入门经典(第四版)》 #和## --出自《C语言程序设计:现代方法(第2版)》 #undef取消定义 --以上出自《21天学通C语言(第6版)》

建立YUM服务器CENTOS
1 ,YUM Client:要保证安装有如下软件包:yum-3.2.19-18.el5.centosyum-metadata-parser-1.1.2-2.el52 ,YUM Server:要保证安装有如下软件包:yum-3.2.19-18.el5.centosyum-metadata-parser-1.1.2-2.el5yum-fastestmirror…
数据库设计的10个最佳实践
作者 | Emily Williamson译者 | 孙薇,责编 | 屠敏出品 | CSDN(ID:CSDNnews)以下为译文:数据库是应用及计算机的核心元素,负责存储运行软件应用所需的一切重要数据。为了保障应用正常运行,总有一…

十进制转化为十六进制分割高低位
2019独角兽企业重金招聘Python工程师标准>>> 将十进制1000,转化为十六进制,则为0x03E8,如果得到高低位,high0x03,low0xE8 BYTE high;BYTE low;int temp_data1nWeightValue;highBYTE(temp_data1 >>8);int temp_data2nWeightV…
Nginx内存池--pool代码抽取(链表套路)
ngx_palloc.c文件 ngx_palloc_large_hm是自己写的代码没有nginx原版的ngx_palloc_large写的好,细节要品味才会发现nginx的美 nginx链表的套路,正好是两种插入“从前插”和“从后插”,有些许差别 #include <stdio.h> #include <std…

阿里再次主办大数据世界杯, KDD Cup2020正式开赛
记者从国际计算机科学顶会ACM SIGKDD官网获悉,KDD Cup 2020今日正式开赛,本届比赛由阿里巴巴达摩院主办。随即,阿里公布了认知智能、曝光偏差两大赛题方向,并向全球参赛者开放最大规模的商品多模态数据集。阿里也是两次举办该赛事…

grep 正则表达式
grep 正则表达式来源:http://blog.rednet.cn/user1/213546/archives/2007/35795.html以下为整理的grep 正则表达式的大部分功能,详细参见man grep: 要用好grep这个工具,其实就是要写好正则表达式,所以这里不对grep的所有功能进行实例讲解,只列…