mask transformer相关论文阅读

news/2024/7/19 10:33:02 标签: transformer, 论文阅读, 深度学习

前面讲了mask-transformer对医学图像分割任务是非常适用的。本文就是总结一些近期看过的mask-transformer方面的论文。
因为不知道mask transformer是什么就看了一些论文。后来得出结论,应该就是生成mask的transformer就是mask transformer
相关论文:
1.DETR(eccv2020):https://link.springer.com/chapter/10.1007/978-3-030-58452-8_13
2.MaX-Deeplab(CVPR 2021):https://openaccess.thecvf.com/content/CVPR2021/html/Wang_MaX-DeepLab_End-to-End_Panoptic_Segmentation_With_Mask_Transformers_CVPR_2021_paper.html
3.MaskForm(NeurIPS 2021):https://papers.nips.cc/paper/2021/file/950a4152c2b4aa3ad78bdd6b366cc179-Paper.pdf
4.Mask2Form(CVPR2022):https://ieeexplore.ieee.org/document/9878483
5.kMaX-DeepLab(ECCV2022):https://link.springer.com/chapter/10.1007/978-3-031-19818-2_17

DETR

很多这些论文都是受到DETR的启发得到的。DETR为数不多的目标检测里端到端的模型,它把目标检测看作集合预测问题,不需要人为一些先验和调参,没有了NMS,让模型训练和部署变得容易。
在这里插入图片描述
简单描述一下它训练过程就是图片经过CNN得到的特征和位置编码(给定的)相加放入到Transformer进行编码。学习全局的特征,encoder中有6个transformer block进行编码,编码得到的特征进入到decoder中。object queries是可学习的变量。object queries与得到的特征进行cross attention(特征作为key,value,object queries作为queries),object queries也会进行self attention(以保证object queries之间相互通信,知道其他object得到的框是什么,避免冗余框)得到新的object queries。新的object queries进入FFN预测类别和box相关的参数。使用匈牙利算法选择合适的框输出。测试的时候设定置信度阈值。
DETR中使用了深监督(深监督)
DETR:对小目标检测不友好,后面分割也是改进让他有多尺度特征,能够有更好的性能。

MaX-DeepLab

问题:目前严重依赖于代理子任务和手工设计组件的全景分割流水线,例如框检测,非极大值抑制,事物-内容合并等。虽然这些子任务都是由领域专家来完成的,但是它们并不能全面地解决目标任务。
目的:全景分割可以使用端到端模型,不需要实例分割和语义分割相结合。
我不了解全景分割,全景分割好像之前也是很难是端到端的,MaX-DeepLab是一个端到端的模型,它简化了当前严重依赖代理子任务和手工设计组件的流水线,如盒子检测、非最大值抑制、东西合并等。下面这幅图就显示了之前全景分割方法和本文提出的方法,之前的方法依赖于代理子任务树。通过融合语义和实例分割结果,得到泛全景分割掩模。实例分割进一步分解为盒检测和基于盒的分割,而盒检测则通过锚回归和锚分类来实现。
在这里插入图片描述
我们的方法正确的分割出了狗和椅子。而基于锚点的方法因为狗和椅子的中心太相近所以导致分不出椅子和狗。基于边界框的方法由于椅子边缘有太低的置信度所以分割不出椅子。
在这里插入图片描述
全景分割的任务就是通过一幅图片获得很多类别标记的标签,我们的模型就是把图片分割成一组固定数量集合的类别标记的标签,预测的标签mask是软互斥的。mask的类别包含thing classes, stuff classes, 空集类别(没有物体)三种。把thing和stuff类别分割统一起来,去掉了合并操作。

