【达摩院OpenVI】开源CVPR快速实例分割FasInst模型

2023-11-04 07:50

本文主要是介绍【达摩院OpenVI】开源CVPR快速实例分割FasInst模型,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

团队模型、论文、博文、直播合集,点击此处浏览

一、论文&代码

论文:https://arxiv.org/abs/2303.08594

模型&代码:https://modelscope.cn/models/damo/cv_resnet50_fast-instance-segmentation_coco/summary

二、背景

        实例分割旨在分割图像中所有感兴趣的物体。传统的以mask rcnn [1]为代表的双阶段实例分割方案遵循先检测后分割的理念,尽管简单直观,但那些方法会生成大量的重复区域提议,从而引入大量冗余的计算。为了提高计算效率,许多建立在全卷积网络上的单阶段方法涌现,例如SOLO [2]等。 他们放弃了区域提议操作,端到端地一步到位实现物体种类预测和掩码生成。这类方法推理速度很快,在实际部署时很有吸引力。然而,由于这些基于全卷积的单阶段方案仍采用密集预测的方式,他们仍然避免不开繁重的手工设计后处理步骤,例如非最大抑制等。

        最近,随着 DETR [3]在目标检测方面的成功,基于查询的单阶段实例分割方法应运而生。这类方法利用通用且强大的注意力机制,结合一系列可学习的查询来推断目标物体种类和分割掩码。例如,Mask2Former [4]简化了图像分割的工作流程,通过在主干之上添加像素解码器和带掩码的Transformer解码器来进行分割。 与以往的方法不同,Mask2Former 不需要额外设计的手工组件,例如训练目标分配器和 NMS 后处理。 虽然结构优雅,但Mask2Former 有其自身的问题:(1)它需要大量的解码器层来解码目标查询,因为它的查询是静态的,需要一个漫长的过程来迭代改进; (2) 它依赖繁重的像素解码器结构,因为它的目标分割掩码的特征直接来源于该像素解码器输出,这些输出被用作区分不同目标的特征嵌入; (3) 它使用的带掩码的交叉注意力层限制了每个query的感受野,可能导致transformer解码器陷入局部次优的query更新过程。

        虽然 Mask2Former 取得了出色的性能,但其在快速、高效的实例分割方面的优势还没有得到很好的证实,而这些优势对于许多现实世界的应用(例如自动驾驶和机器人技术等)至关重要。 事实上,由于先验知识的缺乏和昂贵的计算代价,基于查询的模型的效率普遍不尽如人意。高效实时实例分割基准仍然由经典的基于卷积的模型主导 [5]。

二、方法

在本文中,我们通过提出 FastInst 来填补基于查询的模型速度优势欠缺这一空白。FastInst 是一种简洁有效的基于查询的实时实例分割框架。 我们证明了基于查询的模型可以在保持快速的情况下在实例分割任务上取得出色的性能,在高效的实例分割算法设计方面展示出巨大潜力。 例如,我们设计的使用 ResNet-50 主干的最快的基于查询的模型在 COCO test-dev 上以 53.8 FPS(每秒帧数,单个 V100 GPU)的速度实现了 35.6 AP(参见上图); 此外,我们最好的权衡模型可以以 32.5 FPS 的实时速度执行,同时产生超过 40(即 40.5)的 AP,据我们所知,在相同设置下,这在以往方法中从未达到过。

具体来说,FastInst 遵循 Mask2Former 的元架构。 为了实现高效的实时实例分割,FastInst 引入了三个关键模块:

(1)基于实例激活引导的查询。FastInst 使用从像素解码器中动态选择具有高语义的像素嵌入作为Transformer 解码器的初始查询。与静态可学习查询相比,这些选择的动态查询包含丰富的潜在对象嵌入信息,减少了 Transformer 解码器的迭代更新负担。具体来说,FastInst 首先在像素解码器输出后接上一个辅助分类头,该辅助分类头预测每个像素归属于每个类别的概率 ,其中 是像素位置, 是类别下标。在推理时,首先确定每个像素归属的类别 ,然后选取 较大的那些位置的特征。为了避免冗余特征的选取,这里我们引入一个局部极大值选取法,即首先选取 是那些在相应通道上是极大值的点,即 ,这里 是位置 的 8 邻域下标集合,再选取 最大的那些点。在推理时,FastInst 采用匈牙利匹配为每个实例分配激活目标点。为了使每个实例都有正确的激活点而不会被其他位置具有相似语义的点所激活,FastInst 在分配目标时引入一个location cost。该location cost背后的直觉是只有落在对象内部的像素点才有理由推理出该对象的类别和掩码嵌入。同时,该location cost也减小了匹配空间,加快模型训练收敛。

