CVPR佳作 | One-Shot都嫌多,Zero-Shot实例样本分割_计算机视觉研究院的博客-程序员秘密

技术标签: 算法  机器学习  计算机视觉  深度学习  人工智能  

欢迎关注“

计算机视觉研究院

f48ee0f24bf29a3c6f76c0788182da04.gif

计算机视觉研究院专栏

作者:Edison_G

给一个包含了未知种类多个实体的没训练过的新样本(the query image),如何检测以及分割所有这些实例???

64b2cd9eb7b0b4648846e37092c23182.png

长按扫描二维码关注我们

一、分割回顾

实例分割(Instance Segmentation)

1328768f0938714488695f6696c96e72.png

实例分割(Instance Segmentation)是视觉经典四个任务中相对最难的一个,它既具备语义分割(Semantic Segmentation)的特点,需要做到像素层面上的分类,也具备目标检测(Object Detection)的一部分特点,即需要定位出不同实例,即使它们是同一种类。因此,实例分割的研究长期以来都有着两条线,分别是自下而上的基于语义分割的方法和自上而下的基于检测的方法,这两种方法都属于两阶段的方法,下面将分别简单介绍。

以下摘自于:CSDN- 三十八元

两阶段实例分割

自上而下(Top-Down)

自上而下的实例分割方法的思路是:首先通过目标检测的方法找出实例所在的区域(bounding box),再在检测框内进行语义分割,每个分割结果都作为一个不同的实例输出。

7ddc1745e444c0c6d5d78f2416326bae.png

这类方法的代表作就是大名鼎鼎的Mask R-CNN了,如下图,总体结构就是Faster R-CNN的两阶段目标检测,box head用来做检测,增加了mask head用来做分割,模型大家都很熟,细节就不再赘述。

05f3e1cd746773e89b1ebaf00f55fd5a.png

自下而上(Bottom-Up)

自下而上的实例分割方法的思路是:首先进行像素级别的语义分割,再通过聚类、度量学习等手段区分不同的实例。

43a2f961a6aa040e74130f3f5e2f7755.png

自下而上的工作并不多,通常的做法都是通过Instance Embedding的做法来做。举一篇CVPR2017的文章为例,

论文名称:Semantic Instance Segmentation with a Discriminative Loss Function

参考代码:https://github.com/Wizaron/instance-segmentation-pytorch

这篇论文的实例分割做法是:

(1)语义分割:首先在第一个阶段做了语义分割,得到了所有的物体mask;

(2)像素嵌入:再通过使用一个判别式损失函数来训练网络,网络的优化目标是将图像每个像素投影到 n维特征空间后,同属于一个实例的像素尽量靠近,形成一个 cluster, 每一个实例对应一个 cluster, 不同 cluster则尽量远离;

(3)后处理:最后使用聚类的方法(如mean-shift)来输出不同的实例。

f0f79bc839a64e112bf9fce63fe36373.png

文章的关键在于提出的判别式损失函数,它的组成如下:

e8324174c1c496a8ba0c10e99b3938e5.png

(1)拉力。惩罚同一实例中所有元素与其平均值之间的距离。也就是说,获取一个实例的所有像素,并计算平均值。这种拉力会将同一实例中的所有像素点拉近到嵌入空间中的同一个点。简单说,就是减少每一个实例的嵌入方差。

(2)推力。获取所有中心点 (在嵌入空间embedding中,而不是空间中心),然后将它们推得更远。

(3)正则化。中心点不应该离原点太远。

文章的超参数设置和迭代方法还是有比较多的坑,感兴趣的可以去看原文和代码。更多关于Instance Embedding的文章可以看看[1]。

单阶段实例分割

下面就聊聊单阶段实例分割(Single Shot Instance Segmentation),这方面工作其实也是受到了单阶段目标检测研究的影响,因此也有两种思路,一种是受one-stage, anchot-based 检测模型如YOLO,RetinaNet启发,代表作有YOLACT和SOLO;一种是受anchor-free检测模型如 FCOS 启发,代表作有PolarMask和AdaptIS。