类似于DETR,有没有觉得这个memory bank和object query很相似。就是它们都能够端到端,不需要NMS和合并操作原因是它们都实现给定了一个数,就出100个框,就分割100个类或者物体,这个数量大于图片中含有最大物体数,所以有一些是没有类别的,所以对损失函数入手,从训练策略入手。DETR是使用了匈牙利算法匹配预测框,这个也是使用匈牙利算法匹配的分割图分类。它提出来了PQ来衡量这个匈牙利算法中每个选择的损失,PQ就是分类得到的概率乘以分割得到的Dice值。它的损失就是动态加权的CE Loss和Dice Loss,这个是匹配的损失。
在这里插入图片描述
不匹配的损失就是空集,预测空集这个类别的CE损失。
在这里插入图片描述
总损失就是匹配的损失加上不匹配的损失。两者加权和。
在这里插入图片描述
Transformer块实现了2D像素路径CNN和1D存储器路径之间的所有四种可能类型的通信:(1)传统的存储器到像素(M2P)注意力,(2)存储器到存储器(M2M)自我注意力,(3)允许像素从存储器中读取的像素到存储器(P2M)反馈注意力,以及(4)像素到像素(P2P)自我注意,实现为轴向注意力。
还有一个很大的堆叠了很多块的decoder,为了聚合多尺度特征。
最后输出是memory经过FC后得到的类别和解码器得到的经过上采样的mask预测和memory的进行点乘获得的mask。简单来说是这样。其中为了学习不同类别之间和类别背景之间的区别,引入了对比学习的损失。感兴趣的可以看原文。
在这里插入图片描述

MaskFormer

目的:掩码分类足够通用,可以使用完全相同的模型、损失和训练程序以统一的方式解决语义和实例级的分割任务。
这篇就简单列一下。就是把语义分割和实例分割统一用掩码分类来解决。
在这里插入图片描述
逐像素分类的语义分割对每个位置应用相同的分类损失。掩码分类预测一组二分割掩码,并为每个掩码分配一个类。
Architecture: pixel-level module, transformer module, segmentation module
为了训练掩码分类模型,预测集和真实标签集之间的匹配是需要的。由于预测集和真实标签集的大小通常不同,我们假设N≥Ngt,并用“无对象”标记填充真实标签集,以允许一对一匹配。对于语义分割,如果预测的数量N与类别标签的数量K匹配,则固定匹配是可能的。在这种情况下,第i个预测与具有类别标签i和。如果具有类标签i的区域不存在于真实标签中。在实验中,发现基于二部分匹配的分配比固定匹配显示出更好的结果。与使用边界框来计算匹配问题的预测和真实标签之间的分配成本的DETR不同,我们直接使用类和掩码预测,Lmask-cls即-第j个类的类别概率+第j个类别掩码的dice损失。除了Lmask-cls之外,大多数现有的掩码分类模型还使用辅助损失(例如,边界框损失或实例判别损失,前面MaX deeplab就是用的个体判别损失就是对比学习损失一种)。
在这里插入图片描述
分为三个部分:
Pixel-level module:编码器解码器架构,获得特征图和初始的分割预测。
Transformer module:类似于DETR object query那个decoder,query不断与特征进行交互获得全局信息,一部分用来分类,一部分作为mask embedding对初始的分割预测进行加权。
Segmentation module:queries经过分类头得到分类结果,queries与初始预测的mask进行点积得到最后的分割预测。
trick:概率掩码对的索引i有助于区分同一类的不同实例。最后,为了降低全景分割中的假阳性率,我们遵循之前的推理策略[4,24]。具体来说,我们在推理之前过滤掉低置信度预测,并去除其二进制掩码(mi>0:5)的大部分被其他预测遮挡的预测片段。

Mask2Former

目的:为了统一分割任务,就不要有什么语义分割、实例分割、全景分割了,给你统一起来,只用一个框架。
Architecture: a backbone feature extractor, a pixel decoder. a Transformer decoder
改进

  1. 在Transformer解码器中使用掩蔽注意力(就是前一层预测得到的mask用作当前层掩码),它将注意力限制在以预测片段为中心的局部特征上,这些片段可以是对象,也可以是区域,这取决于分组的特定语义。与关注图像中所有位置的标准Transformer解码器中使用的交叉注意力相比,我们的掩蔽注意力导致更快的收敛和改进的性能。
  2. 使用多尺度高分辨率特征来帮助模型分割小对象/区域。
  3. 我们提出了优化改进,如切换自注意和交叉注意的顺序,使查询特征可学习,并消除遗漏;所有这些都在无需额外计算的情况下提高了性能
  4. 我们通过计算几个随机采样点上的掩码损失,在不影响性能的情况下节省了3倍的训练内存。
    这些改进不仅提高了模型性能,而且大大简化了训练,使计算量有限的用户更容易访问通用体系结构。
    在这里插入图片描述
    其中还用了深监督的方法,DETR中也用了深监督。
    缺点:这表明,即使Mask2Former可以推广到不同的任务,它仍然需要针对这些特定任务进行训练。未来,我们希望开发一种模型,该模型可以针对多个任务甚至多个数据集只训练一次。