(2)双路径Transformer解码器结构。FastInst 在Transformer解码器中采用双路径更新策略。如上结构图所示,一个 Transformer 解码器层包含一个像素特征更新层和一个查询更新层。 整个过程就像一个 EM 聚类算法。E步:根据所属的中心(即查询)更新像素特征; M 步:更新聚类中心(查询)。与传统的单路径更新策略相比,双路径更新策略同时优化了像素特征和查询,减少了对繁重像素解码器的依赖,获得了更细粒度的特征嵌入。

(3) GT掩码引导的Transformer解码器学习。在Mask2Former中,作者证实了在Transformer解码器中使用带有预测掩码的交叉注意力层可以提高模型分割性能。虽然这种带有预测掩码的交叉注意力层引入了稀疏先验知识,加快了模型收敛,提升了性能,但它限制了每个查询的感受野,这可能导致Transformer解码器陷入局部次优的查询更新过程。为了缓解这个问题,FastInst 引入了GT 掩码引导的学习。具体而言,FastInst使用最后一个解码器层的每个查询所匹配到的GT 掩码来替换前面每一解码器层中使用的带有前一层预测掩码的交叉注意力层中的预测掩码。对于在最后一层不匹配任何实例的查询,则不替换转而使用标准的交叉注意力。然后,FastInst使用替换过后的的交叉注意力层以及原来每个 Transformer 解码器层的输出作为输入再次前向传播每一个 Transformer 解码器层。 新的输出按照与最后一层相同的固定匹配进行监督。这种固定匹配保证了每个Transformer解码器层输出预测的一致性。同时通过这种引导学习,我们允许每个查询在训练期间看到其目标预测对象的整个区域,这有助于模型学习到更合理的带有掩码的交叉注意力区域。

通过这些模块,FastInst 获得了既快又好的性能。在COCO基准上,相同实验设置下,FastInst 超越了以往大多数实时实例分割算法。

三、实验结果

1. 消融实验

(1)基于实例激活引导的查询

(2)双路径Transformer解码器结构

(3)GT掩码引导的Transformer解码器学习

2. SOTA对比

3. 效果展示

4. 拓展实验

FastInst也适用于一般图像分割任务,包括语义分割和全景分割。

四、参考文献

[1] Kaiming He, Georgia Gkioxari, Piotr Dollar, and Ross Gir- ´ shick. Mask R-CNN. In ICCV, 2017.

[2] Xinlong Wang, Tao Kong, Chunhua Shen, Yuning Jiang, and Lei Li. SOLO: Segmenting objects by locations. In ECCV, 2020.

[3] Nicolas Carion, Francisco Massa, Gabriel Synnaeve, Nicolas Usunier, Alexander Kirillov, and Sergey Zagoruyko. End-toend object detection with transformers. In ECCV, 2020.

[4] Bowen Cheng, Ishan Misra, Alexander G. Schwing, Alexander Kirillov, and Rohit Girdhar. Masked-attention mask transformer for universal image segmentation. In CVPR, 2022.

[5] Tianheng Cheng, Xinggang Wang, Shaoyu Chen, Wenqiang Zhang, Qian Zhang, Chang Huang, Zhaoxiang Zhang, and Wenyu Liu. Sparse instance activation for real-time instance segmentation. In CVPR, 2022.

五、其他开源

        另外给大家介绍下CV域上的开源免费模型,欢迎大家体验、下载(大部分手机端即可体验):

ModelScope 魔搭社区https://modelscope.cn/models/damo/cv_ddsar_face-detection_iclr23-damofd/summary

ModelScope 魔搭社区https://modelscope.cn/models/damo/cv_resnet50_face-detection_retinaface/summary

ModelScope 魔搭社区https://modelscope.cn/models/damo/cv_resnet101_face-detection_cvpr22papermogface/summary

ModelScope 魔搭社区https://modelscope.cn/models/damo/cv_manual_face-detection_tinymog/summary

ModelScope 魔搭社区https://modelscope.cn/models/damo/cv_manual_face-detection_ulfd/summary

ModelScope 魔搭社区https://modelscope.cn/models/damo/cv_manual_face-detection_mtcnn/summary

ModelScope 魔搭社区https://modelscope.cn/models/damo/cv_resnet_face-recognition_facemask/summary