目前(2020年1月)来看,单阶段实例分割的精度最高的模型应该是新出的BlendMask(COCO, 41.3),在精度和速度上都超越了Mask R-CNN,已经很接近两阶段模型(SOTA应该是HTC?)了。

YOLACT&YOLACT++  ICCV 2019

原文:https://arxiv.org/abs/1904.02689

代码(官方):https://github.com/dbolya/yolact

YOLACT是我最早看的一篇单阶段实例分割的文章,主要参照了单阶段检测模型RetinaNet,因此把它归类于单阶段的实例分割。YOLACT将实例分割任务拆分成两个并行的子任务:

(1)通过一个Protonet网络, 为每张图片生成 k 个 原型mask

(2)对每个实例,预测k个的线性组合系数(Mask Coefficients)

最后通过线性组合,生成实例mask,在此过程中,网络学会了如何定位不同位置、颜色和语义实例的mask。

具体网络结构如下:

b298324fc84630cbb6d3277668fe7883.png

(1)Backbone:Resnet 101+FPN,与RetinaNet相同;

(2)Protonet:接在FPN输出的后面,是一个FCN网络,预测得到针对原图的原型mask

(3)Prediction Head:相比RetinaNet的Head,多了一个Mask Cofficient分支,预测Mask系数,因此输出是4*c+k。

199eb20234ebec52cfb815f48879a390.png

此外,论文中还用到了Fast NMS方法,比原有的NMS速度更快,精度减得不多。

之后,作者又提出了改进版的YOLACT++,改进之处主要有:

(1)参考Mask Scoring RCNN,添加fast mask re-scoring分支,更好地评价实例mask的好坏;

(2)Backbone网络中引入可变形卷积DCN;

(3)优化了Prediction Head中的anchor设计

YOLACT和YOLACT++的实验效果如下:

76a4a308772ff8b2a5bd9432f5152d77.png

二、One shot实例分割

论文地址:https://arxiv.org/pdf/1811.11507.pdf

动机

该文聚焦在一个前沿的问题:给一个包含了未知种类多个实体的没训练过的新样本(the query image),如何检测以及分割所有这些实例。这个问题和现实应用密切相关,因为检测/分割的落地场景中不可能有类似MS-COCO或者OpenImages之类数据集包含了非常多的实例,现实任务中的实例是穷举不完的,如何从有限种类和数量的样本中学习到一些知识并推演到新的种类中是很具有挑战和实际意义的。该问题的研究大多还是停留在分类任务上,检测和分割少。

主要亮点:

1.提出siamese Mask R-CNN框架,能够仅给一个样本,就能够较好的检测&分割新的该样本同类实例;

2.构建了一个新的评测标准在MS-COCO。

5cc7773de8656f94bdc198891bd78fcf.png

Different from MRCNN:
正如名字一样,主体框架就是由SiameseNetwork + Mask R-CNN。改进前后的框架比对如下图。

4a06d41ed883fe47724d20e6363a5b79.png

主要的4处不同已经用红色标识,即R、Siamese、Matching、L1。R代表了输入不仅有Query Image还有Reference Image;SiameseNetwork则对两者分别进行encode;Matching是将编码后的2个feature vector进行逐一的匹配;L1则是算diff的手段。具体的匹配流程如下图。

64e56dbce504eeb5a743af1032340919.png

该框架的结果如下:

190ab44c8f775661f148472befdee176.png

8b634933102740a25500683e152eaa7a.png

三、Zero shot实例分割

研究者提出了一个新的任务称之为零样本实例分割(Zero-Shot Instance Segmentation)——ZSI。ZSI的任务要求在训练过程中,只用已经见过并有标注的数据进行训练,但在测试和推理时能够同时分割出见过和没见过的物体实例。

首先用数学语言对该任务进行描述,然后提出了一个方法来解决ZSI的问题。新方法包括零样本检测器(Zero-shot Detector)、Semantic Mask Head、Backgro Aware RPN和Synchronized Background Strategy。实验结果表明,提出的方法不仅在ZSI的任务上效果不错,在零样本检测任务上也取得了比之前已有研究更好的表现。