kMaX-DeepLab: k-Means Mask Transformer

解决的问题:用于视觉的transformer忽视了语言与图像的重要区别。这阻碍了像素特征和对象查询之间的交叉注意力学习。
目的:让transformer更加适合视觉任务。
重新思考了像素和对象查询之间的关系,并提出将交叉注意力学习重新表述为一个聚类过程。
Architecture:pixel encoder, enhanced pixel decoder, and kMaX decoder
与原始Mask Transformer的交叉注意力在大空间维度(图像高度乘以宽度)上执行softmax不同,我们的kMaX - DeepLab在聚类中心维度上执行argmax,类似于k - means像素-聚类分配步骤(伴随着一项艰巨的任务)。然后,我们通过基于像素-簇分配(通过它们的特征亲和度计算)的像素特征聚合来更新聚类中心,类似于k - means中心更新步骤。
在这里插入图片描述
整个模型分为两条路径:像素路径和聚类路径,分别负责提取像素特征和聚类中心。
在这里插入图片描述
在这里插入图片描述
以ResNet - 50和MaX - S为骨架的kMaX - DeepLab示例。FFN的隐藏维数为256。通过简单地更新像素编码器(用深蓝色标记),kMaX - Deep Lab的设计对不同的主干通用。增强型像素解码器和kMaX解码器分别用浅蓝色和黄色进行着色。
通过提出的单头k - means聚类代替多头交叉注意力来简化掩码变压器模型。通过建立传统k - means聚类算法和交叉注意力之间的联系,为分割任务定制了基于Transformer的模型。


http://www.niftyadmin.cn/n/5344757.html

相关文章

go语言下划线、变量和常量

1、下划线 “_”是特殊标识符,用来忽略结果。 1.1. 下划线在import中 在Golang里,import的作用是导入其他package。import 下划线(如:import hello/imp)的作用:当导入一个包时,该包下的文件里…

13. 扩展:SpringApplication的执行流程

13. 扩展:SpringApplication的执行流程 SpringApplication 将一个典型的 Spring 应用启动的流程“模板化”(这里是动词),在没有特殊需求的情况下,默认模板化后的执行流程就可以满足需求了但有特殊需求也没关系,SpringApplication 在合适的流程结点开放了一系列不同类型的…

开源元数据管理平台Amundsen安装

Amundsen 是一个用于数据发现和元数据管理的开源平台。Amundsen是一个用于提高数据分析师、数据科学家和工程师在与数据交互时的生产力的数据发现和元数据引擎。目前,它通过索引数据资源(表、仪表板、流等)并基于使用模式(例如,高频查询的表会比低频查询的表更早显示)提供…

电商平台对接方案整理之二 京东

京东的sdk忍不住要吐槽一下,引用了太多第三方,第一次用折腾了好长时间。 京东的订单解密需要另外一套sdk,真是~~ 然后就是对接文档 再吐槽一下,京东的订单解密虚拟号需要在京麦购买虚拟号包,不过也不贵,100…

76.Go分布式ID总览

文章目录 简介一:UUID二、雪花算法三:Leaf-snowflake四:数据库自增ID五:使用Redis实现分布式ID生成六:使用数据库分段(Leaf-segment)七 :增强版Leaf-segment八:Tinyid九&…

香港web3盛会:Unisat确认参加Big Demo Day项目路演

本次“Big Demo Day”将于1月31日举办第十期,是由Zeepr 总冠名,Central Research、Techub News联合主办、数码港、852web3支持举行的大型线下活动。Big Demo Day集结了Web2和Web3行业精英聚焦香港市场。 Unisat确认参加 Big Demo Day 线下活动&#xff0…

【Java】SpringMVC路径写法

1、多级路径 ✅类路径和方法路径都可以写成多级 ✅其中,类路径写在方法路径前面 ✅与Servlet不同,SpringMVC中写不写“/”都可以 RequestMapping("/hello/t1") RestController public class HelloSpring {RequestMapping( value "world…

大数据开发之SparkSQL

第 1 章:spark sql概述 1.1 什么是spark sql 1、spark sql是spark用于结构化数据处理的spark模块 1)半结构化数据(日志数据) 2)结构化数据(数据库数据) 1.2 为什么要有sparksql hive on s…