ModelScope 魔搭社区https://modelscope.cn/models/damo/cv_ir50_face-recognition_arcface/summary

ModelScope 魔搭社区https://modelscope.cn/models/damo/cv_manual_face-liveness_flir/summary

ModelScope 魔搭社区https://modelscope.cn/models/damo/cv_manual_face-liveness_flrgb/summary

ModelScope 魔搭社区https://modelscope.cn/models/damo/cv_manual_facial-landmark-confidence_flcm/summary

ModelScope 魔搭社区https://modelscope.cn/models/damo/cv_vgg19_facial-expression-recognition_fer/summary

ModelScope 魔搭社区https://modelscope.cn/models/damo/cv_resnet34_face-attribute-recognition_fairface/summary

这篇关于【达摩院OpenVI】开源CVPR快速实例分割FasInst模型的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/344323

相关文章

Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案

《Vue3组件中getCurrentInstance()获取App实例,但是返回null的解决方案》:本文主要介绍Vue3组件中getCurrentInstance()获取App实例,但是返回nu... 目录vue3组件中getCurrentInstajavascriptnce()获取App实例,但是返回n

SQL表间关联查询实例详解

《SQL表间关联查询实例详解》本文主要讲解SQL语句中常用的表间关联查询方式,包括:左连接(leftjoin)、右连接(rightjoin)、全连接(fulljoin)、内连接(innerjoin)、... 目录简介样例准备左外连接右外连接全外连接内连接交叉连接自然连接简介本文主要讲解SQL语句中常用的表

Python如何将大TXT文件分割成4KB小文件

《Python如何将大TXT文件分割成4KB小文件》处理大文本文件是程序员经常遇到的挑战,特别是当我们需要把一个几百MB甚至几个GB的TXT文件分割成小块时,下面我们来聊聊如何用Python自动完成这... 目录为什么需要分割TXT文件基础版:按行分割进阶版:精确控制文件大小完美解决方案:支持UTF-8编码

利用Python快速搭建Markdown笔记发布系统

《利用Python快速搭建Markdown笔记发布系统》这篇文章主要为大家详细介绍了使用Python生态的成熟工具,在30分钟内搭建一个支持Markdown渲染、分类标签、全文搜索的私有化知识发布系统... 目录引言:为什么要自建知识博客一、技术选型:极简主义开发栈二、系统架构设计三、核心代码实现(分步解析

Spring Security基于数据库的ABAC属性权限模型实战开发教程

《SpringSecurity基于数据库的ABAC属性权限模型实战开发教程》:本文主要介绍SpringSecurity基于数据库的ABAC属性权限模型实战开发教程,本文给大家介绍的非常详细,对大... 目录1. 前言2. 权限决策依据RBACABAC综合对比3. 数据库表结构说明4. 实战开始5. MyBA

使用Python实现快速搭建本地HTTP服务器

《使用Python实现快速搭建本地HTTP服务器》:本文主要介绍如何使用Python快速搭建本地HTTP服务器,轻松实现一键HTTP文件共享,同时结合二维码技术,让访问更简单,感兴趣的小伙伴可以了... 目录1. 概述2. 快速搭建 HTTP 文件共享服务2.1 核心思路2.2 代码实现2.3 代码解读3.

C# WinForms存储过程操作数据库的实例讲解

《C#WinForms存储过程操作数据库的实例讲解》:本文主要介绍C#WinForms存储过程操作数据库的实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、存储过程基础二、C# 调用流程1. 数据库连接配置2. 执行存储过程(增删改)3. 查询数据三、事务处

springboot security验证码的登录实例

《springbootsecurity验证码的登录实例》:本文主要介绍springbootsecurity验证码的登录实例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,... 目录前言代码示例引入依赖定义验证码生成器定义获取验证码及认证接口测试获取验证码登录总结前言在spring

springboot security快速使用示例详解

《springbootsecurity快速使用示例详解》:本文主要介绍springbootsecurity快速使用示例,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝... 目录创www.chinasem.cn建spring boot项目生成脚手架配置依赖接口示例代码项目结构启用s

Java的IO模型、Netty原理解析

《Java的IO模型、Netty原理解析》Java的I/O是以流的方式进行数据输入输出的,Java的类库涉及很多领域的IO内容:标准的输入输出,文件的操作、网络上的数据传输流、字符串流、对象流等,这篇... 目录1.什么是IO2.同步与异步、阻塞与非阻塞3.三种IO模型BIO(blocking I/O)NI