亮点:(部分采用:https://www.jiqizhixin.com/articles/2021-03-17)

1:针对零样本实例分割任务,提出应对的算法,该算法是基于Backgro Aware的检测-分割框架;

2:定义了零样本分割(ZSI)自己独特的测试基准;

3:测试结果表明在ZSD任务上超越了已有的方法,且在ZSI任务上的结果很有竞争力。

76c58292519e163ed126e6b5d3b488b6.png

整个零样本实例分割的框架如下图所示。对于一张输入图像来讲,首先要使用骨干网络(backbone),BA-RPN和ROI Align来提取视觉特征和背景的词向量,然后经过Sync-bg模块后分别送入零样本检测器和语义分割头,从而得到实例分割的结果。

01f438fdf599568bcc09748002284f4a.png

零样本检测器的设计细节如下图所示,采用了编码-解码结构,在测试/推理时只是用解码器的Te。

1fd47905d748a83cb0192adfc7121a07.png

语义分割头的结构如下图4所示,它是一个encoder-decoder的架构,在训练阶段,使用encoder来把图像的特征编码到语义-文字特征向量。然后使用decoder把上面构建的语义-文字特征向量去重建图像的任务:检测,分割等。

851e92c20b082fcb02bed050db9bd8fd.png

实验:

d14966a343100a0542cd45ec6225b69a.png

27f4eaad76c1e1fc8b8ae4585d7ce12c.png

398e47fa6d37be4df4cc84895d502a79.gif

计算机视觉研究院学习群等你加入!

计算机视觉研究院主要涉及深度学习领域,主要致力于人脸检测、人脸识别,多目标检测、目标跟踪、图像分割等研究方向。研究院接下来会不断分享最新的论文算法新框架,我们这次改革不同点就是,我们要着重”研究“。之后我们会针对相应领域分享实践过程,让大家真正体会摆脱理论的真实场景,培养爱动手编程爱动脑思考的习惯!

cae757009ec8cfc7ab9c3c77d316deb8.png

扫码关注

计算机视觉研究院

公众号ID|ComputerVisionGzq

学习群|扫码在主页获取加入方式

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/gzq0723/article/details/123492096

智能推荐

MYSQL安装和初始化配置_一梦如是YFL的博客-程序员秘密

简介:MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件。MySQL是一种关系数据库管理系统,关系数据库将数据保存在不同的表中,...

Effective C++条款14:在资源管理类中小心拷贝行为_efective c++ 拷贝控制_却道天凉_好个秋的博客-程序员秘密

前言在前面的文章中我们介绍了智能指针类来管理资源,但是对于某些资源,它们不是动态分配的(不是堆上的),因此智能指针就是不适合这种资源的管理了,因此你可能会设计自己的资源管理类一、“不希望拷贝”演示案例假设我们使用C的API函数处理类型为Mutex的互斥器对象,其中有两个函数如下: void lock(Mutex* pm); //锁定pm所指的互斥器 void unlock(Mutex* pm); //将互斥器解锁 现在我们设计一个类,来管理Mutex对象,并且使用了上一.

一个程序员的2014技术学习总结_chuifuhuo6864的博客-程序员秘密

2014年读了14本书 读完的9本 《Javascript 语言精粹》,《Javascript functional Programming》,《MacTalk 人生元编程》,《代码未来》,《少有人走的路》,《The Magic Finger》,《Objec...

Android签名证书 keystore jks pem x509_LeonLambert的博客-程序员秘密

Android签名证书背景因业务需求,经常与系统厂商打交道,大多需要厂商开放root权限目前获取系统权限的总结有三种方式(均有实际应用)platform签名root固件 (有su)调用厂商封装好的系统权限的sdk后两者调试比较简单,不多做介绍. 针对第一点,厂商会提供两个文件​ platform.pk8 保存private key 加密...

为tornado自定义session_Ayhan_huang的博客-程序员秘密

cookie和session在自定义session前,我们需要先了解cookie和session是什么,可以参考我之前的博客:http://blog.csdn.net/ayhan_huang/article/details/78032097简单来说:cookie是保存在浏览器的键值对session是保存在服务端的键值对session依赖于cookie在Django框架中,我们可以直接操作co

PicGo安装插件一直显示“安装中”_go安装器一直显示努力安装中_Vladimir__的博客-程序员秘密

原因:插件安装需要使用npm命令,npm命令对于安装的操作需要使用管理员权限,当前windows账户的权限不足就会导致插件一直处于”安装中“状态。解决方案:修改windows账户权限【WIN+R】组合键打开运行,输入gpedit.msc打开”本地组策略编辑器“,依次打开”计算机配置“、”Windows设置“、”安全设置“、”本地策略“、”安全选项“,找到”用户访问控制:以管理员批准模式运行所有管理员“,右键打开属性,选择”已禁用“,点击确定,重启计算机,然后重新安装PicGo插件。使用管理员

随便推点

js把txt转为html,js格式化文本为html标签_胡千山的博客-程序员秘密

问题背景:表单长文本字段填写无引入富文本编辑器,使用textarea输入,打印表单时,将文本放至表格td内,无法保留textarea的内容格式。主要问题表现为:①换行符变为空格展示,没有换行显示。②多个空格变为单个空格显示。问题解决:/*** 格式化文本为html标签* contentId,需进行格式转换的元素ID**/function formatText(contentId){var cont...

【lombok】@Cleanup - 自动资源管理,安全的调用close方法_Amos-Chen的博客-程序员秘密

@Cleanup当在处理文件对象,或者数据库资源时,我们总是会忘记close,可能引发内存溢出。如果手动去调用close方法,代码又会非常长,现在有了@Cleanup , 我们不再需要担心这些问题。您可以使用@Cleanup确保在代码执行路径退出当前作用域之前自动清除给定资源。 您可以通过使用@Cleanup注释来注释任何局部变量声明来执行此操作,如下所示:@Cleanup Inpu...

一个杂项设备,应用层通过write函数传入一个结构体,把结构体写入内核_weixin_44317448的博客-程序员秘密

#1杂项设备##1.1linux下的三大设备字符设备,块设备,网络设备。字符设备特点:是一个顺序的数据流设备,对这种设备的读写是按字符进行的,这些字符是连续地形成一个数据流。他不具备缓冲区,对这种设备的读写是实时的。块设备特点:具有一定结构的随记存取设备,对这种设备的读写是按块进行的,使用缓冲区来存放暂时的数据,待时机成熟后,从缓存一次性写入设备或者从设备一次性读到缓冲区。网络设备特点:...

怎么解决IE11的textarea不换行这个BUG(转)_yzy85的博客-程序员秘密

原文地址:https://www.php.cn/js-tutorial-387902.html这次给大家带来怎么解决IE11的textarea不换行这个BUG,我们知道textarea在ie11下,内容超出文本框后就不换行了,那么,解决IE11的textarea不换行BUG的注意事项有哪些?下面就是实战案例,一起来看一下。textarea{ white-space:pre-wrap; /* css3.0 */ white-space:-moz-pre-wrap; /* Firef

java多媒体框架(JMF)的processor处理器 api中英文翻译_桃根仙的博客-程序员秘密

原文:javax.media Interface Processorpublic interface Processorextends PlayerThe Processor interface defines a module for processing and controlling time-based media data. Processor extends the P...

个人对指针的理解,欢迎大家批评_专注客户端技术的博客-程序员秘密

指针对应着某个数据在内存空间中的地址。我们通过存放某地址的指针,来使用*指针名 来引用 地址为指针值的内存块上的数据。因为内存块会委托给变量,所以这个数据会和某变量值绑定。所以说通过指针可以修改某地址的变量的值。             我们可以这样理解指针,指针可以存放地址,而且可以根据指针值即地址和指针所指向的类型来获取地址为 指针值的前 sizeof(指针所指向的类型) 个字节的

推荐文章

热门文章

相关标签